Browse Source

增加指标引用初始化处理

xyxie 8 months ago
parent
commit
b9d3f8132f
4 changed files with 113 additions and 27 deletions
  1. 53 0
      controllers/data_ini.go
  2. 1 1
      models/data_manage/edb_info.go
  3. 50 10
      services/edb_refresh.go
  4. 9 16
      services/edb_relation.go

+ 53 - 0
controllers/data_ini.go

@@ -0,0 +1,53 @@
+package controllers
+
+import (
+	"eta/eta_task/models"
+	"eta/eta_task/services"
+	"eta/eta_task/utils"
+	"github.com/beego/beego/v2/server/web"
+	"time"
+)
+
+type DataInitController struct {
+	web.Controller
+}
+
+func (c *DataInitController) InitEdbRelation() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	cacheKey := "eta_task:InitEdbRelation"
+	deleteCache := true
+	defer func() {
+		if deleteCache {
+			utils.Rc.Delete(cacheKey)
+		}
+	}()
+	if !utils.Rc.SetNX(cacheKey, 1, 5*time.Minute) {
+		deleteCache = false
+		br.Msg = `系统处理中,请稍后重试!`
+		return
+	}
+	services.InitChartEdbRelation()
+	services.InitChartCrossVariety()
+	services.InitCalendarIndicatorRelation()
+	services.InitSandBoxEdbRelation()
+	services.InitExcelEdbRelation()
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "处理成功"
+}
+
+func (c *DataInitController) DisableEdbRefresh() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "处理成功"
+}

+ 1 - 1
models/data_manage/edb_info.go

@@ -286,7 +286,7 @@ func GetEdbInfoMaxModifyTime(source, subSource int, edbCode string) (modifyTime
 	return
 }
 
-func GetEdbInfoPageByCondition(condition string, pars []interface{}, startPage, pageSize int) (item []*EdbInfoList, err error) {
+func GetEdbInfoPageByCondition(condition string, pars []interface{}, startPage, pageSize int) (item []*EdbInfo, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT * FROM edb_info WHERE 1=1 `
 	if condition != "" {

+ 50 - 10
services/edb_refresh.go

@@ -714,6 +714,7 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 		pageNum := (int(totalCount) + 99) / pageSize // 使用整数除法,并添加一页以防有余数
 		stopRefreshIds := make([]int, 0)
 		stopRefreshMysteelCode := make([]string, 0)
+		edbInfoList := make([]*data_manage.EdbInfo, 0)
 		for i := 0; i < pageNum; i++ {
 			start := i * pageSize
 			edbItems, e := data_manage.GetEdbInfoPageByCondition(condition, pars, start, pageSize)
@@ -725,8 +726,11 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 				continue
 			}
 			edbInfoIds := make([]int, 0)
+			edbInfoList = make([]*data_manage.EdbInfo, 0)
+			edbInfoMap := make(map[int]*data_manage.EdbInfo, 0)
 			for _, item := range edbItems {
 				edbInfoIds = append(edbInfoIds, item.EdbInfoId)
+				edbInfoMap[item.EdbInfoId] = item
 			}
 			// 查询指标库里这些指标 引用情况
 			relationList, e := data_manage.GetEdbInfoRelationByEdbInfoIds(edbInfoIds)
@@ -740,18 +744,38 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 			}
 			for _, item := range edbItems {
 				if _, ok := edbMap[item.EdbInfoId]; !ok {
+					edbInfo, ok1 := edbInfoMap[item.EdbInfoId]
+					if ok1 {
+						edbInfoList = append(edbInfoList, edbInfo)
+					}
 					stopRefreshIds = append(stopRefreshIds, item.EdbInfoId)
 					if item.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
 						stopRefreshMysteelCode = append(stopRefreshMysteelCode, item.EdbCode)
 					}
 					// 更新指标禁止刷新状态
 					if len(stopRefreshIds) > 100 {
-						calculateEdbIds, tmpErr := data_manage.GetAllCalculateEdbIdsByEdbInfoIds(stopRefreshIds)
-						if tmpErr != nil {
-							err = fmt.Errorf("查询计算指标信息失败:%v", tmpErr)
-							return
+						// 查询相关的计算指标
+						calculateEdbIdList := make([]int, 0)
+						if len(edbInfoList) > 0 {
+							calculateEdbMappingListMap, calculateEdbMappingIdsMap, e1 := GetEdbListByEdbInfoId(edbInfoList)
+							if e1 != nil {
+								err = fmt.Errorf("查询计算指标信息失败, Err" + e1.Error())
+								return
+							}
+							for _, v := range edbInfoList {
+								childEdbMappingIds, ok2 := calculateEdbMappingIdsMap[v.EdbInfoId]
+								if ok2 {
+									for _, childEdbMappingId := range childEdbMappingIds {
+										childEdbMapping, ok3 := calculateEdbMappingListMap[childEdbMappingId]
+										if !ok3 {
+											continue
+										}
+										calculateEdbIdList = append(calculateEdbIdList, childEdbMapping.EdbInfoId)
+									}
+								}
+							}
 						}
-						err = data_manage.ModifyEdbUpdateStatus(stopRefreshIds, stopRefreshMysteelCode, calculateEdbIds)
+						err = data_manage.ModifyEdbUpdateStatus(stopRefreshIds, stopRefreshMysteelCode, calculateEdbIdList)
 						if err != nil {
 							err = fmt.Errorf("更新指标禁止刷新状态失败:%v", err)
 							return
@@ -765,12 +789,28 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 
 		// 更新指标禁止刷新状态
 		if len(stopRefreshIds) > 0 {
-			calculateEdbIds, tmpErr := data_manage.GetAllCalculateEdbIdsByEdbInfoIds(stopRefreshIds)
-			if tmpErr != nil {
-				err = fmt.Errorf("查询计算指标信息失败:%v", tmpErr)
-				return
+			// 查询相关的计算指标
+			calculateEdbIdList := make([]int, 0)
+			if len(edbInfoList) > 0 {
+				calculateEdbMappingListMap, calculateEdbMappingIdsMap, e1 := GetEdbListByEdbInfoId(edbInfoList)
+				if e1 != nil {
+					err = fmt.Errorf("查询计算指标信息失败, Err" + e1.Error())
+					return
+				}
+				for _, v := range edbInfoList {
+					childEdbMappingIds, ok2 := calculateEdbMappingIdsMap[v.EdbInfoId]
+					if ok2 {
+						for _, childEdbMappingId := range childEdbMappingIds {
+							childEdbMapping, ok3 := calculateEdbMappingListMap[childEdbMappingId]
+							if !ok3 {
+								continue
+							}
+							calculateEdbIdList = append(calculateEdbIdList, childEdbMapping.EdbInfoId)
+						}
+					}
+				}
 			}
-			err = data_manage.ModifyEdbUpdateStatus(stopRefreshIds, stopRefreshMysteelCode, calculateEdbIds)
+			err = data_manage.ModifyEdbUpdateStatus(stopRefreshIds, stopRefreshMysteelCode, calculateEdbIdList)
 			if err != nil {
 				err = fmt.Errorf("更新指标禁止刷新状态失败:%v", err)
 				return

+ 9 - 16
services/edb_relation.go

@@ -13,13 +13,6 @@ import (
 	"time"
 )
 
-func InitEdbRelation() {
-	InitChartEdbRelation()
-	InitChartCrossVariety()
-	initCalendarIndicatorRelation()
-	initSandBoxEdbRelation()
-	InitExcelEdbRelation()
-}
 func InitChartEdbRelation() {
 	fmt.Println("开始处理图表中的指标引用")
 	var err error
@@ -148,7 +141,7 @@ func InitChartEdbRelation() {
 				addList = append(addList, tmp)
 				existRelationMap[name] = struct{}{}
 				// 添加间接引用记录
-				if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+				if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 					childEdbMappingIds, ok1 := calculateEdbMappingIdsMap[edbInfo.EdbInfoId]
 					if !ok1 {
 						continue
@@ -382,7 +375,7 @@ func InitChartCrossVariety() {
 					addList = append(addList, tmp)
 					existRelationMap[name] = struct{}{}
 					// 添加间接引用记录
-					if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+					if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 						childEdbMappingIds, ok1 := calculateEdbMappingIdsMap[edbInfo.EdbInfoId]
 						if !ok1 {
 							continue
@@ -444,7 +437,7 @@ func InitChartCrossVariety() {
 }
 
 // 初始化事件日历中的指标引用
-func initCalendarIndicatorRelation() {
+func InitCalendarIndicatorRelation() {
 	fmt.Println("开始处理事件日历中的指标引用")
 	var addNum int
 	var err error
@@ -560,7 +553,7 @@ func initCalendarIndicatorRelation() {
 						addList = append(addList, tmp)
 						existRelationMap[name] = struct{}{}
 						// 添加间接引用记录
-						if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+						if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 							childEdbMappingIds, ok1 := calculateEdbMappingIdsMap[edbInfo.EdbInfoId]
 							if !ok1 {
 								continue
@@ -728,7 +721,7 @@ func InitExcelEdbRelation() {
 				addList = append(addList, tmp)
 				existRelationMap[name] = struct{}{}
 				// 添加间接引用记录
-				if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+				if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 					childEdbMappingIds, ok1 := calculateEdbMappingIdsMap[edbInfo.EdbInfoId]
 					if !ok1 {
 						continue
@@ -789,7 +782,7 @@ func InitExcelEdbRelation() {
 }
 
 // 处理逻辑图中的指标引用
-func initSandBoxEdbRelation() {
+func InitSandBoxEdbRelation() {
 	fmt.Println("开始处理逻辑图中的指标引用")
 	var err error
 	var addNum int
@@ -909,7 +902,7 @@ func initSandBoxEdbRelation() {
 					addList = append(addList, tmp)
 					existRelationMap[name] = struct{}{}
 					// 添加间接引用记录
-					if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+					if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 						childEdbMappingIds, ok1 := calculateEdbMappingIdsMap[edbInfo.EdbInfoId]
 						if !ok1 {
 							continue
@@ -995,7 +988,7 @@ func GetEdbListByEdbInfoId(edbInfoList []*data_manage.EdbInfo) (edbMappingListMa
 	}
 	edbInfoIds := make([]int, 0)
 	for _, v := range edbInfoList {
-		if v.EdbType == 2 || v.EdbInfoType == 1 {
+		if v.EdbType == 2 && v.EdbInfoType == 0 { //普通计算指标,排除预算指标
 			edbInfoIds = append(edbInfoIds, v.EdbInfoId)
 		}
 	}
@@ -1025,7 +1018,7 @@ func GetEdbListByEdbInfoId(edbInfoList []*data_manage.EdbInfo) (edbMappingListMa
 	edbInfoMappingRootIdsMap = make(map[int][]int, 0)
 	edbMappingMap := make(map[int]struct{})
 	for _, edbInfo := range edbInfoList {
-		if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+		if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 			edbInfoId := edbInfo.EdbInfoId
 			edbMappingList, err = getCalculateEdbInfoByEdbInfoId(allEdbMappingMap, edbInfoId, hasFindMap, edbInfoIdMap, edbMappingList, edbMappingMap, edbInfoMappingRootIdsMap, edbInfoId)
 			if err != nil {