user.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package service
  2. import (
  3. "dy-admin/internal/pcmserver/global"
  4. "dy-admin/internal/pcmserver/pkg/code"
  5. "dy-admin/internal/pcmserver/sys/model"
  6. "dy-admin/internal/pcmserver/sys/model/request"
  7. "dy-admin/internal/pcmserver/utils"
  8. "dy-admin/pkg/rescode"
  9. "github.com/pkg/errors"
  10. uuid "github.com/satori/go.uuid"
  11. "gorm.io/gorm"
  12. )
  13. type UserService struct {
  14. }
  15. func (us *UserService) Register(u model.User) (user model.User, err error) {
  16. err = global.DB.Where("username = ?", u.Username).First(&model.User{}).Error
  17. if !errors.Is(err, gorm.ErrRecordNotFound) {
  18. return user, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrUserAlreadyExistCode])
  19. }
  20. //找到用户指定的角色
  21. if u.RoleIds != nil && len(u.RoleIds) != 0 {
  22. var roles []model.Role
  23. err = global.DB.Where("role_id in ?", u.RoleIds).Find(&roles).Error
  24. if err != nil {
  25. return user, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  26. }
  27. u.Roles = roles
  28. }
  29. if u.DeptId != 0 {
  30. var dept model.Dept
  31. err = global.DB.Where("dept_id = ?", u.DeptId).First(&dept).Error
  32. if err != nil {
  33. return user, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  34. }
  35. u.Dept = dept
  36. }
  37. u.Password = utils.BcryptHash(u.Password)
  38. u.UUID = uuid.NewV4().String()
  39. err = global.DB.Create(&u).Error
  40. if err != nil {
  41. return user, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  42. }
  43. return u, err
  44. }
  45. func (us *UserService) UpdateUser(u model.User) (err error) {
  46. var user model.User
  47. err = global.DB.Where("user_id = ?", u.UserID).Preload("Roles").First(&user).Error
  48. if err != nil {
  49. if errors.Is(err, gorm.ErrRecordNotFound) {
  50. return rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrUserNotFoundCode])
  51. } else {
  52. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  53. }
  54. }
  55. if u.DeptId != 0 {
  56. var dept model.Dept
  57. err = global.DB.Where("dept_id = ?", u.DeptId).First(&dept).Error
  58. if err != nil {
  59. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  60. }
  61. }
  62. var newRoles []model.Role
  63. err = global.DB.Where("role_id in ?", u.RoleIds).Find(&newRoles).Error
  64. if err != nil {
  65. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  66. }
  67. tx := global.DB.Begin()
  68. defer func() {
  69. if err != nil {
  70. tx.Rollback()
  71. } else {
  72. tx.Commit()
  73. }
  74. }()
  75. // 删除旧的角色
  76. err = tx.Model(&user).Association("Roles").Delete(user.Roles)
  77. if err != nil {
  78. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  79. }
  80. u.Roles = newRoles
  81. err = tx.Session(&gorm.Session{FullSaveAssociations: true}).Debug().Updates(&u).Error
  82. if err != nil {
  83. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  84. }
  85. // 清楚角色casbin缓存
  86. _ = CasbinServiceInstance.Casbin().InvalidateCache()
  87. return
  88. }
  89. func (us *UserService) Login(u model.User) (user model.User, err error) {
  90. err = global.DB.Where("username = ?", u.Username).Preload("Roles").First(&user).Error
  91. if err != nil {
  92. if errors.Is(err, gorm.ErrRecordNotFound) {
  93. return user, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrUserNotFoundCode])
  94. } else {
  95. return user, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  96. }
  97. }
  98. if ok := utils.BcryptCheck(u.Password, user.Password); !ok {
  99. return user, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrPasswordCode])
  100. }
  101. if user.Status != "1" {
  102. return user, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrNotAllowLoginCode])
  103. }
  104. return
  105. }
  106. func (us *UserService) ChangePassword(u model.User, newPassword string) (err error) {
  107. var user model.User
  108. err = global.DB.Where("user_id = ?", u.UserID).First(&user).Error
  109. if err != nil {
  110. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  111. }
  112. if ok := utils.BcryptCheck(u.Password, user.Password); !ok {
  113. return rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrPasswordCode])
  114. }
  115. user.Password = utils.BcryptHash(newPassword)
  116. err = global.DB.Save(&user).Error
  117. if err != nil {
  118. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  119. }
  120. return
  121. }
  122. func (us *UserService) GetUserInfoList(info request.SearchUserReq) (users []model.User, total int64, err error) {
  123. var limit, offset int
  124. if info.Page == 0 || info.PageSize == 0 {
  125. limit = -1
  126. offset = -1
  127. } else {
  128. limit = info.PageSize
  129. offset = info.PageSize * (info.Page - 1)
  130. }
  131. db := global.DB.Model(&model.User{})
  132. if info.NickName != "" {
  133. db = db.Where("nick_name LIKE ?", "%"+info.NickName+"%")
  134. }
  135. if info.Phone != "" {
  136. db = db.Where("phone LIKE ?", "%"+info.Phone+"%")
  137. }
  138. if info.DeptId != 0 {
  139. deptIds, _ := ServicesGroupApp.DeptService.GetSonDeptIds(info.DeptId)
  140. db = db.Where("dept_id in (?)", deptIds)
  141. }
  142. if info.Status != "" {
  143. db = db.Where("status = ?", info.Status)
  144. }
  145. err = db.Count(&total).Error
  146. if err != nil {
  147. return users, total, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  148. }
  149. err = db.Limit(limit).Offset(offset).Preload("Roles").Find(&users).Error
  150. if err != nil {
  151. return users, total, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  152. }
  153. return
  154. }
  155. func (us *UserService) GetUserInfoByDeptID(deptId int) (users []model.User, total int64, err error) {
  156. err = global.DB.Model(&model.User{}).Where("dept_id = ?", deptId).Count(&total).Preload("Roles").Find(&users).Error
  157. if err != nil {
  158. return users, total, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  159. }
  160. return
  161. }
  162. func (us *UserService) GetUserByID(userId int) (user model.User, err error) {
  163. err = global.DB.Preload("Roles").Where("user_id = ?", userId).First(&user).Error
  164. if err != nil {
  165. if errors.Is(err, gorm.ErrRecordNotFound) {
  166. return user, rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrUserNotFoundCode])
  167. } else {
  168. return user, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  169. }
  170. }
  171. return
  172. }
  173. func (us *UserService) ResetPassword(userId int) (err error) {
  174. err = global.DB.Model(&model.User{}).Where("user_id = ?", userId).Update("password", utils.BcryptHash("123456")).Error
  175. if err != nil {
  176. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  177. }
  178. return
  179. }
  180. func (us *UserService) DeleteUser(userId int) (err error) {
  181. tx := global.DB.Begin()
  182. defer func() {
  183. if err != nil {
  184. tx.Rollback()
  185. } else {
  186. tx.Commit()
  187. }
  188. }()
  189. var user model.User
  190. err = tx.Preload("Roles").Where("user_id = ?", userId).First(&user).Error
  191. if err != nil {
  192. if errors.Is(err, gorm.ErrRecordNotFound) {
  193. return rescode.RegisterErrorWithCause(nil, code.ErrCodeMap[code.ErrUserNotFoundCode])
  194. } else {
  195. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  196. }
  197. }
  198. // 删除关联
  199. err = tx.Model(&user).Association("Roles").Delete(user.Roles)
  200. if err != nil {
  201. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  202. }
  203. err = tx.Where("user_id = ?", userId).Delete(&user).Error
  204. if err != nil {
  205. return rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
  206. }
  207. return
  208. }