system_dept.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package model
  2. import (
  3. "sort"
  4. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  5. )
  6. const (
  7. BreedDepthName = "繁育部"
  8. VetDepthName = "兽医部"
  9. )
  10. type SystemDept struct {
  11. Id int64 `json:"id"`
  12. PastureId int64 `json:"pastureId"`
  13. Name string `json:"name"`
  14. Remarks string `json:"remarks"`
  15. DeptType pasturePb.Depth_Kind `json:"deptType"`
  16. LeaderId int64 `json:"leaderId"`
  17. ParentId int64 `json:"parentId"`
  18. Sort int32 `json:"sort"`
  19. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  20. IsDelete pasturePb.IsShow_Kind `json:"isDelete"`
  21. IsInit pasturePb.IsShow_Kind `json:"isInit"`
  22. CreatedAt int64 `json:"createdAt"`
  23. UpdatedAt int64 `json:"updatedAt"`
  24. }
  25. func (s *SystemDept) TableName() string {
  26. return "system_dept"
  27. }
  28. func (s *SystemDept) DepthUpdate(req *pasturePb.SearchDeptRequest) {
  29. s.Name = req.Name
  30. s.ParentId = int64(req.ParentId)
  31. s.Sort = req.Sort
  32. s.Remarks = req.Remarks
  33. s.IsShow = req.IsShow
  34. }
  35. func NewSystemDept(pastureId int64, req *pasturePb.SearchDeptRequest) *SystemDept {
  36. return &SystemDept{
  37. PastureId: pastureId,
  38. Name: req.Name,
  39. Remarks: req.Remarks,
  40. DeptType: pasturePb.Depth_Company,
  41. LeaderId: int64(req.LeaderId),
  42. ParentId: int64(req.ParentId),
  43. IsShow: pasturePb.IsShow_Ok,
  44. IsDelete: pasturePb.IsShow_Ok,
  45. IsInit: pasturePb.IsShow_No,
  46. }
  47. }
  48. func NewSystemPastureDeptInit(pasture *AppPastureList) *SystemDept {
  49. return &SystemDept{
  50. PastureId: pasture.Id,
  51. Name: pasture.Name,
  52. Remarks: "",
  53. DeptType: pasturePb.Depth_Company,
  54. LeaderId: 0,
  55. ParentId: 0,
  56. Sort: 0,
  57. IsShow: pasturePb.IsShow_Ok,
  58. IsDelete: pasturePb.IsShow_Ok,
  59. IsInit: pasturePb.IsShow_Ok,
  60. }
  61. }
  62. func NewSystemDeptInit(pastureId, parentId int64) []*SystemDept {
  63. res := make([]*SystemDept, 0)
  64. res = append(res, &SystemDept{
  65. PastureId: pastureId,
  66. Name: BreedDepthName,
  67. Remarks: BreedDepthName,
  68. DeptType: pasturePb.Depth_Department,
  69. LeaderId: 0,
  70. ParentId: parentId,
  71. Sort: 1,
  72. IsShow: pasturePb.IsShow_Ok,
  73. IsDelete: pasturePb.IsShow_Ok,
  74. IsInit: pasturePb.IsShow_Ok,
  75. }, &SystemDept{
  76. PastureId: pastureId,
  77. Name: VetDepthName,
  78. Remarks: VetDepthName,
  79. DeptType: pasturePb.Depth_Department,
  80. LeaderId: 0,
  81. ParentId: parentId,
  82. Sort: 2,
  83. IsShow: pasturePb.IsShow_Ok,
  84. IsDelete: pasturePb.IsShow_Ok,
  85. IsInit: pasturePb.IsShow_Ok,
  86. })
  87. return res
  88. }
  89. type SystemDeptSlice []*SystemDept
  90. func (s SystemDeptSlice) ToPB(systemUserList []*SystemUser) []*pasturePb.SearchDeptRequest {
  91. res := make([]*pasturePb.SearchDeptRequest, len(s))
  92. for i, d := range s {
  93. leaderName := ""
  94. for _, v := range systemUserList {
  95. if d.LeaderId != v.Id {
  96. continue
  97. }
  98. leaderName = v.Name
  99. }
  100. res[i] = &pasturePb.SearchDeptRequest{
  101. Id: int32(d.Id),
  102. Name: d.Name,
  103. Remarks: d.Remarks,
  104. ParentId: int32(d.ParentId),
  105. DepthType: d.DeptType,
  106. LeaderId: int32(d.LeaderId),
  107. LeaderName: leaderName,
  108. Sort: d.Sort,
  109. IsShow: d.IsShow,
  110. IsDelete: d.IsDelete,
  111. PastureId: int32(d.PastureId),
  112. CreatedAt: int32(d.CreatedAt),
  113. UpdatedAt: int32(d.UpdatedAt),
  114. }
  115. }
  116. return res
  117. }
  118. func (s SystemDeptSlice) ToTree() []*pasturePb.DeptTreeData {
  119. res := make([]*pasturePb.DeptTreeData, len(s))
  120. if 0 == len(s) {
  121. return res
  122. }
  123. // 正排序
  124. sort.Slice(s, func(i, j int) bool {
  125. return s[i].ParentId < s[j].ParentId
  126. })
  127. for i, v := range s {
  128. res[i] = &pasturePb.DeptTreeData{
  129. Id: int32(v.Id),
  130. ParentId: int32(v.ParentId),
  131. Name: v.Name,
  132. IsShow: v.IsShow,
  133. PastureId: int32(v.PastureId),
  134. Children: make([]*pasturePb.DeptTreeData, 0),
  135. }
  136. }
  137. // 构建树
  138. return deptBuildTree(res)
  139. }
  140. func deptBuildTree(deptTreeList []*pasturePb.DeptTreeData) []*pasturePb.DeptTreeData {
  141. tree := make([]*pasturePb.DeptTreeData, 0)
  142. for _, dept := range deptTreeList {
  143. if dept.ParentId == 0 {
  144. tree = append(tree, dept)
  145. } else {
  146. parent := deptFindByID(deptTreeList, dept.ParentId)
  147. if parent != nil {
  148. parent.Children = append(parent.Children, dept)
  149. }
  150. }
  151. }
  152. return tree
  153. }
  154. func deptFindByID(menuTreeList []*pasturePb.DeptTreeData, id int32) *pasturePb.DeptTreeData {
  155. for _, v := range menuTreeList {
  156. if id == v.Id {
  157. return v
  158. }
  159. if child := deptFindByID(v.Children, id); child != nil {
  160. return child
  161. }
  162. }
  163. return nil
  164. }