|
@@ -13,8 +13,9 @@ import (
|
|
|
)
|
|
|
|
|
|
var (
|
|
|
- BridgeApiZhongJiIndexDataUrl = "/api/index_data/zhongji/smm/data" // 获取指标数据API
|
|
|
- BridgeApiZhongJiIndexListUrl = "/api/index_data/zhongji/smm/list" // 获取指标列表API
|
|
|
+ BridgeApiZhongJiIndexDataUrl = "/api/index_data/zhongji/smm/data" // 获取指标数据API
|
|
|
+ BridgeApiZhongJiIndexListUrl = "/api/index_data/zhongji/smm/list" // 获取指标列表API
|
|
|
+ BridgeApiZhongJiIndexLatestUrl = "/api/index_data/zhongji/smm/latest" // 获取指标最新数据API
|
|
|
)
|
|
|
|
|
|
// Data is a struct that represents the data field in the JSON string
|
|
@@ -59,86 +60,6 @@ type SmmTokenData struct {
|
|
|
Token string `json:"token"`
|
|
|
}
|
|
|
|
|
|
-// getSmmAccessToken token内部请求接口
|
|
|
-//func getSmmAccessToken() (tokenData SmmTokenData, err error) {
|
|
|
-// defer func() {
|
|
|
-// if err != nil {
|
|
|
-// go alarm_msg.SendAlarmMsg("更新SMM的token失败;ERR:"+err.Error(), 3)
|
|
|
-// }
|
|
|
-// }()
|
|
|
-//
|
|
|
-// url := "https://datapro-api.smm.cn/dapi/user/auth"
|
|
|
-//
|
|
|
-// // 准备Form-data参数
|
|
|
-// values := map[string]io.Reader{
|
|
|
-// "user_name": strings.NewReader("18815284804"),
|
|
|
-// "password": strings.NewReader(utils.MD5("huangcf@cbnb.com.cn")),
|
|
|
-// "source": strings.NewReader("datapro"),
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 创建一个新的buffer,用于存储请求体
|
|
|
-// var body bytes.Buffer
|
|
|
-// writer := multipart.NewWriter(&body)
|
|
|
-//
|
|
|
-// // 添加Form-data参数
|
|
|
-// for key, value := range values {
|
|
|
-// part, err := writer.CreateFormFile(key, key)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error creating form file:", err)
|
|
|
-// return
|
|
|
-// }
|
|
|
-// _, err = io.Copy(part, value)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error copying file content:", err)
|
|
|
-// return
|
|
|
-// }
|
|
|
-// }
|
|
|
-//
|
|
|
-// // 关闭multipart writer
|
|
|
-// writer.Close()
|
|
|
-//
|
|
|
-// // 发送POST请求
|
|
|
-// req, err := netHttp.NewRequest("POST", url, &body)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error creating request:", err)
|
|
|
-// return
|
|
|
-// }
|
|
|
-//
|
|
|
-// req.Header.Set("Content-Type", writer.FormDataContentType())
|
|
|
-//
|
|
|
-// client := &netHttp.Client{}
|
|
|
-// resp, err := client.Do(req)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error sending request:", err)
|
|
|
-// return
|
|
|
-// }
|
|
|
-// defer resp.Body.Close()
|
|
|
-//
|
|
|
-// // 处理响应
|
|
|
-// fmt.Println("Response Status:", resp.Status)
|
|
|
-//
|
|
|
-// bodyContent, err := ioutil.ReadAll(resp.Body)
|
|
|
-// if err != nil {
|
|
|
-// fmt.Println("Error reading response body:", err)
|
|
|
-// return
|
|
|
-// }
|
|
|
-// utils.FileLog.Info("SMM刷新token:" + string(bodyContent))
|
|
|
-//
|
|
|
-// var tokenResp GetSmmTokenResp
|
|
|
-// err = json.Unmarshal(bodyContent, &tokenResp)
|
|
|
-// if err != nil {
|
|
|
-// err = errors.New("Unmarshal Err:" + err.Error())
|
|
|
-// return
|
|
|
-// }
|
|
|
-// if tokenResp.Code != 0 {
|
|
|
-// err = errors.New("getAccessToken err:" + tokenResp.Msg)
|
|
|
-// return
|
|
|
-// }
|
|
|
-// tokenData = tokenResp.Data
|
|
|
-//
|
|
|
-// return
|
|
|
-//}
|
|
|
-
|
|
|
// GetSmmNewIndexFromBridge 从桥接服务获取指标
|
|
|
func GetSmmNewIndexFromBridge(edbCode string) (indexDataList []models.BaseFromSmmDataList, err error) {
|
|
|
defer func() {
|
|
@@ -316,7 +237,7 @@ func GetSmmNewIndexListFromBridge(params models.BridgeZhongJiIndexListParams) (i
|
|
|
for i, typeItem := range typeList {
|
|
|
if i == 0 {
|
|
|
item.Type1 = typeItem
|
|
|
- } else if i == 1{
|
|
|
+ } else if i == 1 {
|
|
|
item.Type2 = typeItem
|
|
|
} else if i == 2 {
|
|
|
item.Type3 = typeItem
|
|
@@ -326,4 +247,166 @@ func GetSmmNewIndexListFromBridge(params models.BridgeZhongJiIndexListParams) (i
|
|
|
}
|
|
|
|
|
|
return
|
|
|
-}
|
|
|
+}
|
|
|
+
|
|
|
+// GetSmmNewIndexListTotalFromBridge 从桥接服务获取指标列表总数
|
|
|
+func GetSmmNewIndexListTotalFromBridge(params models.BridgeZhongJiIndexListParams) (total int, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tips := fmt.Sprintf("桥接服务-获取SMM指标失败, err: %s", err.Error())
|
|
|
+ utils.FileLog.Info(tips)
|
|
|
+ go alarm_msg.SendAlarmMsg(tips, 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ url := fmt.Sprint(utils.EtaBridgeUrl, BridgeApiZhongJiIndexListUrl)
|
|
|
+
|
|
|
+ data, e := json.Marshal(params)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("data json marshal err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ body := ioutil.NopCloser(strings.NewReader(string(data)))
|
|
|
+ client := &netHttp.Client{}
|
|
|
+ req, e := netHttp.NewRequest("POST", url, body)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("http create request err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ checkToken := utils.MD5(utils.EtaBridgeAppNameEn + utils.EtaBridgeMd5Key)
|
|
|
+ contentType := "application/json;charset=utf-8"
|
|
|
+ req.Header.Set("Content-Type", contentType)
|
|
|
+ req.Header.Set("Authorization", checkToken)
|
|
|
+ resp, e := client.Do(req)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("http client do err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ _ = resp.Body.Close()
|
|
|
+ }()
|
|
|
+ b, e := ioutil.ReadAll(resp.Body)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("resp body read err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(b) == 0 {
|
|
|
+ err = fmt.Errorf("resp body is empty")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 生产环境解密
|
|
|
+ if utils.RunMode == "release" {
|
|
|
+ str := string(b)
|
|
|
+ str = strings.Trim(str, `"`)
|
|
|
+ b = utils.DesBase64Decrypt([]byte(str), utils.EtaBridgeDesKey)
|
|
|
+ }
|
|
|
+
|
|
|
+ result := new(models.SmmListResp)
|
|
|
+ if e = json.Unmarshal(b, &result); e != nil {
|
|
|
+ err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if result.Code != 200 {
|
|
|
+ err = fmt.Errorf("result: %s", string(b))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ total = result.Data.Data.Total
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// GetSmmIndexLatestFromBridge 从桥接服务获取指标更新
|
|
|
+func GetSmmIndexLatestFromBridge(edbInfoId int, edbCode, startDate string) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ tips := fmt.Sprintf("桥接服务-获取SMM指标失败, err: %s", err.Error())
|
|
|
+ utils.FileLog.Info(tips)
|
|
|
+ go alarm_msg.SendAlarmMsg(tips, 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ url := fmt.Sprint(utils.EtaBridgeUrl, BridgeApiZhongJiIndexLatestUrl)
|
|
|
+
|
|
|
+ startDateTime, err := time.Parse(utils.FormatDate, startDate)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("startDateTime parse err: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ timeStamp := startDateTime.UnixNano() / 1e6
|
|
|
+
|
|
|
+ param := models.BridgeZhongJiIndexLatestDataParams{
|
|
|
+ EdbCode: edbCode,
|
|
|
+ LastTime: timeStamp,
|
|
|
+ }
|
|
|
+ data, e := json.Marshal(param)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("data json marshal err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ body := ioutil.NopCloser(strings.NewReader(string(data)))
|
|
|
+ client := &netHttp.Client{}
|
|
|
+ req, e := netHttp.NewRequest("POST", url, body)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("http create request err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ checkToken := utils.MD5(utils.EtaBridgeAppNameEn + utils.EtaBridgeMd5Key)
|
|
|
+ contentType := "application/json;charset=utf-8"
|
|
|
+ req.Header.Set("Content-Type", contentType)
|
|
|
+ req.Header.Set("Authorization", checkToken)
|
|
|
+ resp, e := client.Do(req)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("http client do err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ _ = resp.Body.Close()
|
|
|
+ }()
|
|
|
+ b, e := ioutil.ReadAll(resp.Body)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("resp body read err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(b) == 0 {
|
|
|
+ err = fmt.Errorf("resp body is empty")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 生产环境解密
|
|
|
+ if utils.RunMode == "release" {
|
|
|
+ str := string(b)
|
|
|
+ str = strings.Trim(str, `"`)
|
|
|
+ b = utils.DesBase64Decrypt([]byte(str), utils.EtaBridgeDesKey)
|
|
|
+ }
|
|
|
+
|
|
|
+ result := new(models.SmmLatestDataResponse)
|
|
|
+ if e = json.Unmarshal(b, &result); e != nil {
|
|
|
+ err = fmt.Errorf("result unmarshal err: %s\nresult: %s", e.Error(), string(b))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if result.Code != 200 {
|
|
|
+ err = fmt.Errorf("result: %s", string(b))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ smmDataList := make([]*models.BaseFromSmmData, 0)
|
|
|
+
|
|
|
+ for _, v := range result.Data.Data.DataList {
|
|
|
+ item := new(models.BaseFromSmmData)
|
|
|
+ item.BaseFromSmmIndexId = edbInfoId
|
|
|
+ item.IndexCode = v.QuotaID
|
|
|
+ item.DataTime = v.Date
|
|
|
+ item.Value = v.Value
|
|
|
+ item.CreateTime = time.Now()
|
|
|
+ item.ModifyTime = time.Now()
|
|
|
+
|
|
|
+ timeDate, _ := time.Parse(utils.FormatDateTime, v.Date)
|
|
|
+ timestamp := timeDate.UnixNano() / 1e6
|
|
|
+ item.DataTimestamp = timestamp
|
|
|
+
|
|
|
+ smmDataList = append(smmDataList, item)
|
|
|
+ }
|
|
|
+
|
|
|
+ err = models.RefreshEdbDataFromSmmToEdb(edbInfoId, edbCode, startDate, smmDataList)
|
|
|
+ return
|
|
|
+}
|