瀏覽代碼

Merge branch 'develop' of 192.168.3.17:zhanghongbo/qfw into develop

zhangjinkun@topnet.net.cn 9 年之前
父節點
當前提交
80cd8ee0d9

+ 7 - 0
common/src/qfw/util/common.go

@@ -317,6 +317,13 @@ func SubString(str string, begin, length int) (substr string) {
 func Try(fun func(), handler func(interface{})) {
 	defer func() {
 		if err := recover(); err != nil {
+			for skip := 1; ; skip++ {
+				_, file, line, ok := runtime.Caller(skip)
+				if !ok {
+					break
+				}
+				go log.Printf("%v,%v\n", file, line)
+			}
 			handler(err)
 		}
 	}()

+ 1 - 1
common/src/qfw/util/redis/redisutil_test.go

@@ -59,5 +59,5 @@ func Test_other(t *testing.T) {
 
 func TestIncr(t *testing.T) {
 	InitRedis("sso=192.168.3.14:1379")
-	log.Println(Incr("sso", "user"))
+	log.Println(GetBytes("sso", "p_share_3200000006"))
 }

+ 4 - 0
core/src/qfw/active/activemanage.go

@@ -26,6 +26,10 @@ type Activemanage struct {
 
 //进入抽奖页面
 func (a *Activemanage) Luckdraw(activecode, id string) error {
+	userInfo := a.GetSession("userInfo").(*map[string]interface{})
+	openid := (*userInfo)["s_m_openid"].(string)
+	a.T["shareid"] = coreutil.FindMyShareId(openid)
+	//
 	if activecode == "topcj" {
 		se := SimpleEncrypt{Key: "topnet2015topnet2015"}
 		openid := se.DecodeString(id)

+ 7 - 0
core/src/qfw/coreutil/coreutil.go

@@ -0,0 +1,7 @@
+package coreutil
+
+import (
+	"qfw/util"
+)
+
+var se *util.SimpleEncrypt = &util.SimpleEncrypt{Key: "topnet2015topnet2015"}

+ 22 - 0
core/src/qfw/coreutil/share.go

@@ -0,0 +1,22 @@
+package coreutil
+
+import (
+	"fmt"
+	"qfw/util/mongodb"
+)
+
+//取到分享者的shareid
+func FindMyShareId(openid string) string {
+	//userInfo := a.GetSession("userInfo").(*map[string]interface{})
+	//openid := (*userInfo)["s_m_openid"].(string)
+	ret := mongodb.FindOne("person_share", "{'s_openid':'"+openid+"'}")
+	var shareid string
+	if (*ret)["i_shareid"] == nil {
+		id := GetShareId(TYPE_INVITE)
+		GetShareQR(id)
+		shareid = fmt.Sprintf("%d", id)
+	} else {
+		shareid = (*ret)["i_shareid"].(string)
+	}
+	return se.EncodeString(shareid)
+}

+ 20 - 13
core/src/qfw/front/webcentent.go

@@ -43,23 +43,30 @@ type Newscont struct {
 	getJsonList xweb.Mapper `xweb:"POST /front/(\\w+)list/list"`
 	//微信端使用通用信息展示页
 	weixincontent xweb.Mapper `xweb:"GET /front/weixincontent/(\\w+)"`
-	//微信分享内容
-	weixinshare xweb.Mapper `xweb:"GET /front/weixinshare"`
+	//取微信分享图片
+	weixinshare xweb.Mapper `xweb:"GET /front/weixinshare/([^.]*)"`
 }
 
-//微信分享内容
+//取微信分享图片
 
-func (e *Newscont) Weixinshare() error {
-	id := coreutil.GetShareId(coreutil.TYPE_INVITE)
-	var pngdata = ""
-	if ret := redis.Get("sso", fmt.Sprintf("p_share_%d", id)); ret != nil {
-		return e.SetBody([]byte(ret.(string)))
+func (e *Newscont) Weixinshare(pid string) error {
+	var pngdata = []byte{}
+	if ret, _ := redis.GetBytes("sso", fmt.Sprintf("p_share_%s", pid)); ret != nil {
+		pngdata = *ret
 	} else {
-		pngdata = coreutil.GetShareQR(id)
-	}
-	e.T["pngdata"] = pngdata
-	fmt.Println("pngdata:", pngdata, "000000:", fmt.Sprintf("p_share_%d", id))
-	return e.Render("/manage/web_weixinshare.html", &e.T)
+		id := coreutil.GetShareId(coreutil.TYPE_INVITE)
+		coreutil.GetShareQR(id)
+		tmp, _ := redis.GetBytes("sso", fmt.Sprintf("p_share_%d", id))
+		pngdata = *tmp
+	}
+	w := e.ResponseWriter
+	w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
+	w.Header().Set("Pragma", "no-cache")
+	w.Header().Set("Expires", "0")
+	w.Header().Set("Content-Type", "image/png")
+	w.Write(pngdata)
+	return nil
+
 }
 
 //文章点赞

+ 14 - 0
core/src/qfw/manage/feedback.go

@@ -7,9 +7,11 @@ package manage
 import (
 	"fmt"
 	. "gopkg.in/mgo.v2/bson"
+	"qfw/coreutil"
 	"qfw/util"
 	. "qfw/util/mongodb"
 	. "qfw/util/msg"
+	qrpc "qfw/util/rpc"
 	"strings"
 )
 
@@ -139,6 +141,18 @@ func (s *SystemManage) Updateback() error {
 		if Update("interaction", "{'_id':'"+_id+"'}", &data2, false, false) {
 			flag = "true"
 			msg = "修改成功!"
+			//
+			f := FindOne("user", "{'_id':'"+s_submitid+"'}")
+			if (*f)["s_m_openid"] != nil {
+				openid := (*f)["s_m_openid"].(string)
+				s_result := "意见反馈处理结果"
+				s_detail := s.GetString("s_opinion")
+				s_remark := s.GetString("s_record")
+				go func() {
+					coreutil.SendManagerNotifyMsg(&qrpc.NotifyMsg{Openid: openid, Title: s_result, Detail: s_detail, Remark: s_remark})
+				}()
+			}
+
 		} else {
 			flag = "false"
 			msg = "修改失败!"

+ 1 - 1
core/src/timetask.json

@@ -1 +1 @@
-{"comment":{"c_rate":720,"commentrate":900},"market":{"demand":{"attr":["i_hits","i_bids","i_status"],"timepoint":"2016-01-19 09:51:19"},"service":{"attr":["i_hits","i_sales","i_comments","i_score","i_appcounts"],"timepoint":"2016-01-19 09:51:19"}},"marketisstart":true,"marketrate":300}
+{"comment":{"c_rate":720,"commentrate":900},"market":{"demand":{"attr":["i_hits","i_bids","i_status"],"timepoint":"2016-01-19 18:18:18"},"service":{"attr":["i_hits","i_sales","i_comments","i_score","i_appcounts"],"timepoint":"2016-01-19 18:18:18"}},"marketisstart":true,"marketrate":300}

+ 4 - 4
core/src/web/staticres/wxswordfish/share.js

@@ -1,4 +1,4 @@
-function initShare(signature){
+function initShare(signature,shareid){
 	if(typeof(signature) != "undefined" && signature != null && signature.length == 4){
 		wx.config({
 		    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
@@ -11,7 +11,7 @@ function initShare(signature){
 		wx.ready(function () {
 	        wx.onMenuShareTimeline({
 			    title: '剑鱼招标订阅免费用,关注即可抽取iPad mini。', // 分享标题
-			    link: 'http://www.qimingxing.info/swordfish/share', // 分享链接
+			    link: 'http://www.qimingxing.info/front/weixinshare/'+shareid, // 分享链接
 			    imgUrl: 'http://www.qimingxing.info/wxswordfish/images/share-icon.png', // 分享图标
 			    success: function () { 
 			       //alert('分享成功');
@@ -24,9 +24,9 @@ function initShare(signature){
 			wx.onMenuShareAppMessage({
 			    title: '剑鱼招标订阅免费用,关注即可抽取iPad mini。', // 分享标题
 			    desc: '关注微信并设置剑鱼关键词,全国招标信息统统推送给您!', // 分享描述
-			    link: 'http://www.qimingxing.info/swordfish/share', // 分享链接
+			    link: 'http://www.qimingxing.info/front/weixinshare/'+shareid, // 分享链接
 			    imgUrl: 'http://www.qimingxing.info/wxswordfish/images/share-icon.png', // 分享图标
-			    type: 'link', // 分享类型,music、video或link,不填默认为link
+			    type: 'link', // 分享类型,music、video或link,不填默认为link'
 			    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
 			    success: function () { 
 			        //alert('分享成功');

+ 1 - 1
core/src/web/templates/active/luckdraw.html

@@ -14,7 +14,7 @@
 <script src="/wxswordfish/share.js"></script>
 <script src="/js/bootstrap.min.js"></script>
 <script>
-	initShare({{.T.signature}});
+	initShare({{.T.signature}},{{.T.shareid}});
 </script>
 <style>
 *{padding:0; margin:0;}

二進制
etl/client/src/trsclient/trsclient


+ 61 - 68
etl/client/src/trsclient/trsclient.go

@@ -40,20 +40,16 @@ func main() {
 
 //定时上传文件
 func transferTime() {
-	if bcon {
-		bcon = false
-		hour := time.Now().Hour()
-		if hour > startHour && hour < endHour {
-			_, err := rpc.DialHTTP("tcp", rpcaddr)
-			if err != nil {
-				log.Println(err.Error())
-			} else {
+	util.Try(func() {
+		if bcon {
+			bcon = false
+			hour := time.Now().Hour()
+			if hour > startHour && hour < endHour {
 				FileTransfer()
 			}
+			bcon = true
 		}
-		bcon = true
-	}
-
+	}, func(e interface{}) {})
 	time.AfterFunc(uploadduration*time.Minute, transferTime)
 }
 
@@ -64,77 +60,74 @@ type TrsDataParam struct {
 }
 
 func FileTransfer() {
-	fi, err := os.Stat(jsonpath)
-	if err != nil {
-		log.Println(err.Error())
-		return
-	}
-	if !fi.IsDir() {
-		log.Println(jsonpath, "不是一个目录")
-		return
-	}
-	filepath.Walk(jsonpath, func(path string, info os.FileInfo, err error) error {
-		if info.IsDir() || strings.LastIndex(info.Name(), "sync") > 0 {
-			return nil
+	util.Try(func() {
+		fi, err := os.Stat(jsonpath)
+		if err != nil {
+			log.Println(err.Error())
+			return
 		}
-		filename := info.Name()
-		fi, _ := os.Open(path)
-		bs, _ := ioutil.ReadAll(fi)
-		fi.Close()
-		go transfer(path, filename, bs)
-		//TODO 删除本地文件
-		return nil
-	})
+		if !fi.IsDir() {
+			log.Println(jsonpath, "不是一个目录")
+			return
+		}
+		filepath.Walk(jsonpath, func(path string, info os.FileInfo, err error) error {
+			if info.IsDir() || strings.LastIndex(info.Name(), "sync") > 0 {
+				return nil
+			}
+			filename := info.Name()
+			fi, _ := os.Open(path)
+			bs, _ := ioutil.ReadAll(fi)
+			fi.Close()
+			go transfer(path, filename, bs)
+			//TODO 删除本地文件
+			return nil
+		})
+	}, func(e interface{}) {})
 }
 
 //发文件,失败后并尝试重试发送
 func transfer(path string, filename string, data []byte) {
-	pool <- true
-	defer func() {
-		<-pool
-	}()
-	i := 0
-	for i < 2 {
-		i++
+	util.Try(func() {
+		pool <- true
+		defer func() {
+			<-pool
+		}()
 		client, err := rpc.DialHTTP("tcp", rpcaddr)
 		defer client.Close()
-		if err != nil {
-			log.Println(err.Error())
-			time.Sleep(2 * time.Minute)
-			continue
-		}
-		param := &TrsDataParam{FileName: filename, FileData: data}
-		reply := 0
-		err = client.Call("TrsDataTransfer.TransferFile", param, &reply)
-		if err != nil {
-			log.Println(err.Error())
-			time.Sleep(2 * time.Minute)
-			continue
-		} else {
-			if reply == 1 {
-				move(path, jsonpath+"_back/"+filename)
+		if err == nil {
+			param := &TrsDataParam{FileName: filename, FileData: data}
+			reply := 0
+			err = client.Call("TrsDataTransfer.TransferFile", param, &reply)
+			if err != nil {
+				log.Println(err.Error())
+			} else {
+				if reply == 1 {
+					move(path, jsonpath+"_back/"+filename)
+				}
 			}
 		}
-		break
-	}
+	}, func(e interface{}) {})
 }
 
 func delFile() {
-	client, err := rpc.DialHTTP("tcp", rpcaddr)
-	defer client.Close()
-	if err == nil {
-		param := &TrsDataParam{}
-		reply := make([]string, 10)
-		err := client.Call("TrsDataTransfer.DelFileList", param, &reply)
-		if err != nil {
-			log.Println(err.Error())
-			time.Sleep(1 * time.Minute)
-		} else {
-			for _, v := range reply {
-				del(jsonpath + "_back/" + v)
+	util.Try(func() {
+		client, err := rpc.DialHTTP("tcp", rpcaddr)
+		defer client.Close()
+		if err == nil {
+			param := &TrsDataParam{}
+			reply := make([]string, 10)
+			err := client.Call("TrsDataTransfer.DelFileList", param, &reply)
+			if err != nil {
+				log.Println(err.Error())
+				time.Sleep(1 * time.Minute)
+			} else {
+				for _, v := range reply {
+					del(jsonpath + "_back/" + v)
+				}
 			}
 		}
-	}
+	}, func(e interface{}) {})
+
 	time.AfterFunc(delduration*time.Minute, delFile)
 }
 

二進制
etl/server/src/trsserver/trsserver


+ 5 - 7
etl/server/src/trsserver/trsserver.go

@@ -31,8 +31,7 @@ func (i *TrsDataTransfer) TransferFile(param *TrsDataParam, reply *int) error {
 	log.Println(param.FileName)
 	tmp := []interface{}{}
 	err := json.Unmarshal([]byte(param.FileData), &tmp)
-	if err == nil {
-		c <- true
+	if err == nil && len(tmp) > 0 {
 		go TrsZtbSave(param.FileName, tmp)
 		*reply = 1
 	} else {
@@ -54,6 +53,7 @@ func (i *TrsDataTransfer) DelFileList(param *TrsDataParam, replys *[]string) err
 
 func TrsZtbSave(filename string, tmp []interface{}) {
 	util.Try(func() {
+		c <- true
 		session := mongodb.GetMgoConn()
 		defer mongodb.DestoryMongoConn(session)
 		defer func() {
@@ -79,11 +79,9 @@ func TrsZtbSave(filename string, tmp []interface{}) {
 	}, func(e interface{}) {
 		log.Println(e)
 	})
-	go func() {
-		Lock.Lock()
-		delStrings = append(delStrings, filename)
-		Lock.Unlock()
-	}()
+	Lock.Lock()
+	delStrings = append(delStrings, filename)
+	Lock.Unlock()
 }
 
 func main() {