|
@@ -35,7 +35,7 @@ func HandleMysteelIndex(req *models.HandleMysteelIndexResp) (err error) {
|
|
|
func HandleApiMysteelIndex(req *models.HandleMysteelIndexResp) (errMsg string, err error) {
|
|
|
addIndexCodeList := make([]string, 0)
|
|
|
for _, v := range req.List {
|
|
|
- if v.IndexName == "" || v.IndexCode == "" {
|
|
|
+ if v.IndexCode == "" {
|
|
|
continue
|
|
|
}
|
|
|
addIndexCodeList = append(addIndexCodeList, v.IndexCode)
|
|
@@ -64,9 +64,10 @@ func HandleApiIndex(indexCodes []string) (errMsg string, err error) {
|
|
|
err = errors.New(resp.Message)
|
|
|
return
|
|
|
}
|
|
|
- indexCodes = make([]string, 0)
|
|
|
- for _, v := range resp.Data {
|
|
|
- indexCodes = append(indexCodes, v.IndexCode)
|
|
|
+ indexInfoMap, err := GetMySteelChemicalIndexNameMap(indexCodes)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "获取指标数据失败"
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
indexObj := &models.BaseFromMysteelChemicalIndex{}
|
|
@@ -81,6 +82,22 @@ func HandleApiIndex(indexCodes []string) (errMsg string, err error) {
|
|
|
existIndexMap := make(map[string]*models.BaseFromMysteelChemicalIndex)
|
|
|
updateDataObj := new(models.BaseFromMysteelChemicalData)
|
|
|
for _, v := range existIndexs {
|
|
|
+ // 更新指标的名称,单位和频度等信息
|
|
|
+ if info, ok := indexInfoMap[v.IndexCode]; ok {
|
|
|
+ v.IndexName = info.IndexName
|
|
|
+ v.Unit = info.UnitName
|
|
|
+ v.Frequency = info.FrequencyName
|
|
|
+ v.ModifyTime = time.Now()
|
|
|
+ err = v.Update([]string{"index_name", "unit", "frequency", "modify_time"})
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "更新指标失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "添加指标失败"
|
|
|
+ return
|
|
|
+ }
|
|
|
existIndexMap[v.IndexCode] = v
|
|
|
exitDataList, er := updateDataObj.GetIndexDataList(v.IndexCode)
|
|
|
if er != nil {
|
|
@@ -458,57 +475,103 @@ func handleIndex(indexItem *models.HandleMysteelIndex) (err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-type MySteelChemicalApiBody struct {
|
|
|
+type MySteelChemicalApiDataBody struct {
|
|
|
IndexCodes []string `json:"indexCodes"`
|
|
|
StartTime string `json:"startTime"`
|
|
|
EndTime string `json:"endTime"`
|
|
|
Order string `json:"order"`
|
|
|
}
|
|
|
|
|
|
+type MySteelChemicalApiInfoBody struct {
|
|
|
+ PageNum int `json:"pageNum"`
|
|
|
+ PageSize int `json:"pageSize"`
|
|
|
+ IncludeInfo bool `json:"includeInfo"`
|
|
|
+}
|
|
|
+
|
|
|
func GetEdbDataFromMySteelChemical(indexCodes []string, startTime, endTime, order string) (item *models.MySteelChemicalApiResp, err error) {
|
|
|
// 如果没有配置,获取配置的方式是api,那么就走官方接口
|
|
|
- if utils.ThsDataMethod == "" || utils.ThsDataMethod == "api" {
|
|
|
- if utils.MsClRefreshToken == "" {
|
|
|
- err = errors.New("钢联接口token为配置")
|
|
|
- return
|
|
|
- }
|
|
|
- m := new(MySteelChemicalApiBody)
|
|
|
- m.IndexCodes = indexCodes
|
|
|
- m.StartTime = startTime
|
|
|
- m.EndTime = endTime
|
|
|
- m.Order = order
|
|
|
- postData, er := json.Marshal(m)
|
|
|
- if er != nil {
|
|
|
- err = er
|
|
|
- return
|
|
|
- }
|
|
|
- postUrl := `https://mds.mysteel.com/dynamic/order/api/fcAbRA`
|
|
|
- req, er := http.NewRequest(`POST`, postUrl, strings.NewReader(string(postData)))
|
|
|
- if er != nil {
|
|
|
- err = er
|
|
|
- return
|
|
|
- }
|
|
|
- req.Header.Set(`Content-Type`, `application/json`)
|
|
|
- req.Header.Set(`accessTokenSign`, utils.MsClRefreshToken)
|
|
|
- req.Header.Set(`infoOrData`, "data")
|
|
|
+ if utils.MsClRefreshToken == "" {
|
|
|
+ err = errors.New("钢联接口token为配置")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ m := new(MySteelChemicalApiDataBody)
|
|
|
+ m.IndexCodes = indexCodes
|
|
|
+ m.StartTime = startTime
|
|
|
+ m.EndTime = endTime
|
|
|
+ m.Order = order
|
|
|
+ postData, er := json.Marshal(m)
|
|
|
+ if er != nil {
|
|
|
+ err = er
|
|
|
+ return
|
|
|
+ }
|
|
|
+ postUrl := `https://mds.mysteel.com/dynamic/order/api/fcAbRA`
|
|
|
+ body, err := MySteelChemicalPost(postUrl, "data", postData)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = json.Unmarshal(body, &item)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
|
|
|
- client := &http.Client{}
|
|
|
- resp, er := client.Do(req)
|
|
|
- if er != nil {
|
|
|
- err = er
|
|
|
- return
|
|
|
- }
|
|
|
- defer resp.Body.Close()
|
|
|
- body, er := io.ReadAll(resp.Body)
|
|
|
- if er != nil {
|
|
|
- err = er
|
|
|
- return
|
|
|
- }
|
|
|
- err = json.Unmarshal(body, &item)
|
|
|
- if err != nil {
|
|
|
- err = er
|
|
|
- return
|
|
|
- }
|
|
|
+func GetMySteelChemicalIndexNameMap(indexCodes []string) (indexNameMap map[string]*models.MySteelChemicalApiInfoItem, err error) {
|
|
|
+ // 如果没有配置,获取配置的方式是api,那么就走官方接口
|
|
|
+ if utils.MsClRefreshToken == "" {
|
|
|
+ err = errors.New("钢联接口token为配置")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ m := new(MySteelChemicalApiInfoBody)
|
|
|
+ m.PageNum = 1
|
|
|
+ m.PageSize = 100 // 看官方api最多也就十几条指标,先固定设置100应该足够了
|
|
|
+ m.IncludeInfo = true
|
|
|
+ postData, er := json.Marshal(m)
|
|
|
+ if er != nil {
|
|
|
+ err = er
|
|
|
+ return
|
|
|
+ }
|
|
|
+ postUrl := `https://mds.mysteel.com/dynamic/order/api/fcAbRA`
|
|
|
+ body, err := MySteelChemicalPost(postUrl, "info", postData)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var item *models.MySteelChemicalApiInfoResp
|
|
|
+ err = json.Unmarshal(body, &item)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if !item.Success {
|
|
|
+ err = errors.New(item.Message)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ indexNameMap = make(map[string]*models.MySteelChemicalApiInfoItem)
|
|
|
+ for _, v := range item.Data.List {
|
|
|
+ indexNameMap[v.IndexCode] = v
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func MySteelChemicalPost(postUrl, hType string, postData []byte) (body []byte, err error) {
|
|
|
+ req, er := http.NewRequest(`POST`, postUrl, strings.NewReader(string(postData)))
|
|
|
+ if er != nil {
|
|
|
+ err = er
|
|
|
+ return
|
|
|
+ }
|
|
|
+ req.Header.Set(`Content-Type`, `application/json`)
|
|
|
+ req.Header.Set(`accessTokenSign`, utils.MsClRefreshToken)
|
|
|
+ req.Header.Set(`infoOrData`, hType)
|
|
|
+
|
|
|
+ client := &http.Client{}
|
|
|
+ resp, er := client.Do(req)
|
|
|
+ if er != nil {
|
|
|
+ err = er
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ body, err = io.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
return
|
|
|
}
|
|
|
return
|