package controller import ( "SciencesServer/app/api/manage/model" model2 "SciencesServer/app/common/model" "SciencesServer/app/service" "time" ) type Department struct{ *Platform } type DepartmentHandle func(session *service.Session) *Department type DepartmentParams struct { ID, ParentID uint64 Title, Name, Mobile, Remark string } type DepartmentTree struct { *model2.SysDepartment Children []*DepartmentTree `json:"children"` } func (c *Department) tree(src []*model2.SysDepartment, parentID uint64) []*DepartmentTree { out := make([]*DepartmentTree, 0) for _, v := range src { if v.ParentID == parentID { out = append(out, &DepartmentTree{ SysDepartment: v, Children: c.tree(src, v.ID), }) } } return out } func (c *Department) List() ([]*DepartmentTree, error) { mSysDepartment := model.NewSysDepartment() out := make([]*model2.SysDepartment, 0) if err := model2.Scan(mSysDepartment.SysDepartment, &out, &model2.ModelWhereOrder{ Where: model2.NewWhere("tenant_id", c.TenantID), Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil { return nil, err } return c.tree(out, 0), nil } func (c *Department) Select() ([]*DepartmentTree, error) { mSysDepartment := model.NewSysDepartment() out := make([]*model2.SysDepartment, 0) if err := model2.ScanFields(mSysDepartment.SysDepartment, &out, []string{"id", "name"}, &model2.ModelWhereOrder{ Where: model2.NewWhere("tenant_id", c.TenantID), Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil { return nil, err } return c.tree(out, 0), nil } func (c *Department) Data(params *DepartmentParams) error { mSysDepartment := model.NewSysDepartment() if params.ID <= 0 { mSysDepartment.ParentID = params.ParentID mSysDepartment.Title = params.Title mSysDepartment.Name = params.Name mSysDepartment.Mobile = params.Mobile mSysDepartment.Remark = params.Remark return model2.Create(mSysDepartment.SysDepartment) } mSysDepartment.ID = params.ID return model2.Updates(mSysDepartment.SysDepartment, map[string]interface{}{ "parent_id": params.ParentID, "title": params.Title, "name": params.Name, "mobile": params.Mobile, "remark": params.Remark, "updated_at": time.Now(), }) } func (c *Department) Delete(id uint64) error { mSysDepartment := model.NewSysDepartment() mSysDepartment.ID = id if err := model2.Delete(mSysDepartment.SysDepartment); err != nil { return err } return nil } func NewDepartment() DepartmentHandle { return func(session *service.Session) *Department { return &Department{Platform: &Platform{Session: session}} } }