sys_department.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package services
  2. import (
  3. "eta/eta_mini_crm/models"
  4. "eta/eta_mini_crm/utils"
  5. )
  6. // GetSysDepartmentTree 递归获取部门目录树
  7. func GetSysDepartmentTree(list []*models.SysDepartmentList, parentId int) []*models.SysDepartmentList {
  8. res := make([]*models.SysDepartmentList, 0)
  9. for _, v := range list {
  10. if v.ParentId == parentId {
  11. t := new(models.SysDepartmentList)
  12. t.SysDepartmentId = v.SysDepartmentId
  13. t.SysDepartmentName = v.SysDepartmentName
  14. t.Level = v.Level
  15. t.ParentId = v.ParentId
  16. t.Child = GetSysDepartmentTree(list, v.SysDepartmentId)
  17. res = append(res, t)
  18. }
  19. }
  20. return res
  21. }
  22. // DeleteSysDepartmentById 根据部门id去删除部门下的所有子目录,并清除用户的关联信息
  23. func DeleteSysDepartmentById(sysDepartmentId, level int) (msg string, err error) {
  24. sysDepartment, err := models.GetSysDepartmentById(sysDepartmentId)
  25. if err != nil {
  26. if err.Error() == utils.ErrNoRow() {
  27. msg = "部门不存在"
  28. return
  29. }
  30. return
  31. }
  32. if sysDepartment.SysDepartmentName == "营业部" {
  33. msg = "营业部不能被删除"
  34. return
  35. }
  36. if sysDepartment.ParentId > 0 {
  37. parentDep, e := models.GetSysDepartmentById(sysDepartment.ParentId)
  38. if e != nil {
  39. if e.Error() == utils.ErrNoRow() {
  40. msg = "父部门不存在"
  41. return
  42. }
  43. return
  44. }
  45. if parentDep.SysDepartmentName == "营业部" {
  46. condition := ` AND seller_department_id=? `
  47. count, er := models.GetUserCount(condition, []interface{}{sysDepartment.SysDepartmentId})
  48. if er != nil {
  49. err = er
  50. return
  51. }
  52. if count > 0 {
  53. msg = "该营业部有关联用户,无法删除"
  54. return
  55. }
  56. }
  57. }
  58. sysDepartmentIds := make([]int, 0)
  59. sysDepartmentIds = append(sysDepartmentIds, sysDepartmentId)
  60. var curIds = sysDepartmentIds
  61. var curStringIds []int
  62. for i := level; i < 3; i++ {
  63. // 从当前层部门依次向下遍历子部门
  64. curStringIds = curIds
  65. if len(curStringIds) == 0 {
  66. break
  67. }
  68. sysDepartments, er := models.GetChildSysDepartmentListByIds(curStringIds)
  69. if er != nil {
  70. err = er
  71. return
  72. }
  73. curIds = make([]int, 0)
  74. for _, dep := range sysDepartments {
  75. if dep.SysDepartmentId == 0 {
  76. continue
  77. }
  78. sysDepartmentIds = append(sysDepartmentIds, dep.SysDepartmentId)
  79. curIds = append(curIds, dep.SysDepartmentId)
  80. }
  81. }
  82. err = models.DeleteSysDepartmentByIdV2(sysDepartmentIds, level)
  83. return
  84. }
  85. // GetSysDepartmentPathIdsById 根据当前部门id获取,部门层级列表pathIds [3]int,0索引表示1级部门id,1表示2级部门id...
  86. func GetSysDepartmentPathIdsById(sysDepartmentId int) (pathIds []int, err error) {
  87. sysDepartment, err := models.GetSysDepartmentById(sysDepartmentId)
  88. if err != nil {
  89. return
  90. }
  91. pathIds = make([]int, 3)
  92. pathIds[sysDepartment.Level-1] = sysDepartmentId
  93. curSysDepartmentId := sysDepartment.ParentId
  94. for curLevel := sysDepartment.Level - 1; curLevel >= 1; curLevel-- {
  95. upSysDepartment, er := models.GetSysDepartmentById(curSysDepartmentId)
  96. if er != nil {
  97. return
  98. }
  99. curSysDepartmentId = upSysDepartment.ParentId
  100. pathIds[curLevel-1] = upSysDepartment.SysDepartmentId
  101. }
  102. return
  103. }