Browse Source

累计值拼接预测值

xiexiaoyuan 2 years ago
parent
commit
30441df6f9
1 changed files with 34 additions and 7 deletions
  1. 34 7
      models/predict_edb_data_calculate_ljztbpj.go

+ 34 - 7
models/predict_edb_data_calculate_ljztbpj.go

@@ -302,7 +302,7 @@ func SavePredictCalculateLjztbpj(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo
 	}
 
 	// 添加数据
-	latestDateStr, latestValue, err = refreshAllPredictCalculateLjztbpj(to, edbInfo, firstEdbInfo, existItemB)
+	latestDateStr, latestValue, err = refreshAllPredictCalculateLjztbpj(to, edbInfo, firstEdbInfo, secondEdbInfo, existItemB)
 
 	return
 }
@@ -355,13 +355,19 @@ func RefreshAllPredictCalculateLjztbpj(edbInfo *EdbInfo) (latestDateStr string,
 		err = fmt.Errorf("GetEdbInfoById Err:" + err.Error())
 		return
 	}
+
+	secondEdbInfo, err := GetEdbInfoById(existItemB.FromEdbInfoId)
+	if err != nil {
+		err = fmt.Errorf("GetEdbInfoById Err:" + err.Error())
+		return
+	}
 	// 刷新数据
-	latestDateStr, latestValue, err = refreshAllPredictCalculateLjztbpj(to, edbInfo, fromEdbInfo, existItemB)
+	latestDateStr, latestValue, err = refreshAllPredictCalculateLjztbpj(to, edbInfo, fromEdbInfo, secondEdbInfo, existItemB)
 	return
 }
 
 // refreshAllPredictCalculateLjztbpj 刷新所有 累计值同比拼接 数据
-func refreshAllPredictCalculateLjztbpj(to orm.TxOrmer, edbInfo, firstEdbInfo *EdbInfo, existItemB *EdbInfoCalculateMapping) (latestDateStr string, latestValue float64, err error) {
+func refreshAllPredictCalculateLjztbpj(to orm.TxOrmer, edbInfo, firstEdbInfo, secondEdbInfo *EdbInfo, existItemB *EdbInfoCalculateMapping) (latestDateStr string, latestValue float64, err error) {
 	//根据指标id获取全部的数据
 	var dataList []*EdbDataPredictCalculateLjztbpj
 	sql := ` SELECT * FROM edb_data_predict_calculate_ljztbpj WHERE edb_info_id=? ORDER BY data_time DESC `
@@ -370,6 +376,11 @@ func refreshAllPredictCalculateLjztbpj(to orm.TxOrmer, edbInfo, firstEdbInfo *Ed
 		return
 	}
 
+	if firstEdbInfo.LatestDate <= secondEdbInfo.LatestDate {
+		latestDateStr = firstEdbInfo.LatestDate
+	} else {
+		latestDateStr = secondEdbInfo.LatestDate
+	}
 	//待拼接指标map
 	pjDataMap := make(map[string]float64)     //需要入库的数据
 	nowEdbDataMap := make(map[string]float64) //当前指标的数据(已经在库里了,不需要重新)
@@ -405,7 +416,7 @@ func refreshAllPredictCalculateLjztbpj(to orm.TxOrmer, edbInfo, firstEdbInfo *Ed
 		if err != nil {
 			return
 		}
-		latestDateStr = firstEdbInfo.LatestDate
+
 		for _, v := range firstDataList {
 			if v.DataTime > startCalculationDate.Format(utils.FormatDate) {
 				continue
@@ -490,7 +501,7 @@ func refreshAllPredictCalculateLjztbpj(to orm.TxOrmer, edbInfo, firstEdbInfo *Ed
 				tbzDataValue := tbzEdbDataMap[v] //同比值
 				currValue := lastYearEdbDataValue * (1 + tbzDataValue/100)
 				currValue, _ = decimal.NewFromFloat(currValue).Truncate(4).Float64() //保留4位小数
-				if firstEdbInfo.LatestDate == pjDataTime.Format(utils.FormatDate) {
+				if latestDateStr == pjDataTime.Format(utils.FormatDate) {
 					latestValue = currValue
 				}
 				//如果计算出来的值与库里面的值不匹配,那么就去修改该值
@@ -540,7 +551,7 @@ func refreshAllPredictCalculateLjztbpj(to orm.TxOrmer, edbInfo, firstEdbInfo *Ed
 					DataTimestamp: timestamp,
 				}
 				addDataList = append(addDataList, edbDataLjztbpj)
-				if firstEdbInfo.LatestDate == dataTime {
+				if latestDateStr == dataTime {
 					latestValue = dataValue
 				}
 			}
@@ -583,10 +594,26 @@ func refreshAllPredictCalculateLjztbpj(to orm.TxOrmer, edbInfo, firstEdbInfo *Ed
 				err = errors.New("更新现有的累计值同比拼接指标数据失败,Err:" + err.Error())
 				return
 			}
-			if firstEdbInfo.LatestDate == edbDate {
+			if latestDateStr == edbDate {
 				latestValue = edbDataValue
 			}
 		}
 	}
+
+	//确定最终值
+	var finalLast EdbInfoSearchData
+	sql = ` SELECT max(data_time) as data_time , value FROM edb_data_predict_calculate_ljztbpj WHERE edb_info_id=? and data_time<=? ORDER BY data_time DESC `
+	tmpErr := to.Raw(sql, edbInfo.EdbInfoId, latestDateStr).QueryRow(&finalLast)
+	if tmpErr != nil {
+		if tmpErr.Error() != utils.ErrNoRow() {
+			err = tmpErr
+		}
+		return
+	}else{
+		if finalLast.DataTime != latestDateStr {
+			latestDateStr = finalLast.DataTime
+			latestValue = finalLast.Value
+		}
+	}
 	return
 }