瀏覽代碼

feat:添加钢联化工api的定时刷新功能

zqbao 8 月之前
父節點
當前提交
71d34045ba
共有 2 個文件被更改,包括 95 次插入2 次删除
  1. 8 0
      controllers/base_from_mysteel_chemical.go
  2. 87 2
      services/base_from_mysteel_chemical.go

+ 8 - 0
controllers/base_from_mysteel_chemical.go

@@ -109,6 +109,14 @@ func (this *MySteelChemicalController) Refresh() {
 	}
 	dataUpdateTime := time.Now().Format(utils.FormatDateTime)
 	utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+
+	// 将数据刷新到BaseFromMysteelChemicalData
+	err = services.RefreshDataFromMysteelChemical(req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), utils.BASE_END_DATE, edbInfo.TerminalCode)
+	if err != nil {
+		br.Msg = "获取指标信息失败!"
+		br.ErrMsg = "获取指标信息失败 RefreshDataFromMysteelChemical,Err:" + err.Error()
+		return
+	}
 	err = models.RefreshEdbDataFromMysteelChemical(req.EdbInfoId, req.EdbCode, req.StartDate)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "刷新指标信息失败!"

+ 87 - 2
services/base_from_mysteel_chemical.go

@@ -488,8 +488,8 @@ type MySteelChemicalApiInfoBody struct {
 	IncludeInfo bool `json:"includeInfo"`
 }
 
+// GetEdbDataFromMySteelChemical 批量获得钢联化工的指标数据
 func GetEdbDataFromMySteelChemical(indexCodes []string, startTime, endTime, order string) (item *models.MySteelChemicalApiResp, err error) {
-	// 如果没有配置,获取配置的方式是api,那么就走官方接口
 	if utils.MysteelChemicalApiToken == "" {
 		err = errors.New("钢联接口token未配置")
 		return
@@ -516,8 +516,8 @@ func GetEdbDataFromMySteelChemical(indexCodes []string, startTime, endTime, orde
 	return
 }
 
+// GetMySteelChemicalIndexNameMap 获取钢联化工的所有指标的信息
 func GetMySteelChemicalIndexNameMap(indexCodes []string) (indexNameMap map[string]*models.MySteelChemicalApiInfoItem, err error) {
-	// 如果没有配置,获取配置的方式是api,那么就走官方接口
 	if utils.MysteelChemicalApiToken == "" {
 		err = errors.New("钢联接口token未配置")
 		return
@@ -576,3 +576,88 @@ func MySteelChemicalPost(postUrl, hType string, postData []byte) (body []byte, e
 	}
 	return
 }
+
+func RefreshDataFromMysteelChemical(edbCode, startDate, endDate, edbTerminalCode string) (err error) {
+	terminal, err := GetTerminal(utils.DATA_SOURCE_MYSTEEL_CHEMICAL, edbTerminalCode)
+	if err != nil {
+		err = fmt.Errorf("获取钢联化工接口配置出错 Err: %s", err)
+		return
+	}
+
+	if edbTerminalCode == "" {
+		// 设置指标与终端关系的缓存
+		terminalCodeCacheKey := utils.CACHE_EDB_TERMINAL_CODE_URL + edbCode
+		_ = utils.Rc.Put(terminalCodeCacheKey, terminal.TerminalCode, utils.GetTodayLastSecond())
+	}
+
+	// 如果配置了api的token, 那么就走api接口
+	if utils.MysteelChemicalApiToken != "" {
+		resp, er := GetEdbDataFromMySteelChemical([]string{edbCode}, startDate, endDate, "desc")
+		if er != nil {
+			err = er
+			return
+		}
+		if !resp.Success {
+			err = errors.New(resp.Message)
+			return
+		}
+
+		dataObj := new(models.BaseFromMysteelChemicalData)
+		exitDataList, er := dataObj.GetIndexDataList(edbCode)
+		if er != nil {
+			err = er
+			return
+		}
+		existDataMap := make(map[string]*models.BaseFromMysteelChemicalData)
+		for _, v := range exitDataList {
+			dateStr := v.DataTime.Format(utils.FormatDate)
+			existDataMap[dateStr] = v
+		}
+		mysteelChemicalDatas, er := tranformData(resp)
+		if er != nil {
+			err = er
+			return
+		}
+
+		addItems := make([]*models.BaseFromMysteelChemicalData, 0)
+		indexObj := &models.BaseFromMysteelChemicalIndex{}
+		existIndex, er := indexObj.GetIndexItem(edbCode)
+		if er != nil {
+			err = er
+			return
+		}
+		if len(mysteelChemicalDatas) == 0 {
+			err = errors.New("没有获取到数据")
+			return
+		}
+		// 因为只有一个指标,所以取第一个就可以了
+		items := mysteelChemicalDatas[0]
+		for _, v := range items {
+			dateStr := v.DataTime.Format(utils.FormatDate)
+			if findData, ok := existDataMap[dateStr]; !ok {
+				if !ok {
+					continue
+				}
+				v.BaseFromMysteelChemicalIndexId = existIndex.BaseFromMysteelChemicalIndexId
+				addItems = append(addItems, v)
+			} else {
+				if findData != nil && findData.Value != v.Value {
+					dataObj.BaseFromMysteelChemicalDataId = findData.BaseFromMysteelChemicalDataId
+					dataObj.Value = v.Value
+					dataObj.ModifyTime = time.Now()
+
+					err = dataObj.Update([]string{"value", "modify_time"})
+					if err != nil {
+						return
+					}
+				}
+			}
+		}
+		err = dataObj.AddV2(addItems)
+		if err != nil {
+			return
+		}
+		return
+	}
+	return
+}