purang_data.go 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package purang
  2. import (
  3. "context"
  4. "encoding/json"
  5. "eta/eta_crawler/services/alarm_msg"
  6. "eta/eta_crawler/utils"
  7. "fmt"
  8. "os"
  9. "time"
  10. )
  11. func GetPurangDataTask(ctx context.Context) (err error) {
  12. beginDate := time.Now().AddDate(0, -1, 0).Format("20060102")
  13. endDate := time.Now().Format("20060102")
  14. err = GetPurangMarketData(beginDate, endDate)
  15. if err != nil {
  16. return err
  17. }
  18. return nil
  19. }
  20. func GetPurangMarketData(startDate, endDate string) (err error) {
  21. utils.FileLog.Info(fmt.Sprintf("GetPurangMarketData startDate: %s, endDate: %s", startDate, endDate))
  22. defer func() {
  23. if err != nil {
  24. msg := fmt.Sprintf("GetPurangMarketData failed Error: %v", err)
  25. utils.FileLog.Info(msg)
  26. go alarm_msg.SendAlarmMsg(msg, 3)
  27. }
  28. }()
  29. if utils.PurangApiUrl == "" || utils.PurangUserCode == "" || utils.PurangApiKey == "" || utils.PurangSignType == "" {
  30. return fmt.Errorf("PurangApiUrl, PurangUserCode, PurangApiKey, PurangSignType is empty")
  31. }
  32. // 创建客户端实例
  33. client := NewClient(
  34. utils.PurangApiUrl, // 测试环境URL(需要替换为实际的URL)
  35. utils.PurangUserCode, // 用户编号(需要替换为实际的编号)
  36. utils.PurangApiKey, // API密钥(需要替换为实际的密钥)
  37. utils.PurangSignType, // 签名类型:1(MD5)
  38. )
  39. // 示例:发送直贴报价/成交行情请求
  40. params := map[string]string{
  41. "beginDate": startDate,
  42. "endDate": endDate,
  43. }
  44. //fmt.Println("\nSending custom request...")
  45. resp, err := client.DoRequest("/info/bill/market/main-price", params)
  46. if err != nil {
  47. err = fmt.Errorf("Custom request failed: %v", err)
  48. return
  49. }
  50. // fmt.Printf("Response received:\n")
  51. // fmt.Printf("Code: %s\n", resp.Code)
  52. // fmt.Printf("Message: %s\n", resp.Message)
  53. // fmt.Printf("ReqID: %s\n", resp.ReqID)
  54. // 将响应数据转换成 json 字符串
  55. jsonData, err := json.Marshal(resp.Data)
  56. if err != nil {
  57. err = fmt.Errorf("Failed to marshal response data: %v", err)
  58. return err
  59. }
  60. //fmt.Println("Response data as JSON:", string(jsonData))
  61. // 将 json 字符串转换为 map
  62. dataListMap := make([]map[string]interface{}, 0)
  63. if err := json.Unmarshal(jsonData, &dataListMap); err != nil {
  64. err = fmt.Errorf("Failed to unmarshal response data: %v", err)
  65. return err
  66. }
  67. //fmt.Println("Response data as map:", dataListMap)
  68. // 遍历 map 中的每个键值对
  69. indexDataMap := make(map[string]map[string]string)
  70. for _, dataItem := range dataListMap {
  71. date := dataItem["date"].(string)
  72. // 格式化date,改成yyyy-mm-dd
  73. dateTime, err := time.Parse("20060102", date)
  74. if err != nil {
  75. err = fmt.Errorf("Failed to parse date: %v", err)
  76. return err
  77. }
  78. date = dateTime.Format("2006-01-02")
  79. for key, value := range dataItem {
  80. if key == "date" {
  81. continue
  82. }
  83. if _, ok := value.(string); ok {
  84. if _, ok := indexDataMap[key]; !ok {
  85. indexDataMap[key] = make(map[string]string)
  86. }
  87. indexDataMap[key][date] = value.(string)
  88. }
  89. }
  90. //fmt.Printf("Key: %s, Value: %v\n", date, dataItem)
  91. }
  92. //根据purang.json 文件中的数据,创建一个指标列表
  93. purangJson, err := os.ReadFile("static/purang.json")
  94. if err != nil {
  95. err = fmt.Errorf("Failed to read purang.json: %v", err)
  96. return err
  97. }
  98. var purangDataList []*PurangDataIndex
  99. if err := json.Unmarshal(purangJson, &purangDataList); err != nil {
  100. err = fmt.Errorf("Failed to unmarshal purang.json: %v", err)
  101. return err
  102. }
  103. indexList := make([]*PurangDataIndex, 0)
  104. for k, purangData := range purangDataList {
  105. if data, ok := indexDataMap[purangData.IndexCode]; ok {
  106. purangData.ExcelDataMap = data
  107. }
  108. purangData.Sort = k
  109. indexList = append(indexList, purangData)
  110. }
  111. err = addPurangData(indexList)
  112. if err != nil {
  113. return err
  114. }
  115. utils.FileLog.Info("GetPurangMarketData end ")
  116. return nil
  117. }
  118. // PurangDataIndex 普兰数据指标数据
  119. type PurangDataIndex struct {
  120. ClassifyName string `description:"指标目录"`
  121. ParentClassifyName string `description:"父级指标目录"`
  122. ClassifySort int `description:"指标目录排序号"`
  123. IndexName string `description:"指标名称"`
  124. IndexCode string `description:"指标编码"`
  125. Unit string `description:"单位"`
  126. Sort int `description:"排序号"`
  127. Frequency string `description:"频度"`
  128. TerminalCode string `description:"编码"`
  129. ExcelDataMap map[string]string
  130. }
  131. func addPurangData(indexList []*PurangDataIndex) (err error) {
  132. sheetName := "普兰数据指标"
  133. if len(indexList) > 0 {
  134. params := make(map[string]interface{})
  135. params["List"] = indexList
  136. params["TerminalCode"] = ""
  137. result, e := utils.PostEdbLib(params, "purang/handle/excel_data")
  138. if e != nil {
  139. err = fmt.Errorf("sheet :%s PostEdbLib err: %s", sheetName, e.Error())
  140. b, _ := json.Marshal(params)
  141. utils.FileLog.Info(fmt.Sprintf("sheet :%s PostEdbLib err: %s, params: %s", sheetName, e.Error(), string(b)))
  142. return
  143. }
  144. resp := new(utils.BaseEdbLibResponse)
  145. if e := json.Unmarshal(result, &resp); e != nil {
  146. err = fmt.Errorf("sheet :%s json.Unmarshal err: %s", sheetName, e)
  147. utils.FileLog.Info(fmt.Sprintf("sheet :%s json.Unmarshal err: %s", sheetName, e))
  148. return
  149. }
  150. if resp.Ret != 200 {
  151. err = fmt.Errorf("sheet :%s Msg: %s, ErrMsg: %s", sheetName, resp.Msg, resp.ErrMsg)
  152. utils.FileLog.Info(fmt.Sprintf("sheet :%s Msg: %s, ErrMsg: %s", sheetName, resp.Msg, resp.ErrMsg))
  153. return
  154. }
  155. }
  156. return
  157. }