sys_group.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/models"
  5. "eta/eta_api/models/system"
  6. "eta/eta_api/services"
  7. "eta/eta_api/services/eta_forum"
  8. "eta/eta_api/utils"
  9. "strings"
  10. "time"
  11. )
  12. // 部门组
  13. type SysGroupController struct {
  14. BaseAuthController
  15. }
  16. // @Title 新增分组
  17. // @Description 新增分组接口
  18. // @Param request body system.SysGroupAddReq true "type json string"
  19. // @Success 200 新增成功
  20. // @router /group/add [post]
  21. func (this *SysGroupController) Add() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. var req system.SysGroupAddReq
  28. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  29. if err != nil {
  30. br.Msg = "参数解析异常!"
  31. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  32. return
  33. }
  34. if req.DepartmentId <= 0 {
  35. br.Msg = "请选择部门"
  36. br.ErrMsg = "部门ID不可为空"
  37. return
  38. }
  39. //构建部门的分组树
  40. groupList,err:=system.GetGroupByDepartmentId(req.DepartmentId)
  41. if err!=nil{
  42. br.Msg = "获取数据失败,获取当前部门的分组列表失败"
  43. br.ErrMsg = "获取当前部门的分组列表失败,Err:" + err.Error()
  44. return
  45. }
  46. //获取传入部门下的分组名称,分组名称为唯一标识,不会重复
  47. groupNameArr := strings.Split(req.GroupName, ",")
  48. root := new(services.GroupNode)
  49. services.BuildGroupTree(groupList,0,2,root)
  50. //现有的分组名称
  51. existGroupMap:=make(map[string]bool,len(root.Child))
  52. for _, v := range root.Child {
  53. existGroupMap[v.GroupName] = false
  54. }
  55. //传入的分组名称
  56. reqGroupMap:=make(map[string]int,len(groupNameArr))
  57. for _, v := range groupNameArr {
  58. reqGroupMap[v] = 1
  59. }
  60. //新增分组名称
  61. newGroupMap := make(map[string]int)
  62. groupIds := make([]int, 0)
  63. if len(reqGroupMap)>0{
  64. for k, _ := range reqGroupMap {
  65. if _, ok := existGroupMap[k]; !ok {
  66. newGroupMap[k] = 1
  67. groupIds = append(groupIds, 0)
  68. }else{
  69. existGroupMap[k] = true
  70. }
  71. }
  72. }
  73. var deleteIds []int
  74. var addGroup bool
  75. //删除所有分组即可
  76. if req.GroupName == "" {
  77. addGroup=false
  78. for _, node := range root.Child {
  79. //分组Id
  80. deleteIds = append(deleteIds, node.GroupId)
  81. //teamId
  82. for _, subNode := range node.Child {
  83. deleteIds=append(deleteIds, subNode.GroupId)
  84. }
  85. }
  86. }else{
  87. addGroup=true
  88. for k, v := range existGroupMap {
  89. if !v{
  90. for _, node := range root.Child {
  91. if node.GroupName == k{
  92. //分组Id
  93. deleteIds = append(deleteIds, node.GroupId)
  94. //teamId
  95. for _, subNode := range node.Child {
  96. deleteIds=append(deleteIds, subNode.GroupId)
  97. }
  98. }
  99. }
  100. }
  101. }
  102. }
  103. if addGroup{
  104. //新增分组
  105. for k, _ := range newGroupMap {
  106. item := new(system.SysGroup)
  107. item.GroupName = k
  108. item.DepartmentId = req.DepartmentId
  109. item.CreateTime = time.Now()
  110. groupId, e := system.AddSysGroup(item)
  111. if e != nil {
  112. br.Msg = "新增失败"
  113. br.ErrMsg = "新增失败,Err:" + e.Error()
  114. return
  115. }
  116. // 同步分组缓存
  117. if utils.BusinessCode == utils.BusinessCodeRelease {
  118. var syncData system.SyncGroupData
  119. syncData.Source = utils.SOURCE_ETA_FLAG
  120. syncData.GroupId = int(groupId)
  121. _ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
  122. }
  123. groupIds = append(groupIds, int(groupId))
  124. }
  125. go eta_forum.GroupSave(groupIds)
  126. //删除分组合他的子分组,写死只有2层分组,因此逻辑代码也就写死2层,一层分组,一层team
  127. }
  128. if len(deleteIds)>0 {
  129. err =services.DeleteSysGroupByIds(deleteIds)
  130. if err != nil {
  131. br.Msg = "删除失败"
  132. br.ErrMsg = "删除失败,Err:" + err.Error()
  133. return
  134. }
  135. // 同步分组缓存
  136. if utils.BusinessCode == utils.BusinessCodeRelease {
  137. for _, groupId := range deleteIds {
  138. var syncData system.SyncGroupData
  139. syncData.Source = utils.SOURCE_ETA_FLAG
  140. syncData.GroupId = groupId
  141. _ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
  142. go eta_forum.GroupDelete(groupId)
  143. }
  144. }
  145. }
  146. br.Ret = 200
  147. br.Success = true
  148. br.Msg = "保存成功"
  149. }
  150. // @Title 修改分组
  151. // @Description 修改分组接口
  152. // @Param request body system.SysGroupEditReq true "type json string"
  153. // @Success 200 修改成功
  154. // @router /group/edit [post]
  155. func (this *SysGroupController) Edit() {
  156. br := new(models.BaseResponse).Init()
  157. defer func() {
  158. this.Data["json"] = br
  159. this.ServeJSON()
  160. }()
  161. var req system.SysGroupEditReq
  162. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  163. if err != nil {
  164. br.Msg = "参数解析异常!"
  165. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  166. return
  167. }
  168. if req.GroupId <= 0 {
  169. br.Msg = "参数错误"
  170. br.ErrMsg = "参数错误,GroupId 小于等于0 "
  171. return
  172. }
  173. if req.GroupName == "" {
  174. br.Msg = "分组名称不能为空"
  175. return
  176. }
  177. item, err := system.GetSysGroupByName(req.GroupName)
  178. if err != nil && !utils.IsErrNoRow(err) {
  179. br.Msg = "获取数据失败"
  180. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  181. return
  182. }
  183. if item != nil {
  184. if item.GroupId != req.GroupId && item.GroupId > 0 {
  185. br.Msg = "名称已存在,请重新输入"
  186. return
  187. }
  188. }
  189. err = system.ModifySysGroup(req.GroupName, req.GroupId)
  190. if err != nil {
  191. br.Msg = "修改失败"
  192. br.ErrMsg = "修改失败,Err:" + err.Error()
  193. return
  194. }
  195. // 同步分组缓存
  196. if utils.BusinessCode == utils.BusinessCodeRelease {
  197. var syncData system.SyncGroupData
  198. syncData.Source = utils.SOURCE_ETA_FLAG
  199. syncData.GroupId = req.GroupId
  200. _ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
  201. }
  202. groupIds := make([]int, 0)
  203. groupIds = append(groupIds, req.GroupId)
  204. go eta_forum.GroupSave(groupIds)
  205. br.Ret = 200
  206. br.Success = true
  207. br.Msg = "修改成功"
  208. }
  209. // @Title 删除分组
  210. // @Description 删除分组接口
  211. // @Param request body system.SysGroupDeleteReq true "type json string"
  212. // @Success 200 删除成功
  213. // @router /group/delete [post]
  214. func (this *SysGroupController) Delete() {
  215. br := new(models.BaseResponse).Init()
  216. defer func() {
  217. this.Data["json"] = br
  218. this.ServeJSON()
  219. }()
  220. var req system.SysGroupDeleteReq
  221. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  222. if err != nil {
  223. br.Msg = "参数解析异常!"
  224. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  225. return
  226. }
  227. if req.GroupId <= 0 {
  228. br.Msg = "参数错误"
  229. br.ErrMsg = "参数错误,GroupId 小于等于0 "
  230. return
  231. }
  232. err = system.DeleteSysGroup(req.GroupId)
  233. if err != nil {
  234. br.Msg = "删除失败"
  235. br.ErrMsg = "删除失败,Err:" + err.Error()
  236. return
  237. }
  238. err = system.ClearSysUserGroup(req.GroupId)
  239. if err != nil {
  240. br.Msg = "删除失败"
  241. br.ErrMsg = "删除失败,情况分组失败,Err:" + err.Error()
  242. return
  243. }
  244. // 同步分组缓存
  245. if utils.BusinessCode == utils.BusinessCodeRelease {
  246. var syncData system.SyncGroupData
  247. syncData.Source = utils.SOURCE_ETA_FLAG
  248. syncData.GroupId = req.GroupId
  249. _ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
  250. }
  251. go eta_forum.GroupDelete(req.GroupId)
  252. br.Ret = 200
  253. br.Success = true
  254. br.Msg = "删除成功"
  255. }
  256. // SetSort
  257. // @Title 分组排序
  258. // @Description 分组排序
  259. // @Param request body system.SysGroupEditReq true "type json string"
  260. // @Success 200 修改成功
  261. // @router /group/set_sort [post]
  262. func (this *SysGroupController) SetSort() {
  263. br := new(models.BaseResponse).Init()
  264. defer func() {
  265. if br.ErrMsg == "" {
  266. br.IsSendEmail = false
  267. }
  268. this.Data["json"] = br
  269. this.ServeJSON()
  270. }()
  271. var req system.SysGroupSortReq
  272. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  273. if err != nil {
  274. br.Msg = "参数解析异常!"
  275. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  276. return
  277. }
  278. // 部门排序
  279. if len(req.DepartmentIds) > 0 {
  280. updateArr := make([]*system.DepartmentSort, 0)
  281. for k, d := range req.DepartmentIds {
  282. updateArr = append(updateArr, &system.DepartmentSort{
  283. DepartmentId: d,
  284. Sort: k + 1,
  285. })
  286. }
  287. if e := system.MultiUpdateDepartmentSort(updateArr); e != nil {
  288. br.Msg = "操作失败"
  289. br.ErrMsg = "批量更新部门排序失败, Err: " + e.Error()
  290. return
  291. }
  292. }
  293. // 分组排序/小组排序
  294. if len(req.GroupIds) > 0 || len(req.TeamIds) > 0 {
  295. updateArr := make([]*system.GroupSort, 0)
  296. if len(req.GroupIds) > 0 {
  297. for k, g := range req.GroupIds {
  298. updateArr = append(updateArr, &system.GroupSort{
  299. GroupId: g,
  300. Sort: k + 1,
  301. })
  302. }
  303. }
  304. if len(req.TeamIds) > 0 {
  305. for k, t := range req.TeamIds {
  306. updateArr = append(updateArr, &system.GroupSort{
  307. GroupId: t,
  308. Sort: k + 1,
  309. })
  310. }
  311. }
  312. if len(updateArr) > 0 {
  313. if e := system.MultiUpdateGroupSort(updateArr); e != nil {
  314. br.Msg = "操作失败"
  315. br.ErrMsg = "批量更新分组排序失败, Err: " + e.Error()
  316. return
  317. }
  318. // 同步分组缓存
  319. if utils.BusinessCode == utils.BusinessCodeRelease {
  320. for _, g := range updateArr {
  321. var syncData system.SyncGroupData
  322. syncData.Source = utils.SOURCE_ETA_FLAG
  323. syncData.GroupId = g.GroupId
  324. _ = utils.Rc.LPush(utils.CACHE_SYNC_GROUP, syncData)
  325. }
  326. }
  327. }
  328. }
  329. br.Ret = 200
  330. br.Success = true
  331. br.Msg = "操作成功"
  332. }