|
@@ -1 +1,207 @@
|
|
|
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
|
|
|
+}
|