edb_info_relation.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package data
  2. import (
  3. "eta/eta_api/models/data_manage"
  4. "eta/eta_api/services/alarm_msg"
  5. "eta/eta_api/utils"
  6. "fmt"
  7. "time"
  8. )
  9. // SaveChartEdbInfoRelation 添加/编辑图表指标引用关联记录
  10. func SaveChartEdbInfoRelation(edbInfoIds []int, chartInfo *data_manage.ChartInfo) (err error) {
  11. // 实现添加引用记录的逻辑
  12. if len(edbInfoIds) == 0 {
  13. return
  14. }
  15. defer func() {
  16. if err != nil {
  17. tips := "SaveChartEdbInfoRelation-添加/编辑图表指标引用关联记录失败, ErrMsg:\n" + err.Error()
  18. utils.FileLog.Info(tips)
  19. go alarm_msg.SendAlarmMsg(tips, 3)
  20. }
  21. }()
  22. refreshIds := make([]int, 0)
  23. indexCodeList := make([]string, 0)
  24. // 查询指标信息
  25. edbInfoList, e := data_manage.GetEdbInfoByIdList(edbInfoIds)
  26. if e != nil {
  27. err = fmt.Errorf("查询指标信息失败,%s", e.Error())
  28. return
  29. }
  30. // 只统计钢联化工和wind来源的指标
  31. for _, edbInfo := range edbInfoList {
  32. if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  33. continue
  34. }
  35. refreshIds = append(refreshIds, edbInfo.EdbInfoId)
  36. if edbInfo.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  37. indexCodeList = append(indexCodeList, edbInfo.EdbCode)
  38. }
  39. }
  40. // 循转组装引用
  41. // 查询已有的引用关系
  42. existList, e := data_manage.GetEdbInfoRelationByReferObjectId(chartInfo.ChartInfoId, utils.EDB_RELATION_CHART)
  43. if e != nil {
  44. err = fmt.Errorf("查询已有的引用关系失败,%s", e.Error())
  45. return
  46. }
  47. deleteMap := make(map[int]bool)
  48. relationMap := make(map[int]bool)
  49. for _, exist := range existList {
  50. deleteMap[exist.EdbInfoId] = true
  51. relationMap[exist.EdbInfoId] = true
  52. }
  53. // 新增不存在的引用关系
  54. // 删除不再需要的引用关系
  55. nowTime := time.Now()
  56. addList := make([]*data_manage.EdbInfoRelation, 0)
  57. deleteRelationIds := make([]int, 0)
  58. for _, edbInfo := range edbInfoList {
  59. if edbInfo.Source != utils.DATA_SOURCE_WIND && edbInfo.Source != utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  60. continue
  61. }
  62. if _, ok := relationMap[edbInfo.EdbInfoId]; ok {
  63. delete(deleteMap, edbInfo.EdbInfoId)
  64. } else {
  65. tmp := &data_manage.EdbInfoRelation{
  66. ReferObjectId: chartInfo.ChartInfoId,
  67. ReferObjectType: utils.EDB_RELATION_CHART,
  68. ReferObjectSubType: chartInfo.Source,
  69. EdbInfoId: edbInfo.EdbInfoId,
  70. EdbName: edbInfo.EdbName,
  71. Source: edbInfo.Source,
  72. EdbCode: edbInfo.EdbCode,
  73. CreateTime: nowTime,
  74. ModifyTime: nowTime,
  75. }
  76. addList = append(addList, tmp)
  77. }
  78. }
  79. // 删除不再需要的引用关系
  80. for deleteId, _ := range deleteMap {
  81. deleteRelationIds = append(deleteRelationIds, deleteId)
  82. }
  83. //更新指标刷新状态为启用
  84. err = data_manage.AddOrUpdateEdbInfoRelation(addList, deleteRelationIds, refreshIds, indexCodeList)
  85. if err != nil {
  86. err = fmt.Errorf("删除不再需要的引用关系失败,%s", err.Error())
  87. return
  88. }
  89. return
  90. }