|
@@ -0,0 +1,171 @@
|
|
|
+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
|
|
|
+}
|