user_imp.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package imp
  2. import (
  3. "Ic_ouath/app/e"
  4. "Ic_ouath/global"
  5. "Ic_ouath/models"
  6. "Ic_ouath/utils"
  7. "context"
  8. "errors"
  9. "fmt"
  10. uuid "github.com/satori/go.uuid"
  11. "gorm.io/gorm"
  12. "strconv"
  13. )
  14. type User struct{}
  15. func (u *User) UpdatePassword(user models.UserUpdate) e.Rescode {
  16. //TODO implement me
  17. var users models.User
  18. tx := global.DBLink.Where("phone=?", user.Phone).Find(&users)
  19. ctx := context.Background()
  20. result, err := global.Rdb.Get(ctx, user.Phone).Result()
  21. if err != nil {
  22. return e.CodeIsError
  23. } else if result != user.Code {
  24. return e.CodeIsError
  25. }
  26. if tx.RowsAffected > 0 {
  27. user.Password = utils.MD5(user.Password)
  28. tx = global.DBLink.Model(&users).Where("phone=?", user.Phone).Update("password", user.Password)
  29. if tx.RowsAffected > 0 {
  30. return e.SUCCESS
  31. }
  32. return e.ERROR
  33. }
  34. return e.TheSystemIsAbnormal
  35. }
  36. func (u *User) PhoneRegist(userRegist models.UserRegist) e.Rescode {
  37. //查找账号是否注册或者手机号已经注册,一个手机号只能注册一个账号
  38. tx := global.DBLink.Where("account = ?", userRegist.Account).Find(&models.User{})
  39. row := global.DBLink.Where("phone = ?", userRegist.Phone).Find(&models.User{})
  40. if row.RowsAffected > 0 {
  41. return e.AlreadyExists
  42. }
  43. if tx.RowsAffected > 0 {
  44. return e.AlreadyExists
  45. } else {
  46. ctx := context.Background()
  47. result, err := global.Rdb.Get(ctx, userRegist.Phone).Result()
  48. if err != nil {
  49. return e.TheVerificationCodeWasNotSent
  50. } else if result != userRegist.Code {
  51. return e.CodeIsError
  52. }
  53. var user = models.User{
  54. Phone: userRegist.Phone,
  55. Account: userRegist.Account,
  56. Password: utils.MD5(userRegist.Password),
  57. Username: userRegist.Username,
  58. State: true,
  59. UUid: uuid.NewV4().String(),
  60. }
  61. tx = global.DBLink.Create(&user)
  62. if tx.RowsAffected > 0 {
  63. return e.SUCCESS
  64. }
  65. }
  66. return e.ERROR
  67. }
  68. // Login 账号密码登录
  69. func (u *User) Login(userRegist models.UserRegist) (models.UserDto, e.Rescode) {
  70. var count int64
  71. var userdto models.UserDto
  72. var user models.User
  73. md5 := utils.MD5(userRegist.Password)
  74. global.DBLink.Where("account=?", userRegist.Account).Where("password=?", md5).Find(&user).Count(&count)
  75. if count > 0 {
  76. token, err := utils.CreateToken(user.ID, user.Username, user.Role)
  77. token = "manage:" + token
  78. if err != nil {
  79. return userdto, e.TokenIsFaild
  80. } else {
  81. userdto.Token = token
  82. userdto.Username = user.Username
  83. userdto.Account = user.Account
  84. userdto.Avatar = user.Avatar
  85. userdto.ID = user.ID
  86. userdto.Role = user.Role
  87. userdto.UUid = user.UUid
  88. return userdto, e.SUCCESS
  89. }
  90. } else {
  91. return userdto, e.ThePasswordIsWrongOrThePhoneNumberIsIncorrect
  92. }
  93. }
  94. // CodeLogin 验证码登录
  95. func (u *User) CodeLogin(userRegist models.UserRegist) (models.UserDto, e.Rescode) {
  96. var user models.User
  97. var userdto models.UserDto
  98. tx := global.DBLink.Where("phone=?", userRegist.Phone).Find(&user)
  99. ctx := context.Background()
  100. result, err := global.Rdb.Get(ctx, userRegist.Phone).Result()
  101. if err != nil {
  102. return userdto, e.CodeIsError
  103. } else if result != userRegist.Code {
  104. return userdto, e.CodeIsError
  105. }
  106. token, err := utils.CreateToken(user.ID, user.Username, user.Role)
  107. token = "manage:" + token
  108. userdto.Token = token
  109. if tx.RowsAffected > 0 {
  110. userdto.Username = user.Username
  111. userdto.Account = user.Account
  112. userdto.Avatar = user.Avatar
  113. userdto.ID = user.ID
  114. userdto.Role = user.Role
  115. userdto.UUid = user.UUid
  116. return userdto, e.SUCCESS
  117. } else {
  118. return models.UserDto{}, e.GoToRegister
  119. }
  120. }
  121. // GetUserAll 获取所有用户
  122. func (u *User) GetUserAll() ([]models.User, e.Rescode) {
  123. //TODO implement me
  124. var users []models.User
  125. tx := global.DBLink.Find(&users)
  126. if tx.RowsAffected > 0 {
  127. return users, e.SUCCESS
  128. }
  129. return users, e.TheUserIsEmpty
  130. }
  131. // UpdateUser 更新用户
  132. func (u *User) UpdateUser(id any, uservo models.UserVo) e.Rescode {
  133. var user models.User
  134. atoi, _ := strconv.Atoi(fmt.Sprint(id))
  135. tx := global.DBLink.Model(&user).
  136. Where("id=?", uservo.Id).
  137. Updates(models.User{
  138. Username: uservo.Username,
  139. State: uservo.State,
  140. Avatar: uservo.Avatar,
  141. Account: uservo.Account,
  142. Phone: uservo.Phone,
  143. Password: utils.MD5(uservo.Password),
  144. UpdateBy: atoi,
  145. })
  146. if tx.RowsAffected > 0 {
  147. return e.SUCCESS
  148. }
  149. return e.UPDATEFAIL
  150. }
  151. // DeleteUser 删除用户
  152. func (u *User) DeleteUser(ids []string) e.Rescode {
  153. for _, id := range ids {
  154. tx := global.DBLink.Where("id=?", id).Delete(&models.User{})
  155. if tx.RowsAffected > 0 {
  156. return e.SUCCESS
  157. }
  158. }
  159. return e.DELETEFAIL
  160. }
  161. func (u *User) CreateAdmin() error {
  162. var user models.User
  163. var err error
  164. err = global.DBLink.Where("username = ?", "admin").Where("account = ?", "admin").First(&user).Error
  165. if err != nil {
  166. if errors.Is(err, gorm.ErrRecordNotFound) {
  167. md5 := utils.MD5("bzd123")
  168. user.Password = md5
  169. user.Username = "admin"
  170. user.Account = "admin"
  171. user.Role = "admin"
  172. user.State = true
  173. user.UUid = uuid.NewV4().String()
  174. err = global.DBLink.Create(&user).Error
  175. if err != nil {
  176. return errors.New("初始化管理员失败")
  177. }
  178. }
  179. }
  180. return nil
  181. }