Explorar el Código

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

Roc hace 1 año
padre
commit
0c9473f4c4

+ 58 - 12
controllers/data_manage/chart_info.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_mobile/controllers"
 	"eta/eta_mobile/models"
 	"eta/eta_mobile/models/data_manage"
+	"eta/eta_mobile/models/data_manage/response"
 	"eta/eta_mobile/models/system"
 	"eta/eta_mobile/services"
 	"eta/eta_mobile/services/data"
@@ -1493,21 +1494,26 @@ func (this *ChartInfoController) BatchChartInfoRefresh() {
 		return
 	}
 
-	err = 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 = "刷新成功"
 }
 
 // @Title 保存图表接口
@@ -1794,4 +1800,44 @@ func (this *ChartInfoController) ChartInfoImageSet() {
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "保存成功"
-}
+}
+
+// GetBatchChartRefreshResult
+// @Title 获取批量刷新图表结果的接口
+// @Description 获取批量刷新图表结果的接口
+// @Param	request	body data_manage.BatchChartRefreshReq true "type json string"
+// @Success Ret=200 刷新成功
+// @router /chart_info/batch_refresh/result [post]
+func (this *EdbInfoController) GetBatchChartRefreshResult() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	var req data_manage.BatchChartRefreshReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	// 刷新结果,默认是刷新完成了
+	refreshResult := data.CheckBatchChartRefreshResult(req.Source, req.ReportId, req.ReportChapterId)
+
+	resp := response.ChartRefreshResp{
+		RefreshResult: refreshResult,
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+
+}

+ 10 - 0
controllers/english_report/report.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_mobile/models/company"
 	"eta/eta_mobile/services"
 	"eta/eta_mobile/services/alarm_msg"
+	"eta/eta_mobile/services/data"
 	"eta/eta_mobile/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -893,6 +894,15 @@ func (this *EnglishReportController) PublishReport() {
 			return
 		}
 
+		// 图表刷新状态
+		refreshResult := data.CheckBatchChartRefreshResult("report", vint, 0)
+		if !refreshResult {
+			br.Msg = "图表刷新未完成,请稍后操作"
+			br.ErrMsg = "图表刷新未完成,请稍后操作"
+			br.IsSendEmail = false
+			return
+		}
+
 		var tmpErr error
 
 		if report.Content == "" {

+ 30 - 0
controllers/report.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_mobile/models"
 	"eta/eta_mobile/services"
 	"eta/eta_mobile/services/alarm_msg"
+	"eta/eta_mobile/services/data"
 	"eta/eta_mobile/utils"
 	"fmt"
 	"github.com/beego/beego/v2/server/web"
@@ -274,6 +275,16 @@ func (this *ReportController) PublishReport() {
 			br.Msg = "报告不存在"
 			return
 		}
+
+		// 图表刷新状态
+		refreshResult := data.CheckBatchChartRefreshResult("report", vint, 0)
+		if !refreshResult {
+			br.Msg = "图表刷新未完成,请稍后操作"
+			br.ErrMsg = "图表刷新未完成,请稍后操作"
+			br.IsSendEmail = false
+			return
+		}
+
 		var publishTime time.Time
 		if report.MsgIsSend == 1 && report.PublishTime != "" { //如果报告曾经发布过,并且已经发送过模版消息,则章节的发布时间为报告的发布时间
 			publishTime, _ = time.ParseInLocation(utils.FormatDateTime, report.PublishTime, time.Local)
@@ -1993,6 +2004,15 @@ func (this *ReportController) PublishDayWeekReportChapter() {
 		return
 	}
 
+	// 图表刷新状态
+	refreshResult := data.CheckBatchChartRefreshResult("report", chapterInfo.ReportId, chapterInfo.ReportChapterId)
+	if !refreshResult {
+		br.Msg = "图表刷新未完成,请稍后操作"
+		br.ErrMsg = "图表刷新未完成,请稍后操作"
+		br.IsSendEmail = false
+		return
+	}
+
 	// 获取规则配置
 	reportChapterTypeRule, err := models.GetReportChapterTypeById(chapterInfo.TypeId)
 	if err != nil {
@@ -2164,6 +2184,16 @@ func (this *ReportController) PublishDayWeekReport() {
 		br.Msg = "该报告已发布"
 		return
 	}
+
+	// 图表刷新状态
+	refreshResult := data.CheckBatchChartRefreshResult("report", reportId, 0)
+	if !refreshResult {
+		br.Msg = "图表刷新未完成,请稍后操作"
+		br.ErrMsg = "图表刷新未完成,请稍后操作"
+		br.IsSendEmail = false
+		return
+	}
+	
 	tips, err := services.PublishDayWeekReport(reportId)
 	if err != nil {
 		br.Msg = "发布失败"

+ 4 - 1
models/data_manage/chart_info.go

@@ -1342,7 +1342,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 根据图表编码获取图表列表数据

+ 7 - 0
models/data_manage/response/chart.go

@@ -0,0 +1,7 @@
+package response
+
+// ChartRefreshResp
+// @Description: 图表更新结果
+type ChartRefreshResp struct {
+	RefreshResult bool `description:"刷新结果"`
+}

+ 60 - 2
services/data/chart_info.go

@@ -1388,7 +1388,7 @@ func ChartInfoRefreshV2(chartInfoId int) (err error) {
 // @author Roc
 // @datetime 2022-09-16 10:15:38
 // @description 将原来自己写的一套获取所有关联指标,然后刷新指标逻辑 改成  只获取使用的指标id,然后遍历去调用“指标刷新服务”
-func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo) (err error) {
+func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo, redisKey string) (err error, isAsync bool) {
 	if len(chartInfoList) <= 0 {
 		return
 	}
@@ -1404,8 +1404,28 @@ func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo) (err error)
 			//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)
+		}
 	}()
 
+	// 是否要求同步刷新指标
+	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)
@@ -1417,9 +1437,47 @@ func BatchChartInfoRefreshV2(chartInfoList []*data_manage.ChartInfo) (err error)
 	}
 
 	// 批量刷新
-	err, _ = EdbInfoRefreshAllFromBaseV3(edbIdList, false, true)
+	err, _ = EdbInfoRefreshAllFromBaseV3(edbIdList, false, isSync)
 	if err != nil {
 		return
 	}
 	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)
+}
+
+// CheckBatchChartRefreshResult
+// @Description: 判断报告中的图表是否刷新完成
+// @author: Roc
+// @datetime 2023-11-30 13:30:26
+// @param source string
+// @param reportId int
+// @param reportChapterId int
+// @return string
+func CheckBatchChartRefreshResult(source string, reportId, reportChapterId int) (refreshResult bool) {
+	refreshResult = true
+	redisKey := GetBatchChartRefreshKey(source, reportId, reportChapterId)
+	if redisKey != `` {
+		// 如果找到了key,那么就是还在更新中
+		isOk := utils.Rc.IsExist(redisKey)
+		if isOk {
+			refreshResult = false
+		}
+	}
+
+	return
+}