浏览代码

弹窗删除分组

kobe6258 1 月之前
父节点
当前提交
8b2b28618f
共有 4 个文件被更改,包括 292 次插入21 次删除
  1. 118 10
      controllers/sys_group.go
  2. 112 11
      controllers/sys_team.go
  3. 20 0
      models/system/sys_group.go
  4. 42 0
      services/system.go

+ 118 - 10
controllers/sys_group.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"eta_gn/eta_api/models"
 	"eta_gn/eta_api/models/system"
+	"eta_gn/eta_api/services"
 	"eta_gn/eta_api/utils"
 	"strings"
 	"time"
@@ -20,6 +21,51 @@ type SysGroupController struct {
 // @Success 200 新增成功
 // @router /group/add [post]
 func (this *SysGroupController) Add() {
+	//br := new(models.BaseResponse).Init()
+	//defer func() {
+	//	this.Data["json"] = br
+	//	this.ServeJSON()
+	//}()
+	//var req system.SysGroupAddReq
+	//err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	//if err != nil {
+	//	br.Msg = "参数解析异常!"
+	//	br.ErrMsg = "参数解析失败,Err:" + err.Error()
+	//	return
+	//}
+	//if req.DepartmentId <= 0 {
+	//	br.Msg = "请选择部门"
+	//	br.ErrMsg = "部门ID不可为空"
+	//	return
+	//}
+	//if req.GroupName == "" {
+	//	br.Msg = "分组名称不能为空"
+	//	return
+	//}
+	//groupNameArr := strings.Split(req.GroupName, ",")
+	//for _, v := range groupNameArr {
+	//	count, err := system.GetSysGroupCount(req.DepartmentId, v)
+	//	if err != nil {
+	//		br.Msg = "获取数据失败"
+	//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	if count <= 0 {
+	//		item := new(system.SysGroup)
+	//		item.GroupName = v
+	//		item.DepartmentId = req.DepartmentId
+	//		item.CreateTime = time.Now()
+	//		_, e := system.AddSysGroup(item)
+	//		if e != nil {
+	//			br.Msg = "新增失败"
+	//			br.ErrMsg = "新增失败,Err:" + e.Error()
+	//			return
+	//		}
+	//	}
+	//}
+	//br.Ret = 200
+	//br.Success = true
+	//br.Msg = "新增成功"
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -37,21 +83,75 @@ func (this *SysGroupController) Add() {
 		br.ErrMsg = "部门ID不可为空"
 		return
 	}
-	if req.GroupName == "" {
-		br.Msg = "分组名称不能为空"
+	//构建部门的分组树
+	groupList, err := system.GetSysGroupByDepartmentId(req.DepartmentId)
+	if err != nil {
+		br.Msg = "获取数据失败,获取当前部门的分组列表失败"
+		br.ErrMsg = "获取当前部门的分组列表失败,Err:" + err.Error()
 		return
 	}
+	//获取传入部门下的分组名称,分组名称为唯一标识,不会重复
 	groupNameArr := strings.Split(req.GroupName, ",")
+	root := new(services.GroupNode)
+	services.BuildGroupTree(groupList, 0, 2, root)
+	//现有的分组名称
+	existGroupMap := make(map[string]bool, len(root.Child))
+	for _, v := range root.Child {
+		existGroupMap[v.GroupName] = false
+	}
+	//传入的分组名称
+	reqGroupMap := make(map[string]int, len(groupNameArr))
 	for _, v := range groupNameArr {
-		count, err := system.GetSysGroupCount(req.DepartmentId, v)
-		if err != nil {
-			br.Msg = "获取数据失败"
-			br.ErrMsg = "获取数据失败,Err:" + err.Error()
-			return
+		reqGroupMap[v] = 1
+	}
+	//新增分组名称
+	newGroupMap := make(map[string]int)
+	groupIds := make([]int, 0)
+	if len(reqGroupMap) > 0 {
+		for k, _ := range reqGroupMap {
+			if _, ok := existGroupMap[k]; !ok {
+				newGroupMap[k] = 1
+				groupIds = append(groupIds, 0)
+			} else {
+				existGroupMap[k] = true
+			}
 		}
-		if count <= 0 {
+	}
+	var deleteIds []int
+	var addGroup bool
+	//删除所有分组即可
+	if req.GroupName == "" {
+		addGroup = false
+		for _, node := range root.Child {
+			//分组Id
+			deleteIds = append(deleteIds, node.GroupId)
+			//teamId
+			for _, subNode := range node.Child {
+				deleteIds = append(deleteIds, subNode.GroupId)
+			}
+		}
+	} else {
+		addGroup = true
+		for k, v := range existGroupMap {
+			if !v {
+				for _, node := range root.Child {
+					if node.GroupName == k {
+						//分组Id
+						deleteIds = append(deleteIds, node.GroupId)
+						//teamId
+						for _, subNode := range node.Child {
+							deleteIds = append(deleteIds, subNode.GroupId)
+						}
+					}
+				}
+			}
+		}
+	}
+	if addGroup {
+		//新增分组
+		for k, _ := range newGroupMap {
 			item := new(system.SysGroup)
-			item.GroupName = v
+			item.GroupName = k
 			item.DepartmentId = req.DepartmentId
 			item.CreateTime = time.Now()
 			_, e := system.AddSysGroup(item)
@@ -62,9 +162,17 @@ func (this *SysGroupController) Add() {
 			}
 		}
 	}
+	if len(deleteIds) > 0 {
+		err = services.DeleteSysGroupByIds(deleteIds)
+		if err != nil {
+			br.Msg = "删除失败"
+			br.ErrMsg = "删除失败,Err:" + err.Error()
+			return
+		}
+	}
 	br.Ret = 200
 	br.Success = true
-	br.Msg = "新增成功"
+	br.Msg = "保存成功"
 }
 
 // @Title 修改分组

+ 112 - 11
controllers/sys_team.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"eta_gn/eta_api/models"
 	"eta_gn/eta_api/models/system"
+	"eta_gn/eta_api/services"
 	"eta_gn/eta_api/utils"
 	"strings"
 	"time"
@@ -20,6 +21,52 @@ type SysTeamController struct {
 // @Success 200 新增成功
 // @router /team/add [post]
 func (this *SysTeamController) Add() {
+	//br := new(models.BaseResponse).Init()
+	//defer func() {
+	//	this.Data["json"] = br
+	//	this.ServeJSON()
+	//}()
+	//var req system.SysTeamAddReq
+	//err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	//if err != nil {
+	//	br.Msg = "参数解析异常!"
+	//	br.ErrMsg = "参数解析失败,Err:" + err.Error()
+	//	return
+	//}
+	//if req.GroupId <= 0 {
+	//	br.Msg = "请选择部门"
+	//	br.ErrMsg = "大组ID不可为空"
+	//	return
+	//}
+	//if req.TeamName == "" {
+	//	br.Msg = "分组名称不能为空"
+	//	return
+	//}
+	//teamNameArr := strings.Split(req.TeamName, ",")
+	//for _, v := range teamNameArr {
+	//	count, err := system.GetSysTeamCount(req.GroupId, v)
+	//	if err != nil {
+	//		br.Msg = "获取数据失败"
+	//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+	//		return
+	//	}
+	//	if count <= 0 {
+	//		item := new(system.SysGroup)
+	//		item.GroupName = v
+	//		item.DepartmentId = req.DepartmentId
+	//		item.ParentId = req.GroupId
+	//		item.CreateTime = time.Now()
+	//		_, e := system.AddSysGroup(item)
+	//		if e != nil {
+	//			br.Msg = "新增失败"
+	//			br.ErrMsg = "新增失败,Err:" + e.Error()
+	//			return
+	//		}
+	//	}
+	//}
+	//br.Ret = 200
+	//br.Success = true
+	//br.Msg = "新增成功"
 	br := new(models.BaseResponse).Init()
 	defer func() {
 		this.Data["json"] = br
@@ -37,21 +84,67 @@ func (this *SysTeamController) Add() {
 		br.ErrMsg = "大组ID不可为空"
 		return
 	}
-	if req.TeamName == "" {
-		br.Msg = "分组名称不能为空"
+	//构建部门的分组树
+	teamList, err := system.GetChildSysGroupByGroupId(req.GroupId)
+	teamNameArr := strings.Split(req.TeamName, ",")
+	if err != nil {
+		br.Msg = "获取数据失败,获取当前分组的team列表失败"
+		br.ErrMsg = "获取当前部门的分组列表失败,Err:" + err.Error()
 		return
 	}
-	teamNameArr := strings.Split(req.TeamName, ",")
+	//现有的分组名称
+	existTeamMap := make(map[string]bool, len(teamList))
+	for _, v := range teamList {
+		existTeamMap[v.GroupName] = false
+	}
+	//传入的分组名称
+	reqTeamMap := make(map[string]int, len(teamNameArr))
 	for _, v := range teamNameArr {
-		count, err := system.GetSysTeamCount(req.GroupId, v)
-		if err != nil {
-			br.Msg = "获取数据失败"
-			br.ErrMsg = "获取数据失败,Err:" + err.Error()
-			return
+		reqTeamMap[v] = 1
+	}
+	//新增分组名称
+	newTeamMap := make(map[string]int)
+	groupIds := make([]int, 0)
+	if len(reqTeamMap) > 0 {
+		for k, _ := range reqTeamMap {
+			if _, ok := existTeamMap[k]; !ok {
+				newTeamMap[k] = 1
+				groupIds = append(groupIds, 0)
+			} else {
+				existTeamMap[k] = true
+			}
 		}
-		if count <= 0 {
+	}
+	var deleteIds []int
+	var addGroup bool
+	//if req.TeamName == "" {
+	//	br.Msg = "分组名称不能为空"
+	//	return
+	//}
+	//删除所有team即可
+	if req.TeamName == "" {
+		addGroup = false
+		for _, node := range teamList {
+			//teamId
+			deleteIds = append(deleteIds, node.GroupId)
+		}
+	} else {
+		addGroup = true
+		for k, v := range existTeamMap {
+			if !v {
+				for _, node := range teamList {
+					if node.GroupName == k {
+						//分组Id
+						deleteIds = append(deleteIds, node.GroupId)
+					}
+				}
+			}
+		}
+	}
+	if addGroup {
+		for k, _ := range newTeamMap {
 			item := new(system.SysGroup)
-			item.GroupName = v
+			item.GroupName = k
 			item.DepartmentId = req.DepartmentId
 			item.ParentId = req.GroupId
 			item.CreateTime = time.Now()
@@ -63,9 +156,17 @@ func (this *SysTeamController) Add() {
 			}
 		}
 	}
+	if len(deleteIds) > 0 {
+		err = services.DeleteSysGroupByIds(deleteIds)
+		if err != nil {
+			br.Msg = "删除失败"
+			br.ErrMsg = "删除失败,Err:" + err.Error()
+			return
+		}
+	}
 	br.Ret = 200
 	br.Success = true
-	br.Msg = "新增成功"
+	br.Msg = "保存成功"
 }
 
 // @Title 修改分组

+ 20 - 0
models/system/sys_group.go

@@ -2,6 +2,7 @@ package system
 
 import (
 	"eta_gn/eta_api/global"
+	"gorm.io/gorm"
 	"time"
 )
 
@@ -186,3 +187,22 @@ type RoadshowGroupSellers struct {
 	AdminId   int    `description:"销售ID"`
 	AdminName string `description:"销售名称"`
 }
+
+func DeleteSysGroupByIds(tx *gorm.DB, groupIds []int) (err error) {
+	sql := `DELETE FROM sys_group WHERE group_id in ?`
+	//o := global.DbMap[utils.DbNameMaster]
+	err = tx.Exec(sql, groupIds).Error
+	return
+}
+
+func ClearSysUserGroupByIds(tx *gorm.DB, groupIds []int) (err error) {
+	sql := `UPDATE "admin" SET group_id=0,group_name='' WHERE group_id in ? `
+	err = tx.Exec(sql, groupIds).Error
+	return
+}
+func GetChildSysGroupByGroupId(groupId int) (items []*SysGroup, err error) {
+	sql := `SELECT * FROM sys_group WHERE parent_id=? ORDER BY sort ASC, create_time ASC`
+	o := global.DEFAULT_DmSQL
+	err = o.Raw(sql, groupId).Find(&items).Error
+	return
+}

+ 42 - 0
services/system.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"eta_gn/eta_api/global"
 	"eta_gn/eta_api/models/system"
 	"eta_gn/eta_api/utils"
 )
@@ -34,6 +35,12 @@ func GetRoleTypeCode(roleType string) string {
 	return roleTypeCode
 }
 
+type GroupNode struct {
+	GroupId   int
+	GroupName string
+	Child     []*GroupNode
+}
+
 // GetMenuTreeRecursive 递归菜单树
 func GetMenuTreeRecursive(list []*system.SysMenuItem, parentId int) []*system.SysMenuItem {
 	res := make([]*system.SysMenuItem, 0)
@@ -45,3 +52,38 @@ func GetMenuTreeRecursive(list []*system.SysMenuItem, parentId int) []*system.Sy
 	}
 	return res
 }
+
+func BuildGroupTree(list []*system.SysGroupList, current, depth int, node *GroupNode) {
+	if current == depth {
+		utils.FileLog.Info("到达组织最深层,停止递归")
+		return
+	}
+	for _, v := range list {
+		if v.ParentId == node.GroupId {
+			subNode := &GroupNode{
+				GroupId:   v.GroupId,
+				GroupName: v.GroupName,
+				Child:     make([]*GroupNode, 0),
+			}
+			node.Child = append(node.Child, subNode)
+			BuildGroupTree(list, current+1, depth, subNode)
+		}
+	}
+}
+
+func DeleteSysGroupByIds(ids []int) (err error) {
+	tx := global.DEFAULT_DmSQL.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+	err = system.DeleteSysGroupByIds(tx, ids)
+	if err != nil {
+		return
+	}
+	err = system.ClearSysUserGroupByIds(tx, ids)
+	return
+}