Browse Source

fix:调整计算公式判断

Roc 2 years ago
parent
commit
9236fbf2c7

+ 2 - 2
controllers/base_from_predict_calculate.go

@@ -174,7 +174,7 @@ func addPredictCalculate(br *models.BaseResponse, req models.EdbInfoCalculateSav
 	}
 
 	//预先计算,判断公式是否正常
-	ok, _ := services.CheckFormula2(edbInfoList, formulaMap, calculateFormula, edbInfoIdBytes)
+	ok, _ := models.CheckFormula2(edbInfoList, formulaMap, calculateFormula, edbInfoIdBytes)
 	if !ok {
 		br.Msg = "生成计算指标失败,请使用正确的计算公式"
 		return
@@ -409,7 +409,7 @@ func editPredictCalculate(br *models.BaseResponse, req models.EdbInfoCalculateSa
 	}
 
 	//预先计算,判断公式是否正常
-	ok, _ := services.CheckFormula2(edbInfoList, formulaMap, calculateFormula, edbInfoIdBytes)
+	ok, _ := models.CheckFormula2(edbInfoList, formulaMap, calculateFormula, edbInfoIdBytes)
 	if !ok {
 		br.Msg = "生成计算指标失败,请使用正确的计算公式"
 		return

+ 20 - 0
models/base_from_calculate.go

@@ -364,3 +364,23 @@ type EdbInfoCalculateBatchEditReq struct {
 		FromTag   string `description:"指标对应标签"`
 	}
 }
+
+// CheckFormula2 校验公式是否正常(比如说除法的分母不能为0之类的,实际上就是用预设的字段数据做一次计算)
+func CheckFormula2(edbInfoArr []*EdbInfo, formulaMap map[string]string, formulaStr string, edbInfoIdBytes []string) (ok bool, err error) {
+	valArr := make(map[int]float64)
+	for _, v := range edbInfoArr {
+		valArr[v.EdbInfoId] = 100
+	}
+	formulaStr = strings.ToUpper(formulaStr)
+	formulaFormStr := ReplaceFormula(edbInfoArr, valArr, formulaMap, formulaStr, edbInfoIdBytes)
+	if formulaFormStr == "" {
+		return
+	}
+	expression := formula.NewExpression(formulaFormStr)
+	_, err = expression.Evaluate()
+	if err != nil {
+	} else {
+		ok = true
+	}
+	return
+}

+ 0 - 22
services/base_from_calculate.go

@@ -1,8 +1,6 @@
 package services
 
 import (
-	"github.com/yidane/formula"
-	"hongze/hongze_edb_lib/models"
 	"strings"
 )
 
@@ -29,23 +27,3 @@ func CheckFormula(formula string) map[string]string {
 	}
 	return byteMap
 }
-
-// CheckFormula2 校验公式是否正常(比如说除法的分母不能为0之类的,实际上就是用预设的字段数据做一次计算)
-func CheckFormula2(edbInfoArr []*models.EdbInfo, formulaMap map[string]string, formulaStr string, edbInfoIdBytes []string) (ok bool, err error) {
-	valArr := make(map[int]float64)
-	for _, v := range edbInfoArr {
-		valArr[v.EdbInfoId] = 100
-	}
-	formulaStr = strings.ToUpper(formulaStr)
-	formulaFormStr := models.ReplaceFormula(edbInfoArr, valArr, formulaMap, formulaStr, edbInfoIdBytes)
-	if formulaFormStr == "" {
-		return
-	}
-	expression := formula.NewExpression(formulaFormStr)
-	_, err = expression.Evaluate()
-	if err != nil {
-	} else {
-		ok = true
-	}
-	return
-}