Sfoglia il codice sorgente

替换数学计算引擎

hongze 7 mesi fa
parent
commit
9f6eeca808
3 ha cambiato i file con 32 aggiunte e 21 eliminazioni
  1. 1 0
      go.mod
  2. 2 0
      go.sum
  3. 29 21
      models/base_from_calculate.go

+ 1 - 0
go.mod

@@ -5,6 +5,7 @@ go 1.19
 require (
 	github.com/beego/bee/v2 v2.0.2
 	github.com/beego/beego/v2 v2.0.2
+	github.com/dengsgo/math-engine v0.0.0-20230823154425-78f211b48149
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/go-redis/redis/v8 v8.11.5
 	github.com/go-sql-driver/mysql v1.6.0

+ 2 - 0
go.sum

@@ -97,6 +97,8 @@ github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGii
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dengsgo/math-engine v0.0.0-20230823154425-78f211b48149 h1:TkVfb0s14IUHDGvjQfq3f0PZnV1zh609did4DrnD4q4=
+github.com/dengsgo/math-engine v0.0.0-20230823154425-78f211b48149/go.mod h1:zkR27k4K0I8FS6rkEd8qBhPeS8i3X2FKfvSPdF64OpQ=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=

+ 29 - 21
models/base_from_calculate.go

@@ -6,8 +6,9 @@ import (
 	"eta/eta_index_lib/utils"
 	"fmt"
 	"github.com/beego/beego/v2/client/orm"
+	"github.com/dengsgo/math-engine/engine"
 	"github.com/shopspring/decimal"
-	"github.com/yidane/formula"
+	//"github.com/yidane/formula"
 	"strconv"
 	"strings"
 	"time"
@@ -460,24 +461,24 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoTag map
 		}
 		//utils.FileLog.Info(fmt.Sprintf("formulaFormStr:%s", formulaFormStr))
 		fmt.Println(fmt.Sprintf("%s:formulaFormStr:%s", sk, formulaFormStr))
-		expression := formula.NewExpression(formulaFormStr)
-		calResult, err := expression.Evaluate()
-		if err != nil {
-			// 分母为0的报错
-			if strings.Contains(err.Error(), "divide by zero") {
-				//removeDateList = append(removeDateList, sk)
-				continue
-			}
-			err = errors.New("计算失败:Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
-			fmt.Println(err)
-			return err
-		}
-		// 如果计算结果是NAN,那么就退出当前循环
-		if calResult.IsNan() {
-			continue
-		}
-
-		calVal, err := calResult.Float64()
+		//expression := formula.NewExpression(formulaFormStr)
+		//calResult, err := expression.Evaluate()
+		//if err != nil {
+		//	// 分母为0的报错
+		//	if strings.Contains(err.Error(), "divide by zero") {
+		//		//removeDateList = append(removeDateList, sk)
+		//		continue
+		//	}
+		//	err = errors.New("计算失败:Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
+		//	fmt.Println(err)
+		//	return err
+		//}
+		//// 如果计算结果是NAN,那么就退出当前循环
+		//if calResult.IsNan() {
+		//	continue
+		//}
+		calVal, err := engine.ParseAndExec(formulaFormStr)
+		//calVal, err := calResult.Float64()
 		if err != nil {
 			err = errors.New("计算失败:获取计算值失败 Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
 			fmt.Println(err)
@@ -712,12 +713,19 @@ func CheckFormula2(edbInfoArr []*EdbInfo, formulaMap map[string]string, formulaS
 	if formulaFormStr == "" {
 		return
 	}
-	expression := formula.NewExpression(formulaFormStr)
-	_, err = expression.Evaluate()
+
+	_, err = engine.ParseAndExec(formulaFormStr)
 	if err != nil {
+		fmt.Println(err)
 	} else {
 		ok = true
 	}
+	//expression := formula.NewExpression(formulaFormStr)
+	//_, err = expression.Evaluate()
+	//if err != nil {
+	//} else {
+	//	ok = true
+	//}
 	return
 }