// ============================================================================ // This is auto-generated by gf cli tool only once. Fill this file as you wish. // ============================================================================ package sys_dept import ( "database/sql" "github.com/gogf/gf/errors/gerror" "github.com/gogf/gf/frame/g" "github.com/gogf/gf/os/gtime" ) //数据列表数据结构 type Dept struct { SearchValue interface{} `json:"searchValue"` CreateBy string `json:"createBy" orm:"create_by"` CreateTime *gtime.Time `json:"createTime" orm:"create_time"` UpdateBy string `json:"updateBy" orm:"update_by"` UpdateTime *gtime.Time `json:"updateTime" orm:"update_time"` Remark string `json:"remark"` DataScope interface{} `json:"dataScope"` Params map[string]interface{} `json:"params"` DeptID uint64 `json:"deptId" orm:"dept_id"` ParentID int64 `json:"parentId" orm:"parent_id"` Ancestors string `json:"ancestors" orm:"ancestors"` DeptName string `json:"deptName" orm:"dept_name"` OrderNum int `json:"orderNum" orm:"order_num" ` Leader string `json:"leader" orm:"leader"` Phone string `json:"phone" orm:"phone"` Email string `json:"email" orm:"email"` Status string `json:"status" orm:"status"` DelFlag string `json:"delFlag" orm:"del_flag" ` ParentName string `json:"parentName"` Children []interface{} `json:"children"` } //查询参数 //文章搜索参数 type SearchParams struct { DeptName string `p:"deptName"` Status string `p:"status"` } type AddParams struct { ParentID int `json:"parentId" orm:"parent_id" p:"parentId" v:"required#父级不能为空"` DeptName string `json:"deptName" orm:"dept_name" p:"deptName" v:"required#部门名称不能为空"` OrderNum int `json:"orderNum" orm:"order_num" p:"orderNum" v:"required#排序不能为空"` Leader string `json:"leader" orm:"leader" p:"leader" v:"required#负责人不能为空"` Phone string `json:"phone" orm:"Phone" p:"phone" v:"required#电话不能为空"` Email string `json:"email" orm:"email" p:"email" v:"required#邮箱不能为空"` Status string `json:"status" orm:"status" p:"status" v:"required#状态必须"` Ancestors string `json:"ancestors" orm:"ancestors"` DelFlag string `json:"delFlag" orm:"del_flag"` CreateBy string `json:"createBy" orm:"create_by"` CreateTime *gtime.Time `json:"createTime" orm:"create_time"` UpdateBy string `json:"updateBy" orm:"update_by"` UpdateTime *gtime.Time `json:"updateTime" orm:"update_time"` } type EditParams struct { DeptID int64 `json:"deptId" orm:"dept_id" p:"id" v:"integer|min:1#ID只能为整数|ID只能为正数"` AddParams } //获取列表数据 func GetList(searchParams *SearchParams) ([]*Dept, error) { model := g.DB().Table(Table) if searchParams.DeptName != "" { model.Where("dept_name like ?", "%"+searchParams.DeptName+"%") } if searchParams.Status != "" { model.Where("status", searchParams.Status) } depts := ([]*Dept)(nil) if err := model.Structs(&depts); err != nil { return nil, err } for _, v := range depts { if v.Children == nil { v.Children = []interface{}{} } } return depts, nil } //添加 func AddDept(data *AddParams) (sql.Result, error) { data.DelFlag = "0" data.CreateBy = "" data.CreateTime = gtime.Now() return Model.Data(data).Insert() } //编辑 func EditDept(data *EditParams) error { data.UpdateBy = "" data.UpdateTime = gtime.Now() if _, err := Model.Where("dept_id", data.DeptID).Data(data).Update(); err != nil { return err } return nil } //删除失败 func DelDept(id int64) error { ids, _ := GetChilderenIds(id) _, err := Model.Where("dept_id IN(?)", ids).Delete() if err != nil { return gerror.New("删除失败") } return nil } //根据部门id获取部门信息 func GetDeptById(id uint64) (*Dept, error) { dept := (*Dept)(nil) if err := Model.Where("dept_id", id).Struct(&dept); err != nil { return nil, err } else { return dept, nil } } /** 获取排除节点 */ func Exclude(id int64) ([]*Dept, error) { ids, err := GetChilderenIds(id) if err != nil { return nil, err } model := g.DB().Table(Table) if len(ids) > 0 { model.Where("dept_id NOT IN(?)", ids) } depts := ([]*Dept)(nil) if err := model.Structs(&depts); err != nil { return nil, err } for _, v := range depts { if v.Children == nil { v.Children = []interface{}{} } } return depts, nil } /** 根据id获取子孙节点id集合包含本身 */ func GetChilderenIds(id int64) ([]int64, error) { list, err := GetChildrenById(id) if err != nil { return nil, err } if len(list) == 0 { return []int64{}, nil } var newResult []int64 for _, v := range list { newResult = append(newResult, v.DeptId) } return newResult, nil } /** 根据id获取所有子孙节点包含本身 */ func GetChildrenById(id int64) ([]*Entity, error) { depts, err := Model.All() if err != nil { return nil, err } result := recursion(id, depts, true) return result, nil } /** 根据id获取所有子孙元素 hasroot true - 包含自身 false - 不含自身 */ func recursion(id int64, depts []*Entity, hasRoot bool) (result []*Entity) { for _, v := range depts { if hasRoot == true && v.DeptId == id { result = append(result, v) } if v.ParentId == id { data := recursion(v.DeptId, depts, false) result = append(result, v) result = append(result, data...) } } return }