123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- package dao
- import (
- "github.com/druidcaesa/gotool"
- "reflect"
- "strings"
- "ulink-admin/frame"
- "ulink-admin/modules/system/models/model"
- "ulink-admin/modules/system/models/req"
- "ulink-admin/pkg/base"
- "ulink-admin/pkg/page"
- "ulink-admin/utils"
- "xorm.io/xorm"
- )
- type RoleDao struct {
- base.BaseDao
- }
- // 角色公用sql
- func (d RoleDao) sqlSelectJoin() *xorm.Session {
- return base.GetSession().Session.Table([]string{model.SysRole{}.TableName(), "r"}).
- Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.id").
- Join("LEFT", []string{"sys_user", "u"}, "u.id = ur.user_id")
- }
- // 角色公用sql
- func (d RoleDao) sqlSelect() *xorm.Session {
- return base.GetSession().Session.Table([]string{model.SysRole{}.TableName(), "r"})
- }
- // 用户角色关系查询sql
- func (d RoleDao) sqlSelectRoleAndUser() *xorm.Session {
- return base.GetSession().Session.Table([]string{model.SysRole{}.TableName(), "r"}).
- Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.id").
- Join("LEFT", []string{"sys_user", "u"}, "u.id = ur.user_id")
- }
- // page 分页查询
- func (d RoleDao) Page(q *req.RoleQuery, list interface{}) int64 {
- session := base.GetSession().Session
- session.Table([]string{model.SysRole{}.TableName(), "r"}).
- Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.id").
- Join("LEFT", []string{"sys_user", "u"}, "u.id = ur.user_id")
- if !gotool.StrUtils.HasEmpty(q.RoleName) {
- session.And("r.role_name like concat('%', ?, '%')", q.RoleName)
- }
- if !gotool.StrUtils.HasEmpty(q.Status) {
- session.And("r.status = ?", q.Status)
- }
- if !gotool.StrUtils.HasEmpty(q.RoleKey) {
- session.And("r.role_key like concat('%', ?, '%')", q.RoleKey)
- }
- if !gotool.StrUtils.HasEmpty(q.BeginTime) {
- session.And("date_format(r.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", q.BeginTime)
- }
- if !gotool.StrUtils.HasEmpty(q.EndTime) {
- session.And("date_format(r.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", q.EndTime)
- }
- if !base.GetCurUser().IsAdmin {
- session.And("r.company_id = ?", base.GetCurUser().ComponyId)
- }
- total, err := session.Limit(q.Size(), page.StartSize(q.Page(), q.Size())).OrderBy("r.role_sort").FindAndCount(list)
- if err != nil {
- frame.Throw(frame.SQL_CODE, "查询错误:"+err.Error())
- }
- return total
- }
- // list 查询所有角色
- func (d RoleDao) List(q *req.RoleQuery, list interface{}) {
- session := base.GetSession().Session
- session.Table([]string{model.SysRole{}.TableName(), "o"})
- if !base.GetCurUser().IsAdmin {
- session.And("o.company_id = ?", base.GetCurUser().ComponyId)
- }
- err := session.Find(list)
- if err != nil {
- frame.Throw(frame.SQL_CODE, "查询错误:"+err.Error())
- }
- }
- // SelectRoleListByUserId 根据用户id查询用户角色id集合
- func (d RoleDao) SelectRoleListByUserId(id int64) *[]int64 {
- sqlSelectRoleAndUser := d.sqlSelectRoleAndUser()
- var roleIds []int64
- err := sqlSelectRoleAndUser.Cols("r.id").Where("u.id = ?", id).Find(&roleIds)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- return nil
- }
- return &roleIds
- }
- // GetRolePermissionByUserId 查询用户角色集合
- func (d RoleDao) GetRolePermissionByUserId(id int64) *[]string {
- var roleKeys []string
- err := d.sqlSelectJoin().Cols("r.role_key").Where("r.del_flag = '0'").And("u.id = ?", id).Find(&roleKeys)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- return nil
- }
- return &roleKeys
- }
- // GetRoleListByUserId 根据用户ID查询角色
- func (d RoleDao) GetRoleListByUserId(id int64) *[]model.SysRole {
- roles := make([]model.SysRole, 0)
- err := d.sqlSelectJoin().Where("r.del_flag = '0'").And("ur.user_id = ?", id).Find(&roles)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- return nil
- }
- return &roles
- }
- // SelectRoleByRoleId 根据角色id查询角色数据
- func (d RoleDao) SelectRoleByRoleId(id int64) *model.SysRole {
- role := model.SysRole{}
- _, err := d.sqlSelectJoin().Where("r.id = ?", id).Get(&role)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- return nil
- }
- return &role
- }
- // CheckRoleNameUnique 校验角色名称是否唯一
- func (d RoleDao) CheckRoleNameUnique(role model.SysRole) int64 {
- session := base.GetSession().Session.Table(role.TableName()).Where("role_name = ?", role.RoleName)
- if role.Id > 0 {
- session.And("id != ?", role.Id)
- }
- count, err := session.Count(&role)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- }
- return count
- }
- // CheckRoleKeyUnique 校验角色权限是否唯一
- func (d RoleDao) CheckRoleKeyUnique(role model.SysRole) int64 {
- session := base.GetSession().Session.Table(role.TableName()).Where("role_key = ?", role.RoleKey)
- if role.Id > 0 {
- session.And("id != ?", role.Id)
- }
- count, err := session.Count(&role)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- }
- return count
- }
- // SelectRolesByUserName 查询角色组
- func (d RoleDao) SelectRolesByUserName(name string) *[]model.SysRole {
- roles := make([]model.SysRole, 0)
- session := d.sqlSelectJoin()
- err := session.Where("r.del_flag = '0'").And("u.user_name = ?", name).Find(&roles)
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- return nil
- }
- return &roles
- }
- func (d RoleDao) CheckUnique(role model.SysRole, condition []string) int64 {
- session := base.GetSession().Session.Table(role.TableName())
- if role.Id > 0 {
- session.And("id != ?", role.Id)
- }
- for _, item := range condition {
- fieldValue := reflect.ValueOf(role).FieldByName(utils.Ucfirst(item))
- if strings.Contains(fieldValue.Type().String(), "int") {
- session.And(utils.Camel2Case(item)+" = ?", fieldValue.Int())
- } else if strings.Contains(fieldValue.Type().String(), "string") {
- session.And(utils.Camel2Case(item)+" = ?", fieldValue.String())
- } else {
- session.And(utils.Camel2Case(item)+" = ?", fieldValue.String())
- }
- }
- count, err := session.Count()
- if err != nil {
- gotool.Logs.ErrorLog().Println(err)
- }
- return count
- }
|