xyxie hace 1 año
padre
commit
a156401476

+ 15 - 3
controllers/base_from_calculate.go

@@ -145,7 +145,11 @@ func (this *CalculateController) Add() {
 		return
 	}
 	for _, formula := range formulaSlice {
-		formulaMap := utils.CheckFormula(formula)
+		formulaMap, e := utils.CheckFormula(formula)
+		if e != nil {
+			br.Msg = "公式错误,请重新填写"
+			return
+		}
 		for _, v := range formulaMap {
 			if !strings.Contains(formulaStr, v) {
 				br.Msg = "公式错误,请重新填写"
@@ -197,7 +201,11 @@ func (this *CalculateController) Add() {
 	}
 
 	for _, v := range formulaSlice {
-		formulaMap := utils.CheckFormula(v)
+		formulaMap, e := utils.CheckFormula(v)
+		if e != nil {
+			br.Msg = "公式错误,请重新填写"
+			return
+		}
 		//预先计算,判断公式是否正常
 		ok, _ := models.CheckFormula2(edbInfoList, formulaMap, v, edbInfoIdBytes)
 		if !ok {
@@ -424,7 +432,11 @@ func (this *CalculateController) Edit() {
 		return
 	}
 	for _, formula := range formulaSlice {
-		formulaMap := utils.CheckFormula(formula)
+		formulaMap, e := utils.CheckFormula(formula)
+		if e != nil {
+			br.Msg = "公式错误,请重新填写"
+			return
+		}
 		for _, v := range formulaMap {
 			if !strings.Contains(formulaStr, v) {
 				br.Msg = "公式错误,请重新填写"

+ 20 - 4
controllers/base_from_predict_calculate.go

@@ -112,7 +112,11 @@ func addPredictCalculate(br *models.BaseResponse, req models.EdbInfoCalculateSav
 		return
 	}
 	for _, formula := range formulaSlice {
-		formulaMap := utils.CheckFormula(formula)
+		formulaMap, e := utils.CheckFormula(formula)
+		if e != nil {
+			br.Msg = "公式错误,请重新填写"
+			return
+		}
 		for _, v := range formulaMap {
 			if !strings.Contains(formulaStr, v) {
 				br.Msg = "公式错误,请重新填写"
@@ -181,7 +185,11 @@ func addPredictCalculate(br *models.BaseResponse, req models.EdbInfoCalculateSav
 	}
 
 	for _, v := range formulaSlice {
-		formulaMap := utils.CheckFormula(v)
+		formulaMap, e := utils.CheckFormula(v)
+		if e != nil {
+			br.Msg = "公式错误,请重新填写"
+			return
+		}
 		//预先计算,判断公式是否正常
 		ok, _ := models.CheckFormula2(edbInfoList, formulaMap, v, edbInfoIdBytes)
 		if !ok {
@@ -352,7 +360,11 @@ func editPredictCalculate(br *models.BaseResponse, req models.EdbInfoCalculateSa
 		return
 	}
 	for _, formula := range formulaSlice {
-		formulaMap := utils.CheckFormula(formula)
+		formulaMap, e := utils.CheckFormula(formula)
+		if e != nil {
+			br.Msg = "公式错误,请重新填写"
+			return
+		}
 		for _, v := range formulaMap {
 			if !strings.Contains(formulaStr, v) {
 				br.Msg = "公式错误,请重新填写"
@@ -427,7 +439,11 @@ func editPredictCalculate(br *models.BaseResponse, req models.EdbInfoCalculateSa
 		}
 	}
 	for _, v := range formulaSlice {
-		formulaMap := utils.CheckFormula(v)
+		formulaMap, e := utils.CheckFormula(v)
+		if e != nil {
+			br.Msg = "公式错误,请重新填写"
+			return
+		}
 		//预先计算,判断公式是否正常
 		ok, _ := models.CheckFormula2(edbInfoList, formulaMap, v, edbInfoIdBytes)
 		if !ok {

+ 26 - 5
logic/predict_edb.go

@@ -4,6 +4,7 @@ import (
 	"errors"
 	"eta/eta_index_lib/models"
 	"eta/eta_index_lib/utils"
+	"fmt"
 	"strconv"
 	"strings"
 	"time"
@@ -206,7 +207,11 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
 				return
 			}
 			for _, fm := range formulaSlice {
-				formulaMap := utils.CheckFormula(fm)
+				formulaMap, e := utils.CheckFormula(fm)
+				if e != nil {
+					err = fmt.Errorf("公式错误,请重新填写")
+					return
+				}
 				for _, f := range formulaMap {
 					if !strings.Contains(formulaStr, f) {
 						errMsg = "公式错误,请重新填写"
@@ -278,7 +283,11 @@ func AddPredictEdbInfo(sourceEdbInfoId, classifyId int, edbName, dataDateType st
 				trendsMappingList = append(trendsMappingList, tmpPredictEdbConfCalculateMapping)
 			}
 			for _, f := range formulaSlice {
-				formulaMap := utils.CheckFormula(f)
+				formulaMap, e := utils.CheckFormula(f)
+				if e != nil {
+					err = fmt.Errorf("公式错误,请重新填写")
+					return
+				}
 				//预先计算,判断公式是否正常
 				ok, _ := models.CheckFormula2(edbInfoList, formulaMap, f, edbInfoIdBytes)
 				if !ok {
@@ -590,7 +599,11 @@ func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string,
 				return
 			}
 			for _, fm := range formulaSlice {
-				formulaMap := utils.CheckFormula(fm)
+				formulaMap, e := utils.CheckFormula(fm)
+				if e != nil {
+					err = fmt.Errorf("公式错误,请重新填写")
+					return
+				}
 				for _, f := range formulaMap {
 					if !strings.Contains(formulaStr, f) {
 						errMsg = "公式错误,请重新填写"
@@ -663,7 +676,11 @@ func EditPredictEdbInfo(edbInfoId, classifyId int, edbName, dataDateType string,
 			}
 
 			for _, f := range formulaSlice {
-				formulaMap := utils.CheckFormula(f)
+				formulaMap, e := utils.CheckFormula(f)
+				if e != nil {
+					err = fmt.Errorf("公式错误,请重新填写")
+					return
+				}
 				//预先计算,判断公式是否正常
 				ok, _ := models.CheckFormula2(edbInfoList, formulaMap, f, edbInfoIdBytes)
 				if !ok {
@@ -907,7 +924,11 @@ func RefreshPredictEdbInfo(edbInfoId int) (edbInfo *models.EdbInfo, err error, e
 				return
 			}
 			for _, fm := range formulaSlice {
-				formulaMap := utils.CheckFormula(fm)
+				formulaMap, e := utils.CheckFormula(fm)
+				if e != nil {
+					err = fmt.Errorf("公式错误,请重新填写")
+					return
+				}
 				for _, f := range formulaMap {
 					if !strings.Contains(formulaStr, f) {
 						errMsg = "公式错误,请重新填写"

+ 10 - 2
models/base_from_calculate.go

@@ -202,7 +202,11 @@ func EditCalculateInfo(edbInfo *EdbInfo, req EdbInfoCalculateSaveReq, formulaSli
 		}
 
 		for _, v := range formulaSlice {
-			formulaMap := utils.CheckFormula(v)
+			formulaMap, e := utils.CheckFormula(v)
+			if e != nil {
+				err = fmt.Errorf("公式错误,请重新填写")
+				return
+			}
 			//预先计算,判断公式是否正常
 			ok, _ := CheckFormula2(edbInfoList, formulaMap, v, edbInfoIdBytes)
 			if !ok {
@@ -433,7 +437,11 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoTag map
 			if sk < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
-					formulaMap = utils.CheckFormula(formulaStr)
+					formulaMap, err = utils.CheckFormula(formulaStr)
+					if err != nil {
+						err = fmt.Errorf("公式错误,请重新填写")
+						return
+					}
 				}
 				break
 			}

+ 5 - 1
models/base_predict_from_calculate.go

@@ -385,7 +385,11 @@ func refreshAllPredictCalculate(to orm.TxOrmer, edbInfoIdList []*EdbInfo, edbInf
 			if sk < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
-					formulaMap = utils.CheckFormula(formulaStr)
+					formulaMap, err = utils.CheckFormula(formulaStr)
+					if err != nil {
+						err = fmt.Errorf("公式错误,请重新填写")
+						return
+					}
 				}
 				break
 			}

+ 5 - 1
models/predict_edb.go

@@ -160,7 +160,11 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 			if sk < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
-					formulaMap = utils.CheckFormula(formulaStr)
+					formulaMap, err = utils.CheckFormula(formulaStr)
+					if err != nil {
+						err = fmt.Errorf("公式错误,请重新填写")
+						return
+					}
 				}
 				break
 			}

+ 18 - 3
services/base_from_predict.go

@@ -35,7 +35,12 @@ func GetCalculateByRuleByNineParams(req models.RuleConfig) (formula string, edbI
 		return
 	}
 	for _, f := range formulaSlice {
-		formulaMap := utils.CheckFormula(f)
+		formulaMap, e := utils.CheckFormula(f)
+		if e != nil {
+			err = fmt.Errorf("公式错误,请重新填写")
+			return
+		}
+
 		for _, v := range formulaMap {
 			if !strings.Contains(checkFormulaStr, v) {
 				errMsg = "公式错误,请重新填写"
@@ -63,7 +68,12 @@ func GetCalculateByRuleByNineParams(req models.RuleConfig) (formula string, edbI
 	}
 
 	for _, v := range formulaSlice {
-		formulaMap := utils.CheckFormula(v)
+		formulaMap, e := utils.CheckFormula(v)
+		if e != nil {
+			err = fmt.Errorf("公式错误,请重新填写")
+			return
+		}
+
 		//预先计算,判断公式是否正常
 		ok, _ := models.CheckFormula2(edbInfoList, formulaMap, v, edbInfoIdBytes)
 		if !ok {
@@ -178,7 +188,12 @@ func CalculateByRuleByNine(formulaStr string, edbInfoList []*models.EdbInfo, edb
 			if date < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
-					formulaMap = utils.CheckFormula(formulaStr)
+					formulaMap, err = utils.CheckFormula(formulaStr)
+					if err != nil {
+						err = fmt.Errorf("公式错误,请重新填写")
+						return
+					}
+
 				}
 				break
 			}

+ 10 - 3
utils/base_from_calculate.go

@@ -9,7 +9,7 @@ import (
 )
 
 // CheckFormula 检测计算公式是否异常
-func CheckFormula(formula string) map[string]string {
+func CheckFormula(formula string) (byteMap map[string]string, err error) {
 	mathFormula := []string{"MAX", "MIN", "ABS", "ACOS", "ASIN", "CEIL", "MOD", "POW", "ROUND", "SIGN", "SIN", "TAN", "LOG10", "LOG2", "LOG", "LN", "EXP"}
 
 	str := strings.ToUpper(formula)
@@ -19,10 +19,17 @@ func CheckFormula(formula string) map[string]string {
 	str = strings.Replace(str, "(", "", -1)
 	str = strings.Replace(str, ")", "", -1)
 
-	byteMap := make(map[string]string)
+	byteMap = make(map[string]string)
 	for i := 0; i < len(str); i++ {
 		byteInt := str[i]
 		if byteInt >= 65 && byteInt <= 90 {
+			// 判断前一位是否是数字,如果是数字就报错
+			if i > 0 {
+				if str[i-1] >= '0' && str[i-1] <= '9' {
+					err = fmt.Errorf("计算公式异常,请检查公式:%s", formula)
+					return
+				}
+			}
 			byteStr := string(byteInt) //获取计算公式中的占位符A,B, AA,AB
 			if i+1 < len(str) {
 				next := str[i+1]
@@ -36,7 +43,7 @@ func CheckFormula(formula string) map[string]string {
 			}
 		}
 	}
-	return byteMap
+	return
 }
 
 type FormulaListItem struct {