Browse Source

批量新增图表分类

xyxie 2 weeks ago
parent
commit
0aa5c7ca0a

+ 91 - 0
controllers/chart_classify.go

@@ -0,0 +1,91 @@
+package controllers
+
+import (
+	"encoding/json"
+	"eta/eta_forum_hub/models"
+	"eta/eta_forum_hub/services"
+)
+
+type ChartClassifyController struct {
+	BaseAuthController
+}
+
+// Save 新增或者更新分类
+// @Title 新增或者更新分类
+// @Description 新增或者更新分类
+// @Param   request	body models.ChartClassifySyncReq true "type json string"
+// @Success 200 {object} models.BaseResponse
+// @router /save [post]
+func (this *ChartClassifyController) Save() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	
+	var req models.ChartClassify
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.ChartClassifyId == 0 {
+		br.Msg = "请输入分类id"
+		br.ErrMsg = "请输入分类id"
+		return
+	}
+	if req.IsSelected != 1 {
+		br.Msg = "只有精选资源才可以更新"
+		return
+	}
+	err = services.AddOrUpdateChartClassify(&req)
+	if err != nil {
+		br.Msg = "新增或者更新分类失败"
+		br.ErrMsg = "新增或者更新分类失败, Err:" + err.Error()
+		return
+	}
+	
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新增成功"
+}
+
+// BatchSave 批量同步分类
+// @Title 批量同步分类
+// @Description 批量同步分类
+// @Param   request	body models.ChartClassifySyncReq true "type json string"
+// @Success 200 {object} models.BaseResponse
+// @router /batch_save [post]
+func (this *ChartClassifyController) BatchSave() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	
+	var req models.ChartClassifySyncReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if len(req.List) == 0 {
+		br.Msg = "请输入列表"
+		br.ErrMsg = "请输入列表"
+		return
+	}
+	err, isSendEmail := services.BatchAddOrUpdateChartClassify(&req)
+	if err != nil {
+		br.Msg = "新增或者更新用户失败"
+		br.ErrMsg = "新增或者更新用户失败, Err:" + err.Error()
+		br.IsSendEmail = isSendEmail
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新增成功"
+	
+}

+ 14 - 15
models/chart_classify.go

@@ -3,8 +3,9 @@ package models
 import (
 	"eta/eta_forum_hub/utils"
 	"fmt"
-	"github.com/beego/beego/v2/client/orm"
 	"time"
+
+	"github.com/beego/beego/v2/client/orm"
 )
 
 type ChartClassify struct {
@@ -21,6 +22,11 @@ type ChartClassify struct {
 	Sort              int       `description:"排序字段,越小越靠前,默认值:10"`
 	Source            int       `description:"1:ETA图库;2:商品价格曲线"`
 	IsJoinPermission  int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	ChartClassifyNameEn string    `description:"分类名称英文"`
+	RootId              int       `description:"根级id"`
+	LevelPath         string    `description:"层级路径"`
+	IsSelected        int       `description:"是否精选资源:0否,1是"`
+	ResourceStatus    int       `description:"在ETA投研资源库中的状态:0:初始状态,1上架,2下架"`
 }
 
 func AddChartClassify(item *ChartClassify) (lastId int64, err error) {
@@ -93,18 +99,7 @@ func GetChartInfoCountByClassifyId(classifyId int) (count int, err error) {
 
 func DeleteChartClassify(classifyId int) (err error) {
 	o := orm.NewOrm()
-	sql := ` DELETE FROM chart_classify
-				WHERE chart_classify_id IN(
-				SELECT t.chart_classify_id FROM
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM chart_classify WHERE parent_id IS NOT NULL) rd,
-				(SELECT @pid := ?) pd
-				WHERE FIND_IN_SET(parent_id, @pid) > 0
-				AND @pid := CONCAT(@pid, ',', chart_classify_id)
-				UNION SELECT * FROM chart_classify WHERE chart_classify_id = @pid
-				)AS t
-				) `
+	sql := `DELETE FROM chart_classify WHERE chart_classify_id = ?`
 	_, err = o.Raw(sql, classifyId).Exec()
 	return
 }
@@ -120,9 +115,9 @@ func GetChartClassifyByParentId(parentId, source int) (items []*ChartClassifyIte
 
 // GetChartClassifyAll
 // @param source int 1:ETA图库;2:商品价格曲线;3:相关性图表
-func GetChartClassifyAll(source int) (items []*ChartClassifyItems, err error) {
+func GetChartClassifyAll(source int) (items []*ChartClassify, err error) {
 	o := orm.NewOrm()
-	sql := ` SELECT * FROM chart_classify WHERE parent_id<>0 AND source = ? order by sort asc,chart_classify_id asc`
+	sql := ` SELECT * FROM chart_classify WHERE source = ? order by sort asc,chart_classify_id asc`
 	_, err = o.Raw(sql, source).QueryRows(&items)
 	return
 }
@@ -348,3 +343,7 @@ func GetChartClassifyBySourceAndIsJoinPermission(source, isJoinPermission int) (
 	_, err = o.Raw(sql, source, isJoinPermission).QueryRows(&items)
 	return
 }
+
+type ChartClassifySyncReq struct {
+	List []*ChartClassify
+}

+ 18 - 0
routers/commentsRouter.go

@@ -241,6 +241,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:ChartClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:ChartClassifyController"],
+        beego.ControllerComments{
+            Method: "BatchSave",
+            Router: `/batch_save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:ChartClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:ChartClassifyController"],
+        beego.ControllerComments{
+            Method: "Save",
+            Router: `/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:ChartCollectController"] = append(beego.GlobalControllerRouter["eta/eta_forum_hub/controllers:ChartCollectController"],
         beego.ControllerComments{
             Method: "ChartList",

+ 6 - 0
routers/router.go

@@ -11,6 +11,7 @@ import (
 	"eta/eta_forum_hub/controllers"
 	"eta/eta_forum_hub/controllers/eta_trial"
 	"eta/eta_forum_hub/controllers/system"
+
 	"github.com/beego/beego/v2/server/web"
 )
 
@@ -49,6 +50,11 @@ func init() {
 				&eta_trial.EtaTrialController{},
 			),
 		),
+		web.NSNamespace("/chart_classify",
+			web.NSInclude(
+				&controllers.ChartClassifyController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 122 - 0
services/chart_classify.go

@@ -0,0 +1,122 @@
+package services
+
+import (
+	"eta/eta_forum_hub/models"
+	"eta/eta_forum_hub/services/alarm_msg"
+	"eta/eta_forum_hub/utils"
+	"fmt"
+	"time"
+)
+
+// 批量新增或更新图表分类
+func BatchAddOrUpdateChartClassify(req *models.ChartClassifySyncReq) (err error, isSendEmail bool) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("新增或更新图表分类, BatchAddOrUpdateChartClassify  Err: " + err.Error())
+			go alarm_msg.SendAlarmMsg("新增或更新图表分类, BatchAddOrUpdateChartClassify  Err: "+err.Error(), 3)
+		}
+	}()
+	isSendEmail = true
+	if len(req.List) == 0 {
+		return
+	}
+
+	// 构建待删除列表
+	deleteList := make(map[int]int)
+
+	// 获取现有分类数据
+	classifyList, err := models.GetChartClassifyAll(1)
+	if err != nil {
+		err = fmt.Errorf("获取图表分类数据失败,%v", err)
+		return
+	}
+
+	classifyMap := make(map[int]*models.ChartClassify)
+	for _, v := range classifyList {
+		deleteList[v.ChartClassifyId] = v.ChartClassifyId
+		classifyMap[v.ChartClassifyId] = v
+	}
+
+	// 处理请求列表
+	for _, item := range req.List {
+		classify, exists := classifyMap[item.ChartClassifyId]
+		if exists {
+			delete(deleteList, item.ChartClassifyId) 
+		} else {
+			classify = new(models.ChartClassify)
+		}
+
+		// 更新字段
+		classify.ChartClassifyId = item.ChartClassifyId
+		classify.ChartClassifyName = item.ChartClassifyName
+		classify.ParentId = item.ParentId
+		classify.Sort = item.Sort
+		classify.HasData = item.HasData
+		classify.Level = item.Level
+		classify.UniqueCode = item.UniqueCode
+		classify.Source = item.Source
+		classify.IsJoinPermission = item.IsJoinPermission
+		classify.ChartClassifyNameEn = item.ChartClassifyNameEn
+		classify.LevelPath = item.LevelPath
+		classify.IsSelected = item.IsSelected
+		classify.ResourceStatus = item.ResourceStatus
+		classify.SysUserId = item.SysUserId
+		classify.SysUserRealName = item.SysUserRealName
+		classify.ModifyTime = time.Now()
+
+		if !exists {
+			classify.CreateTime = time.Now()
+			_, err = models.AddChartClassify(classify)
+			if err != nil {
+				err = fmt.Errorf("新增图表分类失败,Err:%s", err.Error())
+				return
+			}
+		} else {
+			err = classify.Update([]string{})
+			if err != nil {
+				err = fmt.Errorf("更新图表分类失败,Err:%s", err.Error())
+				return
+			}
+		}
+	}
+
+	// 删除不在请求中的分类
+	for _, id := range deleteList {
+		err = models.DeleteChartClassify(id)
+		if err != nil {
+			err = fmt.Errorf("删除图表分类失败,Err:%s", err.Error())
+			return
+		}
+	}
+	return
+}
+
+
+// 新增或者更新图表分类
+func AddOrUpdateChartClassify(req *models.ChartClassify) (err error) {
+	defer func() {
+		if err != nil {
+			utils.FileLog.Info("新增或者更新图表分类, AddOrUpdateChartClassify  Err: " + err.Error())
+			go alarm_msg.SendAlarmMsg("新增或者更新图表分类, AddOrUpdateChartClassify  Err: "+err.Error(), 3)
+		}
+	}()
+	// 查询分类id是否存在
+	exist, err := models.GetChartClassifyById(req.ChartClassifyId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		err = fmt.Errorf("查询分类id是否存在失败,Err:%s", err.Error())
+		return
+	}
+	isAdd := false
+	if exist == nil {
+		isAdd = true
+	}
+	if isAdd {
+		req.CreateTime = time.Now()
+		req.ModifyTime = time.Now()
+		_, err = models.AddChartClassify(req)
+	} else {
+		exist.ModifyTime = time.Now()
+		err = exist.Update([]string{})
+	}
+	return
+}

+ 2 - 0
services/chart_info.go

@@ -112,6 +112,7 @@ func AddChartInfo(req *models.AddChartReq, sysUserId int, sysUserRealName string
 	}
 
 	chartInfo.ChartName = req.ChartInfo.ChartName
+	chartInfo.ChartClassifyId = req.ChartInfo.ChartClassifyId
 	chartInfo.EdbInfoIds = edbInfoIdStr
 
 	chartInfo.CreateTime = time.Now()
@@ -346,6 +347,7 @@ func UpdateChartInfoAndEdbInfo(req *models.AddChartReq, sysUserId int, sysUserRe
 	edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
 
 	chartInfo.ChartName = req.ChartInfo.ChartName
+	chartInfo.ChartClassifyId = req.ChartInfo.ChartClassifyId
 	chartInfo.EdbInfoIds = edbInfoIdStr
 	chartInfo.ModifyTime = time.Now()
 	chartInfo.IsSetName = req.ChartInfo.IsSetName