sys_user.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package system
  2. import (
  3. "errors"
  4. "fmt"
  5. "server/dao"
  6. "time"
  7. "github.com/gofrs/uuid/v5"
  8. "gorm.io/gorm"
  9. "server/global"
  10. "server/model/common/request"
  11. "server/utils"
  12. )
  13. //@author: [piexlmax](https://github.com/piexlmax)
  14. //@function: Register
  15. //@description: 用户注册
  16. //@param: u model.SysUser
  17. //@return: userInter system.SysUser, err error
  18. type UserService struct{}
  19. func (userService *UserService) Register(u dao.SysUser) (userInter dao.SysUser, err error) {
  20. _, err = dao.QueryUserByUserName(u.Username)
  21. if !errors.Is(err, gorm.ErrRecordNotFound) { // 判断用户名是否注册
  22. return userInter, errors.New("用户名已注册")
  23. }
  24. // 否则 附加uuid 密码hash加密 注册
  25. u.Password = utils.BcryptHash(u.Password)
  26. u.UUID = uuid.Must(uuid.NewV4())
  27. u.DepartmentId = 1
  28. err = u.CreateUser()
  29. return u, err
  30. }
  31. //@author: [piexlmax](https://github.com/piexlmax)
  32. //@author: [SliverHorn](https://github.com/SliverHorn)
  33. //@function: Login
  34. //@description: 用户登录
  35. //@param: u *model.SysUser
  36. //@return: err error, userInter *model.SysUser
  37. func (userService *UserService) Login(u *dao.SysUser) (userInter *dao.SysUser, err error) {
  38. if nil == global.GVA_DB {
  39. return nil, fmt.Errorf("db not init")
  40. }
  41. user, err := dao.QueryUserAndAuthorityByUserName(u.Username)
  42. if err == nil {
  43. if ok := utils.BcryptCheck(u.Password, user.Password); !ok {
  44. return nil, errors.New("密码错误")
  45. }
  46. MenuServiceApp.UserAuthorityDefaultRouter(&user)
  47. }
  48. return &user, err
  49. }
  50. //@author: [piexlmax](https://github.com/piexlmax)
  51. //@function: ChangePassword
  52. //@description: 修改用户密码
  53. //@param: u *model.SysUser, newPassword string
  54. //@return: userInter *model.SysUser,err error
  55. func (userService *UserService) ChangePassword(u *dao.SysUser, newPassword string) (userInter *dao.SysUser, err error) {
  56. user, err := dao.QueryUserByUserId(u.ID)
  57. if err != nil {
  58. return nil, err
  59. }
  60. if ok := utils.BcryptCheck(u.Password, user.Password); !ok {
  61. return nil, errors.New("原密码错误")
  62. }
  63. user.Password = utils.BcryptHash(newPassword)
  64. err = u.UpdateUser()
  65. return &user, err
  66. }
  67. //@author: [piexlmax](https://github.com/piexlmax)
  68. //@function: GetUserInfoList
  69. //@description: 分页获取数据
  70. //@param: info request.PageInfo
  71. //@return: err error, list interface{}, total int64
  72. func (userService *UserService) GetUserInfoList(info request.PageInfo) (list interface{}, total int64, err error) {
  73. limit := info.PageSize
  74. offset := info.PageSize * (info.Page - 1)
  75. userList, total, err := dao.QueryUserInfoList(limit, offset)
  76. return userList, total, err
  77. }
  78. //@author: [piexlmax](https://github.com/piexlmax)
  79. //@function: SetUserAuthority
  80. //@description: 设置一个用户的权限
  81. //@param: uuid uuid.UUID, authorityId string
  82. //@return: err error
  83. func (userService *UserService) SetUserAuthority(id uint, authorityId uint) (err error) {
  84. _, assignErr := dao.QueryUserAuthority(id, authorityId)
  85. if errors.Is(assignErr, gorm.ErrRecordNotFound) {
  86. return errors.New("该用户无此角色")
  87. }
  88. return dao.UpdateUserAuthority(id, authorityId)
  89. }
  90. //@author: [piexlmax](https://github.com/piexlmax)
  91. //@function: SetUserAuthorities
  92. //@description: 设置一个用户的权限
  93. //@param: id uint, authorityIds []string
  94. //@return: err error
  95. func (userService *UserService) SetUserAuthorities(id uint, authorityId uint) (err error) {
  96. return dao.SetUserAuthorities(id, authorityId)
  97. }
  98. //@author: [piexlmax](https://github.com/piexlmax)
  99. //@function: DeleteUser
  100. //@description: 删除用户
  101. //@param: id float64
  102. //@return: err error
  103. func (userService *UserService) DeleteUser(id int) (err error) {
  104. return dao.DeleteUser(id)
  105. }
  106. //@author: [piexlmax](https://github.com/piexlmax)
  107. //@function: SetUserInfo
  108. //@description: 设置用户信息
  109. //@param: reqUser model.SysUser
  110. //@return: err error, user model.SysUser
  111. func (userService *UserService) SetUserInfo(req dao.SysUser) error {
  112. req.UpdatedAt = time.Now()
  113. return req.SetUserInfo()
  114. }
  115. //@author: [piexlmax](https://github.com/piexlmax)
  116. //@function: SetUserInfo
  117. //@description: 设置用户信息
  118. //@param: reqUser model.SysUser
  119. //@return: err error, user model.SysUser
  120. func (userService *UserService) SetSelfInfo(req dao.SysUser) error {
  121. return req.SetUserInfoById()
  122. }
  123. //@author: [piexlmax](https://github.com/piexlmax)
  124. //@author: [SliverHorn](https://github.com/SliverHorn)
  125. //@function: GetUserInfo
  126. //@description: 获取用户信息
  127. //@param: uuid uuid.UUID
  128. //@return: err error, user system.SysUser
  129. func (userService *UserService) GetUserInfo(uuid uuid.UUID) (user dao.SysUser, err error) {
  130. reqUser, err := dao.GetUserInfoByUUID(uuid)
  131. if err != nil {
  132. return reqUser, err
  133. }
  134. MenuServiceApp.UserAuthorityDefaultRouter(&reqUser)
  135. return reqUser, err
  136. }
  137. //@author: [SliverHorn](https://github.com/SliverHorn)
  138. //@function: FindUserById
  139. //@description: 通过id获取用户信息
  140. //@param: id int
  141. //@return: err error, user *model.SysUser
  142. func (userService *UserService) FindUserById(id int) (user *dao.SysUser, err error) {
  143. u, err := dao.QueryUserByUserId(uint(id))
  144. return &u, err
  145. }
  146. //@author: [SliverHorn](https://github.com/SliverHorn)
  147. //@function: FindUserByUuid
  148. //@description: 通过uuid获取用户信息
  149. //@param: uuid string
  150. //@return: err error, user *model.SysUser
  151. func (userService *UserService) FindUserByUuid(uuidStr string) (user *dao.SysUser, err error) {
  152. id, err := uuid.FromString(uuidStr)
  153. if err != nil {
  154. fmt.Println("Error parsing UUID:", err)
  155. return
  156. }
  157. u, err := dao.GetUserInfoByUUID(id)
  158. if err != nil {
  159. return &u, errors.New("用户不存在")
  160. }
  161. return &u, nil
  162. }
  163. //@author: [piexlmax](https://github.com/piexlmax)
  164. //@function: resetPassword
  165. //@description: 修改用户密码
  166. //@param: ID uint
  167. //@return: err error
  168. func (userService *UserService) ResetPassword(ID uint) error {
  169. return dao.SysUser{
  170. GVA_MODEL: global.GVA_MODEL{
  171. ID: ID,
  172. },
  173. Password: utils.BcryptHash("123456"),
  174. }.SetUserInfoById()
  175. }
  176. // QueryAllUsers 查询所有用户
  177. func (userService *UserService) QueryAllUsers() (userList []dao.SysUser, err error) {
  178. userList, err = dao.QueryAllUsers()
  179. return userList, err
  180. }