renzheng 7 жил өмнө
parent
commit
404d9fee04

+ 2 - 0
src/config.json

@@ -5,6 +5,8 @@
     "influxaddr": "http://192.168.3.207:8086",
     "influxdb": "jy_logs",
 	"qrModelID":"1",
+	"numTimeNumber":15,
+	"strTimeNumber":30,
     "elasticsearch": "http://192.168.3.18:9200",
     "elasticPoolSize": 30,
     "redisaddrs": "other=192.168.3.14:3379,push=192.168.3.14:3379,sso=192.168.3.14:3379,session=192.168.3.14:3379",

+ 4 - 3
src/jfw/front/front.go

@@ -566,9 +566,10 @@ func (f *Front) SignOut() error {
 
 //微信公众号获取数字
 func (f *Front) GetLoginNum(prestr string) error {
-	//shareid := fmt.Sprintf("%s%d", prestr+fmt.Sprintf("%d", time.Now().UnixNano())[7:14], rand.Intn(9))
-	//shareidot := fmt.Sprintf("%d", util.Int64All(shareid)-1)
-	shareid, shareidot := qrmanager.QrCodeManager.GetQRCode(prestr)
+	var oid = f.GetString("oid")
+	var Rref = f.GetString("rref")
+	f.SetSession("Rref", Rref)
+	shareid, shareidot := qrmanager.QrCodeManager.GetQRCode(oid, prestr, f.Session(), f.Request)
 	//log.Println("登录获取shareid:", shareid)
 	f.ServeJson(map[string]string{
 		"num":   se.EncodeString(shareid),

+ 0 - 248
src/jfw/front/qrpool.go.bak

@@ -1,248 +0,0 @@
-//package front
-
-//import (
-//	"fmt"
-//	"log"
-//	//	"jfw/tools"
-//	//"log"
-//	//"math/rand"
-//	"qfw/util"
-//	"qfw/util/redis"
-//	//"strconv"
-//	"sync"
-//	"time"
-//)
-
-//var (
-//	InvalidTime = int64(35 * 60) //定时任务判断二维码失效时间35分钟
-//	ValidTime   = 30 * 60        //前端二维码有效时间30分钟
-//	QrValid     = int64(28 * 86400)
-//	PoolSize    = 100
-//	RedisList   = "mylist"
-//	QrGCList    = make([]*QrGC, PoolSize) //定义回收对象池
-//)
-
-//func init() {
-//	//1.生成50个线程池
-//	for i := 0; i < PoolSize; i++ {
-//		q := &QrGC{make(chan string, 100), map[string]int64{}, &sync.Mutex{}, i}
-//		go q.PoolGC()
-//		go q.SetTimeGC()
-//		QrGCList[i] = q
-//	}
-//}
-
-////二维码回收对象
-//type QrGC struct {
-//	CodePool chan string
-//	CodeList map[string]int64
-//	Lock     *sync.Mutex
-//	Index    int
-//}
-
-//func (q *QrGC) Add(str string, t int64) {
-//	q.Lock.Lock()
-//	q.CodeList[str] = t
-//	q.Lock.Unlock()
-//}
-
-////二维码回收机制,定时回收
-//func (q *QrGC) SetTimeGC() {
-//	for {
-//		time.Sleep(3 * time.Minute)
-//		now := time.Now().Unix()
-//		q.Lock.Lock()
-//		for k, v := range q.CodeList {
-//			if now-v > InvalidTime { //失效
-//				delete(q.CodeList, k)
-//				//补充逻辑
-//			}
-//		}
-//		q.Lock.Unlock()
-//	}
-//}
-
-////二维码回收机制,使用完回收
-//func (q *QrGC) PoolGC() {
-//	for {
-//		select {
-//		case code := <-q.CodePool:
-//			//调用回收逻辑
-//			q.Lock.Lock()
-//			delete(q.CodeList, code)
-//			q.Lock.Unlock()
-//			//删除redis中的参数,取出二维码的失效时间判断
-//			//补充逻辑
-//		}
-//	}
-//}
-
-////生成二维码串,定义24位串,返回时间,返回回收池索引
-//var qrSimpleEncrypt = &util.SimpleEncrypt{"qrcode_jywx2017"}
-
-////生成二维码代码
-//func NewQrCodeStr() (string, int64, int) {
-//	now := time.Now()
-//	str := fmt.Sprintf("A%s%d%s", util.GetLetterRandom(4), now.UnixNano()/1000, util.GetLetterRandom(3))
-//	log.Println(str, "str===", qrSimpleEncrypt.EncodeString(str), qrSimpleEncrypt.Encode2Hex(str))
-//	str = qrSimpleEncrypt.EncodeString(str)
-//	return str, now.Unix(), HashVal(str) % PoolSize
-//}
-
-////计算哈希值
-//func HashVal(src string) int {
-//	check := 0
-//	for i := len(src) / 2; i < len(src); i++ {
-//		check += int(src[i])
-//	}
-//	return check
-//}
-
-////计算二维码
-//func ComputeQrCode(str string) int64 {
-//	str1 := qrSimpleEncrypt.DecodeString(str)
-//	if len(str1) == 24 {
-//		return util.Int64All(str1[5:15])
-//	}
-//	return 0
-//}
-
-////获取二维码代码
-//func GetQRCode() (code string) {
-//	ret := redis.LPOP("sso", RedisList)
-//	bnew := false
-//	res := ""
-//	if ret != nil {
-//		res, _ = ret.(string)
-//		if len(res) != 24 || time.Now().Unix()-ComputeQrCode(res) > QrValid { //过期
-//			bnew = true
-//		} else {
-//			qrgc := QrGCList[HashVal(res)%PoolSize]
-//			qrgc.Add(res, time.Now().Unix())
-//		}
-//	} else {
-//		bnew = true
-//	}
-//	if bnew {
-//		str, times, index := NewQrCodeStr()
-//		qrgc := QrGCList[index]
-//		qrgc.Add(str, times)
-//		return str
-//	}
-//	return res
-//}
-
-////获取二维码图片
-//func GetQRData(code string) (pngdata *[]byte) {
-//	tmp, err := redis.GetBytes("sso", "qr_"+code)
-//	if err == nil {
-//		if tmp == nil {
-
-//		}
-//	}
-//	return nil
-//}
-
-/**
-//var QrMap = map[string]*SingleQR{}
-//var QrMapLock = &sync.RWMutex{}
-
-var QrPoolObj = &QRPool{make(chan *SingleQR, 50000), map[string]*SingleQR{}, &sync.RWMutex{}}
-
-//内存池数据
-type QRPool struct {
-	Slq       chan *SingleQR
-	QrMap     map[string]*SingleQR
-	QrMapLock *sync.RWMutex
-}
-
-//单个二维码
-type SingleQR struct {
-	Starttime int64
-	Qrbyte    *[]byte
-	Qrcode    string
-	Qrchan    chan bool
-}
-
-//手动回收
-func ManualGC(qrcode string) {
-	QrPoolObj.QrMapLock.RLock()
-	pngdata := QrPoolObj.QrMap[qrcode]
-	QrPoolObj.QrMapLock.RUnlock()
-	//log.Println("手动回收----", len(pngdata.Qrchan))
-	if pngdata != nil {
-		select {
-		case pngdata.Qrchan <- true:
-		case <-time.After(10 * time.Millisecond):
-			QrPoolObj.QrMapLock.Lock()
-			delete(QrPoolObj.QrMap, qrcode)
-			QrPoolObj.QrMapLock.Unlock()
-			pngdata = nil
-			//log.Println("10毫秒")
-		}
-	}
-}
-
-//自动回收
-func (sq *SingleQR) AutoGC() {
-	//log.Println("自动回收----", len(sq.Qrchan))
-	select {
-	case <-time.After(10 * time.Minute):
-	case <-sq.Qrchan:
-	}
-	sq.Starttime = 0
-	sq.Qrbyte = nil
-	select {
-	case <-time.After(2 * time.Second):
-	case QrPoolObj.Slq <- sq:
-	}
-	//log.Println("--自动回收完成--")
-}
-
-//
-func (q *QRPool) GetQRCode() (pngdata *SingleQR) {
-	select {
-	case pngdata = <-q.Slq:
-		//log.Println("-从池中读取id,根据id从redis取得二维码-", pngdata.Qrcode)
-		tmp, err := redis.GetBytes("sso", "p_share_"+pngdata.Qrcode)
-		if err == nil && tmp != nil && len(*tmp) > 0 {
-			pngdata.Qrbyte = tmp
-		} else {
-			//二维码一个月后过期
-			//log.Println("redis中缓存的二维byte过期或被清除")
-			pngdata = WXQRData(pngdata.Qrcode)
-		}
-	case <-time.After(100 * time.Millisecond):
-		//log.Println("--从池中取超时后再从微信取二维码--")
-		pngdata = WXQRData("")
-	}
-	if pngdata != nil {
-		pngdata.Starttime = time.Now().Unix()
-		go pngdata.AutoGC()
-	}
-	return
-}
-
-//调微信rpc生成二维码
-func WXQRData(shareid string) (pngdata *SingleQR) {
-	if shareid == "" {
-		shareid = fmt.Sprintf("%s%d", "11"+fmt.Sprintf("%d", time.Now().UnixNano())[7:14], rand.Intn(9))
-	}
-	id, _ := strconv.Atoi(shareid)
-	tools.GetShareQR(uint32(id))
-	tmp, err := redis.GetBytes("sso", fmt.Sprintf("p_share_%d", id))
-	if err == nil {
-		pngdata = &SingleQR{
-			Qrbyte: tmp,
-			Qrcode: shareid,
-			Qrchan: make(chan bool, 1),
-		}
-		QrPoolObj.QrMapLock.Lock()
-		QrPoolObj.QrMap[pngdata.Qrcode] = pngdata
-		QrPoolObj.QrMapLock.Unlock()
-	} else {
-		log.Println("get QR err:", id, err.Error())
-	}
-	return
-}
-**/

+ 46 - 4
src/jfw/front/websocket.go

@@ -94,7 +94,6 @@ func GetWsByCode(src string) bool {
 		log.Println("socket send fail..", err)
 		return false
 	} else {
-		//log.Println("登录后正常关闭!!!")
 		wss.Conn.Close()
 	}
 	return true
@@ -105,8 +104,6 @@ func ServeWss(w http.ResponseWriter, r *http.Request) {
 	defer qutil.Catch()
 	conn, err := upgrader.Upgrade(w, r, nil)
 	var shareIds string
-	//var shareid = ""
-	//var openid = ""
 	if err == nil {
 		for {
 			_, shareData, err := conn.ReadMessage()
@@ -123,9 +120,54 @@ func ServeWss(w http.ResponseWriter, r *http.Request) {
 					PutWsByCode(shareidkop, conn)
 				}
 			}
-			//log.Println("shareData:", shareIds, "---")
 		}
 	}
+
+	//var shareid = ""
+	//var openid = ""
+	//	for {
+	//		time.Sleep(1 * time.Second)
+	//		if shareIds == "close" {
+	//			log.Println("!!!!socket关闭!!!退出循环")
+	//			conn.Close()
+	//			return
+	//		} else if shareIds == "" {
+	//			continue
+	//		}
+	//		shareidlist := strings.Split(shareIds, "___")
+	//		if shareIds != "" && len(shareidlist) > 1 {
+	//			shareidnum := strings.Split(shareIds, "___")[0]
+	//			shareidkop := strings.Split(shareIds, "___")[1]
+	//			log.Println(se.DecodeString(shareidnum) + "--1--" + se.DecodeString(shareidkop))
+	//			shareid = shareidnum
+	//			openid = redis.GetStr("sso", "p_usershare_"+se.DecodeString(shareidnum))
+	//			if openid == "" {
+	//				openid = redis.GetStr("sso", "p_usershare_"+se.DecodeString(shareidkop))
+	//				shareid = shareidkop
+	//			}
+	//			if openid == "" {
+	//				shareid = ""
+	//			}
+	//		}
+	//		if shareid == "" {
+	//			continue
+	//		}
+	//		sendmessage, _ := json.Marshal(shareid)
+	//		if err := conn.WriteMessage(websocket.TextMessage, sendmessage); err != nil {
+	//			log.Println("socket send fail..", err)
+	//		}
+	//		if shareid != "" {
+	//			//log.Println("登录后正常关闭!!!")
+	//			conn.Close()
+	//			return
+	//		}
+	//	}
+	//	//sess := xweb.RootApp().SessionManager.Session(r, w)
+	//	//log.Println("sess-id:", sess.Id())
+	//	if err != nil {
+	//		log.Println(err)
+	//		return}
+
 	//	go func() {
 	//		for {
 	//			_, shareData, err := conn.ReadMessage()

+ 23 - 0
src/jfw/modules/followent/src/followent/followent.go

@@ -2,6 +2,7 @@ package followent
 
 import (
 	"config"
+	"jfw/wx"
 	"qfw/util"
 	elastic "qfw/util/elastic_v5"
 	"qfw/util/redis"
@@ -16,6 +17,7 @@ import (
 )
 
 var mongodb = tools.MQFW
+var se = util.SE
 
 type FollowEnt struct {
 	*xweb.Action
@@ -84,10 +86,24 @@ func (f *FollowEnt) EntList() error {
 		}
 	}
 	f.T["followEntLimit"] = followEntLimit
+	f.T["signature"] = wx.SignJSSDK(f.Site() + f.Url())
+	myopenid, _ := f.Session().Get("s_m_openid").(string)
+	f.T["openid"] = se.EncodeString(myopenid)
+	mynickname, _ := f.Session().Get("s_nickname").(string)
+	myavatar, _ := f.Session().Get("s_avatar").(string)
+	f.T["nickname"] = mynickname
+	f.T["avatar"] = myavatar
 	return f.Render("/weixin/list.html", &f.T)
 }
 
 func (f *FollowEnt) AddEnt() error {
+	f.T["signature"] = wx.SignJSSDK(f.Site() + f.Url())
+	myopenid, _ := f.Session().Get("s_m_openid").(string)
+	f.T["openid"] = se.EncodeString(myopenid)
+	mynickname, _ := f.Session().Get("s_nickname").(string)
+	myavatar, _ := f.Session().Get("s_avatar").(string)
+	f.T["nickname"] = mynickname
+	f.T["avatar"] = myavatar
 	return f.Render("/weixin/add.html", &f.T)
 }
 
@@ -169,6 +185,13 @@ func (f *FollowEnt) NewInfo(winnerid string) error {
 	f.T["follow"] = follow
 	f.T["a_visited"] = a_visited
 
+	f.T["signature"] = wx.SignJSSDK(f.Site() + f.Url())
+	myopenid, _ := f.Session().Get("s_m_openid").(string)
+	f.T["openid"] = se.EncodeString(myopenid)
+	mynickname, _ := f.Session().Get("s_nickname").(string)
+	myavatar, _ := f.Session().Get("s_avatar").(string)
+	f.T["nickname"] = mynickname
+	f.T["avatar"] = myavatar
 	return f.Render("/weixin/set.html", &f.T)
 }
 

+ 1 - 0
src/jfw/modules/followent/src/web/templates/weixin/add.html

@@ -47,6 +47,7 @@
 }
 </style>
 <script type="text/javascript">
+	initShare({{.T.signature}},{{.T.openid}},2,"jy_extend",{{.T.nickname}},{{.T.avatar}});
 	var winner_id = "";
     $(function(){
 		/*

+ 1 - 0
src/jfw/modules/followent/src/web/templates/weixin/list.html

@@ -19,6 +19,7 @@ if(sessionStorage){
 <script src="/jylab/followent/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
 
 <script type="text/javascript">
+initShare({{.T.signature}},{{.T.openid}},2,"jy_extend",{{.T.nickname}},{{.T.avatar}});
 	$(function () {
         {{if .T.datas}}
         var allHtml = "";

+ 1 - 0
src/jfw/modules/followent/src/web/templates/weixin/set.html

@@ -28,6 +28,7 @@ if(sessionStorage){
 	var follow = {{.T.follow}};   
 	var zbadd = {{Msg "seo" "ZBADDRESS"}};
 	var isOld = 0; 
+	initShare({{.T.signature}},{{.T.openid}},2,"jy_extend",{{.T.nickname}},{{.T.avatar}});
 	$(function(){
 		$(window).bind("pageshow", function(event){
 			if(event.originalEvent.persisted && sessionStorage.version == "1"){

+ 1 - 1
src/jfw/modules/weixin/src/wx/checkuser.go

@@ -142,7 +142,7 @@ func (c *CheckJYUser) CheckAndRepair() {
 					log.Println("获取用户出错", k, err)
 				} else {
 					log.Println("获取用户", k, user)
-					saveUser(user, "-10")
+					saveUser(user, "-10", "-10")
 				}
 			} else {
 				//change user ispush

+ 11 - 40
src/jfw/modules/weixin/src/wx/wx.go

@@ -156,19 +156,11 @@ func MsgTxtHandler(w ResponseWriter, r *Request) {
 }
 
 //pc端招标订阅
-func pcSetUserKeys(user map[string]interface{}, shareid string) (map[string]interface{}, string, string) {
+func pcSetUserKeys(user map[string]interface{}, shareid, pccodepre string) (map[string]interface{}, string, string) {
 	result := "fail"
 	subkey := redis.Get("sso", "pc_subscribe_"+shareid)
 	keys := strings.Split(fmt.Sprint(subkey), ";")
-	shareData := redis.Get("sso", "p_shareData_"+shareid)
-	infoData := map[string]interface{}{}
-	tmp, _ := json.Marshal(shareData)
-	json.Unmarshal(tmp, &infoData)
-	var pccodepre = ""
 	if subkey != nil {
-		if len(infoData) > 0 && infoData["action"] != nil {
-			pccodepre = util.ObjToString(infoData["action"])
-		}
 		if o_jy, ok := user["o_jy"].(map[string]interface{}); ok {
 			if tmp, ok := o_jy["a_key"].([]interface{}); ok {
 				if len(tmp)+len(keys) <= 10 {
@@ -235,18 +227,10 @@ func pcSetUserKeys(user map[string]interface{}, shareid string) (map[string]inte
 	}
 	return user, result, fmt.Sprint(subkey)
 }
-func saveUser(u *UserInfo, source string) (bool, string, string) {
+func saveUser(u *UserInfo, source, pre string) (bool, string, string) {
 	defer util.Catch()
 	pcresult := "" //pc订阅结果
 	subkey := ""   //pc订阅关键词
-	pre := "0"
-	shareData := redis.Get("sso", "p_shareData_"+source)
-	infoData := map[string]interface{}{}
-	tmp, _ := json.Marshal(shareData)
-	json.Unmarshal(tmp, &infoData)
-	if len(infoData) > 0 && infoData["action"] != nil {
-		pre = util.ObjToString(infoData["action"])
-	}
 	log.Println("保存用户:", subkey)
 	fg := false
 	tuser, ok := tools.MQFW.FindOneByField("user", `{"s_unionid":"`+u.UnionId+`","i_appid":2}`, `{"_id":1,"s_m_openid":1,"o_jy":1}`)
@@ -284,7 +268,7 @@ func saveUser(u *UserInfo, source string) (bool, string, string) {
 			}
 		}
 		if pre == "11" || pre == "12" || pre == "19" { //11pc订阅,12pc搜索关键词
-			newUser, pcresult, subkey = pcSetUserKeys(newUser, source)
+			newUser, pcresult, subkey = pcSetUserKeys(newUser, source, pre)
 			newUser["i_ts_guide"] = 1 //pc订阅关键词,不再走向导页
 			oj := newUser["o_jy"].(map[string]interface{})
 			oj["i_mode"] = 1
@@ -322,7 +306,7 @@ func saveUser(u *UserInfo, source string) (bool, string, string) {
 			}, false, false)
 			fg = true
 		} else { //针对取消关注的用户,关键词设置
-			*tuser, pcresult, subkey = pcSetUserKeys(*tuser, source)
+			*tuser, pcresult, subkey = pcSetUserKeys(*tuser, source, pre)
 			if subkey != "" {
 				if pre == "11" || pre == "12" || pre == "19" { //11pc订阅,12pc搜索关键词
 					tools.MQFW.Update("user",
@@ -449,7 +433,7 @@ func Subscribe(w ResponseWriter, r *Request) {
 		if time.Now().After(time.Unix(config.ZqLuckdraw.StartDate, 0)) && time.Now().Before(time.Unix(config.ZqLuckdraw.EndDate, 0)) {
 			welcomemsg = config.ZqLuckdraw.Welcomemsg
 		}
-		if b, pcresult, subkey := saveUser(user, source); b {
+		if b, pcresult, subkey := saveUser(user, source, pccodepre); b {
 			//pccodepre := "0" //分享过来source为空
 			//if len(source) > 3 {
 			//	pccodepre = source[0:2]
@@ -601,18 +585,8 @@ func Subscribe(w ResponseWriter, r *Request) {
 func saveUserLog(shareId, openid string) {
 	defer util.Catch()
 	date := time.Now()
-	//var w ResponseWriter
-	//var r *Request
-	userData := redis.Get("sso", "p_userdata_"+shareId)
-	//openid := r.FromUserName
-	shareData := redis.Get("sso", "p_shareData_"+shareId)
-	infoData := map[string]interface{}{}
+	userData := redis.Get("sso", "p_shareData_"+shareId)
 	var pccodepre = ""
-	tmp, _ := json.Marshal(shareData)
-	json.Unmarshal(tmp, &infoData)
-	if len(infoData) > 0 && infoData["action"] != nil {
-		pccodepre = util.ObjToString(infoData["action"])
-	}
 	user, _ := Mux.GetUserInfo(openid)
 	nickname := user.Nickname
 	province := user.Province
@@ -629,6 +603,8 @@ func saveUserLog(shareId, openid string) {
 		infoData := map[string]interface{}{}
 		tmp, _ := json.Marshal(userData)
 		json.Unmarshal(tmp, &infoData)
+		//log.Println("weixinuserdata:", infoData)
+		pccodepre = util.ObjToString(infoData["action"])
 		model = util.ObjToString(infoData["RModule"])
 		referer = util.ObjToString(infoData["RReferer"])
 		usersource = util.ObjToString(infoData["RSource"])
@@ -695,7 +671,7 @@ func SaveAbnormal(openid string) {
 		if err != nil {
 			log.Println(err)
 		} else {
-			saveUser(user, "")
+			saveUser(user, "", "")
 		}
 	}
 }
@@ -708,26 +684,21 @@ func ScanHandler(w ResponseWriter, r *Request) {
 	defer util.Catch()
 	openid := r.FromUserName
 	m, b := tools.MQFW.FindOneByField("user", `{"s_m_openid":"`+openid+`"}`, `{"_id":1,"s_headimage":1,"o_jy":1}`)
-	//data, _ := json.Marshal(r)
-	//log.Println("SCAN:", openid, string(data), b)
-	//redis.Put("sso", "p_usershare_"+r.EventKey, openid, 600)
 	shareData := redis.Get("sso", "p_shareData_"+r.EventKey)
 	infoData := map[string]interface{}{}
 	tmp, _ := json.Marshal(shareData)
 	json.Unmarshal(tmp, &infoData)
-	//log.Println(shareData, "--00--", infoData)
 	if b {
 		pccodepre := "0"
 		if len(r.EventKey) > 1 {
 			pccodepre = util.ObjToString(infoData["action"])
 		}
-		//log.Println("pccodepre:", pccodepre)
 		user, err := Mux.GetUserInfo(openid)
 		if *m == nil {
 			if err != nil {
 				log.Println(err)
 			} else {
-				if b, _, _ := saveUser(user, r.EventKey); b {
+				if b, _, _ := saveUser(user, r.EventKey, pccodepre); b {
 					url := fmt.Sprintf(config.Sysconfig["proxysess"].(string), se.EncodeString(openid+","+user.UnionId+","+strconv.Itoa(int(time.Now().Unix()))+",rssset"))
 					w.ReplyText(fmt.Sprintf(config.Sysconfig["welcomemsg"].(string), url))
 				}
@@ -762,7 +733,7 @@ func ScanHandler(w ResponseWriter, r *Request) {
 					}
 				}
 			} else if pccodepre == "11" || pccodepre == "12" || pccodepre == "19" { //101pc订阅,102pc搜索关键词
-				pcUser, pcresult, subkey := pcSetUserKeys(*m, r.EventKey)
+				pcUser, pcresult, subkey := pcSetUserKeys(*m, r.EventKey, pccodepre)
 				go tools.MQFW.Update("user", &map[string]interface{}{
 					"s_m_openid": openid,
 				}, &map[string]interface{}{

+ 7 - 1
src/jfw/qrmanager/qrcode.go

@@ -1,5 +1,11 @@
 package qrmanager
 
+import (
+	"net/http"
+
+	"github.com/go-xweb/httpsession"
+)
+
 type QrCode interface {
-	GetQRCode(action string) (string, string)
+	GetQRCode(oid, action string, hsn *httpsession.Session, hrt *http.Request) (string, string)
 }

+ 6 - 11
src/jfw/qrmanager/qrcodenum.go

@@ -2,26 +2,21 @@ package qrmanager
 
 import (
 	"fmt"
+	. "jfw/config"
 	"math/rand"
+	"net/http"
 	"qfw/util"
-	"qfw/util/redis"
 	"time"
+
+	"github.com/go-xweb/httpsession"
 )
 
 type QrCodeNum struct{}
 
-func (q *QrCodeNum) GetQRCode(action string) (string, string) {
+func (q *QrCodeNum) GetQRCode(oid, action string, hsn *httpsession.Session, hrt *http.Request) (string, string) {
 	var shareidone, shareidtwo string
 	shareidone = fmt.Sprintf("%s%d", action+fmt.Sprintf("%d", time.Now().UnixNano())[7:14], rand.Intn(9))
 	shareidtwo = fmt.Sprintf("%d", util.Int64All(shareidone)-1)
-	//log.Println("登录获取shareid:", shareidone, shareidtwo)
-	var shareData = make(map[string]interface{})
-	shareData["action"] = action
-	if shareidone != "" {
-		redis.Put("sso", "p_shareData_"+shareidone, shareData, 15*60)
-	}
-	if shareidtwo != "" {
-		redis.Put("sso", "p_shareData_"+shareidtwo, shareData, 15*60)
-	}
+	RedisInfo(oid, action, shareidone, shareidtwo, util.IntAll(Sysconfig["numTimeNumber"]), hsn, hrt)
 	return shareidone, shareidtwo
 }

+ 6 - 11
src/jfw/qrmanager/qrcodestr.go

@@ -2,26 +2,21 @@ package qrmanager
 
 import (
 	"fmt"
+	. "jfw/config"
+	"net/http"
 	"qfw/util"
-	"qfw/util/redis"
 	"time"
+
+	"github.com/go-xweb/httpsession"
 )
 
 type QrCodeStr struct{}
 
-func (q *QrCodeStr) GetQRCode(action string) (string, string) {
+func (q *QrCodeStr) GetQRCode(oid, action string, hsn *httpsession.Session, hrt *http.Request) (string, string) {
 	now := time.Now()
 	var shareidone, shareidtwo string
 	shareidone = fmt.Sprintf("A%s%d%s", util.GetLetterRandom(4), now.UnixNano()/1000, util.GetLetterRandom(3))
 	shareidtwo = fmt.Sprintf("B%s%d%s", util.GetLetterRandom(4), now.UnixNano()/1000, util.GetLetterRandom(3))
-	//log.Println(shareidone, "===")
-	var shareData = make(map[string]interface{})
-	shareData["action"] = action
-	if shareidone != "" {
-		redis.Put("sso", "p_shareData_"+shareidone, shareData, 30*60)
-	}
-	if shareidtwo != "" {
-		redis.Put("sso", "p_shareData_"+shareidtwo, shareData, 30*60)
-	}
+	RedisInfo(oid, action, shareidone, shareidtwo, util.IntAll(Sysconfig["strTimeNumber"]), hsn, hrt)
 	return shareidone, shareidtwo
 }

+ 92 - 0
src/jfw/qrmanager/qrmanager.go

@@ -1,3 +1,95 @@
 package qrmanager
 
+import (
+	. "jfw/config"
+	"jfw/filter"
+	"net/http"
+	"qfw/util"
+	"qfw/util/redis"
+	"strings"
+
+	"github.com/go-xweb/httpsession"
+)
+
 var QrCodeManager QrCode
+var se = util.SE
+
+func RedisInfo(oid, action, sione, sitwo string, i int, hsn *httpsession.Session, hrt *http.Request) {
+	//fmt.Println("--redisinfo--")
+	oldData := redis.Get("sso", "p_userdata_"+se.DecodeString(oid))
+	var Rurl = util.ObjToString(hsn.Get("RURL"))
+	var Rref = util.ObjToString(hsn.Get("Rref"))
+	rheader := hrt.Header
+	rhdua := "" //UA
+	if len(rheader["User-Agent"]) > 0 {
+		rhdua = rheader["User-Agent"][0]
+	}
+	userData := make(map[string]interface{})
+	userData["Ros"] = filter.GetOS(rhdua)
+	userData["Rip"] = filter.GetIp(hrt)
+	userData["Rbrowse"] = filter.GetBrowse(rhdua)
+	if hsn.Get("RReferer") == nil || util.ObjToString(hsn.Get("RReferer")) == "" {
+		if Rref == "" {
+			hsn.Set("RReferer", Rurl)
+		} else {
+			hsn.Set("RReferer", Rref)
+		}
+	}
+	userData["RURL"] = Rurl
+	modulelist := Seoconfig["module"].(map[string]interface{})
+	for k, v := range modulelist {
+		if strings.Contains(Rurl, k) {
+			hsn.Set("RModule", v)
+		}
+	}
+	if hsn.Get("RModule") == nil || util.ObjToString(hsn.Get("RModule")) == "" {
+		hsn.Set("RModule", "首页")
+	}
+	//活动页模块
+	if len(Rurl) > 1 && strings.Contains(Rurl, "id=") {
+		activeCode := strings.Split(Rurl, "id=")[1]
+		//首先查看是否从百度等搜索引擎过来的referer
+		sourcelist := Seoconfig["source"].(map[string]interface{})
+		for k, v := range sourcelist {
+			if strings.Contains(activeCode, k) {
+				if hsn.Get("RSource") == nil {
+					hsn.Set("RSource", v)
+					hsn.Set("RModule", activeCode+"活动页")
+					hsn.Set("RActiveCode", activeCode)
+				}
+			}
+		}
+	}
+	userData["RModule"] = hsn.Get("RModule")
+	userData["RActiveCode"] = hsn.Get("RActiveCode")
+	userData["RReferer"] = hsn.Get("RReferer")
+	if hsn.Get("RSource") == nil || util.ObjToString(hsn.Get("RSource")) == "" {
+		//首先查看是否从百度等搜索引擎过来的referer
+		refererlist := Seoconfig["referer"].(map[string]interface{})
+		for k, v := range refererlist {
+			if strings.Contains(Rref, k) {
+				if hsn.Get("RSource") == nil {
+					hsn.Set("RSource", v)
+				}
+			}
+		}
+		if hsn.Get("RSource") == nil || util.ObjToString(hsn.Get("RSource")) == "" {
+			hsn.Set("RSource", "剑鱼网站")
+		}
+	}
+	userData["RSource"] = hsn.Get("RSource")
+	userData["Rparamkey"] = hsn.Get("paramkey")
+	userData["Rparampublishtime"] = hsn.Get("parampublishtime")
+	userData["Rparamarea"] = hsn.Get("paramarea")
+	userData["Rparaminfotype"] = hsn.Get("paraminfotype")
+	userData["Rprojectname"] = hsn.Get("projectname")
+	userData["action"] = action
+	//log.Println("userData:", userData)
+	if oldData != nil {
+		redis.Put("sso", "p_shareData_"+sione, oldData, i*60)
+		redis.Put("sso", "p_shareData_"+sitwo, oldData, i*60)
+	} else {
+		redis.Put("sso", "p_shareData_"+sione, userData, i*60)
+		redis.Put("sso", "p_shareData_"+sitwo, userData, i*60)
+	}
+}

+ 14 - 5
src/web/staticres/js/login.js

@@ -20,6 +20,7 @@ var encryptId = null;
 var qr_type = "s";
 var unseatflag = false;//未登录情况下,用户点击超级搜索等开启按钮或者功能,根据此状态看是否弹出二维码
 var unseatzbqyflag = false;//未登录情况下,用户点击中标企业等开启按钮或者功能,根据此状态看是否弹出二维码
+var errnum = 0;
 //创建websocket连接
 var createWebSocket = function(wsUrl){
 	try{
@@ -41,9 +42,12 @@ var initEventHandle = function(){
 		}
 	}
 	ws.onerror = function(e){
-		clearInterval(loginfg);
-		createWebSocket(wsUrl);
-		JYLogin(mynum);
+		errnum++
+		if(errnum<5){
+			clearInterval(loginfg);
+			createWebSocket(wsUrl);
+			JYLogin(mynum);
+		}
 	}
 //	ws.onopen = function(e) {
 //		if(ws.readyState==1){
@@ -84,13 +88,18 @@ var SendMsg = function(){
 var getNewShareId = function(num){
 	mynum = num;
 	pageType = "T"
+	var rref = document.referrer;
+	if (localStorage.getItem("oldshareid")!=null){
+		oldshareid=localStorage.getItem("oldshareid");
+	}
 	//console.log("num:"+num)
-	$.post("/front/getLoginNum/"+num,function(data){
+	$.post("/front/getLoginNum/"+num,{rref:rref,oid:oldshareid},function(data){
 		if(data&&data.num){
 			pageshareid = data.num;
 			kopshareid = data.numot;
 			mynum = num;
-			redisUserInfo(pageshareid,kopshareid);
+			localStorage.setItem("oldshareid", pageshareid);
+			//redisUserInfo(pageshareid,kopshareid);
 			$(".jyhead_qr img").attr("src","/front/share/"+pageshareid);
 			$("#bottomimg").attr("src","/front/share/"+pageshareid);
 			$("#layerImg-login").attr("src","/front/share/"+pageshareid);