浏览代码

fix:预测指标,动态环差计算的时候,需要移除不存在的日期数据

Roc 10 月之前
父节点
当前提交
73af80d330
共有 1 个文件被更改,包括 11 次插入5 次删除
  1. 11 5
      models/predict_edb.go

+ 11 - 5
models/predict_edb.go

@@ -134,12 +134,13 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 		return
 	}
 	dataMap := make(map[string]*PredictEdbRuleData)
+	removeDateMap := make(map[string]*PredictEdbRuleData) //需要移除的日期
 	for _, v := range dataList {
 		dataMap[v.DataTime] = v
+		removeDateMap[v.DataTime] = v
 	}
 	existDataMap := make(map[string]string)
 
-	removeDateList := make([]string, 0) //需要移除的日期
 	// 判断是否特殊处理max和min函数
 	maxDealFlag := false
 	if rule.EmptyType == 4 && rule.MaxEmptyType == 2 {
@@ -184,7 +185,6 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 		formulaFormStr := ReplaceFormula(rule.EdbInfoList, sv, svMax, formulaMap, formulaStr, rule.EdbInfoIdBytes, maxDealFlag)
 		//计算公式异常,那么就移除该指标
 		if formulaFormStr == "" {
-			removeDateList = append(removeDateList, sk)
 			continue
 		}
 
@@ -194,7 +194,6 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 		if tmpErr != nil {
 			// 分母为0的报错
 			if strings.Contains(tmpErr.Error(), "divide by zero") {
-				removeDateList = append(removeDateList, sk)
 				continue
 			}
 			err = errors.New("计算失败:Err:" + tmpErr.Error() + ";formulaStr:" + formulaFormStr)
@@ -209,9 +208,12 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 		}
 		nanCheck := fmt.Sprintf("%0.f", calVal)
 		if nanCheck == "NaN" || nanCheck == "+Inf" || nanCheck == "-Inf" {
-			removeDateList = append(removeDateList, sk)
 			continue
 		}
+
+		// 移除不存在的日期
+		delete(removeDateMap, sk)
+
 		saveValue := decimal.NewFromFloat(calVal).RoundCeil(4).String() //utils.SubFloatToString(calVal, 4)
 		existPredictEdbRuleData, ok := dataMap[sk]
 		if !ok {
@@ -267,8 +269,12 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 	}
 
 	//删除多余的值
-	lenRemoveDateList := len(removeDateList)
+	lenRemoveDateList := len(removeDateMap)
 	if lenRemoveDateList > 0 {
+		removeDateList := make([]string, 0) //需要移除的日期
+		for date, _ := range removeDateMap {
+			removeDateList = append(removeDateList, date)
+		}
 		//如果拼接指标变更了,那么需要删除所有的指标数据
 		sql := ` DELETE FROM predict_edb_rule_data WHERE config_id = ? and data_time in (` + utils.GetOrmInReplace(lenRemoveDateList) + `) `