|
@@ -2,10 +2,12 @@ package models
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
+ "eta_gn/eta_index_lib/global"
|
|
|
"eta_gn/eta_index_lib/utils"
|
|
|
"fmt"
|
|
|
- "github.com/beego/beego/v2/client/orm"
|
|
|
+
|
|
|
"github.com/shopspring/decimal"
|
|
|
+ "gorm.io/gorm"
|
|
|
"reflect"
|
|
|
"strconv"
|
|
|
"strings"
|
|
@@ -21,27 +23,21 @@ type PredictStandardBase struct {
|
|
|
func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMapping, predictEdbConfList []*PredictEdbConf, calculateRuleMap map[int]CalculateRule) (err error, errMsg string) {
|
|
|
var latestDateStr string
|
|
|
var latestValue float64
|
|
|
- o := orm.NewOrm()
|
|
|
- tx, err := o.Begin()
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
+ to := global.DEFAULT_DmSQL.Begin()
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
- tx.Rollback()
|
|
|
+ to.Rollback()
|
|
|
} else {
|
|
|
- err = tx.Commit()
|
|
|
-
|
|
|
+ to.Commit()
|
|
|
// 更新指标最大最小值
|
|
|
go UnifiedModifyPredictEdbInfoMaxAndMinInfo(item, latestDateStr, latestValue)
|
|
|
}
|
|
|
}()
|
|
|
// 新增预测指标
|
|
|
- edbInfoId, err := tx.Insert(item)
|
|
|
+ err = to.Create(item).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
- item.EdbInfoId = int(edbInfoId)
|
|
|
|
|
|
// 新增预测指标的关联关系
|
|
|
lenCalculateMapping := len(calculateMappingList)
|
|
@@ -50,7 +46,7 @@ func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMappin
|
|
|
calculateMappingItem.EdbInfoId = item.EdbInfoId
|
|
|
calculateMappingItem.EdbCode = item.EdbCode
|
|
|
}
|
|
|
- _, err = tx.InsertMulti(lenCalculateMapping, calculateMappingList)
|
|
|
+ err = to.CreateInBatches(calculateMappingList, 500).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -61,12 +57,12 @@ func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMappin
|
|
|
// 新增预测指标配置
|
|
|
for k, v := range predictEdbConfList {
|
|
|
v.PredictEdbInfoId = item.EdbInfoId
|
|
|
- configId, tmpErr := tx.Insert(v)
|
|
|
+ tmpErr := to.Create(v).Error
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
|
}
|
|
|
- v.ConfigId = int(configId)
|
|
|
+ //v.ConfigId = int(configId)
|
|
|
|
|
|
// 每次规则计算的时候,产生的临时数据
|
|
|
resultDataList := make([]*EdbInfoSearchData, 0)
|
|
@@ -77,7 +73,7 @@ func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMappin
|
|
|
calculateRule.EdbInfoId = v.PredictEdbInfoId
|
|
|
|
|
|
// 指标与规则的动态数据生成入库
|
|
|
- resultDataList, err = CalculateByRuleBy9(tx, calculateRule)
|
|
|
+ resultDataList, err = CalculateByRuleBy9(to, calculateRule)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -89,7 +85,7 @@ func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMappin
|
|
|
vv.EdbInfoId = item.EdbInfoId
|
|
|
vv.ConfigId = v.ConfigId
|
|
|
}
|
|
|
- _, err = tx.InsertMulti(lenTrendsCalculateMapping, calculateRule.TrendsCalculateMappingList)
|
|
|
+ err = to.CreateInBatches(calculateRule.TrendsCalculateMappingList, 500).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -100,7 +96,7 @@ func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMappin
|
|
|
calculateRule.EdbInfoId = v.PredictEdbInfoId
|
|
|
|
|
|
// 指标与规则的动态数据(拟合数据)生成入库
|
|
|
- err, errMsg = CalculateByRuleByRuleLineNh(tx, *item, predictEdbConfAndDataList, *v)
|
|
|
+ err, errMsg = CalculateByRuleByRuleLineNh(to, *item, predictEdbConfAndDataList, *v)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -112,7 +108,7 @@ func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMappin
|
|
|
vv.EdbInfoId = item.EdbInfoId
|
|
|
vv.ConfigId = v.ConfigId
|
|
|
}
|
|
|
- _, err = tx.InsertMulti(lenTrendsCalculateMapping, calculateRule.TrendsCalculateMappingList)
|
|
|
+ err = to.CreateInBatches(calculateRule.TrendsCalculateMappingList, 500).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -138,7 +134,7 @@ func AddPredictEdb(item *EdbInfo, calculateMappingList []*EdbInfoCalculateMappin
|
|
|
|
|
|
// 重新预测数据
|
|
|
obj := new(PredictStandardBase)
|
|
|
- latestDateStr, latestValue, err, errMsg = obj.refresh(tx, item, predictEdbConfAndDataList, item.EdbCode, "")
|
|
|
+ latestDateStr, latestValue, err, errMsg = obj.refresh(to, item, predictEdbConfAndDataList, item.EdbCode, "")
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -148,51 +144,46 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
var latestDateStr string
|
|
|
var latestValue float64
|
|
|
|
|
|
- o := orm.NewOrm()
|
|
|
- tx, err := o.Begin()
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
+ to := global.DEFAULT_DmSQL.Begin()
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
- tx.Rollback()
|
|
|
+ to.Rollback()
|
|
|
} else {
|
|
|
- err = tx.Commit()
|
|
|
-
|
|
|
+ to.Commit()
|
|
|
// 更新指标最大最小值
|
|
|
go UnifiedModifyPredictEdbInfoMaxAndMinInfo(edbInfo, latestDateStr, latestValue)
|
|
|
}
|
|
|
}()
|
|
|
// 修改预测指标
|
|
|
- _, err = tx.Update(edbInfo, updateEdbInfoCol...)
|
|
|
+ err = to.Model(edbInfo).Select(updateEdbInfoCol).Updates(edbInfo).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 先删除原有的预测指标 与 其他指标的 关联关系
|
|
|
sql := ` DELETE FROM edb_info_calculate_mapping WHERE edb_info_id = ?`
|
|
|
- _, err = tx.Raw(sql, edbInfo.EdbInfoId).Exec()
|
|
|
+ err = to.Exec(sql, edbInfo.EdbInfoId).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 先删除原有的配置
|
|
|
sql = ` DELETE FROM predict_edb_conf WHERE predict_edb_info_id = ?`
|
|
|
- _, err = tx.Raw(sql, edbInfo.EdbInfoId).Exec()
|
|
|
+ err = to.Exec(sql, edbInfo.EdbInfoId).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 删除基础预测指标 规则配置 与 其他指标的 关联关系
|
|
|
sql = ` DELETE FROM predict_edb_conf_calculate_mapping WHERE edb_info_id = ?`
|
|
|
- _, err = tx.Raw(sql, edbInfo.EdbInfoId).Exec()
|
|
|
+ err = to.Exec(sql, edbInfo.EdbInfoId).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// 删除基础预测指标 规则配置 生成的动态数据值
|
|
|
sql = ` DELETE FROM predict_edb_rule_data WHERE edb_info_id = ?`
|
|
|
- _, err = tx.Raw(sql, edbInfo.EdbInfoId).Exec()
|
|
|
+ err = to.Exec(sql, edbInfo.EdbInfoId).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -204,7 +195,7 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
calculateMappingItem.EdbInfoId = edbInfo.EdbInfoId
|
|
|
calculateMappingItem.EdbCode = edbInfo.EdbCode
|
|
|
}
|
|
|
- _, err = tx.InsertMulti(lenCalculateMapping, calculateMappingList)
|
|
|
+ err = to.CreateInBatches(calculateMappingList, 500).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -215,12 +206,11 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
|
|
|
// 新增预测指标配置
|
|
|
for confIndex, v := range predictEdbConfList {
|
|
|
- configId, tmpErr := tx.Insert(v)
|
|
|
+ tmpErr := to.Create(v).Error
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
|
}
|
|
|
- v.ConfigId = int(configId)
|
|
|
// 每次规则计算的时候,产生的临时数据
|
|
|
resultDataList := make([]*EdbInfoSearchData, 0)
|
|
|
|
|
@@ -231,7 +221,7 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
calculateRule.EdbInfoId = v.PredictEdbInfoId
|
|
|
|
|
|
// 指标与规则的动态数据生成入库
|
|
|
- resultDataList, err = CalculateByRuleBy9(tx, calculateRule)
|
|
|
+ resultDataList, err = CalculateByRuleBy9(to, calculateRule)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -243,7 +233,7 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
vv.EdbInfoId = edbInfo.EdbInfoId
|
|
|
vv.ConfigId = v.ConfigId
|
|
|
}
|
|
|
- _, err = tx.InsertMulti(lenTrendsCalculateMapping, calculateRule.TrendsCalculateMappingList)
|
|
|
+ err = to.CreateInBatches(calculateRule.TrendsCalculateMappingList, 500).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -254,7 +244,7 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
calculateRule.EdbInfoId = v.PredictEdbInfoId
|
|
|
|
|
|
// 指标与规则的动态数据(拟合数据)生成入库
|
|
|
- err, errMsg = CalculateByRuleByRuleLineNh(tx, *edbInfo, predictEdbConfAndDataList, *v)
|
|
|
+ err, errMsg = CalculateByRuleByRuleLineNh(to, *edbInfo, predictEdbConfAndDataList, *v)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -266,7 +256,7 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
vv.EdbInfoId = edbInfo.EdbInfoId
|
|
|
vv.ConfigId = v.ConfigId
|
|
|
}
|
|
|
- _, err = tx.InsertMulti(lenTrendsCalculateMapping, calculateRule.TrendsCalculateMappingList)
|
|
|
+ err = to.CreateInBatches(calculateRule.TrendsCalculateMappingList, 500).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -294,7 +284,7 @@ func EditPredictEdb(edbInfo *EdbInfo, updateEdbInfoCol []string, calculateMappin
|
|
|
|
|
|
// 重新预测数据
|
|
|
obj := new(PredictStandardBase)
|
|
|
- latestDateStr, latestValue, err, errMsg = obj.refresh(tx, edbInfo, predictEdbConfAndDataList, edbInfo.EdbCode, "")
|
|
|
+ latestDateStr, latestValue, err, errMsg = obj.refresh(to, edbInfo, predictEdbConfAndDataList, edbInfo.EdbCode, "")
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -332,17 +322,12 @@ func (obj PredictStandardBase) Refresh(params RefreshParams) (latestDateStr stri
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- o := orm.NewOrm()
|
|
|
- to, err := o.Begin()
|
|
|
- if err != nil {
|
|
|
- return
|
|
|
- }
|
|
|
+ to := global.DEFAULT_DmSQL.Begin()
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
|
- _ = to.Rollback()
|
|
|
- fmt.Println(reflect.TypeOf(obj).Name(), ";Refresh,Err:"+err.Error())
|
|
|
+ to.Rollback()
|
|
|
} else {
|
|
|
- _ = to.Commit()
|
|
|
+ to.Commit()
|
|
|
}
|
|
|
}()
|
|
|
|
|
@@ -362,7 +347,7 @@ func (obj PredictStandardBase) GetSourceName() string {
|
|
|
return utils.DATA_SOURCE_NAME_PREDICT
|
|
|
}
|
|
|
|
|
|
-func (obj PredictStandardBase) refresh(to orm.TxOrmer, edbInfo *EdbInfo, predictEdbConfAndDataList []*PredictEdbConfAndData, edbCode, startDate string) (latestDateStr string, latestValue float64, err error, errMsg string) {
|
|
|
+func (obj PredictStandardBase) refresh(to *gorm.DB, edbInfo *EdbInfo, predictEdbConfAndDataList []*PredictEdbConfAndData, edbCode, startDate string) (latestDateStr string, latestValue float64, err error, errMsg string) {
|
|
|
edbInfoId := edbInfo.EdbInfoId
|
|
|
dataTableName := GetEdbDataTableName(edbInfo.Source, edbInfo.SubSource)
|
|
|
edbInfoIdStr := strconv.Itoa(edbInfoId)
|
|
@@ -378,7 +363,7 @@ func (obj PredictStandardBase) refresh(to orm.TxOrmer, edbInfo *EdbInfo, predict
|
|
|
existDataList := make([]*EdbData, 0)
|
|
|
sql := `SELECT * FROM %s WHERE edb_info_id=? `
|
|
|
sql = fmt.Sprintf(sql, dataTableName)
|
|
|
- _, err = to.Raw(sql, edbInfoId).QueryRows(&existDataList)
|
|
|
+ err = to.Raw(sql, edbInfoId).Scan(&existDataList).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -419,7 +404,7 @@ func (obj PredictStandardBase) refresh(to orm.TxOrmer, edbInfo *EdbInfo, predict
|
|
|
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()
|
|
|
+ err = to.Exec(sql, saveValue, edbInfoId, currDateStr).Error
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
@@ -447,7 +432,7 @@ func (obj PredictStandardBase) refresh(to orm.TxOrmer, edbInfo *EdbInfo, predict
|
|
|
removeNum := len(removeDateList)
|
|
|
if removeNum > 0 {
|
|
|
sql := fmt.Sprintf(` DELETE FROM %s WHERE edb_info_id = ? and data_time in (`+utils.GetOrmInReplace(removeNum)+`) `, dataTableName)
|
|
|
- _, err = to.Raw(sql, edbInfo.EdbInfoId, removeDateList).Exec()
|
|
|
+ err = to.Exec(sql, edbInfo.EdbInfoId, removeDateList).Error
|
|
|
if err != nil {
|
|
|
fmt.Println(reflect.TypeOf(obj).Name(), " add data ;delete Err", err.Error())
|
|
|
err = fmt.Errorf("删除不存在的指标数据失败,Err:" + err.Error())
|
|
@@ -458,7 +443,7 @@ func (obj PredictStandardBase) refresh(to orm.TxOrmer, edbInfo *EdbInfo, predict
|
|
|
|
|
|
if isAdd {
|
|
|
addSql = strings.TrimRight(addSql, ",")
|
|
|
- _, err = to.Raw(addSql).Exec()
|
|
|
+ err = to.Exec(addSql).Error
|
|
|
if err != nil {
|
|
|
fmt.Println(reflect.TypeOf(obj).Name(), " add data Err", err.Error())
|
|
|
return
|
|
@@ -530,15 +515,15 @@ func RefreshPredictStandardBaseByGeneralEdbInfoId(sourceEdbInfoId int) {
|
|
|
utils.FileLog.Info("RefreshPredictStandardBaseByGeneralEdbInfoId更新失败,来源ID: ErrMsg:" + strings.Join(errList, "\n"))
|
|
|
}
|
|
|
}()
|
|
|
- o := orm.NewOrm()
|
|
|
+
|
|
|
var list []*PredictEdbConf
|
|
|
sql := ` SELECT * FROM predict_edb_conf WHERE source_edb_info_id=? `
|
|
|
- total, err := o.Raw(sql, sourceEdbInfoId).QueryRows(&list)
|
|
|
+ err := global.DEFAULT_DmSQL.Raw(sql, sourceEdbInfoId).Scan(&list).Error
|
|
|
if err != nil {
|
|
|
errList = append(errList, fmt.Sprintf("根据来源换指标id获取配置项失败,来源指标ID:%d;err:%s", sourceEdbInfoId, err.Error()))
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
+ total := len(list)
|
|
|
if total > 0 {
|
|
|
idList := make([]int, 0)
|
|
|
for _, v := range list {
|