system_dept.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package model
  2. import (
  3. "sort"
  4. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  5. )
  6. type SystemDept struct {
  7. Id int64 `json:"id"`
  8. Name string `json:"name"`
  9. Remarks string `json:"remarks"`
  10. DeptType pasturePb.Depth_Kind `json:"dept_type"`
  11. LeaderId int64 `json:"leader_id"`
  12. ParentId int64 `json:"parent_id"`
  13. Sort int32 `json:"sort"`
  14. IsShow pasturePb.IsShow_Kind `json:"is_show"`
  15. IsDelete pasturePb.IsShow_Kind `json:"is_delete"`
  16. CreatedAt int64 `json:"created_at"`
  17. UpdatedAt int64 `json:"updated_at"`
  18. }
  19. func (s *SystemDept) TableName() string {
  20. return "system_dept"
  21. }
  22. type SystemDeptSlice []*SystemDept
  23. func (s SystemDeptSlice) ToPB(systemUserList []*SystemUser) []*pasturePb.SearchDeptRequest {
  24. res := make([]*pasturePb.SearchDeptRequest, len(s))
  25. for i, d := range s {
  26. leaderName := ""
  27. for _, v := range systemUserList {
  28. if d.LeaderId != v.Id {
  29. continue
  30. }
  31. leaderName = v.Name
  32. }
  33. res[i] = &pasturePb.SearchDeptRequest{
  34. Id: int32(d.Id),
  35. Name: d.Name,
  36. Remarks: d.Remarks,
  37. ParentId: int32(d.ParentId),
  38. DepthType: d.DeptType,
  39. LeaderId: int32(d.LeaderId),
  40. LeaderName: leaderName,
  41. Sort: d.Sort,
  42. IsShow: d.IsShow,
  43. IsDelete: d.IsDelete,
  44. CreatedAt: int32(d.CreatedAt),
  45. UpdatedAt: int32(d.UpdatedAt),
  46. }
  47. }
  48. return res
  49. }
  50. func (s SystemDeptSlice) ToTree() []*pasturePb.DeptTreeData {
  51. res := make([]*pasturePb.DeptTreeData, len(s))
  52. if 0 == len(s) {
  53. return res
  54. }
  55. // 正排序
  56. sort.Slice(s, func(i, j int) bool {
  57. return s[i].ParentId < s[j].ParentId
  58. })
  59. for i, v := range s {
  60. res[i] = &pasturePb.DeptTreeData{
  61. Id: int32(v.Id),
  62. ParentId: int32(v.ParentId),
  63. Name: v.Name,
  64. Children: make([]*pasturePb.DeptTreeData, 0),
  65. }
  66. }
  67. // 构建树
  68. return deptBuildTree(res)
  69. }
  70. func deptBuildTree(deptTreeList []*pasturePb.DeptTreeData) []*pasturePb.DeptTreeData {
  71. tree := make([]*pasturePb.DeptTreeData, 0)
  72. for _, dept := range deptTreeList {
  73. if dept.ParentId == 0 {
  74. tree = append(tree, dept)
  75. } else {
  76. parent := deptFindByID(deptTreeList, dept.ParentId)
  77. if parent != nil {
  78. parent.Children = append(parent.Children, dept)
  79. }
  80. }
  81. }
  82. return tree
  83. }
  84. func deptFindByID(menuTreeList []*pasturePb.DeptTreeData, id int32) *pasturePb.DeptTreeData {
  85. for _, v := range menuTreeList {
  86. if id == v.Id {
  87. return v
  88. }
  89. if child := deptFindByID(v.Children, id); child != nil {
  90. return child
  91. }
  92. }
  93. return nil
  94. }