123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- 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
- }
|