predict_edb_conf.go 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package data_manage
  2. import (
  3. "eta_gn/eta_api/global"
  4. "eta_gn/eta_api/utils"
  5. "time"
  6. )
  7. type PredictEdbConf struct {
  8. ConfigId int `orm:"column(config_id);pk" gorm:"primaryKey" description:"规则id"`
  9. PredictEdbInfoId int `orm:"column(predict_edb_info_id)" description:"预测指标id"`
  10. SourceEdbInfoId int `description:"来源指标id"`
  11. RuleType int `description:"预测规则,1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值,9:动态环差"`
  12. FixedValue float64 `description:"固定值"`
  13. Value string `description:"配置的值"`
  14. EmptyType int `description:"空值处理类型(0查找前后35天,1不计算,2前值填充,3后值填充,4等于0)"`
  15. MaxEmptyType int `description:"MAX、MIN公式空值处理类型(1、等于0;2、跳过空值)"`
  16. EndDate time.Time `description:"截止日期"`
  17. ModifyTime time.Time `description:"修改时间"`
  18. CreateTime time.Time `description:"添加时间"`
  19. }
  20. // PredictEdbConfDetail 预测规则 和 规则相关联的指标
  21. type PredictEdbConfDetail struct {
  22. ConfigId int `orm:"column(config_id);pk" gorm:"primaryKey" description:"规则id"`
  23. PredictEdbInfoId int `orm:"column(predict_edb_info_id)" description:"预测指标id"`
  24. SourceEdbInfoId int `description:"来源指标id"`
  25. RuleType int `description:"预测规则,1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值,9:动态环差"`
  26. FixedValue float64 `description:"固定值"`
  27. Value string `description:"配置的值"`
  28. EmptyType int `description:"空值处理类型(0查找前后35天,1不计算,2前值填充,3后值填充,4等于0)"`
  29. MaxEmptyType int `description:"MAX、MIN公式空值处理类型(1、等于0;2、跳过空值)"`
  30. EndDate time.Time `description:"截止日期"`
  31. ModifyTime time.Time `description:"修改时间"`
  32. CreateTime time.Time `description:"添加时间"`
  33. CalculateList []*PredictEdbConfCalculateMappingDetail `description:"配置与指标的关联信息"`
  34. }
  35. // PredictEdbConfAndData 预测规则和其对应的动态数据
  36. type PredictEdbConfAndData struct {
  37. ConfigId int `orm:"column(config_id);pk" gorm:"primaryKey" description:"规则id"`
  38. PredictEdbInfoId int `orm:"column(predict_edb_info_id)" description:"预测指标id"`
  39. SourceEdbInfoId int `description:"来源指标id"`
  40. RuleType int `description:"预测规则,1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值,9:动态环差"`
  41. FixedValue float64 `description:"固定值"`
  42. Value string `description:"配置的值"`
  43. EndDate time.Time `description:"截止日期"`
  44. ModifyTime time.Time `description:"修改时间"`
  45. CreateTime time.Time `description:"添加时间"`
  46. DataList []*EdbDataList `description:"动态数据"`
  47. }
  48. //// GetPredictEdbConfById 根据预测指标id获取预测指标配置信息
  49. //func GetPredictEdbConfById(edbInfoId int) (item *PredictEdbConf, err error) {
  50. // o := orm.NewOrmUsingDB("data")
  51. // sql := ` SELECT * FROM predict_edb_conf WHERE predict_edb_info_id=? `
  52. // err = o.Raw(sql, edbInfoId).QueryRow(&item)
  53. // return
  54. //}
  55. //
  56. //// GetPredictEdbConfBySourceEdbInfoId 根据来源指标id获取配置
  57. //func GetPredictEdbConfBySourceEdbInfoId(sourceEdbInfoId int) (item *PredictEdbConf, err error) {
  58. // o := orm.NewOrmUsingDB("data")
  59. // sql := ` SELECT * FROM predict_edb_conf WHERE source_edb_info_id=? `
  60. // err = o.Raw(sql, sourceEdbInfoId).QueryRow(&item)
  61. // return
  62. //}
  63. // GetPredictEdbConfCount 根据来源指标id获取被引用的次数
  64. func GetPredictEdbConfCount(sourceEdbInfoId int) (count int, err error) {
  65. //o := orm.NewOrmUsingDB("data")
  66. //sql := ` SELECT COUNT(1) AS count FROM predict_edb_conf WHERE source_edb_info_id=? `
  67. //err = o.Raw(sql, sourceEdbInfoId).QueryRow(&count)
  68. sql := ` SELECT COUNT(1) AS count FROM predict_edb_conf WHERE source_edb_info_id=? `
  69. err = global.DmSQL["data"].Raw(sql, sourceEdbInfoId).Scan(&count).Error
  70. return
  71. }
  72. //// AddPredictEdbConf 添加预测指标规则
  73. //func AddPredictEdbConf(item *PredictEdbConf) (lastId int64, err error) {
  74. // o := orm.NewOrmUsingDB("data")
  75. // lastId, err = o.Insert(item)
  76. // return
  77. //}
  78. // AddPredictEdb 添加预测指标
  79. func AddPredictEdb(item *EdbInfo, calculateMappingItem *EdbInfoCalculateMapping, predictEdbConfList []*PredictEdbConf) (err error) {
  80. //o := orm.NewOrmUsingDB("data")
  81. //tx, err := o.Begin()
  82. //if err != nil {
  83. // return
  84. //}
  85. //defer func() {
  86. // if err != nil {
  87. // tmpErr := tx.Rollback()
  88. // if tmpErr != nil {
  89. // go alarm_msg.SendAlarmMsg("AddPredictEdb 事务回滚失败,Err:"+tmpErr.Error(), 3)
  90. // }
  91. // } else {
  92. // err = tx.Commit()
  93. // }
  94. //}()
  95. to := global.DmSQL["data"].Begin()
  96. defer func() {
  97. if err != nil {
  98. _ = to.Rollback()
  99. } else {
  100. _ = to.Commit()
  101. }
  102. }()
  103. // 新增预测指标
  104. //edbInfoId, err := to.Create(item)
  105. //if err != nil {
  106. // return
  107. //}
  108. //item.EdbInfoId = int(edbInfoId)
  109. err = to.Create(item).Error
  110. if err != nil {
  111. return
  112. }
  113. // 新增预测指标
  114. calculateMappingItem.EdbInfoId = item.EdbInfoId
  115. //_, err = o.Insert(calculateMappingItem)
  116. //if err != nil {
  117. // return
  118. //}
  119. err = to.Create(calculateMappingItem).Error
  120. if err != nil {
  121. return
  122. }
  123. // 新增预测指标配置
  124. lenPredictEdbConf := len(predictEdbConfList)
  125. if lenPredictEdbConf > 0 {
  126. for _, v := range predictEdbConfList {
  127. v.PredictEdbInfoId = item.EdbInfoId
  128. }
  129. //_, err = o.InsertMulti(lenPredictEdbConf, predictEdbConfList)
  130. //if err != nil {
  131. // return
  132. //}
  133. err = to.CreateInBatches(predictEdbConfList, utils.MultiAddNum).Error
  134. if err != nil {
  135. return
  136. }
  137. }
  138. return
  139. }
  140. // EditPredictEdb 修改预测指标
  141. func EditPredictEdb(edbInfo *EdbInfo, predictEdbConfList []*PredictEdbConf, updateEdbInfoCol []string) (err error) {
  142. //o := orm.NewOrmUsingDB("data")
  143. //tx, err := o.Begin()
  144. //if err != nil {
  145. // return
  146. //}
  147. //defer func() {
  148. // if err != nil {
  149. // tmpErr := tx.Rollback()
  150. // if tmpErr != nil {
  151. // go alarm_msg.SendAlarmMsg("AddPredictEdb 事务回滚失败,Err:"+tmpErr.Error(), 3)
  152. // }
  153. // } else {
  154. // err = tx.Commit()
  155. // }
  156. //}()
  157. to := global.DmSQL["data"].Begin()
  158. defer func() {
  159. if err != nil {
  160. _ = to.Rollback()
  161. } else {
  162. _ = to.Commit()
  163. }
  164. }()
  165. // 修改预测指标
  166. //_, err = o.Update(edbInfo, updateEdbInfoCol...)
  167. //if err != nil {
  168. // return
  169. //}
  170. err = to.Select(updateEdbInfoCol).Updates(edbInfo).Error
  171. if err != nil {
  172. return
  173. }
  174. // 先删除原有的配置
  175. //sql := ` DELETE FROM predict_edb_conf WHERE predict_edb_info_id = ?`
  176. //_, err = o.Raw(sql, edbInfo.EdbInfoId).Exec()
  177. //if err != nil {
  178. // return
  179. //}
  180. sql := ` DELETE FROM predict_edb_conf WHERE predict_edb_info_id = ?`
  181. err = to.Exec(sql, edbInfo.EdbInfoId).Error
  182. if err != nil {
  183. return
  184. }
  185. // 新增新有的预测指标配置
  186. lenPredictEdbConf := len(predictEdbConfList)
  187. if lenPredictEdbConf > 0 {
  188. //_, err = o.InsertMulti(lenPredictEdbConf, predictEdbConfList)
  189. //if err != nil {
  190. // return
  191. //}
  192. err = to.CreateInBatches(predictEdbConfList, utils.MultiAddNum).Error
  193. if err != nil {
  194. return
  195. }
  196. }
  197. return
  198. }
  199. // GetPredictEdbInfoAllCalculate 根据基础预测指标id集合 获取 所有的普通指标列表数据
  200. func GetPredictEdbInfoAllCalculate(edbInfoIdList []int) (list []*EdbInfo, err error) {
  201. num := len(edbInfoIdList)
  202. if num <= 0 {
  203. return
  204. }
  205. //o := orm.NewOrmUsingDB("data")
  206. //sql := ` SELECT b.* FROM predict_edb_conf AS a
  207. // INNER JOIN edb_info AS b ON a.source_edb_info_id=b.edb_info_id
  208. // WHERE a.predict_edb_info_id in (` + utils.GetOrmInReplace(num) + `)
  209. // GROUP BY a.source_edb_info_id
  210. // ORDER BY a.source_edb_info_id ASC `
  211. //_, err = o.Raw(sql, edbInfoIdList).QueryRows(&list)
  212. sql := ` SELECT DISTINCT b.* FROM predict_edb_conf AS a
  213. INNER JOIN edb_info AS b ON a.source_edb_info_id=b.edb_info_id
  214. WHERE a.predict_edb_info_id in (` + utils.GetOrmInReplace(num) + `)
  215. ORDER BY b.edb_info_id ASC `
  216. err = global.DmSQL["data"].Raw(sql, edbInfoIdList).Find(&list).Error
  217. return
  218. }
  219. // GetPredictEdbConfListById 根据预测指标id获取预测指标配置信息列表
  220. func GetPredictEdbConfListById(edbInfoId int) (items []*PredictEdbConf, err error) {
  221. //o := orm.NewOrmUsingDB("data")
  222. //sql := ` SELECT * FROM predict_edb_conf WHERE predict_edb_info_id=? ORDER BY config_id ASC`
  223. //_, err = o.Raw(sql, edbInfoId).QueryRows(&items)
  224. sql := ` SELECT * FROM predict_edb_conf WHERE predict_edb_info_id=? ORDER BY config_id ASC`
  225. err = global.DmSQL["data"].Raw(sql, edbInfoId).Find(&items).Error
  226. return
  227. }
  228. // GetGroupPredictEdbBySourceEdbInfoId 根据来源指标id获取配置
  229. func GetGroupPredictEdbBySourceEdbInfoId(sourceEdbInfoId int) (items []*EdbInfo, err error) {
  230. //o := orm.NewOrmUsingDB("data")
  231. //sql := ` SELECT a.* FROM edb_info AS a
  232. // JOIN predict_edb_conf AS b on a.edb_info_id = b.predict_edb_info_id
  233. // WHERE b.source_edb_info_id=? group by a.edb_info_id`
  234. //_, err = o.Raw(sql, sourceEdbInfoId).QueryRows(&items)
  235. sql := ` SELECT a.* FROM edb_info AS a
  236. JOIN predict_edb_conf AS b on a.edb_info_id = b.predict_edb_info_id
  237. WHERE b.source_edb_info_id=? group by a.edb_info_id`
  238. err = global.DmSQL["data"].Raw(sql, sourceEdbInfoId).Find(&items).Error
  239. return
  240. }