| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | package modelimport (	"sort"	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow")const (	BreedDepthName = "繁育部"	VetDepthName   = "兽医部")type SystemDept struct {	Id        int64                 `json:"id"`	PastureId int64                 `json:"pastureId"`	Name      string                `json:"name"`	Remarks   string                `json:"remarks"`	DeptType  pasturePb.Depth_Kind  `json:"deptType"`	LeaderId  int64                 `json:"leaderId"`	ParentId  int64                 `json:"parentId"`	Sort      int32                 `json:"sort"`	IsShow    pasturePb.IsShow_Kind `json:"isShow"`	IsDelete  pasturePb.IsShow_Kind `json:"isDelete"`	IsInit    pasturePb.IsShow_Kind `json:"isInit"`	CreatedAt int64                 `json:"createdAt"`	UpdatedAt int64                 `json:"updatedAt"`}func (s *SystemDept) TableName() string {	return "system_dept"}func (s *SystemDept) DepthUpdate(req *pasturePb.SearchDeptRequest) {	s.Name = req.Name	s.ParentId = int64(req.ParentId)	s.Sort = req.Sort	s.Remarks = req.Remarks	s.IsShow = req.IsShow}func NewSystemDept(pastureId int64, req *pasturePb.SearchDeptRequest) *SystemDept {	return &SystemDept{		PastureId: pastureId,		Name:      req.Name,		Remarks:   req.Remarks,		DeptType:  pasturePb.Depth_Company,		LeaderId:  int64(req.LeaderId),		ParentId:  int64(req.ParentId),		IsShow:    pasturePb.IsShow_Ok,		IsDelete:  pasturePb.IsShow_Ok,		IsInit:    pasturePb.IsShow_No,	}}func NewSystemPastureDeptInit(pasture *AppPastureList) *SystemDept {	return &SystemDept{		PastureId: pasture.Id,		Name:      pasture.Name,		Remarks:   "",		DeptType:  pasturePb.Depth_Company,		LeaderId:  0,		ParentId:  0,		Sort:      0,		IsShow:    pasturePb.IsShow_Ok,		IsDelete:  pasturePb.IsShow_Ok,		IsInit:    pasturePb.IsShow_Ok,	}}func NewSystemDeptInit(pastureId, parentId int64) []*SystemDept {	res := make([]*SystemDept, 0)	res = append(res, &SystemDept{		PastureId: pastureId,		Name:      BreedDepthName,		Remarks:   BreedDepthName,		DeptType:  pasturePb.Depth_Department,		LeaderId:  0,		ParentId:  parentId,		Sort:      1,		IsShow:    pasturePb.IsShow_Ok,		IsDelete:  pasturePb.IsShow_Ok,		IsInit:    pasturePb.IsShow_Ok,	}, &SystemDept{		PastureId: pastureId,		Name:      VetDepthName,		Remarks:   VetDepthName,		DeptType:  pasturePb.Depth_Department,		LeaderId:  0,		ParentId:  parentId,		Sort:      2,		IsShow:    pasturePb.IsShow_Ok,		IsDelete:  pasturePb.IsShow_Ok,		IsInit:    pasturePb.IsShow_Ok,	})	return res}type SystemDeptSlice []*SystemDeptfunc (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,			PastureId:  int32(d.PastureId),			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,			IsShow:    v.IsShow,			PastureId: int32(v.PastureId),			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}
 |