Files

127 lines
3.5 KiB
Go
Raw Normal View History

2022-01-06 17:11:57 +08:00
package department
import (
"SciencesServer/app/api/admin/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"time"
)
type Instance struct{ *session.Admin }
type InstanceHandle func(session *session.Admin) *Instance
type InstanceParams struct {
ID, ParentID uint64
Name, Contact, ContactMobile, Remark string
Status int
}
type (
// InstanceInfo 部门信息
InstanceInfo struct {
ID string `json:"id"`
ParentID string `json:"parent_id"`
*model2.SysDepartment
}
// InstanceTreeInfo 部门树
InstanceTreeInfo struct {
*InstanceInfo
Children []*InstanceTreeInfo `json:"children"`
}
)
func (c *Instance) tree(src []*model2.SysDepartment, parentID uint64) []*InstanceTreeInfo {
out := make([]*InstanceTreeInfo, 0)
for _, v := range src {
if v.ParentID == parentID {
out = append(out, &InstanceTreeInfo{
InstanceInfo: &InstanceInfo{
ID: v.GetEncodeID(),
ParentID: (&model2.Model{ID: v.ParentID}).GetEncodeID(),
SysDepartment: v,
},
Children: c.tree(src, v.ID),
})
}
}
return out
}
2022-01-07 16:12:43 +08:00
func (c *Instance) Index(filterID uint64) ([]*InstanceTreeInfo, error) {
2022-01-06 17:11:57 +08:00
mSysDepartment := model.NewSysDepartment()
out := make([]*model2.SysDepartment, 0)
2022-01-07 16:12:43 +08:00
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)},
2022-01-06 22:02:09 +08:00
&model2.ModelWhereOrder{
2022-01-07 16:12:43 +08:00
Order: model2.NewOrder("id", model2.OrderModeToAsc)},
}
if filterID > 0 {
where = append(where, &model2.ModelWhereOrder{Where: model2.NewWhereCondition("id", "!=", filterID)},
&model2.ModelWhereOrder{Where: model2.NewWhereCondition("parent_id", "!=", filterID)})
}
if err := model2.Scan(mSysDepartment.SysDepartment, &out, where...); err != nil {
2022-01-06 17:11:57 +08:00
return nil, err
}
2022-01-07 16:12:43 +08:00
2022-01-06 17:11:57 +08:00
return c.tree(out, 0), nil
}
func (c *Instance) Select() ([]*InstanceTreeInfo, error) {
mSysDepartment := model.NewSysDepartment()
out := make([]*model2.SysDepartment, 0)
2022-01-06 22:02:09 +08:00
if err := model2.ScanFields(mSysDepartment.SysDepartment, &out, []string{"id", "parent_id", "name"}, &model2.ModelWhereOrder{
2022-01-06 17:11:57 +08:00
Where: model2.NewWhere("tenant_id", c.TenantID),
2022-01-06 22:02:09 +08:00
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}, &model2.ModelWhereOrder{
Where: model2.NewWhere("status", 1),
2022-01-07 16:12:43 +08:00
Order: model2.NewOrder("id", model2.OrderModeToAsc)}); err != nil {
2022-01-06 17:11:57 +08:00
return nil, err
}
return c.tree(out, 0), nil
}
func (c *Instance) Form(params *InstanceParams) error {
mSysDepartment := model.NewSysDepartment()
if params.ID <= 0 {
mSysDepartment.ParentID = params.ParentID
mSysDepartment.Name = params.Name
mSysDepartment.Contact = params.Contact
mSysDepartment.ContactMobile = params.ContactMobile
mSysDepartment.Status = params.Status
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, "name": params.Name, "contact": params.Contact,
"contact_mobile": params.ContactMobile, "status": params.Status, "remark": params.Remark,
"updated_at": time.Now(),
})
}
func (c *Instance) Delete(id uint64) error {
mSysDepartment := model.NewSysDepartment()
mSysDepartment.ID = id
if err := model2.Delete(mSysDepartment.SysDepartment); err != nil {
return err
}
return nil
}
func NewInstance() InstanceHandle {
return func(session *session.Admin) *Instance {
return &Instance{Admin: session}
}
}