sys_department.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package services
  2. import (
  3. "eta/eta_mini_crm_ht/models"
  4. "strconv"
  5. "strings"
  6. )
  7. // GetSysDepartmentTree 递归获取部门目录树
  8. func GetSysDepartmentTree(list []*models.SysDepartmentList, parentId int) []*models.SysDepartmentList {
  9. res := make([]*models.SysDepartmentList, 0)
  10. for _, v := range list {
  11. if v.ParentId == parentId {
  12. t := new(models.SysDepartmentList)
  13. t.SysDepartmentId = v.SysDepartmentId
  14. t.SysDepartmentName = v.SysDepartmentName
  15. t.OutId = v.OutId
  16. t.Type = v.Type
  17. t.Level = v.Level
  18. t.ParentId = v.ParentId
  19. t.Child = GetSysDepartmentTree(list, v.OutId)
  20. res = append(res, t)
  21. }
  22. }
  23. return res
  24. }
  25. // DeleteSysDepartmentById 根据部门id去删除部门下的所有子目录,并清除用户的关联信息
  26. func DeleteSysDepartmentById(sysDepartmentId, level int) (err error) {
  27. sysDepartmentIds := make([]string, 0)
  28. sysDepartmentIds = append(sysDepartmentIds, strconv.Itoa(sysDepartmentId))
  29. var curIds = sysDepartmentIds
  30. var curStringIds string
  31. for i := level; i < 3; i++ {
  32. // 从当前层部门依次向下遍历子部门
  33. curStringIds = strings.Join(curIds, ",")
  34. if curStringIds == "" {
  35. break
  36. }
  37. sysDepartments, er := models.GetChildSysDepartmentListByIds(curStringIds)
  38. if er != nil {
  39. return er
  40. }
  41. curIds = make([]string, 0)
  42. for _, dep := range sysDepartments {
  43. if dep.SysDepartmentId == 0 {
  44. continue
  45. }
  46. sysDepartmentIds = append(sysDepartmentIds, strconv.Itoa(dep.SysDepartmentId))
  47. curIds = append(curIds, strconv.Itoa(dep.SysDepartmentId))
  48. }
  49. }
  50. err = models.DeleteSysDepartmentByIdV2(sysDepartmentIds, level)
  51. return
  52. }
  53. // GetSysDepartmentPathIdsById 根据当前部门id获取,部门层级列表pathIds [3]int,0索引表示1级部门id,1表示2级部门id...
  54. func GetSysDepartmentPathIdsById(sysDepartmentId int) (pathIds []int, err error) {
  55. sysDepartment, err := models.GetSysDepartmentById(sysDepartmentId)
  56. if err != nil {
  57. return
  58. }
  59. pathIds = make([]int, 3)
  60. pathIds[sysDepartment.Level-1] = sysDepartmentId
  61. curSysDepartmentId := sysDepartment.ParentId
  62. for curLevel := sysDepartment.Level - 1; curLevel >= 1; curLevel-- {
  63. upSysDepartment, er := models.GetSysDepartmentListByParentId(curSysDepartmentId)
  64. if er != nil {
  65. return
  66. }
  67. curSysDepartmentId = upSysDepartment.ParentId
  68. pathIds[curLevel-1] = upSysDepartment.SysDepartmentId
  69. }
  70. return
  71. }