|
@@ -0,0 +1,121 @@
|
|
|
+package services
|
|
|
+
|
|
|
+import (
|
|
|
+ "eta/eta_index_lib/models"
|
|
|
+ "eta/eta_index_lib/services/alarm_msg"
|
|
|
+ "eta/eta_index_lib/utils"
|
|
|
+ "fmt"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+// 重置单个计算指标中的引用关系
|
|
|
+func ResetEdbRelation(edbInfoId int) {
|
|
|
+ var err error
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ msg := fmt.Sprintf("重置单个计算指标中的引用关系失败,错误信息:%s", err.Error())
|
|
|
+ go alarm_msg.SendAlarmMsg(msg, 3)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ //查询与该计算指标相关的间接引用或者间接引用关系,如果记录不存在,则不处理
|
|
|
+ _, err = models.GetEdbInfoRelationByChildEdbInfoId(edbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ if err.Error() == utils.ErrNoRow() {
|
|
|
+ err = nil
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = fmt.Errorf("查询与该计算指标相关的间接引用或者间接引用关系失败,错误信息:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询当前计算指标最新的引用指标列表
|
|
|
+ newMappingList, err := models.GetEdbInfoCalculateDetailList(edbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("查询当前计算指标最新的指标列表失败,错误信息:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //整理关联的来源指标ID
|
|
|
+ newEdbIdList := make([]int, 0)
|
|
|
+ newMappingListMap := make(map[int]*models.EdbInfoCalculateDetail)
|
|
|
+ for _, v := range newMappingList {
|
|
|
+ newEdbIdList = append(newEdbIdList, v.FromEdbInfoId)
|
|
|
+ newMappingListMap[v.FromEdbInfoId] = v
|
|
|
+ }
|
|
|
+ // 排序
|
|
|
+ //二者匹配一下,如果相同,则不处理,如果不同,先查询所有旧的间接引用记录,整理并分组,则删除旧的间接引用记录,新增新的间接引用记录,
|
|
|
+ relationList, err := models.GetEdbInfoRelationListByChildEdbInfoId(edbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("查询当前计算指标的间接引用关系失败,错误信息:%s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ deleteRelationIds := make([]int, 0)
|
|
|
+ // 根据引用对象和直接引用指标 进行分组
|
|
|
+ groupMap := make(map[string]map[int]*models.EdbInfoRelation)
|
|
|
+ // 遍历每组内容,
|
|
|
+ for _, v := range relationList {
|
|
|
+ //如果指标ID不在新的
|
|
|
+ if !utils.InArrayByInt(newEdbIdList, v.EdbInfoId) {
|
|
|
+ deleteRelationIds = append(deleteRelationIds, v.EdbInfoRelationId)
|
|
|
+ }
|
|
|
+ name := fmt.Sprintf("%d_%d_%d_%d", v.ReferObjectId, v.ReferObjectType, v.ReferObjectSubType, v.RootEdbInfoId)
|
|
|
+ childMap, ok := groupMap[name]
|
|
|
+ if !ok {
|
|
|
+ childMap = make(map[int]*models.EdbInfoRelation, 0)
|
|
|
+ }
|
|
|
+ childMap[v.EdbInfoId] = v
|
|
|
+ groupMap[name] = childMap
|
|
|
+ }
|
|
|
+ // 遍历每组内容,如果新ID不在组内,则添加
|
|
|
+ addList := make([]*models.EdbInfoRelation, 0)
|
|
|
+ indexCodeList := make([]string, 0)
|
|
|
+ refreshEdbIds := make([]int, 0)
|
|
|
+ nowTime := time.Now()
|
|
|
+ for name, childMap := range groupMap {
|
|
|
+ for _, edbId := range newEdbIdList {
|
|
|
+ if _, ok := childMap[edbId]; !ok {
|
|
|
+ // 新增记录
|
|
|
+ childEdb, ok1 := newMappingListMap[edbId]
|
|
|
+ if !ok1 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // 获取引用时间
|
|
|
+ relationObjectInfo := strings.Split(name, "_")
|
|
|
+ objectId, _ := strconv.Atoi(relationObjectInfo[0])
|
|
|
+ objectType, _ := strconv.Atoi(relationObjectInfo[1])
|
|
|
+ objectSubType, _ := strconv.Atoi(relationObjectInfo[2])
|
|
|
+ rootEdbId, _ := strconv.Atoi(relationObjectInfo[3])
|
|
|
+ tmp1 := &models.EdbInfoRelation{
|
|
|
+ ReferObjectId: objectId,
|
|
|
+ ReferObjectType: objectType,
|
|
|
+ ReferObjectSubType: objectSubType,
|
|
|
+ EdbInfoId: childEdb.FromEdbInfoId,
|
|
|
+ EdbName: childEdb.FromEdbName,
|
|
|
+ Source: childEdb.FromSource,
|
|
|
+ EdbCode: childEdb.FromEdbCode,
|
|
|
+ CreateTime: nowTime,
|
|
|
+ ModifyTime: nowTime,
|
|
|
+ RelationTime: nowTime,
|
|
|
+ RelationType: 1,
|
|
|
+ RootEdbInfoId: rootEdbId,
|
|
|
+ ChildEdbInfoId: edbInfoId,
|
|
|
+ }
|
|
|
+ addList = append(addList, tmp1)
|
|
|
+ refreshEdbIds = append(refreshEdbIds, childEdb.FromEdbInfoId)
|
|
|
+ if childEdb.FromSource == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
|
|
|
+ indexCodeList = append(indexCodeList, childEdb.FromEdbCode)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(addList) > 0 || len(deleteRelationIds) > 0 {
|
|
|
+ err = models.AddOrUpdateEdbInfoRelationByChildEdbInfoId(addList, refreshEdbIds, indexCodeList, deleteRelationIds)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("新增引用关系失败,err:%v", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|