瀏覽代碼

粮油商务网数据对接-更新指标库

gmy 8 月之前
父節點
當前提交
ae53a80cc5
共有 2 個文件被更改,包括 58 次插入7 次删除
  1. 27 7
      cmd/processor_business_logic.go
  2. 31 0
      models/ebd_data_ly.go

+ 27 - 7
cmd/processor_business_logic.go

@@ -613,22 +613,42 @@ func (p *PurchaseShippingProcessor) Process(ctx context.Context, product string,
 						yearMonth = lastDayOfMonth
 					}
 
-					indexData, err := models.GetLyDataByIndexIdAndDataTime(indexId, yearMonth)
+					valueStr := row[columnIdx]
+					value, err := strconv.ParseFloat(valueStr, 64)
+					if err != nil {
+						return []models.BaseFromLyData{}, fmt.Errorf("SupplyDemandBalanceProcessor Process() : failed to parse value '%s': %v", valueStr, err)
+					}
+
+					month, err := utils.GetYearMonth(yearMonth)
+					if err != nil {
+						return nil, err
+					}
+					indexData, err := models.GetLyDataByIndexIdAndDataTimeYM(indexId, month)
 					if err != nil {
 						logs.Error("SupplyDemandBalanceProcessor Process() : Failed to get data by index id and date: %v", err)
 						continue
 					}
 					if len(indexData) > 0 {
-						// todo 根据format时间判断走更新逻辑
 						logs.Info("SupplyDemandBalanceProcessor Process() : Data already exists for index %d and date %s", indexId, dateText)
+						err := models.UpdateLyDataById(indexData[0].BaseFromLyDataId, value)
+						if err != nil {
+							return nil, err
+						}
+						// 同步更新指标库数据 须根据指标编码和日期更新
+						edbData, err := models.GetLyEdbDataByIndexCodeAndDataTime(indexData[0].IndexCode, month)
+						if err != nil {
+							return nil, err
+						}
+						if len(edbData) > 0 {
+							err := models.UpdateLyEdbDataById(edbData[0].BaseFromLyDataId, value)
+							if err != nil {
+								return nil, err
+							}
+						}
+
 						continue
 					}
 
-					valueStr := row[columnIdx]
-					value, err := strconv.ParseFloat(valueStr, 64)
-					if err != nil {
-						return []models.BaseFromLyData{}, fmt.Errorf("SupplyDemandBalanceProcessor Process() : failed to parse value '%s': %v", valueStr, err)
-					}
 					// 创建并添加到结果列表
 					baseFromLyData := models.BaseFromLyData{
 						DataTime:          yearMonth,

+ 31 - 0
models/ebd_data_ly.go

@@ -0,0 +1,31 @@
+// Package models
+// @Author gmy 2024/8/14 19:40:00
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+type EdbDataLy struct {
+	BaseFromLyDataId int     `orm:"column(base_from_ly_data_id);pk"` // 数据ID
+	CreateTime       string  `orm:"column(create_time)"`             // 创建时间
+	ModifyTime       string  `orm:"column(modify_time)"`             // 修改时间
+	EdbInfoId        int     `orm:"column(edb_info_id)"`             // 指标id
+	EdbCode          string  `orm:"column(edb_code)"`                // 指标编码
+	DataTime         string  `orm:"column(data_time)"`               // 数据日期
+	Value            float64 `orm:"column(value)"`                   // 数据值
+	DataTimestamp    uint64  `orm:"column(data_timestamp)"`          // 数据日期时间戳
+}
+
+func GetLyEdbDataByIndexCodeAndDataTime(indexCode string, dataTime string) (items []EdbDataLy, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM edb_data_ly WHERE index_code=? AND data_time like ?`
+	_, err = o.Raw(sql, indexCode, dataTime+"%").QueryRows(&items)
+	return
+}
+
+// UpdateLyEdbDataById 更新指标库数据 须根据指标编码和日期更新 仅适合月度数据
+func UpdateLyEdbDataById(id int, value float64) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `UPDATE edb_data_ly SET value=? WHERE base_from_ly_data_id=?`
+	_, err = o.Raw(sql, value, id).Exec()
+	return
+}