user.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package services
  2. import (
  3. "errors"
  4. "eta/eta_mini_api/models"
  5. "eta/eta_mini_api/services/go_redis"
  6. "eta/eta_mini_api/utils"
  7. "time"
  8. )
  9. // BindUser 用户绑定
  10. func BindUser(unionId, openId, phone, email, areaCode string) (userItem *models.UserItem, errMsg string, err error) {
  11. if phone == "" && email == "" {
  12. err = errors.New("手机号或邮箱必填一个")
  13. return
  14. }
  15. // 根据openid获取用户信息
  16. if openId == "" {
  17. err = errors.New("openid不能为空")
  18. return
  19. }
  20. userItem, err = models.GetUserItemByOpenId(openId)
  21. if err != nil && err.Error() != utils.ErrNoRow() {
  22. return
  23. }
  24. var userId int64
  25. curTime := time.Now()
  26. if userItem != nil {
  27. userId = int64(userItem.UserId)
  28. if userItem.Phone != "" && userItem.Phone != phone {
  29. errMsg = "该手机号已绑定其他微信号"
  30. return
  31. }
  32. if userItem.Email != "" && userItem.Email != email {
  33. errMsg = "该邮箱已绑定其他微信号"
  34. return
  35. }
  36. if userItem.Phone == "" && phone != "" {
  37. user := &models.User{
  38. UserId: userItem.UserId,
  39. Phone: phone,
  40. AreaCode: areaCode,
  41. RegisterTime: curTime,
  42. ModifyTime: curTime,
  43. }
  44. updateUserErr := user.Update([]string{"phone", "area_code", "register_time", "modify_time"})
  45. err = updateUserErr
  46. }
  47. if userItem.Email == "" && email != "" {
  48. user := &models.User{
  49. UserId: userItem.UserId,
  50. Email: email,
  51. RegisterTime: curTime,
  52. ModifyTime: curTime,
  53. }
  54. updateUserErr := user.Update([]string{"email", "modify_time", "register_time"})
  55. err = updateUserErr
  56. }
  57. } else {
  58. //根据手机号获取用户信息
  59. if phone != "" {
  60. tmpWxUser, wxUserErr := models.GetUserItemByPhone(phone)
  61. if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() {
  62. err = wxUserErr
  63. return
  64. }
  65. userItem = tmpWxUser
  66. }
  67. //根据邮箱获取用户信息
  68. if userItem == nil && email != "" {
  69. tmpWxUser, wxUserErr := models.GetUserItemByEmail(email)
  70. if wxUserErr != nil && wxUserErr.Error() != utils.ErrNoRow() {
  71. err = wxUserErr
  72. return
  73. }
  74. userItem = tmpWxUser
  75. }
  76. var userId int
  77. //如果查询出来的用户是nil,那么需要新增用户
  78. if userItem == nil {
  79. key := utils.CACHE_ACCESS_WX_BIND + phone + ":" + email
  80. isHas := go_redis.IsExist(key)
  81. if isHas {
  82. err = errors.New("多次提交,请关闭页面重新进入")
  83. return
  84. }
  85. go_redis.SetNX(key, "ok", time.Second*300)
  86. user := &models.User{
  87. Phone: phone,
  88. AreaCode: areaCode,
  89. Email: email,
  90. OpenId: openId,
  91. UnionId: unionId,
  92. }
  93. tmpUserId, addUserErr := user.Insert()
  94. //添加完成,清除缓存
  95. _ = go_redis.Delete(key)
  96. if addUserErr != nil {
  97. err = addUserErr
  98. return
  99. }
  100. user.UserId = int(tmpUserId)
  101. userId = int(tmpUserId)
  102. userItem, err = models.GetUserItemByUserId(userId)
  103. } else {
  104. userId = userItem.UserId
  105. }
  106. }
  107. //如果该用户 绑定注册状态 字段处于 未注册 的情况下,那么去修改该数据
  108. if !userItem.IsRegistered {
  109. err = models.ModifyUserRegisterStatus(int(userId), true, curTime, curTime)
  110. if err != nil {
  111. return
  112. }
  113. }
  114. return
  115. }