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 } func (c *Instance) Index(filterID uint64) ([]*InstanceTreeInfo, error) { mSysDepartment := model.NewSysDepartment() out := make([]*model2.SysDepartment, 0) where := []*model2.ModelWhereOrder{ &model2.ModelWhereOrder{ Where: model2.NewWhere("tenant_id", c.TenantID), Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}, &model2.ModelWhereOrder{ 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 { return nil, err } return c.tree(out, 0), nil } func (c *Instance) Select() ([]*InstanceTreeInfo, error) { mSysDepartment := model.NewSysDepartment() out := make([]*model2.SysDepartment, 0) if err := model2.ScanFields(mSysDepartment.SysDepartment, &out, []string{"id", "parent_id", "name"}, &model2.ModelWhereOrder{ Where: model2.NewWhere("tenant_id", c.TenantID), Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}, &model2.ModelWhereOrder{ Where: model2.NewWhere("status", 1), Order: model2.NewOrder("id", model2.OrderModeToAsc)}); err != nil { 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} } }