Browse Source

fix:计算指标取数逻辑调整

Roc 2 years ago
parent
commit
a4ba226f21
1 changed files with 24 additions and 1 deletions
  1. 24 1
      models/predict_edb.go

+ 24 - 1
models/predict_edb.go

@@ -49,10 +49,13 @@ func RefreshCalculateByRuleBy9(rule CalculateRule) (err error) {
 
 // CalculateByRuleBy9 动态环差规则计算入库
 func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (err error) {
+	realSaveDataMap := make(map[string]map[int]float64)
 	saveDataMap := make(map[string]map[int]float64)
+	dateList := make([]string, 0)
+
 	formulaStr := strings.ToUpper(rule.Formula)
 	// 获取关联指标数据
-	for _, v := range rule.EdbInfoList {
+	for edbInfoIndex, v := range rule.EdbInfoList {
 		dataList, tmpErr := GetPredictEdbDataListAll(v, 1)
 		if tmpErr != nil {
 			err = tmpErr
@@ -60,6 +63,18 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (err error) {
 		}
 		dataMap := make(map[string]float64)
 		for _, dv := range dataList {
+			// 现有实际数据
+			if val, ok := realSaveDataMap[dv.DataTime]; ok {
+				if _, ok := val[v.EdbInfoId]; !ok {
+					val[v.EdbInfoId] = dv.Value
+				}
+			} else {
+				temp := make(map[int]float64)
+				temp[v.EdbInfoId] = dv.Value
+				realSaveDataMap[dv.DataTime] = temp
+			}
+
+			// 待处理的数据
 			if val, ok := saveDataMap[dv.DataTime]; ok {
 				if _, ok := val[v.EdbInfoId]; !ok {
 					val[v.EdbInfoId] = dv.Value
@@ -69,12 +84,20 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (err error) {
 				temp[v.EdbInfoId] = dv.Value
 				saveDataMap[dv.DataTime] = temp
 			}
+
+			// 以第一个指标的日期作为基准日期
+			if edbInfoIndex == 0 {
+				dateList = append(dateList, dv.DataTime)
+			}
 		}
 		item := new(CalculateItems)
 		item.EdbInfoId = v.EdbInfoId
 		item.DataMap = dataMap
 	}
 
+	//数据处理,将日期内不全的数据做补全
+	handleDateSaveDataMap(dateList, realSaveDataMap, saveDataMap, rule.EdbInfoList)
+
 	// 添加数据
 	addDataList := make([]*PredictEdbRuleData, 0)