package models import ( "context" "eta/eta_mini_crm/utils" "fmt" "github.com/beego/beego/v2/client/orm" ) type SysDepartment struct { SysDepartmentId int `orm:"pk" description:"部门id"` SysDepartmentName string `description:"部门名称"` Sort int `description:"排序"` Level int `description:"层级"` ParentId int `description:"父目录id"` } func (s *SysDepartment) Add() (err error) { o := orm.NewOrm() _, err = o.Insert(s) return } func (s *SysDepartment) Update(cols []string) (err error) { o := orm.NewOrm() _, err = o.Update(s, cols...) return } type SysDepartmentList struct { SysDepartmentId int `description:"部门id"` SysDepartmentName string `description:"部门名称"` Child []*SysDepartmentList `description:"分组"` Level int `description:"1:部门, 2|3:分组"` ParentId int `description:"父目录id"` } func DeleteSysDepartmentById(sysDepartmentIds []string, level int) (err error) { o := orm.NewOrm() err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { sql := `DELETE FROM sys_department WHERE sys_department_id IN (?) ` _, e := txOrm.QueryTable(&SysDepartment{}). Filter("sys_department_id__in", sysDepartmentIds). Delete() if e != nil { return e } if level == 1 { sql = `DELETE FROM sys_user_department_mapping WHERE sys_department_id1=?` _, e = txOrm.Raw(sql, sysDepartmentIds[0]).Exec() if e != nil { return e } } else { sql = `UPDATE sys_user_department_mapping SET ` for i := level; i <= utils.MaxDepartmentLevel; i++ { sql += fmt.Sprintf("sys_department_id%d=0 ", i) if i != utils.MaxDepartmentLevel { sql += "," } } sql += fmt.Sprintf("WHERE sys_department_id%d=?", level) _, e = txOrm.Raw(sql, sysDepartmentIds[0]).Exec() if e != nil { return e } } return nil }) return } func DeleteSysDepartmentByIdV2(sysDepartmentIds []int, level int) (err error) { o := orm.NewOrm() err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { // sql := `DELETE FROM sys_department WHERE sys_department_id IN (?) ` _, e := txOrm.QueryTable(&SysDepartment{}). Filter("sys_department_id__in", sysDepartmentIds). Delete() if e != nil { return e } sql := `UPDATE sys_user SET ` for i := level; i <= utils.MaxDepartmentLevel; i++ { sql += fmt.Sprintf("sys_department_id%d=0 ", i) if i != utils.MaxDepartmentLevel { sql += "," } } sql += fmt.Sprintf("WHERE sys_department_id%d=?", level) _, e = txOrm.Raw(sql, sysDepartmentIds[0]).Exec() if e != nil { return e } return nil }) return } func SaveSysDepartmentName(sysDepartment *SysDepartment) (err error) { o := orm.NewOrm() sql := `SELECT * FROM user WHERE seller_department_id=?` var userList []*User _, err = o.Raw(sql, sysDepartment.SysDepartmentId).QueryRows(&userList) if err != nil { return } var pars []interface{} pars = append(pars, sysDepartment.SysDepartmentName) for _, user := range userList { pars = append(pars, user.UserId) } err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { _, e := txOrm.Update(sysDepartment, "sys_department_name") if e != nil { return e } if len(userList) > 0 { sql := `UPDATE user SET seller_department_name=? WHERE user_id IN (` + utils.GetOrmReplaceHolder(len(userList)) + `)` _, e = txOrm.Raw(sql, pars).Exec() if e != nil { return e } } return nil }) return } func UpdateDepartmentSortByIds(sysDepartmentIds []int) (err error) { o := orm.NewOrm() err = o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { sql := `UPDATE sys_department SET sort=? WHERE sys_department_id=?` for i, depId := range sysDepartmentIds { _, e := txOrm.Raw(sql, i+1, depId).Exec() if e != nil { return e } } return nil }) return } func GetSysDepartmentById(sysDepartmentId int) (item *SysDepartment, err error) { o := orm.NewOrm() sql := `SELECT * FROM sys_department WHERE sys_department_id=? ` err = o.Raw(sql, sysDepartmentId).QueryRow(&item) return } func GetSysDepartments() (items []*SysDepartment, err error) { o := orm.NewOrm() sql := `SELECT * FROM sys_department ` _, err = o.Raw(sql).QueryRows(&items) return } func GetSysDepartmentList() (items []*SysDepartmentList, err error) { o := orm.NewOrm() sql := `SELECT * FROM sys_department ORDER BY sort` _, err = o.Raw(sql).QueryRows(&items) return } func GetSysDepartmentCountById(sysDepartmentId int) (count int, err error) { o := orm.NewOrm() sql := `SELECT COUNT(1) AS count FROM sys_department WHERE sys_department_id=?` err = o.Raw(sql, sysDepartmentId).QueryRow(&count) return } func GetSysDepartmentCountByParentId(parentId int, sysDepartmentName string) (count int, err error) { o := orm.NewOrm() sql := `SELECT COUNT(1) AS count FROM sys_department WHERE parent_id=? AND sys_department_name=?` err = o.Raw(sql, parentId, sysDepartmentName).QueryRow(&count) return } func GetSysDepartmentCountByName(sysDepartmentName string) (count int, err error) { o := orm.NewOrm() sql := `SELECT COUNT(1) AS count FROM sys_department WHERE sys_department_name=?` err = o.Raw(sql, sysDepartmentName).QueryRow(&count) return } func GetSysDepartmentByName(sysDepartmentName string) (item *SysDepartment, err error) { o := orm.NewOrm() sql := `SELECT * FROM sys_department WHERE sys_department_name=?` err = o.Raw(sql, sysDepartmentName).QueryRow(&item) return } func GetChildSysDepartmentListById(sysDepartmentId int) (items []*SysDepartmentList, err error) { o := orm.NewOrm() sql := `SELECT * FROM sys_department WHERE parent_id=? ORDER BY sort ASC, sys_department_id ASC` _, err = o.Raw(sql, sysDepartmentId).QueryRows(&items) return } func GetChildSysDepartmentListByIds(sysDepartmentIds []int) (items []*SysDepartmentList, err error) { if len(sysDepartmentIds) == 0 { return } o := orm.NewOrm() sql := `SELECT * FROM sys_department WHERE parent_id in (` + utils.GetOrmReplaceHolder(len(sysDepartmentIds)) + `) ` _, err = o.Raw(sql, sysDepartmentIds).QueryRows(&items) return }