kobe6258 2 тижнів тому
батько
коміт
a942854589
4 змінених файлів з 218 додано та 28 видалено
  1. 85 14
      controllers/sys_group.go
  2. 77 12
      controllers/sys_team.go
  3. 13 2
      models/system/sys_group.go
  4. 43 0
      services/system.go

+ 85 - 14
controllers/sys_group.go

@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services"
 	"eta/eta_api/services/eta_forum"
 	"eta/eta_api/utils"
 	"strings"
@@ -38,22 +39,75 @@ func (this *SysGroupController) Add() {
 		br.ErrMsg = "部门ID不可为空"
 		return
 	}
-	if req.GroupName == "" {
-		br.Msg = "分组名称不能为空"
+	//构建部门的分组树
+	groupList,err:=system.GetGroupByDepartmentId(req.DepartmentId)
+	if err!=nil{
+		br.Msg = "获取数据失败,获取当前部门的分组列表失败"
+		br.ErrMsg = "获取当前部门的分组列表失败,Err:" + err.Error()
 		return
 	}
+	//获取传入部门下的分组名称,分组名称为唯一标识,不会重复
 	groupNameArr := strings.Split(req.GroupName, ",")
-	groupIds := make([]int, 0)
+	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()
 			groupId, e := system.AddSysGroup(item)
@@ -62,7 +116,6 @@ func (this *SysGroupController) Add() {
 				br.ErrMsg = "新增失败,Err:" + e.Error()
 				return
 			}
-
 			// 同步分组缓存
 			if utils.BusinessCode == utils.BusinessCodeRelease {
 				var syncData system.SyncGroupData
@@ -72,12 +125,30 @@ func (this *SysGroupController) Add() {
 			}
 			groupIds = append(groupIds, int(groupId))
 		}
+		go eta_forum.GroupSave(groupIds)
+		//删除分组合他的子分组,写死只有2层分组,因此逻辑代码也就写死2层,一层分组,一层team
+	}
+	if len(deleteIds)>0 {
+		err =services.DeleteSysGroupByIds(deleteIds)
+		if err != nil {
+			br.Msg = "删除失败"
+			br.ErrMsg = "删除失败,Err:" + err.Error()
+			return
+		}
+		// 同步分组缓存
+		if utils.BusinessCode == utils.BusinessCodeRelease {
+			for _, groupId := range deleteIds {
+				var syncData system.SyncGroupData
+				syncData.Source = utils.SOURCE_ETA_FLAG
+				syncData.GroupId = groupId
+				_ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
+				go eta_forum.GroupDelete(groupId)
+			}
+		}
 	}
-
-	go eta_forum.GroupSave(groupIds)
 	br.Ret = 200
 	br.Success = true
-	br.Msg = "新增成功"
+	br.Msg = "保存成功"
 }
 
 // @Title 修改分组

+ 77 - 12
controllers/sys_team.go

@@ -4,6 +4,8 @@ import (
 	"encoding/json"
 	"eta/eta_api/models"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services"
+	"eta/eta_api/services/eta_forum"
 	"eta/eta_api/utils"
 	"strings"
 	"time"
@@ -37,21 +39,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
+			}
+		}
+	}
+	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)
 		}
-		if count <= 0 {
+	} 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()
@@ -61,7 +109,6 @@ func (this *SysTeamController) Add() {
 				br.ErrMsg = "新增失败,Err:" + e.Error()
 				return
 			}
-
 			// 同步分组缓存
 			if utils.BusinessCode == utils.BusinessCodeRelease {
 				var syncData system.SyncGroupData
@@ -71,9 +118,27 @@ func (this *SysTeamController) Add() {
 			}
 		}
 	}
+	if len(deleteIds)>0 {
+		err =services.DeleteSysGroupByIds(deleteIds)
+		if err != nil {
+			br.Msg = "删除失败"
+			br.ErrMsg = "删除失败,Err:" + err.Error()
+			return
+		}
+		// 同步分组缓存
+		if utils.BusinessCode == utils.BusinessCodeRelease {
+			for _, groupId := range deleteIds {
+				var syncData system.SyncGroupData
+				syncData.Source = utils.SOURCE_ETA_FLAG
+				syncData.GroupId = groupId
+				_ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
+				go eta_forum.GroupDelete(groupId)
+			}
+		}
+	}
 	br.Ret = 200
 	br.Success = true
-	br.Msg = "新增成功"
+	br.Msg = "保存成功"
 }
 
 // @Title 修改分组

+ 13 - 2
models/system/sys_group.go

@@ -3,6 +3,7 @@ package system
 import (
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
+	"gorm.io/gorm"
 	"time"
 )
 
@@ -84,7 +85,12 @@ func DeleteSysGroup(groupId int) (err error) {
 	err = o.Exec(sql, groupId).Error
 	return
 }
-
+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
+}
 // 因前端显示需要,TopId字段用来当做一级部门id,DepartmentId为当前分组id
 type SysGroupList struct {
 	GroupId      int            `orm:"column(group_id);pk" gorm:"primaryKey" json:"DepartmentId" description:"分组ID"`
@@ -118,7 +124,12 @@ func ClearSysUserGroup(groupId int) (err error) {
 	err = o.Exec(sql, groupId).Error
 	return
 }
-
+func ClearSysUserGroupByIds(tx *gorm.DB,groupIds []int) (err error) {
+	sql := `UPDATE admin SET group_id=0,group_name='' WHERE group_id in ? `
+	sql = utils.ReplaceDriverKeywords("", sql)
+	err = tx.Exec(sql, groupIds).Error
+	return
+}
 func GetSysGroupByDirectorId(directorId int) (items []*SysGroupList, err error) {
 	sql := `SELECT * FROM sys_group WHERE group_id=? ORDER BY sort ASC, create_time ASC`
 	o := global.DbMap[utils.DbNameMaster]

+ 43 - 0
services/system.go

@@ -1,6 +1,7 @@
 package services
 
 import (
+	"eta/eta_api/global"
 	"eta/eta_api/models/company"
 	"eta/eta_api/models/roadshow"
 	"eta/eta_api/models/system"
@@ -120,3 +121,45 @@ func GetMenuTreeRecursive(list []*system.SysMenuItem, parentId int) []*system.Sy
 	}
 	return res
 }
+
+
+type GroupNode struct{
+	GroupId int
+	GroupName string
+	Child []*GroupNode
+}
+
+func BuildGroupTree(list []*system.SysFullGroup,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.DbMap[utils.DbNameMaster].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
+}