userinfologic.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package logic
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. . "app.yhyue.com/moapp/jybase/mongodb"
  5. "app.yhyue.com/moapp/jybase/redis"
  6. "context"
  7. "fmt"
  8. "github.com/zeromicro/go-zero/core/logx"
  9. "go.mongodb.org/mongo-driver/bson"
  10. IC "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXSubscribe/rpc/init"
  11. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXSubscribe/rpc/internal/svc"
  12. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXSubscribe/rpc/type/bxsubscribe"
  13. "bp.jydev.jianyu360.cn/BaseService/jyMicroservices/jyBXSubscribe/rpc/util"
  14. "log"
  15. )
  16. type UserInfoLogic struct {
  17. ctx context.Context
  18. svcCtx *svc.ServiceContext
  19. logx.Logger
  20. }
  21. func NewUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserInfoLogic {
  22. return &UserInfoLogic{
  23. ctx: ctx,
  24. svcCtx: svcCtx,
  25. Logger: logx.WithContext(ctx),
  26. }
  27. }
  28. // 用户推送信息查看
  29. func (l *UserInfoLogic) UserInfo(in *bxsubscribe.GetUserInfoReq) (*bxsubscribe.GetUserInfoResq, error) {
  30. // todo: add your logic here and delete this line
  31. userInfo := &map[string]interface{}{}
  32. s_email := ""
  33. s_m_openid := ""
  34. s_unionid := ""
  35. userInfo, _ = IC.Mgo.FindById(util.USER, in.UserId, `{"o_pushset":1,"s_m_openid":1,"s_unionid":1}`)
  36. if userInfo != nil && len(*userInfo) > 0 {
  37. pushSet := common.ObjToMap((*userInfo)["o_pushset"])
  38. s_email = common.InterfaceToStr((*pushSet)["s_email"])
  39. s_m_openid = common.InterfaceToStr((*userInfo)["s_m_openid"])
  40. s_unionid = common.InterfaceToStr((*userInfo)["s_unionid"])
  41. }
  42. if in.PositionType == 1 {
  43. userInfo, _ = IC.Mgo.FindOne(util.ENTUSER, map[string]interface{}{"i_entid": in.EntId, "i_userid": in.EntUserId})
  44. if userInfo != nil && len(*userInfo) > 0 {
  45. pushSet := common.ObjToMap((*userInfo)["o_pushset"])
  46. s_email = common.InterfaceToStr((*pushSet)["s_email"])
  47. }
  48. }
  49. isSubscribe := false
  50. isBind := false
  51. isMerge := false
  52. if s_m_openid != "" {
  53. //微信是否关注处理
  54. subscribeList := &[]map[string]interface{}{}
  55. subscribeList, _ = IC.Mgo.Find(util.SUBSCRIBE, map[string]interface{}{"s_m_openid": s_m_openid}, `{"l_date":-1}`, `{"s_event":1"}`, true, -1, -1)
  56. if subscribeList != nil && len(*subscribeList) > 0 {
  57. s_event := common.InterfaceToStr((*subscribeList)[0]["s_event"])
  58. if s_event == "subscribe" {
  59. isSubscribe = true
  60. }
  61. }
  62. }
  63. //
  64. //查询用户是否绑定
  65. if s_unionid != "" {
  66. isBind = true
  67. }
  68. //查询用户是否需要合并
  69. isMerge = MergeQuery(in.UserId)
  70. //用户二维码生成处理
  71. data := map[string]string{
  72. "userId": in.UserId,
  73. "source": util.ServiceMap[in.ServiceType],
  74. }
  75. bindKey := "Bind_" + in.ServiceType + common.InterfaceToStr(in.BaseUserId)
  76. redis.Put("other", bindKey, data, -1)
  77. state := 1
  78. if isBind {
  79. if isMerge {
  80. state = 2
  81. } else {
  82. if isSubscribe {
  83. state = 3
  84. } else {
  85. state = 4
  86. }
  87. }
  88. }
  89. return &bxsubscribe.GetUserInfoResq{
  90. Data: &bxsubscribe.GetUserInfo{
  91. Mail: s_email,
  92. State: common.Int64All(state),
  93. ImgUrl: fmt.Sprintf("/publicapply/getERCode/%s", bindKey), //二维码地址
  94. AppUrl: fmt.Sprintf(IC.C.AppUrl, "push_set", "pc-pushsettings"),
  95. ShowWx: isSubscribe,
  96. },
  97. }, nil
  98. }
  99. func MergeQuery(userId string) bool {
  100. var wId, pId string
  101. tud, _ := IC.Mgo.FindById("user", userId, `{"s_m_phone":1,"s_phone":1,"s_unionid":1,"s_m_openid":1,"s_nickname":1}`)
  102. s_m_phone, s_phone := common.ObjToString((*tud)["s_m_phone"]), common.ObjToString((*tud)["s_phone"])
  103. if tud == nil || len(*tud) == 0 {
  104. log.Println("查询用户身份异常:", userId)
  105. return false
  106. }
  107. //查询是否有对应微信需要合并
  108. if unionid := common.ObjToString((*tud)["s_unionid"]); unionid != "" && len(unionid) > 11 {
  109. mud, _ := IC.Mgo.FindOneByField("user", bson.M{"i_appid": 2, "s_unionid": unionid, "_id": bson.M{"$ne": StringTOBsonId(userId)}}, `{"_id":1,"s_nickname":1,"s_phone":1}`)
  110. if mud != nil && len(*mud) > 0 {
  111. if common.ObjToString((*tud)["s_phone"]) == "" {
  112. wId = userId
  113. pId = BsonIdToSId((*mud)["_id"])
  114. } else {
  115. pId = userId
  116. wId = BsonIdToSId((*mud)["_id"])
  117. }
  118. return pId != wId
  119. }
  120. }
  121. //查询是否有对应手机号需要合并
  122. if s_phone == s_m_phone { //已合并
  123. return false
  124. }
  125. if s_m_phone != "" { //当前用户为微信用户;查询对应的手机号用户
  126. mud, _ := IC.Mgo.FindOneByField("user", bson.M{"i_appid": 2, "s_phone": s_m_phone, "_id": bson.M{"$ne": StringTOBsonId(userId)}}, `{"_id":1}`)
  127. if mud != nil && len(*mud) > 0 {
  128. wId = BsonIdToSId((*tud)["_id"])
  129. pId = BsonIdToSId((*mud)["_id"])
  130. return pId != wId
  131. }
  132. } else if s_phone != "" { //当前用户为手机号用户;查询对应的微信用户
  133. mud, _ := IC.Mgo.FindOneByField("user", bson.M{"i_appid": 2, "s_m_phone": s_phone, "_id": bson.M{"$ne": StringTOBsonId(userId)}}, `{"_id":1,"s_nickname":1}`)
  134. if mud != nil && len(*mud) > 0 {
  135. wId = BsonIdToSId((*mud)["_id"])
  136. pId = BsonIdToSId((*tud)["_id"])
  137. return pId != wId
  138. }
  139. }
  140. return false
  141. }