瀏覽代碼

修改根据openid查询用户,过滤未关注用户点击菜单保存的异常用户

wangkaiyue 4 年之前
父節點
當前提交
96b7d7224f

+ 2 - 1
src/jfw/front/shorturl.go

@@ -159,7 +159,7 @@ func (s *Short) Article(stype, id string) error {
 	ssOpenid := s.Session().Get("s_m_openid")
 	var res *map[string]interface{}
 	if userId == "" && ssOpenid != "" {
-		res, _ = mongodb.FindOneByField("user", bson.M{"s_m_openid": ssOpenid}, nil)
+		res, _ = mongodb.FindOneByField("user", bson.M{"s_m_openid": ssOpenid, "s_unionid": bson.M{"$ne": ssOpenid}}, nil)
 		userId = BsonIdToSId((*res)["_id"])
 	} else {
 		//判断用户是否是vip
@@ -354,6 +354,7 @@ func CheckUserIsSubscribe(openid string) bool {
 	user, ok := mongodb.FindOneByField("user", map[string]interface{}{
 		"i_appid":    2,
 		"s_m_openid": openid,
+		"s_unionid":  map[string]interface{}{"$ne": openid},
 	}, `{"i_ispush":1}`)
 	if ok && user != nil {
 		if (*user)["_id"] == nil || util.IntAllDef((*user)["i_ispush"], 1) == 0 {

+ 1 - 1
src/jfw/front/singleLogin.go

@@ -78,7 +78,7 @@ func getTmpKey() string {
 }
 
 func loginCreateSess(openid string, sess *httpsession.Session) bool {
-	_person, ok := public.MQFW.FindOne("user", bson.M{"s_m_openid": openid, "i_ispush": 1})
+	_person, ok := public.MQFW.FindOne("user", bson.M{"s_m_openid": openid, "s_unionid": bson.M{"$ne": openid}, "i_ispush": 1})
 	if ok && *_person != nil && len(*_person) > 0 {
 		person := *_person
 		if person["i_shareknow"] != nil {

+ 1 - 1
src/jfw/front/vipsubscribe.go

@@ -366,7 +366,7 @@ func (s *Subscribepay) OpenInvoice(order_code string) {
 //预热活动链接跳转
 func (s *Subscribepay) PreheatPoster() {
 	myopenid := util.ObjToString(s.GetSession("s_m_openid"))
-	u, ok := public.MQFW.FindOne("user", `{"s_m_openid":"`+myopenid+`"}`)
+	u, ok := public.MQFW.FindOne("user", `{"s_m_openid":"`+myopenid+`","s_unionid":{"$ne":"`+myopenid+`"}}`)
 	if len(*u) > 0 && ok {
 		if util.Int64All((*u)["i_vip_status"]) == 1 || util.Int64All((*u)["i_vip_status"]) == 2 {
 			s.Redirect("/front/vipsubscribe/toSubVipSetPage")

+ 12 - 12
src/jfw/modules/weixin/src/wx/wx.go

@@ -647,7 +647,7 @@ func Subscribe(w ResponseWriter, r *Request) {
 			}
 		} else if pccodepre == "13" { //18pc关注项目=13
 			param := new(jrpc.FollowData)
-			param.OpenId = openid
+			param.UserId = FindUserId(openid) //查询userid
 			param.Server = fmt.Sprint(config.Sysconfig["webrpcport"])
 			param.Projectname = redis.GetStr("sso", "pc_subscribe_"+source)
 			if param.Projectname != "" {
@@ -1000,7 +1000,8 @@ func ScanHandler(w ResponseWriter, r *Request) {
 		}
 
 	}
-	m, b := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openid+`"}`, `{"_id":1,"s_headimage":1,"o_jy":1,"o_vipjy":1,"i_vip_status":1}`)
+	//部分未关注用户通过点击菜单创建的用户 openid和unionid为空
+	m, b := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openid+`","s_unionid":{"$ne":"`+openid+`"}}`, `{"_id":1,"s_headimage":1,"o_jy":1,"o_vipjy":1,"i_vip_status":1}`)
 	if b {
 		//剑鱼标讯订阅提醒  (1:关注事件,2:扫码事件,3:发送客服消息处理,4:支付操作)
 		if openid != "" {
@@ -1034,9 +1035,10 @@ func ScanHandler(w ResponseWriter, r *Request) {
 				}
 			}
 		} else {
+			userId := util.ObjToString(BsonIdToSId((*m)["_id"]))
 			if pccodepre == "13" { //103pc关注项目
 				param := new(jrpc.FollowData)
-				param.OpenId = openid
+				param.UserId = userId
 				param.Server = fmt.Sprint(config.Sysconfig["webrpcport"])
 				param.Projectname = redis.GetStr("sso", "pc_subscribe_"+r.EventKey)
 				if param.Projectname != "" {
@@ -1085,6 +1087,7 @@ func ScanHandler(w ResponseWriter, r *Request) {
 					pcUser, pcresult, subkey = pcSetUserKeys(*m, r.EventKey, pccodepre)
 					go tools.MQFW.Update("user", &map[string]interface{}{
 						"s_m_openid": openid,
+						"s_unionid":  map[string]interface{}{"$ne": openid},
 					}, &map[string]interface{}{
 						"$set": map[string]interface{}{
 							"o_jy": pcUser["o_jy"],
@@ -1110,7 +1113,6 @@ func ScanHandler(w ResponseWriter, r *Request) {
 			} else if pccodepre == "18" { //关注企业
 				company := redis.GetStr("sso", "pc_subscribe_"+r.EventKey) //企业名称
 				s_id := Findent(company)                                   //查询s_id
-				userId := FindUserId(openid)                               //查询userid
 				if company != "" {
 					if tools.MQFW.Count("jylab_followent", `{"s_userid":"`+userId+`","s_id":"`+s_id+`"}`) > 0 {
 						//已经关注过此企业
@@ -1139,9 +1141,7 @@ func ScanHandler(w ResponseWriter, r *Request) {
 					}
 				}
 			}
-			go tools.MQFW.Update("user", &map[string]interface{}{
-				"s_m_openid": openid,
-			}, &map[string]interface{}{
+			go tools.MQFW.UpdateById("user", userId, &map[string]interface{}{
 				"$set": map[string]interface{}{
 					"s_headimageurl": user.HeadImageUrl,
 					"s_nickname":     user.Nickname,
@@ -1150,7 +1150,7 @@ func ScanHandler(w ResponseWriter, r *Request) {
 					"s_city":         user.City,
 					"i_sex":          user.Sex,
 				},
-			}, false, false)
+			})
 		}
 		var activesign = config.Sysconfig["activesign"].(bool) //是否有活动进行
 		if activesign {
@@ -1217,7 +1217,7 @@ func Findent(entname string) string {
 func FindUserId(openid string) string {
 	defer util.Catch()
 	userId := ""
-	tem, ok := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openid+`"}`, `{"_id":1}`)
+	tem, ok := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openid+`","s_unionid":{"$ne":"`+openid+`"}}`, `{"_id":1}`)
 	if ok && len(*tem) > 0 {
 		userId = util.ObjToString(BsonIdToSId((*tem)["_id"]))
 	}
@@ -1637,7 +1637,7 @@ func NewStrQrHandle(w http.ResponseWriter, r *http.Request) {
 
 //修改是否推送的状态
 func updateIsPush(openid string, status int) {
-	tools.MQFW.Update("user", map[string]interface{}{"s_m_openid": openid}, map[string]interface{}{
+	tools.MQFW.Update("user", map[string]interface{}{"s_m_openid": openid, "s_unionid": map[string]interface{}{"$ne": openid}}, map[string]interface{}{
 		"$set": map[string]interface{}{
 			"i_ispush": status,
 		},
@@ -1719,7 +1719,7 @@ func vipFastSubscribe(user *map[string]interface{}, keyWord, openId, m string) (
 		})
 	}
 	if len(a_key) > 0 {
-		flag = tools.MQFW.Update("user", `{"s_m_openid":"`+openId+`"}`, bson.M{
+		flag = tools.MQFW.Update("user", `{"s_m_openid":"`+openId+`","s_unionid":{"$ne":"`+openId+`"}}`, bson.M{
 			"$push": bson.M{
 				"o_vipjy.a_items." + strconv.Itoa(classify_index) + ".a_key": bson.M{
 					"$each": a_key,
@@ -1739,7 +1739,7 @@ func vipFastSubscribe(user *map[string]interface{}, keyWord, openId, m string) (
 
 //快速订阅关键词
 func fastSubscribe(content, openId string) (int, string, bool) {
-	user, ok := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openId+`"}`, `{"o_jy":1:"o_vipjy":1,"i_vip_status":1}`)
+	user, ok := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openId+`","s_unionid":{"$ne":"`+openId+`"}}`, `{"o_jy":1:"o_vipjy":1,"i_vip_status":1}`)
 	hasOldKey := false
 	if ok && user != nil {
 		//content = strings.TrimPrefix(content, "订阅")

+ 2 - 8
src/jfw/rpcfollow/rpc.go

@@ -4,7 +4,6 @@ package rpcfollow
 import (
 	"jfw/front"
 	public "jfw/public"
-	. "mongodb"
 	"qfw/util"
 	"qfw/util/elastic"
 	frpc "qfw/util/rpc"
@@ -26,18 +25,13 @@ func (c *MyfollowRpc) WeixinScan(param *[]string, ret *bool) error {
 
 func (c *MyfollowRpc) MyFollowSet(param *frpc.FollowData, ret *string) error {
 	util.Try(func() {
-		*ret = setMyFollowKey(param.OpenId, param.Projectname)
+		*ret = setMyFollowKey(param.UserId, param.Projectname)
 	}, func(e interface{}) {})
 	return nil
 }
 
-func setMyFollowKey(openid, projectname string) string {
-	user, ok := public.MQFW.FindOneByField("user", `{"s_m_openid":"`+openid+`"}`, `{"_id":1}`)
+func setMyFollowKey(userid, projectname string) string {
 	rep := ""
-	if !ok || user == nil || len(*user) == 0 {
-		return rep
-	}
-	userid := BsonIdToSId((*user)["_id"])
 	projects, ok := public.MQFW.Find("follow_project", `{"s_userid":"`+userid+`"}`, nil, `{"s_projectname":1}`, false, -1, -1)
 	if !ok {
 		return rep