123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package services
- import (
- "errors"
- "eta/eta_mini_api/models"
- "eta/eta_mini_api/services/go_redis"
- "eta/eta_mini_api/utils"
- "fmt"
- "time"
- )
- // BindUser 用户绑定
- func BindUser(unionId, openId, phone, areaCode string) (userItem *models.UsersItem, tips string, err error) {
- users := new(models.Users)
- {
- cond := fmt.Sprintf(` AND %s = ?`, users.Cols().OpenId)
- pars := make([]interface{}, 0)
- pars = append(pars, openId)
- item, e := users.GetItemByCondition(cond, pars, "")
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("OpenId获取用户信息失败, %v", e)
- return
- }
- if item != nil {
- users = item
- }
- }
- // open_id用户存在
- var updateUsers, insertUsers bool
- var updateCols []string
- if users.UserId > 0 {
- if users.Mobile != "" && users.Mobile != phone {
- tips = "该微信号已绑定其他手机号"
- err = fmt.Errorf("该微信号已绑定其他手机号, Mobile: %s, OpenId: %s", phone, openId)
- return
- }
- if users.Mobile == "" {
- updateUsers = true
- updateCols = append(updateCols, users.Cols().Mobile, users.Cols().AreaCode)
- users.Mobile = phone
- users.AreaCode = areaCode
- }
- if users.IsRegistered == models.UserNoRegistered {
- updateUsers = true
- updateCols = append(updateCols, users.Cols().IsRegistered, users.Cols().RegisterTime)
- users.IsRegistered = models.UserRegistered
- users.RegisterTime = time.Now().Local()
- }
- }
- // 匹配后台添加的用户
- if users.UserId <= 0 {
- cond := fmt.Sprintf(` AND %s = ?`, users.Cols().Mobile)
- pars := make([]interface{}, 0)
- pars = append(pars, phone)
- item, e := users.GetItemByCondition(cond, pars, "")
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("手机号获取用户信息失败, %v", e)
- return
- }
- if item != nil {
- users = item
- }
- if users.UserId > 0 {
- if users.OpenId != "" && users.OpenId != openId {
- tips = "该手机号已绑定其他微信号"
- err = fmt.Errorf("该手机号已绑定其他微信号, Mobile: %s, OpenId: %s", phone, openId)
- return
- }
- updateUsers = true
- updateCols = append(updateCols, users.Cols().OpenId, users.Cols().UnionId, users.Cols().IsRegistered, users.Cols().RegisterTime)
- users.OpenId = openId
- users.UnionId = unionId
- users.IsRegistered = models.UserRegistered
- users.RegisterTime = time.Now().Local()
- }
- }
- // 匹配不上后台添加的,那么新增试用
- if users.UserId <= 0 {
- key := fmt.Sprint(utils.CACHE_ACCESS_WX_BIND, phone)
- locked := go_redis.IsExist(key)
- if locked {
- err = errors.New("多次提交,请关闭页面重新进入")
- return
- }
- go_redis.SetNX(key, "ok", time.Second*300)
- defer func() {
- _ = go_redis.Delete(key)
- }()
- users.Mobile = phone
- users.AreaCode = areaCode
- users.Status = models.UserStatusTrial
- users.AuthStatus = models.AuthStatusOpen
- users.IsRegistered = models.UserRegistered
- users.RegisterTime = time.Now().Local()
- users.OpenId = openId
- users.UnionId = unionId
- users.CreateTime = time.Now().Local()
- users.ModifyTime = time.Now().Local()
- insertUsers = true
- }
- // 新增/更新用户
- if insertUsers {
- if e := users.Create(); e != nil {
- err = fmt.Errorf("新增试用用户失败, %v", e)
- return
- }
- }
- if updateUsers {
- updateCols = append(updateCols, users.Cols().ModifyTime)
- users.ModifyTime = time.Now().Local()
- if e := users.Update(updateCols); e != nil {
- err = fmt.Errorf("更新用户失败, %v", e)
- return
- }
- }
- userItem = users.Format2Item()
- // 绑定UserId
- userRecord := new(models.UserRecord)
- {
- cond := fmt.Sprintf(` AND %s = ?`, userRecord.Cols().UnionId)
- pars := make([]interface{}, 0)
- pars = append(pars, unionId)
- ur, e := userRecord.GetItemByCondition(cond, pars, "")
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("获取订阅记录失败, %v", e)
- return
- }
- if ur != nil && ur.UserRecordId > 0 {
- userRecord = ur
- }
- }
- if userRecord != nil && userRecord.UserRecordId > 0 {
- users.Subscribe = userRecord.Subscribe
- users.ModifyTime = time.Now().Local()
- if e := users.Update([]string{users.Cols().Subscribe, users.Cols().ModifyTime}); e != nil {
- err = fmt.Errorf("更新用户关注状态失败, %v", e)
- return
- }
- userRecord.UserId = users.UserId
- if e := userRecord.Update([]string{userRecord.Cols().UserId}); e != nil {
- err = fmt.Errorf("更新订阅记录绑定状态失败, %v", e)
- return
- }
- }
- return
- }
|