浏览代码

fix:eiaSteo爬取的数据的日期改为月份的最后一天

zqbao 8 月之前
父节点
当前提交
c9e905fe47
共有 1 个文件被更改,包括 19 次插入4 次删除
  1. 19 4
      models/base_from_eia_steo.go

+ 19 - 4
models/base_from_eia_steo.go

@@ -110,6 +110,12 @@ func GetBaseFromEiaSteoIndexAll() (list []*BaseFromEiaSteoIndex, err error) {
 	return
 }
 
+func lastDayOfMonth(year int, month time.Month) string {
+	firstDay := time.Date(year, month, 1, 0, 0, 0, 0, time.Local)
+	nextMonth := firstDay.AddDate(0, 1, 0)
+	return nextMonth.Add(-time.Second * 1).Format(utils.FormatDate)
+}
+
 // HandleEiaSteoData 数据处理
 func HandleEiaSteoData(dataList map[string]interface{}, indexInfo *BaseFromEiaSteoIndex) (err error) {
 	o := orm.NewOrmUsingDB("data")
@@ -133,7 +139,9 @@ func HandleEiaSteoData(dataList map[string]interface{}, indexInfo *BaseFromEiaSt
 
 	existMap := make(map[string]*BaseFromEiaSteoData)
 	for _, v := range existList {
-		existMap[v.DataTime.Format(utils.FormatDate)] = v
+		// 产品要求每个月的最后一天,为了兼容之前每个月第一天的数据
+		dateTime := lastDayOfMonth(v.DataTime.Year(), v.DataTime.Month())
+		existMap[dateTime] = v
 	}
 
 	// 待添加的数据列表
@@ -152,7 +160,6 @@ func HandleEiaSteoData(dataList map[string]interface{}, indexInfo *BaseFromEiaSt
 			err = tmpErr
 			return
 		}
-		// 需求要求的日期起始时间
 		initDate := time.Date(2010, time.January, 1, 0, 0, 0, 0, time.Local)
 		if currDate.Before(initDate) {
 			continue
@@ -163,7 +170,10 @@ func HandleEiaSteoData(dataList map[string]interface{}, indexInfo *BaseFromEiaSt
 		if currDate.Before(startDate) {
 			startDate = currDate
 		}
-		date = currDate.Format(utils.FormatDate)
+		// 产品要求每个月的最后一天
+		date = lastDayOfMonth(currDate.Year(), currDate.Month())
+		currDate, _ = time.ParseInLocation(utils.FormatDate, date, time.Local)
+		// date = currDate.Format(utils.FormatDate)
 		//fmt.Println("date:", date)
 
 		tmpBaseFromEiaSteoData, ok := existMap[date]
@@ -180,10 +190,15 @@ func HandleEiaSteoData(dataList map[string]interface{}, indexInfo *BaseFromEiaSt
 		} else {
 			nowVal := decimal.NewFromFloat(tmpBaseFromEiaSteoData.Value)
 			//fmt.Println(date, "=========", nowVal.Equal(valDecimal))
+			var updateCols []string
 			if !nowVal.Equal(valDecimal) {
 				tmpBaseFromEiaSteoData.Value = val
 				tmpBaseFromEiaSteoData.ModifyTime = time.Now()
-				_, err = to.Update(tmpBaseFromEiaSteoData, "Value", "ModifyTime")
+				updateCols = append(updateCols, "value")
+				updateCols = append(updateCols, "modify_time")
+			}
+			if len(updateCols) > 0 {
+				_, err = to.Update(tmpBaseFromEiaSteoData, updateCols...)
 				if err != nil {
 					return
 				}