|
@@ -678,3 +678,51 @@ func GetCalculateEdbByFromEdbInfo(edbInfoIds []int, calculateEdbIds []int, hasFi
|
|
|
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// 查询两个指标是否存在循环引用关系
|
|
|
+func CheckTwoEdbInfoRelation(edbInfoA, edbInfoB *data_manage.EdbInfo) (hasRelation bool, err error) {
|
|
|
+ edbInfoIds := make([]int, 0)
|
|
|
+ edbInfoIds = append(edbInfoIds, edbInfoA.EdbInfoId)
|
|
|
+ //查询指标信息
|
|
|
+ allEdbMappingMap := make(map[int][]*data_manage.EdbInfoCalculateMappingInfo, 0)
|
|
|
+ allMappingList, e := data_manage.GetEdbInfoCalculateMappingListByEdbInfoIds(edbInfoIds)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("GetEdbInfoCalculateMappingListByEdbInfoIds err: %s", e.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range allMappingList {
|
|
|
+ if v.EdbInfoId == edbInfoB.EdbInfoId {
|
|
|
+ hasRelation = true
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if _, ok := allEdbMappingMap[v.EdbInfoId]; !ok {
|
|
|
+ allEdbMappingMap[v.EdbInfoId] = make([]*data_manage.EdbInfoCalculateMappingInfo, 0)
|
|
|
+ }
|
|
|
+ allEdbMappingMap[v.EdbInfoId] = append(allEdbMappingMap[v.EdbInfoId], v)
|
|
|
+ }
|
|
|
+ //查询指标映射
|
|
|
+ //查询所有指标数据
|
|
|
+ //查询这个指标相关的mapping信息放到数组里,
|
|
|
+ //将得到的指标ID信息放到数组里
|
|
|
+ hasFindMap := make(map[int]struct{})
|
|
|
+ edbInfoIdMap := make(map[int]struct{})
|
|
|
+ edbMappingList := make([]*data_manage.EdbInfoCalculateMapping, 0)
|
|
|
+ edbInfoMappingRootIdsMap := make(map[int][]int, 0)
|
|
|
+ edbMappingMap := make(map[int]struct{})
|
|
|
+
|
|
|
+ if edbInfoA.EdbType == 2 {
|
|
|
+ edbInfoId := edbInfoA.EdbInfoId
|
|
|
+ edbMappingList, err = getCalculateEdbInfoByEdbInfoId(allEdbMappingMap, edbInfoId, hasFindMap, edbInfoIdMap, edbMappingList, edbMappingMap, edbInfoMappingRootIdsMap, edbInfoId)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf(" GetCalculateEdbInfoByEdbInfoId err: %s", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 判断其中是否包含指标B
|
|
|
+ if _, ok := edbInfoIdMap[edbInfoB.EdbInfoId]; ok { // 如果包含,则说明存在循环引用关系
|
|
|
+ hasRelation = true
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|