123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- 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
- }
-
- 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 {
-
- 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
- }
-
- 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,
- }
- tmp1.RelationCode = fmt.Sprintf("%d_%d_%d_%d", tmp1.RootEdbInfoId, tmp1.ReferObjectId, tmp1.ReferObjectType, tmp1.ReferObjectSubType)
- 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
- }
- func DisableEdbInfoNoUpdate(edbInfo *models.EdbInfo) (err error) {
-
- newBaseEdbInfoList := make([]int, 0)
- hasFind := make(map[int]struct{})
- newBaseEdbInfoIds, err := FindBaseEdbInfo(edbInfo.EdbInfoId, newBaseEdbInfoList, hasFind)
- if err != nil {
- err = fmt.Errorf("查找基础指标信息失败,err:%v", err)
- return
- }
-
- total, err := models.GetEdbInfoNoUpdateTotalByIdList(newBaseEdbInfoIds)
- if err != nil {
- err = fmt.Errorf("查询基础指标信息失败,err:%v", err)
- return
- }
- if total > 0 {
- edbInfo.NoUpdate = 1
- edbInfo.ModifyTime = time.Now()
- err = edbInfo.Update([]string{"NoUpdate", "ModifyTime"})
- if err != nil {
- err = fmt.Errorf("更新计算指标刷新状态失败,err:%v", err)
- return
- }
- }
- return
- }
- func FindBaseEdbInfo(edbInfoId int, baseEdbInfoList []int, hasFind map[int]struct{}) (newBaseEdbInfoList []int, err error) {
- newBaseEdbInfoList = baseEdbInfoList
- if _, ok := hasFind[edbInfoId]; ok {
- return
- }
-
-
- newMappingList, err := models.GetEdbInfoCalculateDetailList(edbInfoId)
- if err != nil {
- err = fmt.Errorf("查询当前计算指标最新的指标列表失败,错误信息:%s", err.Error())
- return
- }
- hasFind[edbInfoId] = struct{}{}
- for _, mapping := range newMappingList {
- if mapping.EdbType == 1 {
- newBaseEdbInfoList = append(newBaseEdbInfoList, mapping.FromEdbInfoId)
- } else {
- newBaseEdbInfoList, err = FindBaseEdbInfo(mapping.FromEdbInfoId, newBaseEdbInfoList, hasFind)
- }
- }
- return
- }
|