Roc hai 1 ano
pai
achega
81d50b50b3

+ 17 - 14
controllers/data_manage/chart_info.go

@@ -2297,24 +2297,27 @@ func (this *EdbInfoController) BatchChartInfoRefresh() {
 		return
 	}
 
-	err, isAsync := data.BatchChartInfoRefreshV2(chartInfoList)
-	if err != nil {
-		br.Msg = "刷新失败"
-		br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
-		return
-	}
+	redisKey := data.GetBatchChartRefreshKey(req.Source, req.ReportId, req.ReportChapterId)
 
-	//清除图表缓存
-	for _, v := range chartInfoList {
-		key := utils.HZ_CHART_LIB_DETAIL + v.UniqueCode
-		_ = utils.Rc.Delete(key)
+	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分钟后刷新页面查看最新数据"
+		}
 	}
+
 	br.Ret = 200
 	br.Success = true
-	br.Msg = "刷新成功"
-	if isAsync {
-		br.Msg = "图表关联指标较多,请10分钟后刷新页面查看最新数据"
-	}
+
 }
 
 // CopyChartInfo

+ 4 - 1
models/data_manage/chart_info.go

@@ -1376,7 +1376,10 @@ func GetChartInfoByClassifyIdAndName(classifyId int, chartName string) (item *Ch
 
 // BatchChartRefreshReq 批量刷新图表请求
 type BatchChartRefreshReq struct {
-	ChartInfoCode []string `description:"图表编码数组"`
+	ChartInfoCode   []string `description:"图表编码数组"`
+	ReportId        int      `description:"报告id"`
+	ReportChapterId int      `description:"报告章节id"`
+	Source          string   `description:"来源,枚举值:report、english_report、smart_report"`
 }
 
 // GetChartInfoListByUniqueCodeSlice 根据图表编码获取图表列表数据

+ 41 - 5
services/data/chart_info.go

@@ -1445,7 +1445,7 @@ func ChartInfoRefreshV2(chartInfoId int) (err error, isAsync bool) {
 // @author Roc
 // @datetime 2022-09-16 10:15:38
 // @description 将原来自己写的一套获取所有关联指标,然后刷新指标逻辑 改成  只获取使用的指标id,然后遍历去调用“指标刷新服务”
-func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo) (err error, isAsync bool) {
+func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo, redisKey string) (err error, isAsync bool) {
 	if len(chartInfoList) <= 0 {
 		return
 	}
@@ -1454,15 +1454,35 @@ func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo) (err error,
 		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)
+			fmt.Println("ChartInfoRefresh Err:" + errMsg)
+		}
+
+		//清除图表缓存
+		for _, v := range chartInfoList {
+			key := utils.HZ_CHART_LIB_DETAIL + v.UniqueCode
+			_ = utils.Rc.Delete(key)
 		}
 	}()
 
+	// 是否要求同步刷新指标
+	isSync := false
+
+	// 如果是有插入redisKey,那么需要写入redis和清除redis
+	if redisKey != `` {
+		isSync = true
+		//设置最多10分钟缓存
+		utils.Rc.SetNX(redisKey, 1, time.Minute*10)
+		// 刷新结束后就清除缓存
+		defer func() {
+			utils.Rc.Delete(redisKey)
+		}()
+	}
+
 	edbIdList := make([]int, 0)
 	edbInfoIdMap := make(map[int]int)
 	edbMappingList, err := data_manage.GetChartEdbMappingListByIdList(chartInfoIdSlice)
@@ -1474,7 +1494,7 @@ func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo) (err error,
 	}
 
 	// 批量刷新
-	err, isAsync = EdbInfoRefreshAllFromBaseV3(edbIdList, false, false)
+	err, isAsync = EdbInfoRefreshAllFromBaseV3(edbIdList, false, isSync)
 	if err != nil {
 		return
 	}
@@ -1482,6 +1502,22 @@ func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo) (err error,
 	return
 }
 
+// GetBatchChartRefreshKey
+// @Description: 获取批量刷新key
+// @author: Roc
+// @datetime 2023-11-30 13:30:26
+// @param source string
+// @param reportId int
+// @param reportChapterId int
+// @return string
+func GetBatchChartRefreshKey(source string, reportId, reportChapterId int) string {
+	if source == `` {
+		return ``
+	}
+
+	return fmt.Sprint("batch_chart_refresh:", source, ":", reportId, ":", reportChapterId)
+}
+
 func CheckIsEnChart(chartNameEn string, edbList []*data_manage.ChartEdbInfoMapping, source, chartType int) bool {
 	// 相关性图表不判断指标
 	if utils.InArrayByInt([]int{utils.CHART_SOURCE_CORRELATION, utils.CHART_SOURCE_ROLLING_CORRELATION, utils.CHART_SOURCE_LINE_EQUATION}, source) && chartNameEn != "" {