瀏覽代碼

Merge branch 'feature/eta1.2.0_edb_calculate' into debug

# Conflicts:
#	controllers/base_from_calculate.go
#	models/base_from_calculate.go
#	models/base_predict_from_calculate.go
xyxie 1 年之前
父節點
當前提交
25243eb446

+ 1 - 1
controllers/base_from_calculate.go

@@ -1430,7 +1430,7 @@ func (this *CalculateController) Refresh() {
 			edbInfo, _ := models.GetEdbInfoById(v.FromEdbInfoId)
 			edbInfoList = append(edbInfoList, edbInfo)
 		}
-		err = models.RefreshAllCalculate(edbInfoList, edbInfo.EdbInfoId, source, edbInfo.SubSource, edbInfo.EdbCode, edbInfo.CalculateFormula, startDate, endDate, edbInfoIdBytes, edbInfo.EmptyType, edbInfo.MaxEmptyType)
+		err = models.RefreshAllCalculate(edbInfoList, edbInfo.EdbInfoId, source, subSource, edbInfo.EdbCode, edbInfo.CalculateFormula, startDate, endDate, edbInfoIdBytes, edbInfo.EmptyType, edbInfo.MaxEmptyType)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			errMsg = "RefreshCalculate Err:" + err.Error()
 			break

+ 2 - 88
models/base_from_calculate.go

@@ -39,92 +39,6 @@ type CalculateItems struct {
 	DataMap   map[string]float64
 }
 
-//// AddCalculate 新增计算(运算)指标
-//func AddCalculate(edbInfoIdArr []*EdbInfo, edbInfoId int, edbCode, formulaStr string, edbInfoIdBytes []string) (err error) {
-//	o := orm.NewOrm()
-//	defer func() {
-//		if err != nil {
-//			utils.FileLog.Info(fmt.Sprintf("Calculate Err:%s" + err.Error()))
-//		}
-//	}()
-//	saveDataMap := make(map[string]map[int]float64)
-//	for _, v := range edbInfoIdArr {
-//		var condition string
-//		var pars []interface{}
-//		condition += " AND edb_info_id=? "
-//		pars = append(pars, v.EdbInfoId)
-//		dataList, err := GetEdbDataListAll(condition, pars, v.Source, v.SubSource, 1)
-//		if err != nil {
-//			return err
-//		}
-//		dataMap := make(map[string]float64)
-//		for _, dv := range dataList {
-//			if val, ok := saveDataMap[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
-//				saveDataMap[dv.DataTime] = temp
-//			}
-//		}
-//		item := new(CalculateItems)
-//		item.EdbInfoId = v.EdbInfoId
-//		item.DataMap = dataMap
-//	}
-//	formulaMap := utils.CheckFormula(formulaStr)
-//	addSql := ` INSERT INTO edb_data_calculate(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
-//	nowStr := time.Now().Format(utils.FormatDateTime)
-//	var isAdd bool
-//	for sk, sv := range saveDataMap {
-//		formulaStr = strings.ToUpper(formulaStr)
-//		formulaFormStr := ReplaceFormula(edbInfoIdArr, sv, formulaMap, formulaStr, edbInfoIdBytes)
-//		if formulaStr == "" {
-//			return
-//		}
-//		if formulaFormStr != "" {
-//			expression := formula.NewExpression(formulaFormStr)
-//			calResult, err := expression.Evaluate()
-//			if err != nil {
-//				err = errors.New("计算失败:Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
-//				fmt.Println(err)
-//				return err
-//			}
-//			calVal, err := calResult.Float64()
-//			if err != nil {
-//				err = errors.New("计算失败:获取计算值失败 Err:" + err.Error() + ";formulaStr:" + formulaFormStr)
-//				fmt.Println(err)
-//				return err
-//			}
-//
-//			//需要存入的数据
-//			{
-//				dataTime, _ := time.ParseInLocation(utils.FormatDate, sk, time.Local)
-//				timestamp := dataTime.UnixNano() / 1e6
-//				timeStr := fmt.Sprintf("%d", timestamp)
-//				addSql += "("
-//				addSql += strconv.Itoa(edbInfoId) + "," + "'" + edbCode + "'" + "," + "'" + sk + "'" + "," + utils.SubFloatToString(calVal, 4) + "," + "'" + nowStr + "'" +
-//					"," + "'" + nowStr + "'" + "," + "'" + timeStr + "'"
-//				addSql += "),"
-//				isAdd = true
-//			}
-//		} else {
-//			fmt.Println("formulaFormStr is empty")
-//		}
-//	}
-//	if isAdd {
-//		addSql = strings.TrimRight(addSql, ",")
-//		_, err = o.Raw(addSql).Exec()
-//		if err != nil {
-//			fmt.Println("AddEdbDataCalculate Err:" + err.Error())
-//			//errMsg = " tx.Exec Err :" + err.Error()
-//			return
-//		}
-//	}
-//	return
-//}
-
 // AddCalculateInfo 新增计算(运算)指标
 func AddCalculateInfo(req EdbInfoCalculateSaveReq, calculateMappingList []*EdbInfoCalculateMapping, edbInfoList []*EdbInfo, edbCode, uniqueCode string, edbInfoIdBytes []string) (edbInfo *EdbInfo, err error) {
 
@@ -438,7 +352,7 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
 	//数据处理,将日期内不全的数据做补全
 	HandleDateSaveDataMap(dateList, maxStartDate, minLatestDate, realSaveDataMap, saveDataMap, edbInfoIdArr, emptyType)
 
-	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, maxStartDate.Format(utils.FormatDate))
+	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, minLatestDate)
 	if err != nil {
 		return
 	}
@@ -481,7 +395,7 @@ func refreshAllCalculate(to orm.TxOrmer, edbInfoIdArr []*EdbInfo, edbInfoId, sou
 		formulaMap := make(map[string]string)
 		formulaStr = ""
 		for _, fv := range formulaDateSlice {
-			if sk >= fv {
+			if sk < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
 					formulaMap = utils.CheckFormula(formulaStr)

+ 5 - 3
models/base_predict_from_calculate.go

@@ -257,7 +257,9 @@ func RefreshAllPredictCalculate(edbInfoIdList []*EdbInfo, edbInfoId, source, sub
 			_ = to.Commit()
 		}
 	}()
+
 	latestDateStr, latestValue, err = refreshAllPredictCalculate(to, edbInfoIdList, edbInfoId, source, subSource, edbCode, formulaStr, startDate, edbInfoIdBytes, emptyType, maxEmptyType)
+	
 	return
 }
 
@@ -332,11 +334,11 @@ func refreshAllPredictCalculate(to orm.TxOrmer, edbInfoIdList []*EdbInfo, edbInf
 			}
 		}
 	}
-	
+
 	//数据处理,将日期内不全的数据做填补
 	HandleDateSaveDataMap(dateList, maxStartDate, minLatestDate, realSaveDataMap, saveDataMap, edbInfoIdList, emptyType)
 
-	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, maxStartDate.Format(utils.FormatDate))
+	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, minLatestDate)
 	if err != nil {
 		return
 	}
@@ -381,7 +383,7 @@ func refreshAllPredictCalculate(to orm.TxOrmer, edbInfoIdList []*EdbInfo, edbInf
 		formulaMap := make(map[string]string)
 		formulaStr = ""
 		for _, fv := range formulaDateSlice {
-			if sk >= fv {
+			if sk < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
 					formulaMap = utils.CheckFormula(formulaStr)

+ 2 - 2
models/predict_edb.go

@@ -115,7 +115,7 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 	addDataList := make([]*PredictEdbRuleData, 0)
 
 	// 计算规则
-	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, maxStartDate.Format(utils.FormatDate))
+	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, minLatestDate)
 	if err != nil {
 		return
 	}
@@ -150,7 +150,7 @@ func CalculateByRuleBy9(to orm.TxOrmer, rule CalculateRule) (resultDataList []*E
 		formulaMap := make(map[string]string)
 		formulaStr = ""
 		for _, fv := range formulaDateSlice {
-			if sk >= fv {
+			if sk < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
 					formulaMap = utils.CheckFormula(formulaStr)

+ 2 - 2
services/base_from_predict.go

@@ -145,7 +145,7 @@ func CalculateByRuleByNine(formulaStr string, edbInfoList []*models.EdbInfo, edb
 	dataList = make([]*models.EdbDataList, 0)
 
 	// 计算规则
-	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, maxStartDate.Format(utils.FormatDate))
+	formulaDateSlice, formulaDateMap, err := utils.HandleFormulaJson(formulaStr, minLatestDate)
 	if err != nil {
 		return
 	}
@@ -168,7 +168,7 @@ func CalculateByRuleByNine(formulaStr string, edbInfoList []*models.EdbInfo, edb
 		formulaMap := make(map[string]string)
 		formulaStr = ""
 		for _, fv := range formulaDateSlice {
-			if date >= fv {
+			if date < fv {
 				if f, ok := formulaDateMap[fv]; ok {
 					formulaStr = f
 					formulaMap = utils.CheckFormula(formulaStr)

+ 6 - 3
utils/base_from_calculate.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"sort"
 	"strings"
+	"time"
 )
 
 // CheckFormula 检测计算公式是否异常
@@ -37,7 +38,7 @@ type FormulaListItem struct {
 }
 
 // HandleFormulaJson 处理计算公式json串是否异常
-func HandleFormulaJson(formula string, startDate string) (dateSlice []string, formulaMap map[string]string, err error) {
+func HandleFormulaJson(formula string, endDate time.Time) (dateSlice []string, formulaMap map[string]string, err error) {
 	list := make([]FormulaListItem, 0)
 	err = json.Unmarshal([]byte(formula), &list)
 	if err != nil {
@@ -46,16 +47,18 @@ func HandleFormulaJson(formula string, startDate string) (dateSlice []string, fo
 	}
 	formulaMap = make(map[string]string)
 	dateSlice = make([]string, 0)
+	// 查找最后的一天作为首个公式的起始日期
+	maxDate := endDate.AddDate(0, 0, 1).Format(FormatDate)
 	// 日期排序
 	for k, v := range list {
 		if k == 0 { // 首个日期均为起始日
-			v.Date = startDate
+			v.Date = maxDate
 		}
 		formulaMap[v.Date] = v.Formula
 		dateSlice = append(dateSlice, v.Date)
 	}
 	sort.Slice(dateSlice, func(i, j int) bool {
-		return dateSlice[i] > dateSlice[j]
+		return dateSlice[i] < dateSlice[j]
 	})
 
 	return