瀏覽代碼

修改一键上架功能

xyxie 3 周之前
父節點
當前提交
17b2e64340

+ 1 - 1
controllers/data_manage/chart_classify.go

@@ -1322,7 +1322,7 @@ func (this *ChartClassifyController) UpdateChartClassifyResource() {
 		return
 	}
 
-	err = eta_forum.ChartInfoSaveBatch(chartClassifyInfo, this.SysUser)
+	err = eta_forum.ChartBatchUpdateAndUpload(chartClassifyInfo, this.SysUser)
 	if err != nil {
 		br.Msg = "操作失败"
 		br.ErrMsg = err.Error()

+ 9 - 4
models/data_manage/chart_classify.go

@@ -275,6 +275,7 @@ type ChartClassifyItems struct {
 	HaveOperaAuth       bool                     `description:"是否有数据权限,默认:false"`
 	Disable             bool                     `description:"勾选是否禁用"`
 	IsSelected          int                      `description:"是否精选资源,0:否;1:是"`
+	ResourceStatus      int                      `description:"在ETA投研资源库中的状态,0:初始状态,1上架,2下架"`
 }
 
 // ChartClassifyItemsButton 操作按钮
@@ -628,7 +629,8 @@ func GetChartClassifyAndInfoByParentId(parentId int, isSelected int) (items []*C
 	'' as calendar,
 	'' as season_start_date,
 	'' as season_end_date,
-	is_selected
+	is_selected,
+	resource_status
 FROM
 	chart_classify 
 WHERE
@@ -654,7 +656,8 @@ SELECT
 	calendar,
 	season_start_date,
 	season_end_date,
-	0 as is_selected
+	0 as is_selected,
+	resource_status
 FROM
 	chart_info 
 WHERE
@@ -685,7 +688,8 @@ func GetChartClassifyAndInfoByParentIdForMe(parentId, adminId, isSelected int) (
 	sort,
 	level,
 	unique_code,
-	is_selected
+	is_selected,
+	resource_status
 FROM
 	chart_classify 
 WHERE
@@ -703,7 +707,8 @@ SELECT
 	sort,
 	0 AS level,
 	unique_code,
-	0 as is_selected
+	0 as is_selected,
+	resource_status
 FROM
 	chart_info 
 WHERE

+ 6 - 0
services/data/chart_classify.go

@@ -933,6 +933,12 @@ func moveChartClassify(parentChartClassifyInfo, chartClassifyInfo, prevClassify,
 				err = errors.New("修改失败,Err:" + err.Error())
 				return
 			}
+
+			// 判断是否为精选目录
+			// 如果该目录不是精选目录,且该图表已经上架,则需撤回该图表
+			if parentChartClassifyInfo.IsSelected == 0 && chartInfo.ForumChartInfoId > 0 {
+				go eta_forum.DeleteChart(chartInfo.ChartInfoId)
+			}
 		}
 	}
 	return

+ 50 - 80
services/eta_forum/eta_forum_hub.go

@@ -58,10 +58,18 @@ type DeleteChartReq struct {
 
 // UploadChart 上传图表接口
 func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin) (err error, errMsg string) {
+	// 设置缓存 防止重复上传
+	cacheKey := "eta_forum_task:UploadChart:" + strconv.Itoa(chartInfoId)
+	if utils.Rc.Get(cacheKey) != nil {
+		err = fmt.Errorf("系统处理中,请稍后重试!")
+		return
+	}
+	utils.Rc.SetNX(cacheKey, 1, 30*time.Second)
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg(fmt.Sprintf("上传图表至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
 		}
+		utils.Rc.Delete(cacheKey)
 	}()
 	// 查询图表信息
 	chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
@@ -176,10 +184,18 @@ func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin
 
 // UpdateChart 更新社区里的图表接口
 func UpdateChart(chartInfoId int) (err error, errMsg string) {
+	// 设置缓存 防止重复更新
+	cacheKey := "eta_forum_task:UpdateChart:" + strconv.Itoa(chartInfoId)
+	if utils.Rc.Get(cacheKey) != nil {
+		err = fmt.Errorf("系统处理中,请稍后重试!")
+		return
+	}
+	utils.Rc.SetNX(cacheKey, 1, 30*time.Second)
 	defer func() {
 		if err != nil {
 			go alarm_msg.SendAlarmMsg(fmt.Sprintf("同步图表信息至社区失败:Err:%v,ErrMsg:%s", err, errMsg), 3)
 		}
+		utils.Rc.Delete(cacheKey)
 	}()
 	// 查询图表信息
 	chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
@@ -399,6 +415,19 @@ func traceEdbInfoByEdbInfoId(edbInfoId int, hasFindMap map[int]struct{}, edbInfo
 
 // DeleteChart 上传图表接口
 func DeleteChart(chartInfoId int) (err error, errMsg string) {
+	// 设置缓存 防止重复撤回
+	cacheKey := "eta_forum_task:DeleteChart:" + strconv.Itoa(chartInfoId)
+	if utils.Rc.Get(cacheKey) != nil {
+		err = fmt.Errorf("系统处理中,请稍后重试!")
+		return
+	}
+	utils.Rc.SetNX(cacheKey, 1, 30*time.Second)
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg(fmt.Sprintf("撤回图表失败:%v,ErrMsg:%s", err, errMsg), 3)
+		}
+		utils.Rc.Delete(cacheKey)
+	}()
 	// 查询图表信息
 	chartInfo, err := data_manage.GetChartInfoById(chartInfoId)
 	if err != nil {
@@ -601,14 +630,14 @@ func ChartThemeTypeSave(theme *chart_theme.ChartThemeType) (err error) {
 	return
 }
 
-// ChartBatchUpdate 批量更新图表信息
-func ChartBatchUpdate(chartClassifyId int) (err error) {
+// ChartBatchUpdate 批量上传和更新图表信息
+func ChartBatchUpdateAndUpload(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (err error) {
 	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
 		return
 	}
 	var tmpErr []error
 	deleteCache := true
-	cacheKey := "eta_forum_task:EtaForumChartUpdateByClassifyId:" + strconv.Itoa(chartClassifyId)
+	cacheKey := "eta_forum_task:EtaForumChartUpdateByClassifyId:" + strconv.Itoa(chartClassifyInfo.ChartClassifyId)
 	defer func() {
 		if deleteCache {
 			_ = utils.Rc.Delete(cacheKey)
@@ -632,20 +661,18 @@ func ChartBatchUpdate(chartClassifyId int) (err error) {
 		err = fmt.Errorf("系统处理中,请稍后重试!")
 		return
 	}
-	// 获取当前分类以及子分类下的所有图表ID
-	chartClassifyInfo, err := data_manage.GetChartClassifyById(chartClassifyId)
-	if err != nil {
-		return
-	}
 	chartClassifyInfoList, err := data_manage.GetChartClassifyByLevelPath(chartClassifyInfo.LevelPath)
 	if err != nil {
 		return
 	}
 	chartClassifyIdList := make([]string, 0)
+	upChartClassifyIdList := make([]string, 0)
 	for _, v := range chartClassifyInfoList {
 		chartClassifyIdList = append(chartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
+		if v.ResourceStatus == utils.ChartClassifyResourceStatusUp {
+			upChartClassifyIdList = append(upChartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
+		}
 	}
-	// 设置缓存判断处理中则不更新
 	condition := " and forum_chart_info_id > 0 and source=1 and chart_classify_id in ?"
 	// 查询需要更新的图表信息总数
 	total, err := data_manage.GetChartInfoCountByCondition(condition, []interface{}{chartClassifyIdList})
@@ -683,89 +710,32 @@ func ChartBatchUpdate(chartClassifyId int) (err error) {
 		offset = (i + 1) * pageSize
 	}
 	fmt.Println("更新图表数据完成, 更新图表数据总数:", success)
-	return
-}
 
-// 批量上传图表分类信息
-func ChartInfoSaveBatch(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (err error) {
-	if utils.BusinessCode == "" || (utils.BusinessCode != utils.BusinessCodeRelease && utils.BusinessCode != utils.BusinessCodeDebug && utils.BusinessCode != utils.BusinessCodeSandbox) {
-		return
-	}
-	var tmpErr []error
-	deleteCache := true
-	cacheKey := "eta_forum_task:ChartInfoSaveBatch:" + strconv.Itoa(chartClassifyInfo.ChartClassifyId)
-	defer func() {
-		if deleteCache {
-			_ = utils.Rc.Delete(cacheKey)
-		}
-		stack := ""
-		if err != nil {
-			stack = fmt.Sprintln(stack + err.Error())
-		}
-		if len(tmpErr) > 0 {
-			for _, v := range tmpErr {
-				stack = fmt.Sprintln(stack + v.Error())
-			}
-		}
-		if stack != "" {
-			utils.FileLog.Error("批量上传资源库图表信息失败"+"<br/>"+stack)
-			go alarm_msg.SendAlarmMsg("批量上传资源库图表信息失败"+"<br/>"+stack, 3)
-		}
-	}()
-	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
-		deleteCache = false
-		err = fmt.Errorf("系统处理中,请稍后重试!")
-		return
-	}
-	classifyCondition := " AND source=? and is_selected=1 and resource_status=1 and level_path like '" + chartClassifyInfo.LevelPath + "%'"
-	var classifyPars []interface{}
-	classifyPars = append(classifyPars, chartClassifyInfo.Source)
-	classifyList, err := data_manage.GetChartClassifyListByCondition(classifyCondition, classifyPars)
-	if err != nil {
-		return
-	}
-	chartClassifyIdList := make([]string, 0)
-	for _, v := range classifyList {
-		chartClassifyIdList = append(chartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
-	}
-	// 批量上传图表信息
-	condition := " and source=1 and chart_classify_id in ?"
-	// 查询需要更新的图表信息总数
-	total, err := data_manage.GetChartInfoCountByCondition(condition, []interface{}{chartClassifyIdList})
+	// 批量上传已经上架的分类下的图表到资源库中
+	// 查询需要新增的图表ID
+	condition = " and source=1 and forum_chart_info_id=0 and chart_classify_id in ?"
+	total, err = data_manage.GetChartInfoCountByCondition(condition, []interface{}{upChartClassifyIdList})
 	if err != nil {
 		return
 	}
 	if total == 0 {
 		return
 	}
-
-	// 批量上传图表信息
-	offset := 0
-	pageSize := 100
-	success := 0
-
-	// 循环更新100个图表数据
+	offset = 0
+	pageSize = 100
+	success = 0
 	for i := 0; offset < total; i++ {
-		// 查询需要更新的图表信息
-		chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{chartClassifyIdList}, offset, pageSize)
+		chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{upChartClassifyIdList}, offset, pageSize)
 		if e != nil {
-			err = fmt.Errorf("查询需要新的图表信息失败: %v", e)
+			err = fmt.Errorf("查询需要新增的图表信息失败: %v", e)
 			return
 		}
 		// 循环更新图表数据
 		for _, chartInfo := range chartInfos {
-			var er error
-			var msg string
-			if chartInfo.ForumChartInfoId == 0 {
-				// 更新图表数据
-				er, msg = UploadChart(chartInfo.ChartInfoId, "", sysUser)
-			}else if chartInfo.ForumChartInfoId > 0 {
-				// 更新图表数据
-				er, msg = UpdateChart(chartInfo.ChartInfoId)
-			}
-
+			// 更新图表数据
+			er, msg := UploadChart(chartInfo.ChartInfoId, "", sysUser)
 			if er != nil {
-				er = fmt.Errorf("图表ID %d, 更新图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
+				er = fmt.Errorf("图表ID %d, 上传图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
 				tmpErr = append(tmpErr, er)
 				continue
 			}
@@ -774,7 +744,7 @@ func ChartInfoSaveBatch(chartClassifyInfo *data_manage.ChartClassify, sysUser *s
 
 		offset = (i + 1) * pageSize
 	}
-	fmt.Println("更新图表数据完成, 更新图表数据总数:", success)
+	fmt.Println("批量上传已经上架的分类下的图表到资源库中完成, 新增图表数据总数:", success)
 	return
 }
 
@@ -879,7 +849,7 @@ func SetChartClassifyResourceStatusUp(chartClassifyInfo *data_manage.ChartClassi
 		return
 	}
 
-	go ChartInfoSaveBatch(chartClassifyInfo, sysUser)
+	go ChartBatchUpdateAndUpload(chartClassifyInfo, sysUser)
 	
 	return
 }