system_dept.go 3.6 KB

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