Browse Source

feat:批量移动指标

Roc 5 months ago
parent
commit
89e4d57c51

+ 23 - 5
controllers/data_manage/edb_info.go

@@ -4622,16 +4622,27 @@ func (this *EdbInfoController) BatchMoveEdb() {
 		return
 	}
 
-	// 获取指标
-	edbInfoList, err := data.GetAllEdbInfoListBySearchPublicEdbReq(req.SearchPublicEdbReq, this.SysUser.AdminId)
+	classifyItem, err := data_manage.GetEdbClassifyById(req.NewClassifyId)
 	if err != nil {
-		br.Msg = "获取指标列表失败!"
-		br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
+		br.Msg = "获取指标分类失败!"
+		br.ErrMsg = "获取指标分类失败!" + err.Error()
+		return
+	}
+	if classifyItem.SysUserId != this.SysUser.AdminId {
+		br.Msg = `您没有权限移动指标到该分类!`
+		br.IsSendEmail = false
 		return
 	}
 
 	edbInfoIdList := make([]int, 0)
 	if req.IsSelectAll {
+		// 获取指标
+		edbInfoList, err := data.GetAllEdbInfoListBySearchPublicEdbReq(req.SearchPublicEdbReq, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取指标列表失败!"
+			br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
+			return
+		}
 		// 如果有过滤指标,那么就过滤吧
 		if len(req.NoEdbIdList) > 0 {
 			noEdbIdMap := make(map[int]bool)
@@ -4641,6 +4652,13 @@ func (this *EdbInfoController) BatchMoveEdb() {
 
 			for _, edbInfo := range edbInfoList {
 				if _, ok := noEdbIdMap[edbInfo.EdbInfoId]; !ok {
+
+					if edbInfo.SysUserId != this.SysUser.AdminId {
+						br.Msg = `您没有权限移动该指标!`
+						br.IsSendEmail = false
+						return
+					}
+
 					// 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
 					edbInfoIdList = append(edbInfoIdList, edbInfo.EdbInfoId)
 				}
@@ -4658,7 +4676,7 @@ func (this *EdbInfoController) BatchMoveEdb() {
 			}
 		}
 	} else {
-		edbInfoList, err = data_manage.GetEdbInfoListByCond(` AND edb_info_id in (?) `, []interface{}{req.EdbIdList})
+		edbInfoList, err := data_manage.GetEdbInfoListByCond(` AND edb_info_id in (?) `, []interface{}{req.EdbIdList})
 		if err != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()

+ 109 - 0
controllers/data_manage/edb_public.go

@@ -606,3 +606,112 @@ func (c *EdbPublicController) AllListByEs() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// BatchMoveEdb
+// @Title 指标批量移动接口
+// @Description 指标批量移动接口
+// @Param	request	body request.MoveEdbClassifyReq true "type json string"
+// @Success Ret=200 移动成功
+// @router /edb_info/public/batch_move [post]
+func (c *EdbPublicController) BatchMoveEdb() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	var req request.MoveEdbClassifyReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.NewClassifyId <= 0 {
+		br.Msg = `请选择要转移的新分类`
+		br.IsSendEmail = false
+		return
+	}
+
+	edbInfoIdList := make([]int, 0)
+	if req.IsSelectAll {
+		// 获取指标
+		edbInfoList, err := data.GetAllEdbInfoListBySearchPublicEdbReq(req.SearchPublicEdbReq, c.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取指标列表失败!"
+			br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
+			return
+		}
+		// 如果有过滤指标,那么就过滤吧
+		if len(req.NoEdbIdList) > 0 {
+			noEdbIdMap := make(map[int]bool)
+			for _, v := range req.NoEdbIdList {
+				noEdbIdMap[v] = true
+			}
+
+			for _, edbInfo := range edbInfoList {
+				if _, ok := noEdbIdMap[edbInfo.EdbInfoId]; !ok {
+					if edbInfo.PublicStatus != utils.EdbPublicSuccess {
+						br.Msg = `存在未公开的指标:` + edbInfo.EdbName
+						br.IsSendEmail = false
+						return
+					}
+
+					// 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
+					edbInfoIdList = append(edbInfoIdList, edbInfo.EdbInfoId)
+				}
+			}
+		} else {
+			for _, edbInfo := range edbInfoList {
+				if edbInfo.PublicStatus != utils.EdbPublicSuccess {
+					br.Msg = `存在未公开的指标:` + edbInfo.EdbName
+					br.IsSendEmail = false
+					return
+				}
+				edbInfoIdList = append(edbInfoIdList, edbInfo.EdbInfoId)
+			}
+		}
+	} else {
+		edbInfoList, err := data_manage.GetEdbInfoListByCond(` AND edb_info_id in (?) `, []interface{}{req.EdbIdList})
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range edbInfoList {
+			if v.PublicStatus != utils.EdbPublicSuccess {
+				br.Msg = `存在未公开的指标:` + v.EdbName
+				br.IsSendEmail = false
+				return
+			}
+		}
+		edbInfoIdList = req.EdbIdList
+	}
+
+	num := len(edbInfoIdList)
+	if num <= 0 {
+		br.Msg = `请选择要移动的指标!`
+		br.IsSendEmail = false
+		return
+	}
+	if num > 100 {
+		br.Msg = `最多只能选择100条指标!`
+		br.IsSendEmail = false
+		return
+	}
+
+	// 开始批量修改指标分类
+	if len(edbInfoIdList) > 0 {
+		err = data_manage.UpdatePublicClassifyIdByEdbInfoIdList(edbInfoIdList, req.NewClassifyId)
+		if err != nil {
+			br.Msg = `指标移动失败!`
+			br.ErrMsg = `指标移动失败,ERR:` + err.Error()
+			return
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}

+ 17 - 0
models/data_manage/public_edb_info.go

@@ -66,3 +66,20 @@ func UpdatePublicEdb(edbInfoIdList []int, status int) (err error) {
 
 	return
 }
+
+// UpdatePublicClassifyIdByEdbInfoIdList
+// @Description: 根据指标id列表更新所属公共分类id
+// @author: Roc
+// @datetime 2024-12-10 13:18:52
+// @param edbInfoId int
+// @param edbClassifyId int
+// @return err error
+func UpdatePublicClassifyIdByEdbInfoIdList(edbInfoIdList []int, edbClassifyId int) (err error) {
+	if len(edbInfoIdList) <= 0 {
+		return
+	}
+	sql := ` UPDATE edb_info SET edb_public_classify_id = ? WHERE  edb_info_id in (?) AND public_status = 3 `
+	err = global.DmSQL["data"].Exec(sql, edbClassifyId, edbInfoIdList).Error
+
+	return
+}