package purang import ( "context" "encoding/json" "eta/eta_crawler/services/alarm_msg" "eta/eta_crawler/utils" "fmt" "os" "time" ) func GetPurangDataTask(ctx context.Context) (err error) { beginDate := time.Now().AddDate(0, -1, 0).Format("20060102") endDate := time.Now().Format("20060102") err = GetPurangMarketData(beginDate, endDate) if err != nil { return err } return nil } func GetPurangMarketData(startDate, endDate string) (err error) { utils.FileLog.Info(fmt.Sprintf("GetPurangMarketData startDate: %s, endDate: %s", startDate, endDate)) defer func() { if err != nil { msg := fmt.Sprintf("GetPurangMarketData failed Error: %v", err) utils.FileLog.Info(msg) go alarm_msg.SendAlarmMsg(msg, 3) } }() if utils.PurangApiUrl == "" || utils.PurangUserCode == "" || utils.PurangApiKey == "" || utils.PurangSignType == "" { return fmt.Errorf("PurangApiUrl, PurangUserCode, PurangApiKey, PurangSignType is empty") } // 创建客户端实例 client := NewClient( utils.PurangApiUrl, // 测试环境URL(需要替换为实际的URL) utils.PurangUserCode, // 用户编号(需要替换为实际的编号) utils.PurangApiKey, // API密钥(需要替换为实际的密钥) utils.PurangSignType, // 签名类型:1(MD5) ) // 示例:发送直贴报价/成交行情请求 params := map[string]string{ "beginDate": startDate, "endDate": endDate, } //fmt.Println("\nSending custom request...") resp, err := client.DoRequest("/info/bill/market/main-price", params) if err != nil { err = fmt.Errorf("Custom request failed: %v", err) return } // fmt.Printf("Response received:\n") // fmt.Printf("Code: %s\n", resp.Code) // fmt.Printf("Message: %s\n", resp.Message) // fmt.Printf("ReqID: %s\n", resp.ReqID) // 将响应数据转换成 json 字符串 jsonData, err := json.Marshal(resp.Data) if err != nil { err = fmt.Errorf("Failed to marshal response data: %v", err) return err } //fmt.Println("Response data as JSON:", string(jsonData)) // 将 json 字符串转换为 map dataListMap := make([]map[string]interface{}, 0) if err := json.Unmarshal(jsonData, &dataListMap); err != nil { err = fmt.Errorf("Failed to unmarshal response data: %v", err) return err } //fmt.Println("Response data as map:", dataListMap) // 遍历 map 中的每个键值对 indexDataMap := make(map[string]map[string]string) for _, dataItem := range dataListMap { date := dataItem["date"].(string) // 格式化date,改成yyyy-mm-dd dateTime, err := time.Parse("20060102", date) if err != nil { err = fmt.Errorf("Failed to parse date: %v", err) return err } date = dateTime.Format("2006-01-02") for key, value := range dataItem { if key == "date" { continue } if _, ok := value.(string); ok { if _, ok := indexDataMap[key]; !ok { indexDataMap[key] = make(map[string]string) } indexDataMap[key][date] = value.(string) } } //fmt.Printf("Key: %s, Value: %v\n", date, dataItem) } //根据purang.json 文件中的数据,创建一个指标列表 purangJson, err := os.ReadFile("static/purang.json") if err != nil { err = fmt.Errorf("Failed to read purang.json: %v", err) return err } var purangDataList []*PurangDataIndex if err := json.Unmarshal(purangJson, &purangDataList); err != nil { err = fmt.Errorf("Failed to unmarshal purang.json: %v", err) return err } indexList := make([]*PurangDataIndex, 0) for k, purangData := range purangDataList { if data, ok := indexDataMap[purangData.IndexCode]; ok { purangData.ExcelDataMap = data } purangData.Sort = k indexList = append(indexList, purangData) } err = addPurangData(indexList) if err != nil { return err } utils.FileLog.Info("GetPurangMarketData end ") return nil } // PurangDataIndex 普兰数据指标数据 type PurangDataIndex struct { ClassifyName string `description:"指标目录"` ParentClassifyName string `description:"父级指标目录"` ClassifySort int `description:"指标目录排序号"` IndexName string `description:"指标名称"` IndexCode string `description:"指标编码"` Unit string `description:"单位"` Sort int `description:"排序号"` Frequency string `description:"频度"` TerminalCode string `description:"编码"` ExcelDataMap map[string]string } func addPurangData(indexList []*PurangDataIndex) (err error) { sheetName := "普兰数据指标" if len(indexList) > 0 { params := make(map[string]interface{}) params["List"] = indexList params["TerminalCode"] = "" result, e := utils.PostEdbLib(params, "purang/handle/excel_data") if e != nil { err = fmt.Errorf("sheet :%s PostEdbLib err: %s", sheetName, e.Error()) b, _ := json.Marshal(params) utils.FileLog.Info(fmt.Sprintf("sheet :%s PostEdbLib err: %s, params: %s", sheetName, e.Error(), string(b))) return } resp := new(utils.BaseEdbLibResponse) if e := json.Unmarshal(result, &resp); e != nil { err = fmt.Errorf("sheet :%s json.Unmarshal err: %s", sheetName, e) utils.FileLog.Info(fmt.Sprintf("sheet :%s json.Unmarshal err: %s", sheetName, e)) return } if resp.Ret != 200 { err = fmt.Errorf("sheet :%s Msg: %s, ErrMsg: %s", sheetName, resp.Msg, resp.ErrMsg) utils.FileLog.Info(fmt.Sprintf("sheet :%s Msg: %s, ErrMsg: %s", sheetName, resp.Msg, resp.ErrMsg)) return } } return }