Browse Source

fix:update自定义分析时,调整数据比对的逻辑

Roc 1 year ago
parent
commit
093c196e61
2 changed files with 56 additions and 9 deletions
  1. 8 1
      controllers/base_from_calculate.go
  2. 48 8
      models/edb_data_calculate_zdyfx.go

+ 8 - 1
controllers/base_from_calculate.go

@@ -1939,19 +1939,26 @@ func (this *CalculateController) ResetCustomAnalysisData() {
 	if err != nil {
 		br.Msg = "参数解析异常!"
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		br.IsSendEmail = false
 		return
 	}
 
 	if req.EdbInfoId <= 0 {
 		br.Msg = "请选择指标"
+		br.ErrMsg = br.Msg
+		br.IsSendEmail = false
 		return
 	}
 	if len(req.DateList) <= 0 {
 		br.Msg = "请传入日期序列"
+		br.ErrMsg = br.Msg
+		br.IsSendEmail = false
 		return
 	}
 	if len(req.DataList) <= 0 {
 		br.Msg = "请传入数据序列"
+		br.ErrMsg = br.Msg
+		br.IsSendEmail = false
 		return
 	}
 
@@ -1973,7 +1980,7 @@ func (this *CalculateController) ResetCustomAnalysisData() {
 		if errMsg != `` {
 			br.Msg = errMsg
 		}
-		br.Msg = "更新数据失败 Err:" + err.Error()
+		br.ErrMsg = "更新数据失败 Err:" + err.Error()
 		return
 	}
 	if edbInfo == nil {

+ 48 - 8
models/edb_data_calculate_zdyfx.go

@@ -181,6 +181,12 @@ func (obj CustomAnalysis) GetEdbType() int {
 	return utils.CALCULATE_EDB_TYPE
 }
 
+// UpdateEdbDataStr 数据更新结构体
+type UpdateEdbDataStr struct {
+	Value    string `description:"数据对应的最新值"`
+	DataTime string `description:"数据对应的日期"`
+}
+
 func (obj CustomAnalysis) refresh(to orm.TxOrmer, edbInfo *EdbInfo, dateList []string, dataList []float64) (err error) {
 	edbInfoId := edbInfo.EdbInfoId
 	dataTableName := GetEdbDataTableName(edbInfo.Source)
@@ -207,8 +213,19 @@ func (obj CustomAnalysis) refresh(to orm.TxOrmer, edbInfo *EdbInfo, dateList []s
 	}
 	needAddDateMap := make(map[time.Time]int)
 
+	var isAdd, isUpdate bool
 	addSql := ` INSERT INTO ` + dataTableName + `(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
-	var isAdd bool
+
+	updateEdbDataStrList := make([]UpdateEdbDataStr, 0)
+	updateSql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+	updateSql = fmt.Sprintf(updateSql, dataTableName)
+	p, err := to.Raw(updateSql).Prepare()
+	if err != nil {
+		return
+	}
+	defer func() {
+		_ = p.Close()
+	}()
 
 	for i, currDateStr := range dateList {
 		currVal := dataList[i] // 当前日期对应的值
@@ -226,14 +243,21 @@ func (obj CustomAnalysis) refresh(to orm.TxOrmer, edbInfo *EdbInfo, dateList []s
 		if ok {
 			//校验待删除日期数据里面是否存在该元素,如果存在的话,那么移除该日期
 			delete(removeDataTimeMap, currDateStr)
+			existValDec, _ := decimal.NewFromString(existVal)
+			existVal = existValDec.Round(4).String()
 
 			if existVal != saveValue {
-				sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
-				sql = fmt.Sprintf(sql, dataTableName)
-				_, err = to.Raw(sql, saveValue, edbInfoId, currDateStr).Exec()
-				if err != nil {
-					return
-				}
+				isUpdate = true
+				updateEdbDataStrList = append(updateEdbDataStrList, UpdateEdbDataStr{
+					Value:    saveValue,
+					DataTime: currDateStr,
+				})
+				//sql := ` UPDATE %s SET value=?,modify_time=NOW() WHERE edb_info_id=? AND data_time=? `
+				//sql = fmt.Sprintf(sql, dataTableName)
+				//_, err = to.Raw(sql, saveValue, edbInfoId, currDateStr).Exec()
+				//if err != nil {
+				//	return
+				//}
 			}
 
 			continue
@@ -267,6 +291,7 @@ func (obj CustomAnalysis) refresh(to orm.TxOrmer, edbInfo *EdbInfo, dateList []s
 		}
 	}
 
+	// 添加指标数据
 	if isAdd {
 		addSql = strings.TrimRight(addSql, ",")
 		_, err = to.Raw(addSql).Exec()
@@ -275,6 +300,21 @@ func (obj CustomAnalysis) refresh(to orm.TxOrmer, edbInfo *EdbInfo, dateList []s
 			return
 		}
 	}
+
+	// 更新指标数据
+	if isUpdate {
+		for _, v := range updateEdbDataStrList {
+			if v.Value == "" || v.DataTime == "" {
+				continue
+			}
+			_, err = p.Exec(v.Value, edbInfoId, v.DataTime)
+			if err != nil {
+				fmt.Println(reflect.TypeOf(obj).Name(), " update data Err", err.Error())
+				return
+			}
+		}
+	}
+
 	return
 }
 
@@ -288,7 +328,7 @@ func (obj CustomAnalysis) ResetData(edbInfo *EdbInfo, dateList []string, dataLis
 	defer func() {
 		if err != nil {
 			_ = to.Rollback()
-			fmt.Println(reflect.TypeOf(obj).Name(), ";Add,Err:"+err.Error())
+			fmt.Println(reflect.TypeOf(obj).Name(), ";ResetData,Err:"+err.Error())
 		} else {
 			_ = to.Commit()
 		}