|
@@ -27,6 +27,7 @@ import (
|
|
|
"github.com/SKatiyar/qr"
|
|
|
_ "github.com/influxdata/influxdb-client"
|
|
|
. "github.com/wizjin/weixin"
|
|
|
+ "gopkg.in/mgo.v2/bson"
|
|
|
)
|
|
|
|
|
|
var Mux *Weixin
|
|
@@ -101,6 +102,7 @@ func MsgTxtHandler(w ResponseWriter, r *Request) {
|
|
|
}
|
|
|
autoReply_reg, _ := regexp.Compile("剑鱼|招标|中标|订阅|公告|项目|设置|推送")
|
|
|
shalong_text, shalong_img := "", ""
|
|
|
+ log.Println(len(autoReply_reg.FindStringIndex(r.Content)))
|
|
|
if strings.Replace(r.Content, " ", "", -1) == "沙龙" {
|
|
|
shalong_text, shalong_img = shalongActive.Get()
|
|
|
}
|
|
@@ -132,6 +134,8 @@ func MsgTxtHandler(w ResponseWriter, r *Request) {
|
|
|
replyText = fmt.Sprintf(fastSubscribeText["fail"].(string), skill)
|
|
|
} else if returnValue == -2 {
|
|
|
replyText = fmt.Sprintf(fastSubscribeText["exists"].(string), keyWord, skill)
|
|
|
+ } else if returnValue == -3 {
|
|
|
+ replyText = fmt.Sprintf(fastSubscribeText["fail_vip"].(string), skill)
|
|
|
} else if returnValue == 1 {
|
|
|
if hasOldKey {
|
|
|
replyText = fmt.Sprintf(fastSubscribeText["success"].(string), keyWord, skill)
|
|
@@ -898,7 +902,7 @@ func ScanHandler(w ResponseWriter, r *Request) {
|
|
|
return
|
|
|
}
|
|
|
log.Println("openid======", openid)
|
|
|
- m, b := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openid+`"}`, `{"_id":1,"s_headimage":1,"o_jy":1}`)
|
|
|
+ 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}`)
|
|
|
if b {
|
|
|
//剑鱼标讯订阅提醒 (1:关注事件,2:扫码事件,3:发送客服消息处理,4:支付操作)
|
|
|
if openid != "" {
|
|
@@ -955,15 +959,31 @@ func ScanHandler(w ResponseWriter, r *Request) {
|
|
|
}
|
|
|
}
|
|
|
} else if pccodepre == "11" || pccodepre == "12" || pccodepre == "19" || pccodepre == "17" { //101pc订阅,102pc搜索关键词 22落地页订阅关键词
|
|
|
- pcUser, pcresult, subkey := pcSetUserKeys(*m, r.EventKey, pccodepre)
|
|
|
- go tools.MQFW.Update("user", &map[string]interface{}{
|
|
|
- "s_m_openid": openid,
|
|
|
- }, &map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "s_headimage": headimage,
|
|
|
- "o_jy": pcUser["o_jy"],
|
|
|
- },
|
|
|
- }, false, false)
|
|
|
+ var pcresult, subkey string
|
|
|
+ var pcUser map[string]interface{}
|
|
|
+ if (*m)["i_vip_status"] != nil && util.IntAll((*m)["i_vip_status"]) > 0 {
|
|
|
+ shareid := util.ObjToString(r.EventKey)
|
|
|
+ subkey = util.ObjToString(redis.Get("sso", "pc_subscribe_"+shareid))
|
|
|
+ resNum := 0
|
|
|
+ resNum, subkey, _ = vipFastSubscribe(m, subkey, openid)
|
|
|
+ if resNum == -2 {
|
|
|
+ pcresult = "repeat"
|
|
|
+ } else if resNum == -3 {
|
|
|
+ pcresult = "fail"
|
|
|
+ } else if resNum == 1 {
|
|
|
+ pcresult = "ok"
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ pcUser, pcresult, subkey = pcSetUserKeys(*m, r.EventKey, pccodepre)
|
|
|
+ go tools.MQFW.Update("user", &map[string]interface{}{
|
|
|
+ "s_m_openid": openid,
|
|
|
+ }, &map[string]interface{}{
|
|
|
+ "$set": map[string]interface{}{
|
|
|
+ "s_headimage": headimage,
|
|
|
+ "o_jy": pcUser["o_jy"],
|
|
|
+ },
|
|
|
+ }, false, false)
|
|
|
+ }
|
|
|
if pcresult == "ok" {
|
|
|
pchints := config.Sysconfig["pchints"].(map[string]interface{})
|
|
|
url := fmt.Sprintf(config.Sysconfig["proxysess"].(string), se.EncodeString(openid+","+user.UnionId+","+strconv.Itoa(int(time.Now().Unix()))+",rssset"))
|
|
@@ -1491,9 +1511,89 @@ func updateIsPush(openid string, status int) {
|
|
|
}, false, true)
|
|
|
}
|
|
|
|
|
|
+//
|
|
|
+func vipFastSubscribe(user *map[string]interface{}, keyWord, openId string) (returnValue int, content string, hasOldKey bool) {
|
|
|
+ o_vipjy, _ := (*user)["o_vipjy"].(map[string]interface{})
|
|
|
+ var classify_index = 0 //未分类索引
|
|
|
+ //var keys_index = 0 未分类关键词组数量
|
|
|
+ var keysHas = "" //已订阅关键词
|
|
|
+ var itemHas = false //是否有未分类
|
|
|
+ flag := false
|
|
|
+ //有分类
|
|
|
+ var keysFilter = strings.Split(keyWord, " ")
|
|
|
+ if o_vipjy != nil && o_vipjy["a_items"] != nil && len(o_vipjy["a_items"].([]interface{})) > 0 {
|
|
|
+ var keysCount = 0 //已订关键词数量
|
|
|
+ hasOldKey = true
|
|
|
+ a_items := util.ObjArrToMapArr(o_vipjy["a_items"].([]interface{}))
|
|
|
+ classify_index = len(a_items)
|
|
|
+ for i, v := range a_items {
|
|
|
+ keysMap := util.ObjArrToMapArr(v["a_key"].([]interface{}))
|
|
|
+ if v["s_item"].(string) == "未分类" {
|
|
|
+ classify_index = i
|
|
|
+ itemHas = true
|
|
|
+ }
|
|
|
+ keysCount += len(keysMap)
|
|
|
+ for _, k := range keysMap {
|
|
|
+ _keysMap := util.ObjArrToStringArr(k["key"].([]interface{}))
|
|
|
+ keys := ""
|
|
|
+ for _, m := range _keysMap {
|
|
|
+ if keys == "" {
|
|
|
+ keys += util.ObjToString(m)
|
|
|
+ } else {
|
|
|
+ keys += "+" + util.ObjToString(m)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for i, n := range keysFilter {
|
|
|
+ if keys == n {
|
|
|
+ if !strings.Contains(keysHas, n) {
|
|
|
+ keysHas += " " + n
|
|
|
+ }
|
|
|
+ keysFilter = append(keysFilter[:i], keysFilter[i+1:]...)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(keysFilter) == 0 {
|
|
|
+ // log.Println("已经订阅过此关键词-----")
|
|
|
+ return -2, strings.Replace(keyWord, "+", " ", -1), hasOldKey
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if keysCount+len(keysFilter) > 300 {
|
|
|
+ //vip订阅超过300组关键词
|
|
|
+ log.Println("vip订阅超过300组关键词-----")
|
|
|
+ return -3, strings.Replace(keyWord, "+", " ", -1), hasOldKey
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var _key = make([]map[string]interface{}, len(keysFilter))
|
|
|
+ if itemHas {
|
|
|
+ for k, v := range keysFilter {
|
|
|
+ _key[k] = map[string]interface{}{"key": strings.Split(v, " ")}
|
|
|
+ }
|
|
|
+ flag = tools.MQFW.Update("user", `{"s_m_openid":"`+openId+`"}`, map[string]interface{}{
|
|
|
+ "$pushAll": bson.M{"o_vipjy.a_items." + strconv.Itoa(classify_index) + ".a_key": _key},
|
|
|
+ }, false, false)
|
|
|
+ } else {
|
|
|
+ var o_kws = make(map[string]interface{})
|
|
|
+ o_kws["s_item"] = "未分类"
|
|
|
+ for k, v := range keysFilter {
|
|
|
+ _key[k] = map[string]interface{}{"key": strings.Split(v, " ")}
|
|
|
+ }
|
|
|
+ o_kws["a_key"] = _key
|
|
|
+ o_kws["i_tips"] = 0
|
|
|
+ if o_kws != nil && len(o_kws) > 0 {
|
|
|
+ flag = tools.MQFW.Update("user", `{"s_m_openid":"`+openId+`"}`, bson.M{
|
|
|
+ "$push": bson.M{"o_vipjy.a_items": o_kws},
|
|
|
+ }, false, false)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if flag {
|
|
|
+ return 1, strings.Replace(strings.Join(keysFilter, " "), "+", " ", -1), hasOldKey
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
//快速订阅关键词
|
|
|
func fastSubscribe(content, openId string) (int, string, bool) {
|
|
|
- user, ok := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openId+`"}`, `{"o_jy":1}`)
|
|
|
+ user, ok := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openId+`"}`, `{"o_jy":1:"o_vipjy":1,"i_vip_status":1}`)
|
|
|
hasOldKey := false
|
|
|
if ok && user != nil {
|
|
|
//content = strings.TrimPrefix(content, "订阅")
|
|
@@ -1501,48 +1601,53 @@ func fastSubscribe(content, openId string) (int, string, bool) {
|
|
|
content = regexp.MustCompile("\\s+").ReplaceAllString(content, " ")
|
|
|
keyWord := strings.Replace(content, " ", "+", -1)
|
|
|
o_jy, _ := (*user)["o_jy"].(map[string]interface{})
|
|
|
- if o_jy == nil {
|
|
|
- o_jy = make(map[string]interface{})
|
|
|
- }
|
|
|
- a_key, _ := o_jy["a_key"].([]interface{})
|
|
|
- if len(a_key) > 0 {
|
|
|
- hasOldKey = true
|
|
|
- }
|
|
|
- //关键词达到最大数量
|
|
|
- if len(a_key) >= 10 {
|
|
|
- return -1, content, hasOldKey
|
|
|
- }
|
|
|
- //关键词已存在
|
|
|
- for _, v := range a_key {
|
|
|
- if tmp, ok := v.(map[string]interface{}); ok {
|
|
|
- key := tmp["key"].([]interface{})
|
|
|
- keys := ""
|
|
|
- for _, val := range key {
|
|
|
- if keys == "" {
|
|
|
- keys += util.ObjToString(val)
|
|
|
- } else {
|
|
|
- keys += "+" + util.ObjToString(val)
|
|
|
+ i_vip_status := util.IntAll((*user)["i_vip_status"])
|
|
|
+ if (*user)["i_vip_status"] != nil && i_vip_status > 0 && keyWord != "" {
|
|
|
+ return vipFastSubscribe(user, keyWord, openId)
|
|
|
+ } else {
|
|
|
+ if o_jy == nil {
|
|
|
+ o_jy = make(map[string]interface{})
|
|
|
+ }
|
|
|
+ a_key, _ := o_jy["a_key"].([]interface{})
|
|
|
+ if len(a_key) > 0 {
|
|
|
+ hasOldKey = true
|
|
|
+ }
|
|
|
+ //关键词达到最大数量
|
|
|
+ if len(a_key) >= 10 {
|
|
|
+ return -1, content, hasOldKey
|
|
|
+ }
|
|
|
+ //关键词已存在
|
|
|
+ for _, v := range a_key {
|
|
|
+ if tmp, ok := v.(map[string]interface{}); ok {
|
|
|
+ key := tmp["key"].([]interface{})
|
|
|
+ keys := ""
|
|
|
+ for _, val := range key {
|
|
|
+ if keys == "" {
|
|
|
+ keys += util.ObjToString(val)
|
|
|
+ } else {
|
|
|
+ keys += "+" + util.ObjToString(val)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if keys == keyWord {
|
|
|
+ return -2, content, hasOldKey
|
|
|
}
|
|
|
- }
|
|
|
- if keys == keyWord {
|
|
|
- return -2, content, hasOldKey
|
|
|
}
|
|
|
}
|
|
|
+ key := map[string][]string{}
|
|
|
+ key["key"] = strings.Split(keyWord, "+")
|
|
|
+ key["notkey"] = []string{}
|
|
|
+ key["infotype"] = []string{}
|
|
|
+ key["area"] = []string{}
|
|
|
+ a_key = append(a_key, key)
|
|
|
+ tools.MQFW.Update("user", `{"s_m_openid":"`+openId+`"}`, map[string]interface{}{
|
|
|
+ "$set": map[string]interface{}{
|
|
|
+ "i_ts_guide": 1,
|
|
|
+ "o_jy.a_key": a_key,
|
|
|
+ "o_jy.l_modifydate": time.Now().Unix(),
|
|
|
+ },
|
|
|
+ }, false, false)
|
|
|
+ return 1, content, hasOldKey
|
|
|
}
|
|
|
- key := map[string][]string{}
|
|
|
- key["key"] = strings.Split(keyWord, "+")
|
|
|
- key["notkey"] = []string{}
|
|
|
- key["infotype"] = []string{}
|
|
|
- key["area"] = []string{}
|
|
|
- a_key = append(a_key, key)
|
|
|
- tools.MQFW.Update("user", `{"s_m_openid":"`+openId+`"}`, map[string]interface{}{
|
|
|
- "$set": map[string]interface{}{
|
|
|
- "i_ts_guide": 1,
|
|
|
- "o_jy.a_key": a_key,
|
|
|
- "o_jy.l_modifydate": time.Now().Unix(),
|
|
|
- },
|
|
|
- }, false, false)
|
|
|
- return 1, content, hasOldKey
|
|
|
}
|
|
|
return 0, content, hasOldKey
|
|
|
}
|