package models import ( "errors" "eta/eta_index_lib/utils" "fmt" "github.com/beego/beego/v2/client/orm" "github.com/shopspring/decimal" "strconv" "strings" ) type PredictEdbStatic struct { } // AddStaticPredictEdbInfoReq 添加预测指标静态指标请求 type AddStaticPredictEdbInfoReq struct { ClassifyId int `description:"分类id"` SourceEdbInfoId int `description:"来源指标id"` EdbName string `description:"指标名称"` Frequency string `description:"频率"` Unit string `description:"单位"` AdminId int `description:"添加人id"` AdminName string `description:"添加人名称"` } // AddPredictStaticEdb 添加预测指标 // edbInfo, calculateMappingList, predictEdbConfList,calculateRule9List,trendsMappingList func AddPredictStaticEdb(edbInfo, sourceEdbInfoItem *EdbInfo, calculateMappingList []*EdbInfoCalculateMapping) (err error, errMsg string) { o := orm.NewOrm() tx, err := o.Begin() if err != nil { return } defer func() { if err != nil { tx.Rollback() } else { err = tx.Commit() } }() // 新增预测指标 edbInfoId, err := tx.Insert(edbInfo) if err != nil { return } edbInfo.EdbInfoId = int(edbInfoId) // 新增预测指标的关联关系 lenCalculateMapping := len(calculateMappingList) if lenCalculateMapping > 0 { for _, calculateMappingItem := range calculateMappingList { calculateMappingItem.EdbInfoId = edbInfo.EdbInfoId calculateMappingItem.EdbCode = edbInfo.EdbCode } _, err = tx.InsertMulti(lenCalculateMapping, calculateMappingList) if err != nil { return } } // 新增预测指标数据 dataTableName := GetEdbDataTableName(edbInfo.Source, edbInfo.SubSource) edbInfoIdStr := strconv.Itoa(int(edbInfoId)) //获取指标数据(实际已生成) fromDataList, err := GetEdbDataListAll(sourceEdbInfoItem.Source, sourceEdbInfoItem.SubSource, FindEdbDataListAllCond{ EdbInfoId: sourceEdbInfoItem.EdbInfoId, StartDataTime: "", StartDataTimeCond: ">=", }, 1) if err != nil { err = fmt.Errorf(`获取原指标数据失败:%v`, err) return } addSql := ` INSERT INTO ` + dataTableName + `(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values ` count := 0 for _, tmpData := range fromDataList { currDateStr := tmpData.DataTime timeStr := fmt.Sprintf("%d", tmpData.DataTimestamp) // 当前的实际值 saveValue := decimal.NewFromFloat(tmpData.Value).Round(4).String() addSql += GetAddSql(edbInfoIdStr, edbInfo.EdbCode, currDateStr, timeStr, saveValue) count += 1 if count >= 500 { addSql = strings.TrimRight(addSql, ",") _, err = tx.Raw(addSql).Exec() if err != nil { err = fmt.Errorf(`新增预测指标数据失败:%v`, err) return } addSql = ` INSERT INTO ` + dataTableName + `(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values ` count = 0 } } if count > 0 { addSql = strings.TrimRight(addSql, ",") _, err = tx.Raw(addSql).Exec() if err != nil { err = fmt.Errorf(`新增预测指标数据失败:%v`, err) return } } return } // Add 添加 func (obj PredictEdbStatic) Add(params BatchSaveCalculateBatchParams) (edbInfo *EdbInfo, latestDateStr string, latestValue float64, err error, errMsg string) { err = errors.New("暂不支持该方法") return } // Edit 编辑 func (obj PredictEdbStatic) Edit(params BatchSaveCalculateBatchParams) (latestDateStr string, latestValue float64, err error, errMsg string) { err = errors.New("暂不支持该方法") return } // Refresh 刷新 func (obj PredictEdbStatic) Refresh(params RefreshParams) (latestDateStr string, latestValue float64, err error, errMsg string) { return } // GetSource 获取来源编码id func (obj PredictEdbStatic) GetSource() int { return utils.DATA_SOURCE_PREDICT_STATIC } // GetSourceName 获取来源名称 func (obj PredictEdbStatic) GetSourceName() string { return utils.DATA_SOURCE_NAME_PREDICT }