role_dao.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package dao
  2. import (
  3. "github.com/druidcaesa/gotool"
  4. "reflect"
  5. "strings"
  6. "ulink-admin/frame"
  7. "ulink-admin/modules/system/models/model"
  8. "ulink-admin/modules/system/models/req"
  9. "ulink-admin/pkg/base"
  10. "ulink-admin/pkg/page"
  11. "ulink-admin/utils"
  12. "xorm.io/xorm"
  13. )
  14. type RoleDao struct {
  15. base.BaseDao
  16. }
  17. // 角色公用sql
  18. func (d RoleDao) sqlSelectJoin() *xorm.Session {
  19. return base.GetSession().Session.Table([]string{model.SysRole{}.TableName(), "r"}).
  20. Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.id").
  21. Join("LEFT", []string{"sys_user", "u"}, "u.id = ur.user_id")
  22. }
  23. // 角色公用sql
  24. func (d RoleDao) sqlSelect() *xorm.Session {
  25. return base.GetSession().Session.Table([]string{model.SysRole{}.TableName(), "r"})
  26. }
  27. // 用户角色关系查询sql
  28. func (d RoleDao) sqlSelectRoleAndUser() *xorm.Session {
  29. return base.GetSession().Session.Table([]string{model.SysRole{}.TableName(), "r"}).
  30. Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.id").
  31. Join("LEFT", []string{"sys_user", "u"}, "u.id = ur.user_id")
  32. }
  33. // page 分页查询
  34. func (d RoleDao) Page(q *req.RoleQuery, list interface{}) int64 {
  35. session := base.GetSession().Session
  36. session.Table([]string{model.SysRole{}.TableName(), "r"}).
  37. Join("LEFT", []string{"sys_user_role", "ur"}, "ur.role_id = r.id").
  38. Join("LEFT", []string{"sys_user", "u"}, "u.id = ur.user_id")
  39. if !gotool.StrUtils.HasEmpty(q.RoleName) {
  40. session.And("r.role_name like concat('%', ?, '%')", q.RoleName)
  41. }
  42. if !gotool.StrUtils.HasEmpty(q.Status) {
  43. session.And("r.status = ?", q.Status)
  44. }
  45. if !gotool.StrUtils.HasEmpty(q.RoleKey) {
  46. session.And("r.role_key like concat('%', ?, '%')", q.RoleKey)
  47. }
  48. if !gotool.StrUtils.HasEmpty(q.BeginTime) {
  49. session.And("date_format(r.create_time,'%y%m%d') >= date_format(?,'%y%m%d')", q.BeginTime)
  50. }
  51. if !gotool.StrUtils.HasEmpty(q.EndTime) {
  52. session.And("date_format(r.create_time,'%y%m%d') <= date_format(?,'%y%m%d')", q.EndTime)
  53. }
  54. if !base.GetCurUser().IsAdmin {
  55. session.And("r.company_id = ?", base.GetCurUser().ComponyId)
  56. }
  57. total, err := session.Limit(q.Size(), page.StartSize(q.Page(), q.Size())).OrderBy("r.role_sort").FindAndCount(list)
  58. if err != nil {
  59. frame.Throw(frame.SQL_CODE, "查询错误:"+err.Error())
  60. }
  61. return total
  62. }
  63. // list 查询所有角色
  64. func (d RoleDao) List(q *req.RoleQuery, list interface{}) {
  65. session := base.GetSession().Session
  66. session.Table([]string{model.SysRole{}.TableName(), "o"})
  67. if !base.GetCurUser().IsAdmin {
  68. session.And("o.company_id = ?", base.GetCurUser().ComponyId)
  69. }
  70. err := session.Find(list)
  71. if err != nil {
  72. frame.Throw(frame.SQL_CODE, "查询错误:"+err.Error())
  73. }
  74. }
  75. // SelectRoleListByUserId 根据用户id查询用户角色id集合
  76. func (d RoleDao) SelectRoleListByUserId(id int64) *[]int64 {
  77. sqlSelectRoleAndUser := d.sqlSelectRoleAndUser()
  78. var roleIds []int64
  79. err := sqlSelectRoleAndUser.Cols("r.id").Where("u.id = ?", id).Find(&roleIds)
  80. if err != nil {
  81. gotool.Logs.ErrorLog().Println(err)
  82. return nil
  83. }
  84. return &roleIds
  85. }
  86. // GetRolePermissionByUserId 查询用户角色集合
  87. func (d RoleDao) GetRolePermissionByUserId(id int64) *[]string {
  88. var roleKeys []string
  89. err := d.sqlSelectJoin().Cols("r.role_key").Where("r.del_flag = '0'").And("u.id = ?", id).Find(&roleKeys)
  90. if err != nil {
  91. gotool.Logs.ErrorLog().Println(err)
  92. return nil
  93. }
  94. return &roleKeys
  95. }
  96. // GetRoleListByUserId 根据用户ID查询角色
  97. func (d RoleDao) GetRoleListByUserId(id int64) *[]model.SysRole {
  98. roles := make([]model.SysRole, 0)
  99. err := d.sqlSelectJoin().Where("r.del_flag = '0'").And("ur.user_id = ?", id).Find(&roles)
  100. if err != nil {
  101. gotool.Logs.ErrorLog().Println(err)
  102. return nil
  103. }
  104. return &roles
  105. }
  106. // SelectRoleByRoleId 根据角色id查询角色数据
  107. func (d RoleDao) SelectRoleByRoleId(id int64) *model.SysRole {
  108. role := model.SysRole{}
  109. _, err := d.sqlSelectJoin().Where("r.id = ?", id).Get(&role)
  110. if err != nil {
  111. gotool.Logs.ErrorLog().Println(err)
  112. return nil
  113. }
  114. return &role
  115. }
  116. // CheckRoleNameUnique 校验角色名称是否唯一
  117. func (d RoleDao) CheckRoleNameUnique(role model.SysRole) int64 {
  118. session := base.GetSession().Session.Table(role.TableName()).Where("role_name = ?", role.RoleName)
  119. if role.Id > 0 {
  120. session.And("id != ?", role.Id)
  121. }
  122. count, err := session.Count(&role)
  123. if err != nil {
  124. gotool.Logs.ErrorLog().Println(err)
  125. }
  126. return count
  127. }
  128. // CheckRoleKeyUnique 校验角色权限是否唯一
  129. func (d RoleDao) CheckRoleKeyUnique(role model.SysRole) int64 {
  130. session := base.GetSession().Session.Table(role.TableName()).Where("role_key = ?", role.RoleKey)
  131. if role.Id > 0 {
  132. session.And("id != ?", role.Id)
  133. }
  134. count, err := session.Count(&role)
  135. if err != nil {
  136. gotool.Logs.ErrorLog().Println(err)
  137. }
  138. return count
  139. }
  140. // SelectRolesByUserName 查询角色组
  141. func (d RoleDao) SelectRolesByUserName(name string) *[]model.SysRole {
  142. roles := make([]model.SysRole, 0)
  143. session := d.sqlSelectJoin()
  144. err := session.Where("r.del_flag = '0'").And("u.user_name = ?", name).Find(&roles)
  145. if err != nil {
  146. gotool.Logs.ErrorLog().Println(err)
  147. return nil
  148. }
  149. return &roles
  150. }
  151. func (d RoleDao) CheckUnique(role model.SysRole, condition []string) int64 {
  152. session := base.GetSession().Session.Table(role.TableName())
  153. if role.Id > 0 {
  154. session.And("id != ?", role.Id)
  155. }
  156. for _, item := range condition {
  157. fieldValue := reflect.ValueOf(role).FieldByName(utils.Ucfirst(item))
  158. if strings.Contains(fieldValue.Type().String(), "int") {
  159. session.And(utils.Camel2Case(item)+" = ?", fieldValue.Int())
  160. } else if strings.Contains(fieldValue.Type().String(), "string") {
  161. session.And(utils.Camel2Case(item)+" = ?", fieldValue.String())
  162. } else {
  163. session.And(utils.Camel2Case(item)+" = ?", fieldValue.String())
  164. }
  165. }
  166. count, err := session.Count()
  167. if err != nil {
  168. gotool.Logs.ErrorLog().Println(err)
  169. }
  170. return count
  171. }