xyxie 5 miesięcy temu
rodzic
commit
068cd133b7

+ 152 - 3
controllers/material/material.go

@@ -811,7 +811,7 @@ func (this *MaterialController) List() {
 	}
 
 	//获取图表信息
-	list, err := material.GetMaterialListByCondition(condition, pars, startSize, pageSize)
+	list, err := material.GetMaterialListPageByCondition(condition, pars, startSize, pageSize)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Success = true
 		br.Msg = "获取素材库信息失败"
@@ -930,7 +930,7 @@ func (this *MaterialController) Save() {
 // @Description 删除素材库接口
 // @Param	request	body material.DeleteSandbox true "type json string"
 // @Success 200 标记成功
-// @router /delete [post]
+// @router /del [post]
 func (this *MaterialController) Delete() {
 	br := new(models.BaseResponse).Init()
 	defer func() {
@@ -958,7 +958,82 @@ func (this *MaterialController) Delete() {
 	}
 
 	//删除素材库
-	err = materialService.DeleteMaterial(req.MaterialId)
+	err = material.DeleteByMaterialIds([]int{req.MaterialId})
+	if err != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "操作失败,Err:" + err.Error()
+		return
+	}
+
+	msg := "删除成功"
+	br.Ret = 200
+	br.Success = true
+	br.Msg = msg
+}
+
+// BatchDelete
+// @Title 批量删除素材库
+// @Description 删除素材库接口
+// @Param	request	body material.DeleteSandbox true "type json string"
+// @Success 200 标记成功
+// @router /batch/del [post]
+func (this *MaterialController) BatchDelete() {
+	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 material.BatchDeleteMaterialReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	deleteMaterialIds := make([]int, 0)
+	if req.IsSelectAll {
+		classifyId := req.ClassifyId
+		keyword := req.Keyword
+		isShowMe := req.IsShowMe
+		//获取图表信息
+		list, e, msg := materialService.GetBatchSelectedMaterialList(classifyId, keyword, isShowMe, sysUser)
+		if e != nil {
+			br.Msg = "获取素材库信息失败"
+			if msg != "" {
+				br.Msg = msg
+			}
+			br.ErrMsg = "获取素材库信息失败,Err:" + e.Error()
+			return
+		}
+		notSelectIds := make(map[int]struct{})
+		if len(req.MaterialIds) >= 0 {
+			for _, v := range req.MaterialIds {
+				notSelectIds[v] = struct{}{}
+			}
+		}
+		for _, v := range list {
+			if _, ok := notSelectIds[v.MaterialId]; !ok {
+				deleteMaterialIds = append(deleteMaterialIds, v.MaterialId)
+			}
+		}
+	} else {
+		deleteMaterialIds = req.MaterialIds
+	}
+
+	if len(deleteMaterialIds) <= 0 {
+		br.Msg = "请选择删除的素材"
+		return
+	}
+
+	//删除素材库
+	err = material.DeleteByMaterialIds(deleteMaterialIds)
 	if err != nil {
 		br.Msg = err.Error()
 		return
@@ -1278,3 +1353,77 @@ func (this *MaterialController) Upload() {
 	br.Success = true
 	br.Data = resp
 }
+
+// BatchChangeClassify
+// @Title 批量更换分类
+// @Description 批量更换分类
+// @Param	request	body material.DeleteSandbox true "type json string"
+// @Success 200 标记成功
+// @router /batch/changeClassify [post]
+func (this *MaterialController) BatchChangeClassify() {
+	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 material.BatchChangeClassifyMaterialReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	updateMaterialIds := make([]int, 0)
+	if req.IsSelectAll {
+		classifyId := req.ClassifyId
+		keyword := req.Keyword
+		isShowMe := req.IsShowMe
+		//获取图表信息
+		list, e, msg := materialService.GetBatchSelectedMaterialList(classifyId, keyword, isShowMe, sysUser)
+		if e != nil {
+			br.Msg = "获取素材库信息失败"
+			if msg != "" {
+				br.Msg = msg
+			}
+			br.ErrMsg = "获取素材库信息失败,Err:" + e.Error()
+			return
+		}
+		notSelectIds := make(map[int]struct{})
+		if len(req.MaterialIds) >= 0 {
+			for _, v := range req.MaterialIds {
+				notSelectIds[v] = struct{}{}
+			}
+		}
+		for _, v := range list {
+			if _, ok := notSelectIds[v.MaterialId]; !ok {
+				updateMaterialIds = append(updateMaterialIds, v.MaterialId)
+			}
+		}
+	} else {
+		updateMaterialIds = req.MaterialIds
+	}
+
+	if len(updateMaterialIds) <= 0 {
+		br.Msg = "请选择删除的素材"
+		return
+	}
+
+	//删除素材库
+	err = material.UpdateClassifyByMaterialIds(updateMaterialIds, req.NewClassifyId, time.Now())
+	if err != nil {
+		br.Msg = err.Error()
+		return
+	}
+
+	msg := "操作成功"
+	br.Ret = 200
+	br.Success = true
+	br.Msg = msg
+}

+ 39 - 1
models/material/material.go

@@ -35,6 +35,19 @@ func GetMaterialById(MaterialId int) (materialInfo *Material, err error) {
 	err = o.Raw(sql, MaterialId).QueryRow(&materialInfo)
 	return
 }
+func DeleteByMaterialIds(ids []int) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `DELETE FROM material WHERE material_id in (` + utils.GetOrmInReplace(len(ids)) + `)`
+	_, err = o.Raw(sql, ids).Exec()
+	return
+}
+
+func UpdateClassifyByMaterialIds(ids []int, classifyId int, now time.Time) (err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := `UPDATE material SET classify_id=?, modify_time=? WHERE material_id in (` + utils.GetOrmInReplace(len(ids)) + `) and classify_id != ?`
+	_, err = o.Raw(sql, classifyId, now, ids, classifyId).Exec()
+	return
+}
 
 // AddMultiMaterial 批量添加素材
 func AddMultiMaterial(materialInfoList []*Material) (err error) {
@@ -161,7 +174,7 @@ type MaterialListItems struct {
 	ParentIds  string
 }
 
-func GetMaterialListByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*MaterialListItems, err error) {
+func GetMaterialListPageByCondition(condition string, pars []interface{}, startSize, pageSize int) (item []*MaterialListItems, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := ` SELECT * FROM material WHERE 1=1 `
 	if condition != "" {
@@ -172,6 +185,17 @@ func GetMaterialListByCondition(condition string, pars []interface{}, startSize,
 	return
 }
 
+func GetMaterialListByCondition(condition string, pars []interface{}) (item []*MaterialListItems, err error) {
+	o := orm.NewOrmUsingDB("rddp")
+	sql := ` SELECT * FROM material WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += " ORDER BY create_time DESC, material_id DESC"
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}
+
 func GetMaterialListCountByCondition(condition string, pars []interface{}) (count int, err error) {
 	o := orm.NewOrmUsingDB("rddp")
 	sql := ` SELECT COUNT(1) AS count FROM material WHERE 1=1 `
@@ -327,6 +351,20 @@ type DeleteMaterial struct {
 	MaterialId int `description:"素材id"`
 }
 
+// BatchDeleteMaterialReq 删除素材的请求数据
+type BatchDeleteMaterialReq struct {
+	MaterialIds []int  `description:"素材id"`
+	ClassifyId  int    `description:"分类id"`
+	IsShowMe    bool   `description:"操作人id,支持多选,用英文,隔开"`
+	Keyword     string `description:"关键字"`
+	IsSelectAll bool   `description:"是否选择所有指标"`
+}
+
+type BatchChangeClassifyMaterialReq struct {
+	BatchDeleteMaterialReq
+	NewClassifyId int `description:"新分类ID"`
+}
+
 // RenameMaterialReq 添加/编辑素材的请求数据
 type RenameMaterialReq struct {
 	MaterialId   int    `description:"素材id"`

+ 19 - 1
routers/commentsRouter.go

@@ -7369,6 +7369,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"],
+        beego.ControllerComments{
+            Method: "BatchChangeClassify",
+            Router: `/batch/changeClassify`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"],
+        beego.ControllerComments{
+            Method: "BatchDelete",
+            Router: `/batch/del`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"],
         beego.ControllerComments{
             Method: "AddMaterialClassify",
@@ -7435,7 +7453,7 @@ func init() {
     beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/material:MaterialController"],
         beego.ControllerComments{
             Method: "Delete",
-            Router: `/delete`,
+            Router: `/del`,
             AllowHTTPMethods: []string{"post"},
             MethodParams: param.Make(),
             Filters: nil,

+ 70 - 14
services/material/material.go

@@ -7,6 +7,7 @@ import (
 	_interface "eta/eta_api/services/interface"
 	"eta/eta_api/utils"
 	"fmt"
+	"strconv"
 	"strings"
 	"time"
 )
@@ -167,20 +168,6 @@ func materialClassifyHaveChildV2(allNode []*material.MaterialClassifyItems, node
 	return
 }
 
-// DeleteMaterial 删除素材
-func DeleteMaterial(materialId int) (err error) {
-	// 获取素材主表信息
-	/*materialInfo, err := materialId.dele(materialId)
-	if err != nil {
-		return
-	}
-
-	materialInfo.IsDelete = 1
-	var updateMaterialColumn = []string{"IsDelete"}
-	err = materialInfo.Update(updateMaterialColumn)*/
-	return
-}
-
 func MoveMaterialClassify(classifyInfo *material.MaterialClassify, req *material.MoveMaterialClassifyReq) (err error, errMsg string) {
 	nodeMove := models.SingleMoveNodeReq{}
 	nodeMove.NodeId = req.ClassifyId
@@ -290,3 +277,72 @@ func (m *ClassifyMove) GetFirstNodeInfoByParentId(parentId int) (nodeInfo *model
 	}
 	return
 }
+
+func GetBatchSelectedMaterialList(classifyId int, keyword string, isShowMe bool, sysUser *system.Admin) (list []*material.MaterialListItems, err error, errMsg string) {
+	var condition string
+	var pars []interface{}
+
+	if classifyId <= 0 {
+		errMsg = "请选择分类"
+		err = fmt.Errorf(errMsg)
+		return
+	}
+	// 查询当前的分类
+	classifyInfo, e := material.GetMaterialClassifyById(classifyId)
+	if e != nil {
+		errMsg = "分类不存在"
+		err = fmt.Errorf("获取分类信息失败,Err:" + e.Error())
+		return
+	}
+	// 获取所有子分类
+	childList, e := material.GetMaterialClassifyByLevelPath(classifyInfo.LevelPath)
+	if e != nil {
+		errMsg = "获取分类失败"
+		err = fmt.Errorf("获取子分类失败,Err:" + e.Error())
+		return
+	}
+	// 把原先的父级levePath,替换成最新的父级序列
+	classifyIdMap := make(map[string]struct{})
+	classifyIds := make([]string, 0)
+	childClassifyMap := make(map[int]*material.MaterialClassify)
+	for _, tmp := range childList {
+		childClassifyMap[tmp.ClassifyId] = tmp
+		//获取字符串前缀的位置
+		after, _ := strings.CutPrefix(tmp.LevelPath, classifyInfo.LevelPath)
+		fmt.Println("after", after)
+		// 拼接字符串
+		if after != "" {
+			ids := strings.Split(after, ",")
+			for _, v := range ids {
+				if _, ok := classifyIdMap[v]; !ok {
+					classifyIds = append(classifyIds, v)
+					classifyIdMap[v] = struct{}{}
+				}
+			}
+		}
+	}
+	classifyIds = append(classifyIds, strconv.Itoa(classifyId))
+	if len(classifyIds) > 0 {
+		condition += " AND classify_id IN(" + utils.GetOrmInReplace(len(classifyIds)) + ") "
+		pars = append(pars, classifyIds)
+	}
+
+	if keyword != "" {
+		condition += ` AND  ( material_name LIKE '%` + keyword + `%' )`
+	}
+
+	//只看我的
+	if isShowMe {
+		condition += ` AND sys_user_id = ? `
+		pars = append(pars, sysUser.AdminId)
+	}
+
+	//获取图表信息
+	list, err = material.GetMaterialListByCondition(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		errMsg = "获取素材库信息失败"
+		err = fmt.Errorf("获取素材库信息失败,Err:" + err.Error())
+		return
+	}
+	return
+}