user_service.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package service
  2. import (
  3. "github.com/druidcaesa/gotool"
  4. "ulink-admin/frame"
  5. dao2 "ulink-admin/modules/system/dao"
  6. "ulink-admin/modules/system/models/model"
  7. "ulink-admin/modules/system/models/req"
  8. "ulink-admin/modules/system/models/response"
  9. "ulink-admin/pkg/base"
  10. "xorm.io/xorm"
  11. )
  12. // UserService 系统用户操作业务逻辑
  13. type UserService struct {
  14. UserDao *dao2.UserDao `inject:""`
  15. UserRoleDao *dao2.UserRoleDao `inject:""`
  16. }
  17. // FindList 查询用户集合业务方法
  18. func (s UserService) Page(query *req.UserQuery) ([]*response.UserResponse, int64) {
  19. return s.UserDao.Page(query)
  20. }
  21. // GetUserById 根据id查询用户数据
  22. func (s UserService) GetById(parseInt int64, record interface{}) {
  23. s.UserDao.GetById(parseInt, record)
  24. }
  25. // GetUserByUserName 根据用户名查询用户
  26. func (s UserService) GetUserByUserName(name string) *model.SysUser {
  27. user := model.SysUser{}
  28. user.UserName = name
  29. return s.UserDao.GetUserByUserName(user)
  30. }
  31. // CheckEmailUnique 校验邮箱是否存在
  32. func (s UserService) CheckEmailUnique(user *req.UserBody) *model.SysUser {
  33. return s.UserDao.CheckEmailUnique(user)
  34. }
  35. // CheckPhoneNumUnique 校验手机号是否存在
  36. func (s UserService) CheckPhoneNumUnique(body *req.UserBody) *model.SysUser {
  37. return s.UserDao.CheckPhoneNumUnique(body)
  38. }
  39. // Insert 添加用户业务逻辑
  40. func (s UserService) Insert(body *req.UserBody) {
  41. //根据用户名查询用户
  42. user := s.GetUserByUserName(body.UserName)
  43. if user != nil {
  44. frame.Throw(frame.BUSINESS_CODE, "失败,登录账号已存在")
  45. }
  46. if s.UserDao.Exist(body.TableName(), "phone_number=?", body.PhoneNumber) {
  47. frame.Throw(frame.BUSINESS_CODE, "手机号已存在")
  48. }
  49. if s.UserDao.Exist(body.TableName(), "Email=?", body.Email) {
  50. frame.Throw(frame.BUSINESS_CODE, "邮箱已存在")
  51. }
  52. //进行密码加密
  53. body.Password = gotool.BcryptUtils.Generate(body.Password)
  54. base.Transaction(func(session *xorm.Session) {
  55. //添加用户数据库操作
  56. s.UserDao.Insert(body)
  57. s.insertUserRole(body)
  58. })
  59. }
  60. // 新增用户角色信息
  61. func (s UserService) insertUserRole(user *req.UserBody) {
  62. roleIds := user.RoleIds
  63. if len(roleIds) > 0 {
  64. roles := make([]model.SysUserRole, 0)
  65. for i := 0; i < len(roleIds); i++ {
  66. role := model.SysUserRole{
  67. RoleId: roleIds[i],
  68. UserId: user.Id,
  69. }
  70. roles = append(roles, role)
  71. }
  72. s.UserRoleDao.BatchUserRole(roles)
  73. }
  74. }
  75. // Edit 修改用户数据
  76. func (s UserService) Edit(body *req.UserBody) {
  77. if s.UserDao.Exist(body.TableName(), "phone_number=? and id!=?", body.PhoneNumber, body.Id) {
  78. frame.Throw(frame.BUSINESS_CODE, "手机号已存在")
  79. }
  80. if s.UserDao.Exist(body.TableName(), "email=? and id!=? ", body.Email, body.Id) {
  81. frame.Throw(frame.BUSINESS_CODE, "邮箱已存在")
  82. }
  83. base.Transaction(func(session *xorm.Session) {
  84. //删除原有用户和角色关系
  85. s.UserRoleDao.RemoveUserRole(body.Id)
  86. //重新添加用具角色关系
  87. s.insertUserRole(body)
  88. //修改用户数据
  89. s.UserDao.Update(body)
  90. })
  91. }
  92. // Remove 根据用户id删除用户相关数据
  93. func (s UserService) Remove(id int64) {
  94. base.Transaction(func(session *xorm.Session) {
  95. //删除原有用户和角色关系
  96. s.UserRoleDao.RemoveUserRole(id)
  97. //删除用户数据
  98. s.UserDao.Delete(&req.UserBody{}, id)
  99. })
  100. }
  101. // CheckUserAllowed 校验是否可以修改用户密码
  102. func (s UserService) CheckUserAllowed(body *req.UserBody) bool {
  103. user := model.SysUser{}
  104. return user.IsAdmin(body.Id)
  105. }
  106. // ResetPwd 修改用户密码
  107. func (s UserService) ResetPwd(body *req.UserBody) int64 {
  108. return s.UserDao.ResetPwd(body)
  109. }
  110. // GetAllocatedList 查询未分配用户角色列表
  111. func (s UserService) GetAllocatedList(query *req.UserQuery) ([]*response.UserResponse, int64) {
  112. return s.UserDao.GetAllocatedList(query)
  113. }
  114. // GetUnallocatedList 查询未分配用户角色列表
  115. func (s UserService) GetUnallocatedList(query *req.UserQuery) ([]*response.UserResponse, int64) {
  116. return s.UserDao.GetUnallocatedList(query)
  117. }
  118. // EditProfile 修改数据
  119. func (s UserService) EditProfile(body *req.UserBody) {
  120. if s.UserDao.Exist(body.TableName(), "phone_number=? and id!=?", body.PhoneNumber, body.Id) {
  121. frame.Throw(frame.BUSINESS_CODE, "手机号已存在")
  122. }
  123. if s.UserDao.Exist(body.TableName(), "Email=? and id!=? ", body.Email, body.Id) {
  124. frame.Throw(frame.BUSINESS_CODE, "邮箱已存在")
  125. }
  126. s.UserDao.Update(body)
  127. }
  128. // UpdatePwd 修改密码
  129. func (s UserService) UpdatePwd(id int64, hash string) {
  130. s.UserDao.UpdatePwd(id, hash)
  131. }
  132. // UpdateAvatar 修改头像
  133. func (s UserService) UpdateAvatar(info *model.SysUser) {
  134. s.UserDao.UpdateAvatar(info)
  135. }
  136. func (s UserService) UpdateStatus(id int64, status string) {
  137. s.UserDao.UpdateStatus(id, status)
  138. }
  139. func (s UserService) UpdateAuthRole(user *req.UserBody) {
  140. roleIds := user.RoleIds
  141. if len(roleIds) > 0 {
  142. roles := make([]model.SysUserRole, 0)
  143. for i := 0; i < len(roleIds); i++ {
  144. role := model.SysUserRole{
  145. RoleId: roleIds[i],
  146. UserId: user.Id,
  147. }
  148. roles = append(roles, role)
  149. }
  150. s.UserRoleDao.UpdateAuthRole(user.Id, roles)
  151. } else {
  152. //删除原有用户和角色关系
  153. s.UserRoleDao.RemoveUserRole(user.Id)
  154. }
  155. }
  156. func (s UserService) List(query *req.UserQuery, list *[]model.SysUser) {
  157. s.UserDao.List(query, list)
  158. }