|
@@ -8,6 +8,8 @@ import (
|
|
|
"eta/eta_api/services/alarm_msg"
|
|
|
"eta/eta_api/utils"
|
|
|
"fmt"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
)
|
|
|
|
|
|
type UploadChartToForumReq struct {
|
|
@@ -161,7 +163,7 @@ func UploadChart(chartInfoId int, description string, uploaderInfo *system.Admin
|
|
|
|
|
|
if respItem.Data != nil && respItem.Data.ChartInfoId != 0 {
|
|
|
// 更新社区返回的图表ID
|
|
|
- err = data_manage.SetForumChartInfoId(chartInfoId, respItem.Data.ChartInfoId)
|
|
|
+ err = data_manage.SetForumChartInfoId(chartInfoId, respItem.Data.ChartInfoId, utils.ChartClassifyResourceStatusUp)
|
|
|
if err != nil {
|
|
|
errMsg = "更新图表ID失败"
|
|
|
err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
|
|
@@ -438,7 +440,7 @@ func DeleteChart(chartInfoId int) (err error, errMsg string) {
|
|
|
}
|
|
|
|
|
|
// 更新社区返回的图表ID
|
|
|
- err = data_manage.SetForumChartInfoId(chartInfoId, 0)
|
|
|
+ err = data_manage.SetForumChartInfoId(chartInfoId, 0, utils.ChartClassifyResourceStatusDown)
|
|
|
if err != nil {
|
|
|
errMsg = "撤回失败"
|
|
|
err = fmt.Errorf("更新图表ID失败,Err:" + err.Error())
|
|
@@ -570,3 +572,306 @@ func ChartThemeTypeSave(theme *chart_theme.ChartThemeType) (err error) {
|
|
|
}
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// ChartBatchUpdate 批量更新图表信息
|
|
|
+func ChartBatchUpdate(chartClassifyId int) (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)
|
|
|
+ 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
|
|
|
+ }
|
|
|
+ // 获取当前分类以及子分类下的所有图表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)
|
|
|
+ for _, v := range chartClassifyInfoList {
|
|
|
+ chartClassifyIdList = append(chartClassifyIdList, 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})
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 更新图表数据
|
|
|
+ offset := 0
|
|
|
+ pageSize := 100
|
|
|
+ success := 0
|
|
|
+
|
|
|
+ // 循环更新100个图表数据
|
|
|
+ for i := 0; offset < total; i++ {
|
|
|
+ // 查询需要更新的图表信息
|
|
|
+ chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{chartClassifyIdList}, offset, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("查询需要更新的图表信息失败: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 循环更新图表数据
|
|
|
+ for _, chartInfo := range chartInfos {
|
|
|
+ // 更新图表数据
|
|
|
+ er, msg := UpdateChart(chartInfo.ChartInfoId)
|
|
|
+ if er != nil {
|
|
|
+ er = fmt.Errorf("图表ID %d, 更新图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
|
|
|
+ tmpErr = append(tmpErr, er)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ success += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ 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})
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 批量上传图表信息
|
|
|
+ offset := 0
|
|
|
+ pageSize := 100
|
|
|
+ success := 0
|
|
|
+
|
|
|
+ // 循环更新100个图表数据
|
|
|
+ for i := 0; offset < total; i++ {
|
|
|
+ // 查询需要更新的图表信息
|
|
|
+ chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{chartClassifyIdList}, offset, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+
|
|
|
+ if er != nil {
|
|
|
+ er = fmt.Errorf("图表ID %d, 更新图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
|
|
|
+ tmpErr = append(tmpErr, er)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ success += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ offset = (i + 1) * pageSize
|
|
|
+ }
|
|
|
+ fmt.Println("更新图表数据完成, 更新图表数据总数:", success)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 批量删除资源库图表信息
|
|
|
+func ChartInfoDeleteBatch(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:ChartInfoDeleteBatch:" + 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
|
|
|
+ }
|
|
|
+ // 查询所有子分类
|
|
|
+ chartClassifyInfoList, err := data_manage.GetChartClassifyByLevelPath(chartClassifyInfo.LevelPath)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartClassifyIdList := make([]string, 0)
|
|
|
+ for _, v := range chartClassifyInfoList {
|
|
|
+ chartClassifyIdList = append(chartClassifyIdList, strconv.Itoa(v.ChartClassifyId))
|
|
|
+ }
|
|
|
+ // 批量删除图表信息
|
|
|
+ condition := "source=? and chart_classify_id in ?"
|
|
|
+ total, err := data_manage.GetChartInfoCountByCondition(condition, []interface{}{chartClassifyInfo.Source, chartClassifyIdList})
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if total == 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ offset := 0
|
|
|
+ pageSize := 100
|
|
|
+ success := 0
|
|
|
+
|
|
|
+ // 循环更新100个图表数据
|
|
|
+ for i := 0; offset < total; i++ {
|
|
|
+ // 查询需要更新的图表信息
|
|
|
+ chartInfos, e := data_manage.GetChartInfoListByCondition(condition, []interface{}{chartClassifyInfo.Source, chartClassifyIdList}, offset, pageSize)
|
|
|
+ if e != nil {
|
|
|
+ err = fmt.Errorf("查询需要更新的图表信息失败: %v", e)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 循环更新图表数据
|
|
|
+ for _, chartInfo := range chartInfos {
|
|
|
+ // 删除图表数据
|
|
|
+ er, msg := DeleteChart(chartInfo.ChartInfoId)
|
|
|
+ if er != nil {
|
|
|
+ er = fmt.Errorf("图表ID %d, 删除图表数据失败: %s, %v", chartInfo.ChartInfoId, msg, er)
|
|
|
+ tmpErr = append(tmpErr, er)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ success += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ offset = (i + 1) * pageSize
|
|
|
+ }
|
|
|
+ fmt.Println("删除图表数据完成, 删除图表数据总数:", success)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 修改分类状态,一键上架至资源库
|
|
|
+func SetChartClassifyResourceStatusUp(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (errMsg string, err error) {
|
|
|
+ if chartClassifyInfo.ResourceStatus == utils.ChartClassifyResourceStatusUp {
|
|
|
+ errMsg = "分类状态已为已上架, 无需重复操作"
|
|
|
+ err = fmt.Errorf("%s", errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 判断是否是精选资源
|
|
|
+ if chartClassifyInfo.IsSelected != utils.ChartClassifyIsSelected {
|
|
|
+ errMsg = "分类状态已为已上架, 无需重复操作"
|
|
|
+ err = fmt.Errorf("%s", errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 查询分类下的所有图表信息
|
|
|
+ err = data_manage.UpdateChartClassifyResourceStatus(chartClassifyInfo.Source, utils.ChartClassifyResourceStatusUp, chartClassifyInfo.LevelPath)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "更新分类状态失败"
|
|
|
+ err = fmt.Errorf("更新分类状态失败,Err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ go ChartInfoSaveBatch(chartClassifyInfo, sysUser)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// 修改分类,一键从资源库下架
|
|
|
+func SetChartClassifyResourceStatusDown(chartClassifyInfo *data_manage.ChartClassify, sysUser *system.Admin) (errMsg string, err error) {
|
|
|
+ if chartClassifyInfo.ResourceStatus == utils.ChartClassifyResourceStatusDown {
|
|
|
+ errMsg = "分类状态已为已下架, 无需重复操作"
|
|
|
+ err = fmt.Errorf("%s", errMsg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 查询分类下的所有图表信息
|
|
|
+ err = data_manage.UpdateChartClassifyResourceStatus(chartClassifyInfo.Source, utils.ChartClassifyResourceStatusDown, chartClassifyInfo.LevelPath)
|
|
|
+ if err != nil {
|
|
|
+ errMsg = "更新分类状态失败"
|
|
|
+ err = fmt.Errorf("更新分类状态失败,Err:%w", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ go ChartInfoDeleteBatch(chartClassifyInfo, sysUser)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|