mirror of
https://gitee.com/XM-GO/PandaX.git
synced 2026-04-23 02:48:34 +08:00
210 lines
5.5 KiB
Go
210 lines
5.5 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/kakuilan/kgo"
|
|
"pandax/apps/system/entity"
|
|
"pandax/base/biz"
|
|
"pandax/pkg/global"
|
|
)
|
|
|
|
type (
|
|
SysDeptModel interface {
|
|
Insert(data entity.SysDept) *entity.SysDept
|
|
FindOne(deptId int64) *entity.SysDept
|
|
FindListPage(page, pageSize int, data entity.SysDept) (*[]entity.SysDept, int64)
|
|
FindList(data entity.SysDept) *[]entity.SysDept
|
|
Update(data entity.SysDept) *entity.SysDept
|
|
Delete(deptId []int64)
|
|
SelectDept(data entity.SysDept) []entity.SysDept
|
|
SelectDeptLable(data entity.SysDept) []entity.DeptLable
|
|
}
|
|
|
|
sysDeptModelImpl struct {
|
|
table string
|
|
}
|
|
)
|
|
|
|
var SysDeptModelDao SysDeptModel = &sysDeptModelImpl{
|
|
table: `sys_depts`,
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) Insert(data entity.SysDept) *entity.SysDept {
|
|
biz.ErrIsNil(global.Db.Table(m.table).Create(&data).Error, "新增部门信息失败")
|
|
deptPath := "/" + kgo.KConv.Int2Str(data.DeptId)
|
|
if int(data.ParentId) != 0 {
|
|
deptP := m.FindOne(data.ParentId)
|
|
deptPath = deptP.DeptPath + deptPath
|
|
} else {
|
|
deptPath = "/0" + deptPath
|
|
}
|
|
data.DeptPath = deptPath
|
|
biz.ErrIsNil(global.Db.Table(m.table).Model(&data).Updates(&data).Error, "修改部门信息失败")
|
|
return &data
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) FindOne(deptId int64) *entity.SysDept {
|
|
resData := new(entity.SysDept)
|
|
err := global.Db.Table(m.table).Where("dept_id = ?", deptId).First(resData).Error
|
|
biz.ErrIsNil(err, "查询部门信息失败")
|
|
return resData
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) FindListPage(page, pageSize int, data entity.SysDept) (*[]entity.SysDept, int64) {
|
|
list := make([]entity.SysDept, 0)
|
|
var total int64 = 0
|
|
offset := pageSize * (page - 1)
|
|
|
|
db := global.Db.Table(m.table)
|
|
// 此处填写 where参数判断
|
|
if data.DeptId != 0 {
|
|
db = db.Where("dept_id = ?", data.DeptId)
|
|
}
|
|
if data.DeptName != "" {
|
|
db = db.Where("dept_name like ?", "%"+data.DeptName+"%")
|
|
}
|
|
if data.TenantId != 0 {
|
|
db = db.Where("tenant_id = ?", data.TenantId)
|
|
}
|
|
if data.Status != "" {
|
|
db = db.Where("status = ?", data.Status)
|
|
}
|
|
if data.DeptPath != "" {
|
|
db = db.Where("deptPath like %?%", data.DeptPath)
|
|
}
|
|
db.Where("delete_time IS NULL")
|
|
err := db.Count(&total).Error
|
|
err = db.Limit(pageSize).Offset(offset).Find(&list).Error
|
|
biz.ErrIsNil(err, "查询部门分页列表信息失败")
|
|
return &list, total
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) FindList(data entity.SysDept) *[]entity.SysDept {
|
|
list := make([]entity.SysDept, 0)
|
|
|
|
db := global.Db.Table(m.table)
|
|
// 此处填写 where参数判断
|
|
if data.DeptId != 0 {
|
|
db = db.Where("dept_id = ?", data.DeptId)
|
|
}
|
|
if data.TenantId != 0 {
|
|
db = db.Where("tenant_id = ?", data.TenantId)
|
|
}
|
|
if data.DeptName != "" {
|
|
db = db.Where("dept_name like ?", "%"+data.DeptName+"%")
|
|
}
|
|
if data.Status != "" {
|
|
db = db.Where("status = ?", data.Status)
|
|
}
|
|
db.Where("delete_time IS NULL")
|
|
err := db.Order("sort").Find(&list).Error
|
|
biz.ErrIsNil(err, "查询部门列表信息失败")
|
|
return &list
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) Update(data entity.SysDept) *entity.SysDept {
|
|
one := m.FindOne(data.DeptId)
|
|
|
|
deptPath := "/" + kgo.KConv.Int2Str(data.DeptId)
|
|
if int(data.ParentId) != 0 {
|
|
deptP := m.FindOne(data.ParentId)
|
|
deptPath = deptP.DeptPath + deptPath
|
|
} else {
|
|
deptPath = "/0" + deptPath
|
|
}
|
|
data.DeptPath = deptPath
|
|
|
|
if data.DeptPath != "" && data.DeptPath != one.DeptPath {
|
|
biz.ErrIsNil(errors.New("上级部门不允许修改!"), "上级部门不允许修改")
|
|
}
|
|
biz.ErrIsNil(global.Db.Table(m.table).Model(&data).Updates(&data).Error, "修改部门信息失败")
|
|
return &data
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) Delete(deptIds []int64) {
|
|
err := global.Db.Table(m.table).Delete(&entity.SysDept{}, "dept_id in (?)", deptIds).Error
|
|
biz.ErrIsNil(err, "删除部门信息失败")
|
|
return
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) SelectDept(data entity.SysDept) []entity.SysDept {
|
|
list := m.FindList(data)
|
|
|
|
sd := make([]entity.SysDept, 0)
|
|
li := *list
|
|
for i := 0; i < len(li); i++ {
|
|
if li[i].ParentId != 0 {
|
|
continue
|
|
}
|
|
info := Digui(list, li[i])
|
|
|
|
sd = append(sd, info)
|
|
}
|
|
return sd
|
|
}
|
|
|
|
func (m *sysDeptModelImpl) SelectDeptLable(data entity.SysDept) []entity.DeptLable {
|
|
deptlist := m.FindList(data)
|
|
|
|
dl := make([]entity.DeptLable, 0)
|
|
deptl := *deptlist
|
|
for i := 0; i < len(deptl); i++ {
|
|
if deptl[i].ParentId != 0 {
|
|
continue
|
|
}
|
|
e := entity.DeptLable{}
|
|
e.DeptId = deptl[i].DeptId
|
|
e.DeptName = deptl[i].DeptName
|
|
deptsInfo := DiguiDeptLable(deptlist, e)
|
|
|
|
dl = append(dl, deptsInfo)
|
|
}
|
|
return dl
|
|
}
|
|
|
|
func Digui(deptlist *[]entity.SysDept, menu entity.SysDept) entity.SysDept {
|
|
list := *deptlist
|
|
|
|
min := make([]entity.SysDept, 0)
|
|
for j := 0; j < len(list); j++ {
|
|
|
|
if menu.DeptId != list[j].ParentId {
|
|
continue
|
|
}
|
|
mi := entity.SysDept{}
|
|
mi.DeptId = list[j].DeptId
|
|
mi.ParentId = list[j].ParentId
|
|
mi.DeptPath = list[j].DeptPath
|
|
mi.DeptName = list[j].DeptName
|
|
mi.Sort = list[j].Sort
|
|
mi.Leader = list[j].Leader
|
|
mi.Phone = list[j].Phone
|
|
mi.Email = list[j].Email
|
|
mi.Status = list[j].Status
|
|
mi.CreatedAt = list[j].CreatedAt
|
|
mi.UpdatedAt = list[j].UpdatedAt
|
|
mi.Children = []entity.SysDept{}
|
|
ms := Digui(deptlist, mi)
|
|
min = append(min, ms)
|
|
}
|
|
menu.Children = min
|
|
return menu
|
|
}
|
|
func DiguiDeptLable(deptlist *[]entity.SysDept, dept entity.DeptLable) entity.DeptLable {
|
|
list := *deptlist
|
|
|
|
min := make([]entity.DeptLable, 0)
|
|
for j := 0; j < len(list); j++ {
|
|
|
|
if dept.DeptId != list[j].ParentId {
|
|
continue
|
|
}
|
|
mi := entity.DeptLable{list[j].DeptId, list[j].DeptName, []entity.DeptLable{}}
|
|
ms := DiguiDeptLable(deptlist, mi)
|
|
min = append(min, ms)
|
|
|
|
}
|
|
dept.Children = min
|
|
return dept
|
|
}
|