sys_department.go 2.3 KB

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