predict_edb_data_static.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package models
  2. import (
  3. "eta/eta_index_lib/global"
  4. "eta/eta_index_lib/utils"
  5. "fmt"
  6. "github.com/shopspring/decimal"
  7. "strconv"
  8. "strings"
  9. )
  10. // AddStaticPredictEdbInfoReq 添加预测指标静态指标请求
  11. type AddStaticPredictEdbInfoReq struct {
  12. ClassifyId int `description:"分类id"`
  13. SourceEdbInfoId int `description:"来源指标id"`
  14. EdbName string `description:"指标名称"`
  15. Frequency string `description:"频率"`
  16. Unit string `description:"单位"`
  17. AdminId int `description:"添加人id"`
  18. AdminName string `description:"添加人名称"`
  19. }
  20. // AddPredictStaticEdb 添加预测指标
  21. // edbInfo, calculateMappingList, predictEdbConfList,calculateRule9List,trendsMappingList
  22. func AddPredictStaticEdb(edbInfo, sourceEdbInfoItem *EdbInfo, calculateMappingList []*EdbInfoCalculateMapping, predictEdbConfList []*PredictEdbConf) (err error, errMsg string) {
  23. tx := global.DEFAULT_DB.Begin()
  24. defer func() {
  25. if err != nil {
  26. tx.Rollback()
  27. } else {
  28. tx.Commit()
  29. }
  30. }()
  31. // 新增预测指标
  32. err = tx.Create(edbInfo).Error
  33. if err != nil {
  34. return
  35. }
  36. // 新增预测指标的关联关系
  37. lenCalculateMapping := len(calculateMappingList)
  38. if lenCalculateMapping > 0 {
  39. for _, calculateMappingItem := range calculateMappingList {
  40. calculateMappingItem.EdbInfoId = edbInfo.EdbInfoId
  41. calculateMappingItem.EdbCode = edbInfo.EdbCode
  42. }
  43. err = tx.CreateInBatches(calculateMappingList, utils.MultiAddNum).Error
  44. if err != nil {
  45. return
  46. }
  47. }
  48. if len(predictEdbConfList) > 0 {
  49. // 新增预测指标配置
  50. for _, v := range predictEdbConfList {
  51. v.PredictEdbInfoId = edbInfo.EdbInfoId
  52. tmpErr := tx.Create(v).Error
  53. if tmpErr != nil {
  54. err = fmt.Errorf(`新增预测指标配置失败:%v`, tmpErr)
  55. return
  56. }
  57. }
  58. }
  59. // 新增预测指标数据
  60. dataTableName := GetEdbDataTableName(edbInfo.Source, edbInfo.SubSource)
  61. edbInfoIdStr := strconv.Itoa(edbInfo.EdbInfoId)
  62. //获取指标数据(实际已生成)
  63. fromDataList, err := GetEdbDataListAll(sourceEdbInfoItem.Source, sourceEdbInfoItem.SubSource, FindEdbDataListAllCond{
  64. EdbInfoId: sourceEdbInfoItem.EdbInfoId,
  65. StartDataTime: "",
  66. StartDataTimeCond: ">=",
  67. }, 1)
  68. if err != nil {
  69. err = fmt.Errorf(`获取原指标数据失败:%v`, err)
  70. return
  71. }
  72. addSql := ` INSERT INTO ` + dataTableName + `(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  73. count := 0
  74. for _, tmpData := range fromDataList {
  75. currDateStr := tmpData.DataTime
  76. timeStr := fmt.Sprintf("%d", tmpData.DataTimestamp)
  77. // 当前的实际值
  78. saveValue := decimal.NewFromFloat(tmpData.Value).Round(4).String()
  79. addSql += GetAddSql(edbInfoIdStr, edbInfo.EdbCode, currDateStr, timeStr, saveValue)
  80. count += 1
  81. if count >= 500 {
  82. addSql = strings.TrimRight(addSql, ",")
  83. err = tx.Exec(addSql).Error
  84. if err != nil {
  85. err = fmt.Errorf(`新增预测指标数据失败:%v`, err)
  86. return
  87. }
  88. addSql = ` INSERT INTO ` + dataTableName + `(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  89. count = 0
  90. }
  91. }
  92. if count > 0 {
  93. addSql = strings.TrimRight(addSql, ",")
  94. err = tx.Exec(addSql).Error
  95. if err != nil {
  96. err = fmt.Errorf(`新增预测指标数据失败:%v`, err)
  97. return
  98. }
  99. }
  100. return
  101. }