123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- package services
- import (
- "eta/eta_mini_api/models"
- "eta/eta_mini_api/services/wechat"
- "eta/eta_mini_api/utils"
- "fmt"
- "time"
- )
- // WechatSubscribe 关注公众号
- func WechatSubscribe(openId string) {
- var err error
- defer func() {
- if err != nil {
- tips := fmt.Sprintf("WechatSubscribe, OpenId: %s, ErrMsg: %v", openId, err)
- utils.FileLog.Info(tips)
- fmt.Println(tips)
- }
- }()
- if openId == "" {
- err = fmt.Errorf("OpenId为空")
- return
- }
- // 获取订阅信息
- userRecord := new(models.UserRecord)
- {
- cond := fmt.Sprintf(` AND %s = ?`, userRecord.Cols().OpenId)
- pars := make([]interface{}, 0)
- pars = append(pars, openId)
- record, e := userRecord.GetItemByCondition(cond, pars, "")
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("获取订阅记录失败, %v", e)
- return
- }
- if record != nil && record.UserRecordId > 0 {
- userRecord = record
- }
- }
- // 获取unionId
- var unionId string
- wechatUser, e := wechat.GetUserInfo(openId)
- if e != nil {
- err = fmt.Errorf("获取公众号用户信息失败, %v", e)
- return
- }
- if wechatUser.UnionID == "" {
- err = fmt.Errorf("UnionId有误")
- return
- }
- unionId = wechatUser.UnionID
- // 订阅信息不存在那么新增
- if userRecord.UserRecordId == 0 {
- userRecord.OpenId = openId
- userRecord.UnionId = unionId
- userRecord.Subscribe = models.UserSubscribed
- userRecord.SubscribeTime = time.Now().Local()
- userRecord.NickName = wechatUser.Nickname
- userRecord.Gender = int(wechatUser.Sex)
- userRecord.Avatar = wechatUser.Headimgurl
- //userRecord.Province = wechatUser.Province
- //userRecord.City = wechatUser.City
- //userRecord.Country = wechatUser.Country
- userRecord.CreateTime = time.Now().Local()
- userRecord.ModifyTime = time.Now().Local()
- if e := userRecord.Create(); e != nil {
- err = fmt.Errorf("新增订阅记录失败, %v", e)
- return
- }
- }
- // 查询是否有小程序用户
- users := new(models.Users)
- if userRecord.UserId > 0 {
- u, e := users.GetItemById(userRecord.UserId)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("获取用户信息失败, %v", e)
- return
- }
- if u != nil && u.UserId > 0 {
- users = u
- }
- } else {
- cond := fmt.Sprintf(` AND %s = ?`, users.Cols().UnionId)
- pars := make([]interface{}, 0)
- pars = append(pars, unionId)
- u, e := users.GetItemByCondition(cond, pars, "")
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("UnionId获取用户信息失败, %s, %v", unionId, e)
- return
- }
- if u != nil && u.UserId > 0 {
- users = u
- }
- }
- // 更新订阅记录
- var hasUsers bool
- updateCols := []string{userRecord.Cols().UnionId, userRecord.Cols().Subscribe, userRecord.Cols().SubscribeTime, userRecord.Cols().ModifyTime}
- if users.UserId > 0 {
- userRecord.UserId = users.UserId
- updateCols = append(updateCols, userRecord.Cols().UserId)
- hasUsers = true
- }
- userRecord.UnionId = unionId
- userRecord.Subscribe = models.UserSubscribed
- userRecord.SubscribeTime = time.Now().Local()
- userRecord.ModifyTime = time.Now().Local()
- if e := userRecord.Update(updateCols); e != nil {
- err = fmt.Errorf("更新订阅记录失败, %v", e)
- return
- }
- // 更新用户信息
- if !hasUsers {
- return
- }
- users.UnionId = unionId
- users.Subscribe = userRecord.Subscribe
- users.ModifyTime = time.Now().Local()
- updateCols = []string{users.Cols().Subscribe, users.Cols().ModifyTime}
- if e := users.Update(updateCols); e != nil {
- err = fmt.Errorf("UnionId绑定用户失败, %v", e)
- return
- }
- }
- // WechatUnsubscribe 取消关注公众号
- func WechatUnsubscribe(openId string) {
- var err error
- defer func() {
- if err != nil {
- tips := fmt.Sprintf("WechatUnsubscribe, OpenId: %s, ErrMsg: %v", openId, err)
- utils.FileLog.Info(tips)
- fmt.Println(tips)
- }
- }()
- if openId == "" {
- err = fmt.Errorf("OpenId为空")
- return
- }
- userRecord := new(models.UserRecord)
- {
- cond := fmt.Sprintf(` AND %s = ?`, userRecord.Cols().OpenId)
- pars := make([]interface{}, 0)
- pars = append(pars, openId)
- record, e := userRecord.GetItemByCondition(cond, pars, "")
- if e != nil {
- if e.Error() == utils.ErrNoRow() {
- err = fmt.Errorf("订阅信息不存在")
- return
- }
- err = fmt.Errorf("获取订阅记录失败, %v", e)
- return
- }
- userRecord = record
- }
- userRecord.Subscribe = models.UserNoSubscribe
- userRecord.SubscribeTime = time.Now().Local()
- userRecord.ModifyTime = time.Now().Local()
- updateCols := []string{userRecord.Cols().Subscribe, userRecord.Cols().SubscribeTime, userRecord.Cols().ModifyTime}
- if e := userRecord.Update(updateCols); e != nil {
- err = fmt.Errorf("更新订阅记录失败, %v", e)
- return
- }
- // 更新用户表
- users := new(models.Users)
- if userRecord.UserId > 0 {
- u, e := users.GetItemById(userRecord.UserId)
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("获取用户信息失败, %v", e)
- return
- }
- if u != nil && u.UserId > 0 {
- users = u
- }
- }
- if users.UserId == 0 && userRecord.UnionId != "" {
- cond := fmt.Sprintf(` AND %s = ?`, users.Cols().UnionId)
- pars := make([]interface{}, 0)
- pars = append(pars, userRecord.UnionId)
- u, e := users.GetItemByCondition(cond, pars, "")
- if e != nil && e.Error() != utils.ErrNoRow() {
- err = fmt.Errorf("获取用户信息失败, %v", e)
- return
- }
- if u != nil && u.UserId > 0 {
- users = u
- }
- }
- if users.UserId == 0 {
- err = fmt.Errorf("用户信息不存在")
- return
- }
- users.Subscribe = userRecord.Subscribe
- users.ModifyTime = time.Now().Local()
- updateCols = []string{users.Cols().Subscribe, users.Cols().ModifyTime}
- if e := users.Update(updateCols); e != nil {
- err = fmt.Errorf("更新用户关注状态失败, %v", e)
- }
- return
- }
|