فهرست منبع

fix: 刷新预测同差最新值

hsun 4 روز پیش
والد
کامیت
047d15a6b6
2فایلهای تغییر یافته به همراه33 افزوده شده و 1 حذف شده
  1. 1 0
      models/edb_data_base.go
  2. 32 1
      models/predict_edb_data_calculate_tcz.go

+ 1 - 0
models/edb_data_base.go

@@ -163,6 +163,7 @@ func GetFinalLastByTo(to *gorm.DB, edbInfoId, source, subSource int, latestDate
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		return
 	}
+	finalLast.DataTime = utils.GormDateStrToDateStr(finalLast.DataTime)
 	return
 }
 

+ 32 - 1
models/predict_edb_data_calculate_tcz.go

@@ -455,7 +455,7 @@ func RefreshAllPredictCalculateTcz(edbInfoId, source, subSource int, fromEdbInfo
 			} else {
 				if fromEdbInfo.Frequency == "月度" { //向上和向下,各找一个月
 					for i := 0; i <= 35; i++ {
-						nextDateDay := preDate.AddDate(0, 0, 1)
+						nextDateDay := preDate.AddDate(0, 0, i)
 						nextDateDayStr := nextDateDay.Format(utils.FormatDate)
 						if findItem, ok := dataMap[nextDateDayStr]; ok { //上一年同期->下一个月找到
 							timestamp := currentDate.UnixNano() / 1e6
@@ -690,5 +690,36 @@ func RefreshAllPredictCalculateTcz(edbInfoId, source, subSource int, fromEdbInfo
 			return
 		}
 	}
+
+	// 取出最新值(小于源指标最新日期的最大日期所对应的值)
+	{
+		edb, e := GetEdbInfoById(edbInfoId)
+		if e != nil {
+			err = fmt.Errorf("获取刷新后的指标失败, %v", e)
+			return
+		}
+		list, e := GetPredictEdbDataListAll(edb, 0)
+		if e != nil {
+			err = fmt.Errorf("获取刷新后的指标数据失败, %v", e)
+			return
+		}
+		dateData := make(map[time.Time]float64)
+		for _, v := range list {
+			d, _ := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
+			if !d.IsZero() {
+				dateData[d] = v.Value
+			}
+		}
+		t, _ := time.ParseInLocation(utils.FormatDate, fromEdbInfo.LatestDate, time.Local)
+		if !t.IsZero() {
+			var maxDate time.Time
+			for k := range dateData {
+				if k.After(maxDate) && !k.After(t) {
+					maxDate = k
+				}
+			}
+			latestValue = dateData[maxDate]
+		}
+	}
 	return
 }