Ver Fonte

fix:计算指标分母为0报错修复

Roc há 3 anos atrás
pai
commit
eff0e71b63
2 ficheiros alterados com 29 adições e 7 exclusões
  1. 7 7
      controllers/base_from_calculate.go
  2. 22 0
      models/base_from_calculate.go

+ 7 - 7
controllers/base_from_calculate.go

@@ -579,13 +579,13 @@ func (this *CalculateController) Refresh() {
 
 		switch source {
 		case utils.DATA_SOURCE_CALCULATE:
-			startDate = edbInfo.StartDate
-			sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
-			if err != nil {
-				return
-			}
-			startDate = sTime.Format(utils.FormatDate)
-
+			//startDate = edbInfo.StartDate
+			//sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
+			//if err != nil {
+			//	return
+			//}
+			//startDate = sTime.Format(utils.FormatDate)
+			startDate = ""
 			var edbInfoIdBytes []string
 			calculateMap, err := models.GetEdbInfoCalculateDetailList(edbInfo.EdbInfoId)
 			if err != nil {

+ 22 - 0
models/base_from_calculate.go

@@ -191,6 +191,8 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 	}
 	edbInfoIdStr := strconv.Itoa(edbInfoId)
 	existDataMap := make(map[string]string)
+
+	removeDateList := make([]string, 0) //需要移除的日期
 	for sk, sv := range saveDataMap {
 		fmt.Println(sk, sv)
 		formulaStr = strings.ToUpper(formulaStr)
@@ -200,6 +202,11 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 			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
@@ -234,6 +241,7 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 			}
 		}
 	}
+
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = o.Raw(addSql).Exec()
@@ -242,6 +250,20 @@ func RefreshAllCalculate(edbInfoIdArr []*EdbInfo, edbInfoId, source int, edbCode
 			return
 		}
 	}
+
+	if len(removeDateList) > 0 {
+		removeDateStr := strings.Join(removeDateList, `","`)
+		removeDateStr = `"` + removeDateStr + `"`
+		//如果拼接指标变更了,那么需要删除所有的指标数据
+		tableName := GetEdbDataTableName(source)
+		sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (%s) `, tableName, removeDateStr)
+
+		_, err = o.Raw(sql, edbInfoId).Exec()
+		if err != nil {
+			err = fmt.Errorf("删除计算失败的计算指标数据失败,Err:" + err.Error())
+			return
+		}
+	}
 	return
 }