Эх сурвалжийг харах

预测指标累计值转月值的实际日期修改

xiexiaoyuan 2 жил өмнө
parent
commit
70dd739e0a

+ 31 - 3
models/predict_edb_data_calculate_ljzzy.go

@@ -218,6 +218,34 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source int, from
 		dataMap[v.DataTime] = v.Value
 	}
 	existDataMap := make(map[string]string)
+	//查找实际日期, 如果实际日期不是月末值,则把上个月末日期作为实际日期
+	for yk, yv := range yearMap {
+		for i := 1; i <= 12; i++ {
+			if dataCurrentItem, ok := yv[i]; ok {
+				if i == 1 {
+					if latestDateStr < dataCurrentItem.DataTime { //假如最新的实际值不是1月末
+						if lastYearDate, ok1 := yearMap[yk-1]; ok1 {
+							if latestDateStr > lastYearDate[12].DataTime { //同时最新的实际值不是1月末,也不是上一年的12月末
+								latestDateStr = lastYearDate[12].DataTime
+							}
+						}
+					}
+				}else if i == 2 {
+					dataOne := strconv.Itoa(yk) + "-01-31"
+					if latestDateStr > dataOne && latestDateStr < dataCurrentItem.DataTime {
+						latestDateStr = dataOne
+					}
+
+				}else{
+					if dataPreItem, ok2 := yv[i-1]; ok2 {
+						if latestDateStr > dataPreItem.DataTime && latestDateStr < dataCurrentItem.DataTime {
+							latestDateStr = dataPreItem.DataTime
+						}
+					}
+				}
+			}
+		}
+	}
 	for yk, yv := range yearMap {
 		_, oneMonthOk := yv[1]
 		_, twoMonthOk := yv[2]
@@ -258,7 +286,6 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source int, from
 								a := decimal.NewFromFloat(dataTwoItem.Value)
 								b := decimal.NewFromFloat(2.0)
 								val, _ = a.Div(b).Float64()
-
 								tmpSql, newAdd, tmpErr := calculateLjzzy(edbInfoId, date, edbInfoIdStr, edbCode, dataTableName, addSql, val, dataMap, existDataMap, to)
 								if !isAdd {
 									isAdd = newAdd
@@ -268,7 +295,8 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source int, from
 									err = tmpErr
 									return
 								}
-								if fromEdbInfo.LatestDate == date {
+
+								if latestDateStr == date {
 									latestValue= val
 								}
 							}
@@ -322,7 +350,7 @@ func refreshAllPredictCalculateLjzzy(to orm.TxOrmer, edbInfoId, source int, from
 					err = tmpErr
 					return
 				}
-				if fromEdbInfo.LatestDate == date {
+				if latestDateStr == date {
 					latestValue= val
 				}
 			}