123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package model
- import (
- "sort"
- pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- )
- type SystemDept struct {
- Id int64 `json:"id"`
- Name string `json:"name"`
- Remarks string `json:"remarks"`
- DeptType pasturePb.Depth_Kind `json:"dept_type"`
- LeaderId int64 `json:"leader_id"`
- ParentId int64 `json:"parent_id"`
- Sort int32 `json:"sort"`
- IsShow pasturePb.IsShow_Kind `json:"is_show"`
- IsDelete pasturePb.IsShow_Kind `json:"is_delete"`
- CreatedAt int64 `json:"created_at"`
- UpdatedAt int64 `json:"updated_at"`
- }
- func (s *SystemDept) TableName() string {
- return "system_dept"
- }
- type SystemDeptSlice []*SystemDept
- func (s SystemDeptSlice) ToPB(systemUserList []*SystemUser) []*pasturePb.SearchDeptRequest {
- res := make([]*pasturePb.SearchDeptRequest, len(s))
- for i, d := range s {
- leaderName := ""
- for _, v := range systemUserList {
- if d.LeaderId != v.Id {
- continue
- }
- leaderName = v.Name
- }
- res[i] = &pasturePb.SearchDeptRequest{
- Id: int32(d.Id),
- Name: d.Name,
- Remarks: d.Remarks,
- ParentId: int32(d.ParentId),
- DepthType: d.DeptType,
- LeaderId: int32(d.LeaderId),
- LeaderName: leaderName,
- Sort: d.Sort,
- IsShow: d.IsShow,
- IsDelete: d.IsDelete,
- CreatedAt: int32(d.CreatedAt),
- UpdatedAt: int32(d.UpdatedAt),
- }
- }
- return res
- }
- func (s SystemDeptSlice) ToTree() []*pasturePb.DeptTreeData {
- res := make([]*pasturePb.DeptTreeData, len(s))
- if 0 == len(s) {
- return res
- }
- // 正排序
- sort.Slice(s, func(i, j int) bool {
- return s[i].ParentId < s[j].ParentId
- })
- for i, v := range s {
- res[i] = &pasturePb.DeptTreeData{
- Id: int32(v.Id),
- ParentId: int32(v.ParentId),
- Name: v.Name,
- Children: make([]*pasturePb.DeptTreeData, 0),
- }
- }
- // 构建树
- return deptBuildTree(res)
- }
- func deptBuildTree(deptTreeList []*pasturePb.DeptTreeData) []*pasturePb.DeptTreeData {
- tree := make([]*pasturePb.DeptTreeData, 0)
- for _, dept := range deptTreeList {
- if dept.ParentId == 0 {
- tree = append(tree, dept)
- } else {
- parent := deptFindByID(deptTreeList, dept.ParentId)
- if parent != nil {
- parent.Children = append(parent.Children, dept)
- }
- }
- }
- return tree
- }
- func deptFindByID(menuTreeList []*pasturePb.DeptTreeData, id int32) *pasturePb.DeptTreeData {
- for _, v := range menuTreeList {
- if id == v.Id {
- return v
- }
- if child := deptFindByID(v.Children, id); child != nil {
- return child
- }
- }
- return nil
- }
|