system_dept.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. PastureId int64 `json:"pastureId"`
  9. Name string `json:"name"`
  10. Remarks string `json:"remarks"`
  11. DeptType pasturePb.Depth_Kind `json:"deptType"`
  12. LeaderId int64 `json:"leaderId"`
  13. ParentId int64 `json:"parentId"`
  14. Sort int32 `json:"sort"`
  15. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  16. IsDelete pasturePb.IsShow_Kind `json:"isDelete"`
  17. CreatedAt int64 `json:"createdAt"`
  18. UpdatedAt int64 `json:"updatedAt"`
  19. }
  20. func (s *SystemDept) TableName() string {
  21. return "system_dept"
  22. }
  23. func NewSystemDept(req *pasturePb.SearchDeptRequest) *SystemDept {
  24. return &SystemDept{
  25. PastureId: int64(req.PastureId),
  26. Name: req.Name,
  27. Remarks: req.Remarks,
  28. DeptType: pasturePb.Depth_Company,
  29. LeaderId: int64(req.LeaderId),
  30. ParentId: int64(req.ParentId),
  31. IsShow: pasturePb.IsShow_Ok,
  32. IsDelete: pasturePb.IsShow_Ok,
  33. }
  34. }
  35. func NewSystemDeptInit(pasture *AppPastureList) *SystemDept {
  36. return &SystemDept{
  37. PastureId: pasture.Id,
  38. Name: pasture.Name,
  39. Remarks: "",
  40. DeptType: pasturePb.Depth_Company,
  41. LeaderId: 0,
  42. ParentId: 0,
  43. Sort: 0,
  44. IsShow: pasturePb.IsShow_Ok,
  45. IsDelete: pasturePb.IsShow_Ok,
  46. }
  47. }
  48. type SystemDeptSlice []*SystemDept
  49. func (s SystemDeptSlice) ToPB(systemUserList []*SystemUser) []*pasturePb.SearchDeptRequest {
  50. res := make([]*pasturePb.SearchDeptRequest, len(s))
  51. for i, d := range s {
  52. leaderName := ""
  53. for _, v := range systemUserList {
  54. if d.LeaderId != v.Id {
  55. continue
  56. }
  57. leaderName = v.Name
  58. }
  59. res[i] = &pasturePb.SearchDeptRequest{
  60. Id: int32(d.Id),
  61. Name: d.Name,
  62. Remarks: d.Remarks,
  63. ParentId: int32(d.ParentId),
  64. DepthType: d.DeptType,
  65. LeaderId: int32(d.LeaderId),
  66. LeaderName: leaderName,
  67. Sort: d.Sort,
  68. IsShow: d.IsShow,
  69. IsDelete: d.IsDelete,
  70. PastureId: int32(d.PastureId),
  71. CreatedAt: int32(d.CreatedAt),
  72. UpdatedAt: int32(d.UpdatedAt),
  73. }
  74. }
  75. return res
  76. }
  77. func (s SystemDeptSlice) ToTree() []*pasturePb.DeptTreeData {
  78. res := make([]*pasturePb.DeptTreeData, len(s))
  79. if 0 == len(s) {
  80. return res
  81. }
  82. // 正排序
  83. sort.Slice(s, func(i, j int) bool {
  84. return s[i].ParentId < s[j].ParentId
  85. })
  86. for i, v := range s {
  87. res[i] = &pasturePb.DeptTreeData{
  88. Id: int32(v.Id),
  89. ParentId: int32(v.ParentId),
  90. Name: v.Name,
  91. IsShow: v.IsShow,
  92. PastureId: int32(v.PastureId),
  93. Children: make([]*pasturePb.DeptTreeData, 0),
  94. }
  95. }
  96. // 构建树
  97. return deptBuildTree(res)
  98. }
  99. func deptBuildTree(deptTreeList []*pasturePb.DeptTreeData) []*pasturePb.DeptTreeData {
  100. tree := make([]*pasturePb.DeptTreeData, 0)
  101. for _, dept := range deptTreeList {
  102. if dept.ParentId == 0 {
  103. tree = append(tree, dept)
  104. } else {
  105. parent := deptFindByID(deptTreeList, dept.ParentId)
  106. if parent != nil {
  107. parent.Children = append(parent.Children, dept)
  108. }
  109. }
  110. }
  111. return tree
  112. }
  113. func deptFindByID(menuTreeList []*pasturePb.DeptTreeData, id int32) *pasturePb.DeptTreeData {
  114. for _, v := range menuTreeList {
  115. if id == v.Id {
  116. return v
  117. }
  118. if child := deptFindByID(v.Children, id); child != nil {
  119. return child
  120. }
  121. }
  122. return nil
  123. }