123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package models
- import (
- "fmt"
- "github.com/beego/beego/v2/client/orm"
- "github.com/shopspring/decimal"
- "strconv"
- "strings"
- )
- // 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, predictEdbConfList []*PredictEdbConf) (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
- }
- }
- if len(predictEdbConfList) > 0 {
- // 新增预测指标配置
- for _, v := range predictEdbConfList {
- v.PredictEdbInfoId = edbInfo.EdbInfoId
- _, tmpErr := tx.Insert(v)
- if tmpErr != nil {
- err = fmt.Errorf(`新增预测指标配置失败:%v`, tmpErr)
- 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
- }
|