edb_info_relation.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package services
  2. import (
  3. "eta/eta_index_lib/models"
  4. "eta/eta_index_lib/services/alarm_msg"
  5. "eta/eta_index_lib/utils"
  6. "fmt"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. // 重置单个计算指标中的引用关系
  12. func ResetEdbRelation(edbInfoId int) {
  13. var err error
  14. defer func() {
  15. if err != nil {
  16. msg := fmt.Sprintf("重置单个计算指标中的引用关系失败,错误信息:%s", err.Error())
  17. go alarm_msg.SendAlarmMsg(msg, 3)
  18. }
  19. }()
  20. //查询与该计算指标相关的间接引用或者间接引用关系,如果记录不存在,则不处理
  21. _, err = models.GetEdbInfoRelationByChildEdbInfoId(edbInfoId)
  22. if err != nil {
  23. if err.Error() == utils.ErrNoRow() {
  24. err = nil
  25. return
  26. }
  27. err = fmt.Errorf("查询与该计算指标相关的间接引用或者间接引用关系失败,错误信息:%s", err.Error())
  28. return
  29. }
  30. //查询当前计算指标最新的引用指标列表
  31. newMappingList, err := models.GetEdbInfoCalculateDetailList(edbInfoId)
  32. if err != nil {
  33. err = fmt.Errorf("查询当前计算指标最新的指标列表失败,错误信息:%s", err.Error())
  34. return
  35. }
  36. //整理关联的来源指标ID
  37. newEdbIdList := make([]int, 0)
  38. newMappingListMap := make(map[int]*models.EdbInfoCalculateDetail)
  39. for _, v := range newMappingList {
  40. newEdbIdList = append(newEdbIdList, v.FromEdbInfoId)
  41. newMappingListMap[v.FromEdbInfoId] = v
  42. }
  43. // 排序
  44. //二者匹配一下,如果相同,则不处理,如果不同,先查询所有旧的间接引用记录,整理并分组,则删除旧的间接引用记录,新增新的间接引用记录,
  45. relationList, err := models.GetEdbInfoRelationListByChildEdbInfoId(edbInfoId)
  46. if err != nil {
  47. err = fmt.Errorf("查询当前计算指标的间接引用关系失败,错误信息:%s", err.Error())
  48. return
  49. }
  50. deleteRelationIds := make([]int, 0)
  51. // 根据引用对象和直接引用指标 进行分组
  52. groupMap := make(map[string]map[int]*models.EdbInfoRelation)
  53. // 遍历每组内容,
  54. for _, v := range relationList {
  55. //如果指标ID不在新的
  56. if !utils.InArrayByInt(newEdbIdList, v.EdbInfoId) {
  57. deleteRelationIds = append(deleteRelationIds, v.EdbInfoRelationId)
  58. }
  59. name := fmt.Sprintf("%d_%d_%d_%d", v.ReferObjectId, v.ReferObjectType, v.ReferObjectSubType, v.RootEdbInfoId)
  60. childMap, ok := groupMap[name]
  61. if !ok {
  62. childMap = make(map[int]*models.EdbInfoRelation, 0)
  63. }
  64. childMap[v.EdbInfoId] = v
  65. groupMap[name] = childMap
  66. }
  67. // 遍历每组内容,如果新ID不在组内,则添加
  68. addList := make([]*models.EdbInfoRelation, 0)
  69. indexCodeList := make([]string, 0)
  70. refreshEdbIds := make([]int, 0)
  71. nowTime := time.Now()
  72. for name, childMap := range groupMap {
  73. for _, edbId := range newEdbIdList {
  74. if _, ok := childMap[edbId]; !ok {
  75. // 新增记录
  76. childEdb, ok1 := newMappingListMap[edbId]
  77. if !ok1 {
  78. continue
  79. }
  80. // 获取引用时间
  81. relationObjectInfo := strings.Split(name, "_")
  82. objectId, _ := strconv.Atoi(relationObjectInfo[0])
  83. objectType, _ := strconv.Atoi(relationObjectInfo[1])
  84. objectSubType, _ := strconv.Atoi(relationObjectInfo[2])
  85. rootEdbId, _ := strconv.Atoi(relationObjectInfo[3])
  86. tmp1 := &models.EdbInfoRelation{
  87. ReferObjectId: objectId,
  88. ReferObjectType: objectType,
  89. ReferObjectSubType: objectSubType,
  90. EdbInfoId: childEdb.FromEdbInfoId,
  91. EdbName: childEdb.FromEdbName,
  92. Source: childEdb.FromSource,
  93. EdbCode: childEdb.FromEdbCode,
  94. CreateTime: nowTime,
  95. ModifyTime: nowTime,
  96. RelationTime: nowTime,
  97. RelationType: 1,
  98. RootEdbInfoId: rootEdbId,
  99. ChildEdbInfoId: edbInfoId,
  100. }
  101. tmp1.RelationCode = fmt.Sprintf("%d_%d_%d_%d", tmp1.RootEdbInfoId, tmp1.ReferObjectId, tmp1.ReferObjectType, tmp1.ReferObjectSubType)
  102. addList = append(addList, tmp1)
  103. refreshEdbIds = append(refreshEdbIds, childEdb.FromEdbInfoId)
  104. if childEdb.FromSource == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
  105. indexCodeList = append(indexCodeList, childEdb.FromEdbCode)
  106. }
  107. }
  108. }
  109. }
  110. if len(addList) > 0 || len(deleteRelationIds) > 0 {
  111. err = models.AddOrUpdateEdbInfoRelationByChildEdbInfoId(addList, refreshEdbIds, indexCodeList, deleteRelationIds)
  112. if err != nil {
  113. err = fmt.Errorf("新增引用关系失败,err:%v", err)
  114. return
  115. }
  116. }
  117. return
  118. }