Files
2021-10-15 15:06:02 +08:00

99 lines
2.6 KiB
Go

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}}
}
}