Selaa lähdekoodia

feat:新增钢联化工api获取数据

zqbao 8 kuukautta sitten
vanhempi
commit
7353d55634

+ 19 - 0
models/base_from_mysteel_chemical.go

@@ -566,6 +566,25 @@ type MySteelChemicalApiResp struct {
 	Message   string                    `json:"message" description:"显示执行信息"`
 	Data      []*MySteelChemicalApiData `json:"data" description:"数据"`
 }
+type MySteelChemicalApiInfoResp struct {
+	Code      string                  `json:"code" description:"200成功,其他失败"`
+	Success   bool                    `json:"success" description:"true 成功,false 失败"`
+	Timestamp int64                   `json:"timestamp" description:"时间戳"`
+	Message   string                  `json:"message" description:"显示执行信息"`
+	Data      *MySteelChemicalApiInfo `json:"data" description:"数据"`
+}
+
+type MySteelChemicalApiInfo struct {
+	Total int                           `json:"total" description:"总条数"`
+	List  []*MySteelChemicalApiInfoItem `json:"list" description:"数据列表"`
+}
+
+type MySteelChemicalApiInfoItem struct {
+	IndexCode     string `json:"INDEX_CODE"`
+	IndexName     string `json:"INDEX_NAME"`
+	FrequencyName string `json:"FREQUENCY_NAME"`
+	UnitName      string `json:"UNIT_NAME"`
+}
 
 type MySteelChemicalApiData struct {
 	IndexCode string                        `json:"INDEX_CODE"`

+ 9 - 0
routers/commentsRouter.go

@@ -943,6 +943,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_index_lib/controllers:MySteelChemicalController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:MySteelChemicalController"],
+        beego.ControllerComments{
+            Method: "HandleApiMysteelIndex",
+            Router: `/handle/api/mysteel/index`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_index_lib/controllers:MySteelChemicalController"] = append(beego.GlobalControllerRouter["eta/eta_index_lib/controllers:MySteelChemicalController"],
         beego.ControllerComments{
             Method: "HandleMysteelIndex",

+ 109 - 46
services/base_from_mysteel_chemical.go

@@ -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