Эх сурвалжийг харах

fix:一键更新图表的时候,不允许发布

Roc 1 жил өмнө
parent
commit
39d9b40fb0

+ 10 - 14
controllers/data_manage/chart_info.go

@@ -1496,20 +1496,16 @@ func (this *ChartInfoController) BatchChartInfoRefresh() {
 
 	redisKey := data.GetBatchChartRefreshKey(req.Source, req.ReportId, req.ReportChapterId)
 
-	if redisKey != `` {
-		go data.BatchChartInfoRefreshV2(chartInfoList, redisKey)
-		br.Msg = "正在后台刷新图表"
-	} else {
-		err, isAsync := data.BatchChartInfoRefreshV2(chartInfoList, redisKey)
-		if err != nil {
-			br.Msg = "刷新失败"
-			br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
-			return
-		}
-		br.Msg = "刷新成功"
-		if isAsync {
-			br.Msg = "图表关联指标较多,请10分钟后刷新页面查看最新数据"
-		}
+	// 图表中的指标刷新
+	err, isAsync := data.BatchChartInfoRefreshV2(chartInfoList, redisKey)
+	if err != nil {
+		br.Msg = "刷新失败"
+		br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
+		return
+	}
+	br.Msg = "刷新成功"
+	if isAsync {
+		br.Msg = "研报中图表关联指标较多,请10分钟后刷新页面查看最新数据"
 	}
 
 	br.Ret = 200

+ 54 - 20
services/data/chart_info.go

@@ -1397,35 +1397,28 @@ func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo, redisKey st
 		chartInfoIdSlice = append(chartInfoIdSlice, chartInfo.ChartInfoId)
 	}
 
-	var errmsg string
+	var errMsg string
 	defer func() {
 		if err != nil {
-			go alarm_msg.SendAlarmMsg("ChartInfoRefresh:"+errmsg, 3)
+			go alarm_msg.SendAlarmMsg("ChartInfoRefresh:"+errMsg, 3)
 			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ChartInfoRefresh:"+errmsg, utils.EmailSendToUsers)
-			fmt.Println("ChartInfoRefresh Err:" + errmsg)
-		}
-
-		//清除图表缓存
-		for _, v := range chartInfoList {
-			key := utils.HZ_CHART_LIB_DETAIL + v.UniqueCode
-			_ = utils.Rc.Delete(key)
+			fmt.Println("ChartInfoRefresh Err:" + errMsg)
 		}
 	}()
 
-	// 是否要求同步刷新指标
-	isSync := false
-
-	// 如果是有插入redisKey,那么需要写入redis和清除redis
+	// 是否删除缓存
+	isDeleteCache := true
 	if redisKey != `` {
-		isSync = true
 		//设置最多10分钟缓存
 		utils.Rc.SetNX(redisKey, 1, time.Minute*10)
-		// 刷新结束后就清除缓存
 		defer func() {
-			utils.Rc.Delete(redisKey)
+			if isDeleteCache {
+				utils.Rc.Delete(redisKey)
+			}
 		}()
 	}
 
+	// 获取需要刷新的指标信息
 	edbIdList := make([]int, 0)
 	edbInfoIdMap := make(map[int]int)
 	edbMappingList, err := data_manage.GetChartEdbMappingListByIdList(chartInfoIdSlice)
@@ -1436,14 +1429,55 @@ func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo, redisKey st
 		}
 	}
 
-	// 批量刷新
-	err, _ = EdbInfoRefreshAllFromBaseV3(edbIdList, false, isSync)
-	if err != nil {
-		return
+	// 获取需要刷新的指标列表
+	newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr := getEdbInfoIdList(edbIdList)
+
+	// 需要刷新的指标数量
+	totalEdbInfo := len(newBaseEdbInfoArr) + len(calculateArr) + len(predictCalculateArr)
+
+	if totalEdbInfo > 20 { // 关联指标过多的时候,异步刷新
+		isAsync = true
+		isDeleteCache = false // 不删除缓存
+		go refreshChartEdbInfo(chartInfoList, redisKey, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
+	} else {
+		err = edbInfoRefreshAll(false, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
+
+		//清除图表缓存
+		for _, v := range chartInfoList {
+			key := utils.HZ_CHART_LIB_DETAIL + v.UniqueCode
+			_ = utils.Rc.Delete(key)
+		}
 	}
+
 	return
 }
 
+// refreshChartEdbInfo
+// @Description: 刷新图表中的质保列表
+// @author: Roc
+// @datetime 2023-12-01 16:05:39
+// @param chartInfoList []*data_manage.ChartInfo
+// @param redisKey string
+// @param newBaseEdbInfoArr []*data_manage.EdbInfo
+// @param newBasePredictEdbInfoArr []*data_manage.EdbInfo
+// @param newCalculateMap map[int]*data_manage.EdbInfo
+// @param newPredictCalculateMap map[int]*data_manage.EdbInfo
+// @param calculateArr []int
+// @param predictCalculateArr []int
+func refreshChartEdbInfo(chartInfoList []*data_manage.ChartInfo, redisKey string, newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int) {
+	edbInfoRefreshAll(false, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
+
+	//清除图表缓存
+	for _, v := range chartInfoList {
+		key := utils.HZ_CHART_LIB_DETAIL + v.UniqueCode
+		_ = utils.Rc.Delete(key)
+	}
+	// 如果是有插入redisKey,那么刷新结束后就清除缓存
+	if redisKey != `` {
+		utils.Rc.Delete(redisKey)
+	}
+}
+
 // GetBatchChartRefreshKey
 // @Description: 获取批量刷新key
 // @author: Roc

+ 38 - 19
services/data/edb_info.go

@@ -298,10 +298,10 @@ func EdbInfoRefreshAllFromBaseV3Bak(edbInfoIdList []int, refreshAll, isSync bool
 //	@datetime2023-10-23 09:57:55
 //	@param edbInfoIdList []int
 //	@param refreshAll bool
-//	@param isSync bool
+//	@param isSync bool 是否同步执行
 //	@return err error
-//	@return isAsync bool
-func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll bool, isSync bool) (err error, isAsync bool) {
+//	@return isAsync bool 是否异步刷新
+func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll, isSync bool) (err error, isAsync bool) {
 	var errmsg string
 	defer func() {
 		if err != nil {
@@ -309,6 +309,35 @@ func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll bool, isSync bo
 			go alarm_msg.SendAlarmMsg("EdbInfoRefreshAllFromBaseV3,Err"+err.Error()+";errMsg:"+errmsg, 3)
 		}
 	}()
+
+	// 获取需要刷新的指标列表
+	newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr := getEdbInfoIdList(edbInfoIdList)
+
+	// 需要刷新的指标数量
+	totalEdbInfo := len(newBaseEdbInfoArr) + len(calculateArr) + len(predictCalculateArr)
+
+	if totalEdbInfo <= 20 || isSync {
+		err = edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
+	} else {
+		isAsync = true
+		go edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
+	}
+
+	return
+}
+
+// getEdbInfoIdList
+// @Description: 获取待更新的指标列表
+// @author: Roc
+// @datetime 2023-12-01 16:19:42
+// @param edbInfoIdList []int
+// @return newBaseEdbInfoArr []*data_manage.EdbInfo
+// @return newBasePredictEdbInfoArr []*data_manage.EdbInfo
+// @return newCalculateMap map[int]*data_manage.EdbInfo
+// @return newPredictCalculateMap map[int]*data_manage.EdbInfo
+// @return calculateArr []int
+// @return predictCalculateArr []int
+func getEdbInfoIdList(edbInfoIdList []int) (newBaseEdbInfoArr, newBasePredictEdbInfoArr []*data_manage.EdbInfo, newCalculateMap, newPredictCalculateMap map[int]*data_manage.EdbInfo, calculateArr, predictCalculateArr []int) {
 	traceEdbInfoList, err := TraceEdbInfoByEdbInfoIdList(edbInfoIdList)
 	if err != nil {
 		return
@@ -317,16 +346,16 @@ func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll bool, isSync bo
 	existEdbInfoIdMap := make(map[int]int)
 
 	// 基础指标
-	newBaseEdbInfoArr := make([]*data_manage.EdbInfo, 0)
-	newBasePredictEdbInfoArr := make([]*data_manage.EdbInfo, 0)
+	newBaseEdbInfoArr = make([]*data_manage.EdbInfo, 0)
+	newBasePredictEdbInfoArr = make([]*data_manage.EdbInfo, 0)
 	newBaseMap := make(map[int]*data_manage.EdbInfo)
 	newPredictBaseMap := make(map[int]*data_manage.EdbInfo)
 
 	// 计算指标
-	newCalculateMap := make(map[int]*data_manage.EdbInfo)
-	newPredictCalculateMap := make(map[int]*data_manage.EdbInfo)
-	calculateArr := make([]int, 0)
-	predictCalculateArr := make([]int, 0)
+	newCalculateMap = make(map[int]*data_manage.EdbInfo)
+	newPredictCalculateMap = make(map[int]*data_manage.EdbInfo)
+	calculateArr = make([]int, 0)
+	predictCalculateArr = make([]int, 0)
 
 	// 获取关联指标
 	for _, traceEdbInfo := range traceEdbInfoList {
@@ -370,16 +399,6 @@ func EdbInfoRefreshAllFromBaseV3(edbInfoIdList []int, refreshAll bool, isSync bo
 	// 预测计算指标的id
 	sort.Ints(predictCalculateArr)
 
-	// 需要刷新的指标数量
-	totalEdbInfo := len(newBaseEdbInfoArr) + len(calculateArr) + len(predictCalculateArr)
-
-	if totalEdbInfo <= 20 || isSync {
-		err = edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
-	} else {
-		isAsync = true
-		go edbInfoRefreshAll(refreshAll, newBaseEdbInfoArr, newBasePredictEdbInfoArr, newCalculateMap, newPredictCalculateMap, calculateArr, predictCalculateArr)
-	}
-
 	return
 }