Browse Source

fix:修复拟合残差结束日期超出数据日期的bug,优化提示文案

Roc 1 year ago
parent
commit
af19bbf2b7
2 changed files with 42 additions and 25 deletions
  1. 6 3
      controllers/base_from_calculate.go
  2. 36 22
      models/edb_data_calculate_nhcc.go

+ 6 - 3
controllers/base_from_calculate.go

@@ -775,7 +775,7 @@ func (this *CalculateController) BatchSave() {
 			br.ErrMsg = "两个指标不允许为同一个"
 			return
 		}
-		edbInfo, err = models.AddCalculateNhcc(&req, fromEdbInfo, secondEdbInfo, edbCode, uniqueCode, nhccDate, sysUserId, sysUserName)
+		edbInfo, err, errMsg = models.AddCalculateNhcc(&req, fromEdbInfo, secondEdbInfo, edbCode, uniqueCode, nhccDate, sysUserId, sysUserName)
 	case utils.DATA_SOURCE_CALCULATE_JP:
 		if !models.CheckFrequency(fromEdbInfo.Frequency, req.Frequency) {
 			br.Msg = "频度异常,不允许低频降频到高频"
@@ -1188,7 +1188,7 @@ func (this *CalculateController) BatchEdit() {
 			br.ErrMsg = "两个指标不允许为同一个"
 			return
 		}
-		err = models.EditCalculateNhcc(&req, edbInfo, fromEdbInfo, secondEdbInfo, nhccDate)
+		err, errMsg = models.EditCalculateNhcc(&req, edbInfo, fromEdbInfo, secondEdbInfo, nhccDate)
 	case utils.DATA_SOURCE_CALCULATE_JP:
 		if !models.CheckFrequency(fromEdbInfo.Frequency, req.Frequency) {
 			br.Msg = "频度异常,不允许低频降频到高频"
@@ -1904,9 +1904,12 @@ func (this *CalculateController) CalculateComputeCorrelation() {
 		br.ErrMsg = "两个指标不允许为同一个"
 		return
 	}
-	rVal, err := models.CalculateComputeCorrelation(&req, fromEdbInfo, secondEdbInfo, nhccDate)
+	rVal, err, errMsg := models.CalculateComputeCorrelation(&req, fromEdbInfo, secondEdbInfo, nhccDate)
 	if err != nil {
 		br.Msg = "计算失败"
+		if errMsg != `` {
+			br.Msg = errMsg
+		}
 		br.ErrMsg = "计算失败,ERR:" + err.Error()
 		return
 	}

+ 36 - 22
models/edb_data_calculate_nhcc.go

@@ -31,7 +31,7 @@ type NhccDate struct {
 }
 
 // AddCalculateNhcc 新增拟合残差数据
-func AddCalculateNhcc(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, edbCode, uniqueCode string, nhccDate NhccDate, sysUserId int, sysUserRealName string) (edbInfo *EdbInfo, err error) {
+func AddCalculateNhcc(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, edbCode, uniqueCode string, nhccDate NhccDate, sysUserId int, sysUserRealName string) (edbInfo *EdbInfo, err error, errMsg string) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -163,13 +163,13 @@ func AddCalculateNhcc(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdb
 	}
 
 	//拼接数据
-	err = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
+	err, errMsg = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
 
 	return
 }
 
 // EditCalculateNhcc 编辑拟合残差数据
-func EditCalculateNhcc(req *EdbInfoCalculateBatchEditReq, edbInfo, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (err error) {
+func EditCalculateNhcc(req *EdbInfoCalculateBatchEditReq, edbInfo, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (err error, errMsg string) {
 	o := orm.NewOrm()
 	to, err := o.Begin()
 	if err != nil {
@@ -350,7 +350,7 @@ func EditCalculateNhcc(req *EdbInfoCalculateBatchEditReq, edbInfo, firstEdbInfo,
 			return
 		}
 
-		err = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
+		err, errMsg = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
 	}
 
 	return
@@ -405,13 +405,13 @@ func RefreshAllCalculateNhcc(edbInfo *EdbInfo) (err error) {
 		EndDate:   endDate,
 	}
 	// 刷新数据
-	err = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
+	err, _ = refreshAllCalculateNhcc(to, edbInfo, existItemA, existItemB, nhccDate)
 
 	return
 }
 
 // refreshAllCalculateNhcc 刷新所有 拟合残差 数据
-func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (err error) {
+func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (err error, errMsg string) {
 	//查询当前指标现有的数据
 	var condition string
 	var pars []interface{}
@@ -422,7 +422,7 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
 	sql := ` SELECT * FROM edb_data_calculate_nhcc WHERE edb_info_id=? ORDER BY data_time DESC `
 	_, err = to.Raw(sql, edbInfo.EdbInfoId).QueryRows(&dataList)
 	if err != nil {
-		return err
+		return
 	}
 	var dateArr []string
 	dataMap := make(map[string]*EdbDataCalculateNhcc)
@@ -505,7 +505,10 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
 	//	}
 	//}
 
-	aDataList, secondDataList, aDataMap, bDataMap, err := getNhccData(to, existItemA, existItemB, nhccDate)
+	aDataList, secondDataList, aDataMap, bDataMap, nhccDate, err, errMsg := getNhccData(to, existItemA, existItemB, nhccDate)
+	if err != nil {
+		return
+	}
 
 	// 计算线性方程公式
 	var a, b float64
@@ -515,12 +518,14 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
 			dateStr := i.Format(utils.FormatDate)
 			xValue, ok := aDataMap[dateStr]
 			if !ok {
-				err = errors.New("指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
+				errMsg = "指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
+				err = errors.New(errMsg)
 				return
 			}
 			yValue, ok := bDataMap[dateStr]
 			if !ok {
-				err = errors.New("指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
+				errMsg = "指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
+				err = errors.New(errMsg)
 				return
 			}
 			tmpCoordinate := utils.Coordinate{
@@ -533,7 +538,8 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
 	}
 
 	if math.IsNaN(a) || math.IsNaN(b) {
-		err = errors.New("线性方程公式生成失败")
+		errMsg = "线性方程公式生成失败"
+		err = errors.New(errMsg)
 		return
 	}
 	//fmt.Println("a:", a, ";======b:", b)
@@ -645,7 +651,7 @@ func refreshAllCalculateNhcc(to orm.TxOrmer, edbInfo *EdbInfo, existItemA, exist
 }
 
 // CalculateComputeCorrelation 计算相关性结果
-func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (r float64, err error) {
+func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo, secondEdbInfo *EdbInfo, nhccDate NhccDate) (r float64, err error, errMsg string) {
 	var existItemA, existItemB *EdbInfoCalculateMapping
 	//第一个指标
 	{
@@ -692,7 +698,10 @@ func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo
 		}
 	}()
 	// 获取相关数据
-	_, _, aDataMap, bDataMap, err := getNhccData(to, existItemA, existItemB, nhccDate)
+	_, _, aDataMap, bDataMap, nhccDate, err, errMsg := getNhccData(to, existItemA, existItemB, nhccDate)
+	if err != nil {
+		return
+	}
 
 	// 计算相关性
 	coordinateData := make([]utils.Coordinate, 0)
@@ -700,12 +709,14 @@ func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo
 		dateStr := i.Format(utils.FormatDate)
 		xValue, ok := aDataMap[dateStr]
 		if !ok {
-			err = errors.New("指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
+			errMsg = "指标A日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
+			err = errors.New(errMsg)
 			return
 		}
 		yValue, ok := bDataMap[dateStr]
 		if !ok {
-			err = errors.New("指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败")
+			errMsg = "指标B日期:" + dateStr + "数据异常,导致计算线性方程公式失败"
+			err = errors.New(errMsg)
 			return
 		}
 		tmpCoordinate := utils.Coordinate{
@@ -720,7 +731,8 @@ func CalculateComputeCorrelation(req *EdbInfoCalculateBatchSaveReq, firstEdbInfo
 }
 
 // getNhccData 获取拟合残差需要的数据
-func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (aDataList []EdbInfoSearchData, secondDataList []*EdbInfoSearchData, aDataMap, bDataMap map[string]float64, err error) {
+func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping, nhccDate NhccDate) (aDataList []EdbInfoSearchData, secondDataList []*EdbInfoSearchData, aDataMap, bDataMap map[string]float64, newNhccDate NhccDate, err error, errMsg string) {
+	newNhccDate = nhccDate
 	//第一个指标
 	aDataList = make([]EdbInfoSearchData, 0)
 	aDataMap = make(map[string]float64)
@@ -761,11 +773,13 @@ func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping
 	}
 
 	if len(aDataList) <= 0 {
-		err = errors.New("指标A没有数据")
+		errMsg = "指标A没有数据"
+		err = errors.New(errMsg)
 		return
 	}
 	if len(bDataList) <= 0 {
-		err = errors.New("指标B没有数据")
+		errMsg = "指标B没有数据"
+		err = errors.New(errMsg)
 		return
 	}
 	// 拟合残差计算的结束日期判断
@@ -777,8 +791,8 @@ func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping
 			return
 		}
 		// 如果A指标的最新数据日期早于拟合残差的结束日期,那么就用A指标的最新数据日期
-		if tmpEndDate.Before(nhccDate.EndDate) {
-			nhccDate.EndDate = tmpEndDate
+		if tmpEndDate.Before(newNhccDate.EndDate) {
+			newNhccDate.EndDate = tmpEndDate
 		}
 		endBData := bDataList[len(bDataList)-1]
 		tmpEndDate, tmpErr = time.ParseInLocation(utils.FormatDate, endBData.DataTime, time.Local)
@@ -787,8 +801,8 @@ func getNhccData(to orm.TxOrmer, existItemA, existItemB *EdbInfoCalculateMapping
 			return
 		}
 		// 如果B指标的最新数据日期早于拟合残差的结束日期,那么就用A指标的最新数据日期
-		if tmpEndDate.Before(nhccDate.EndDate) {
-			nhccDate.EndDate = tmpEndDate
+		if tmpEndDate.Before(newNhccDate.EndDate) {
+			newNhccDate.EndDate = tmpEndDate
 		}
 	}