Files
PandaX/apps/system/services/dept.go
2022-07-23 09:41:52 +08:00

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
}