predict_edb_data_static.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package models
  2. import (
  3. "errors"
  4. "eta/eta_index_lib/utils"
  5. "fmt"
  6. "github.com/beego/beego/v2/client/orm"
  7. "github.com/shopspring/decimal"
  8. "strconv"
  9. "strings"
  10. )
  11. type PredictEdbStatic struct {
  12. }
  13. // AddStaticPredictEdbInfoReq 添加预测指标静态指标请求
  14. type AddStaticPredictEdbInfoReq struct {
  15. ClassifyId int `description:"分类id"`
  16. SourceEdbInfoId int `description:"来源指标id"`
  17. EdbName string `description:"指标名称"`
  18. Frequency string `description:"频率"`
  19. Unit string `description:"单位"`
  20. AdminId int `description:"添加人id"`
  21. AdminName string `description:"添加人名称"`
  22. }
  23. // AddPredictStaticEdb 添加预测指标
  24. // edbInfo, calculateMappingList, predictEdbConfList,calculateRule9List,trendsMappingList
  25. func AddPredictStaticEdb(edbInfo, sourceEdbInfoItem *EdbInfo, calculateMappingList []*EdbInfoCalculateMapping) (err error, errMsg string) {
  26. o := orm.NewOrm()
  27. tx, err := o.Begin()
  28. if err != nil {
  29. return
  30. }
  31. defer func() {
  32. if err != nil {
  33. tx.Rollback()
  34. } else {
  35. err = tx.Commit()
  36. }
  37. }()
  38. // 新增预测指标
  39. edbInfoId, err := tx.Insert(edbInfo)
  40. if err != nil {
  41. return
  42. }
  43. edbInfo.EdbInfoId = int(edbInfoId)
  44. // 新增预测指标的关联关系
  45. lenCalculateMapping := len(calculateMappingList)
  46. if lenCalculateMapping > 0 {
  47. for _, calculateMappingItem := range calculateMappingList {
  48. calculateMappingItem.EdbInfoId = edbInfo.EdbInfoId
  49. calculateMappingItem.EdbCode = edbInfo.EdbCode
  50. }
  51. _, err = tx.InsertMulti(lenCalculateMapping, calculateMappingList)
  52. if err != nil {
  53. return
  54. }
  55. }
  56. // 新增预测指标数据
  57. dataTableName := GetEdbDataTableName(edbInfo.Source, edbInfo.SubSource)
  58. edbInfoIdStr := strconv.Itoa(int(edbInfoId))
  59. //获取指标数据(实际已生成)
  60. fromDataList, err := GetEdbDataListAll(sourceEdbInfoItem.Source, sourceEdbInfoItem.SubSource, FindEdbDataListAllCond{
  61. EdbInfoId: sourceEdbInfoItem.EdbInfoId,
  62. StartDataTime: "",
  63. StartDataTimeCond: ">=",
  64. }, 1)
  65. if err != nil {
  66. err = fmt.Errorf(`获取原指标数据失败:%v`, err)
  67. return
  68. }
  69. addSql := ` INSERT INTO ` + dataTableName + `(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  70. count := 0
  71. for _, tmpData := range fromDataList {
  72. currDateStr := tmpData.DataTime
  73. timeStr := fmt.Sprintf("%d", tmpData.DataTimestamp)
  74. // 当前的实际值
  75. saveValue := decimal.NewFromFloat(tmpData.Value).Round(4).String()
  76. addSql += GetAddSql(edbInfoIdStr, edbInfo.EdbCode, currDateStr, timeStr, saveValue)
  77. count += 1
  78. if count >= 500 {
  79. addSql = strings.TrimRight(addSql, ",")
  80. _, err = tx.Raw(addSql).Exec()
  81. if err != nil {
  82. err = fmt.Errorf(`新增预测指标数据失败:%v`, err)
  83. return
  84. }
  85. addSql = ` INSERT INTO ` + dataTableName + `(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  86. count = 0
  87. }
  88. }
  89. if count > 0 {
  90. addSql = strings.TrimRight(addSql, ",")
  91. _, err = tx.Raw(addSql).Exec()
  92. if err != nil {
  93. err = fmt.Errorf(`新增预测指标数据失败:%v`, err)
  94. return
  95. }
  96. }
  97. return
  98. }
  99. // Add 添加
  100. func (obj PredictEdbStatic) Add(params BatchSaveCalculateBatchParams) (edbInfo *EdbInfo, latestDateStr string, latestValue float64, err error, errMsg string) {
  101. err = errors.New("暂不支持该方法")
  102. return
  103. }
  104. // Edit 编辑
  105. func (obj PredictEdbStatic) Edit(params BatchSaveCalculateBatchParams) (latestDateStr string, latestValue float64, err error, errMsg string) {
  106. err = errors.New("暂不支持该方法")
  107. return
  108. }
  109. // Refresh 刷新
  110. func (obj PredictEdbStatic) Refresh(params RefreshParams) (latestDateStr string, latestValue float64, err error, errMsg string) {
  111. return
  112. }
  113. // GetSource 获取来源编码id
  114. func (obj PredictEdbStatic) GetSource() int {
  115. return utils.DATA_SOURCE_PREDICT_STATIC
  116. }
  117. // GetSourceName 获取来源名称
  118. func (obj PredictEdbStatic) GetSourceName() string {
  119. return utils.DATA_SOURCE_NAME_PREDICT
  120. }