Browse Source

Merge branch 'dev2.5.1' of http://192.168.3.207:10080/qmx/jy into dev2.5.1

liuxiaolu 6 years ago
parent
commit
720c6e4453
32 changed files with 865 additions and 354 deletions
  1. 1 1
      src/config.json
  2. 14 4
      src/jfw/modules/app/src/config.json
  3. 10 1
      src/jfw/modules/app/src/jfw/front/front.go
  4. 12 5
      src/jfw/modules/app/src/jfw/front/login.go
  5. 89 1
      src/jfw/modules/app/src/jfw/front/me.go
  6. 6 0
      src/jfw/modules/app/src/jfw/front/search.go
  7. 14 17
      src/jfw/modules/app/src/web/staticres/jyapp/js/common.js
  8. 10 3
      src/jfw/modules/app/src/web/staticres/jyapp/js/wxEntsesearch.js
  9. 68 59
      src/jfw/modules/app/src/web/staticres/jyapp/js/wxSupersearch.js
  10. 2 4
      src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js
  11. 2 2
      src/jfw/modules/app/src/web/templates/me/login.html
  12. 10 1
      src/jfw/modules/app/src/web/templates/me/set.html
  13. 20 2
      src/jfw/modules/app/src/web/templates/weixin/jylab/lab-cjss.html
  14. 1 1
      src/jfw/modules/app/src/web/templates/weixin/jylab/lab-gzqy.html
  15. 1 1
      src/jfw/modules/app/src/web/templates/weixin/jylab/lab-index.html
  16. 20 1
      src/jfw/modules/app/src/web/templates/weixin/jylab/lab-sjdc.html
  17. 22 2
      src/jfw/modules/app/src/web/templates/weixin/jylab/lab-zbqy.html
  18. 20 2
      src/jfw/modules/app/src/web/templates/weixin/jylab/lab-zndy.html
  19. 34 8
      src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html
  20. 43 1
      src/jfw/modules/app/src/web/templates/weixin/wxkeyset/index.html
  21. 24 24
      src/jfw/modules/weixin/src/apiclient_cert.pem
  22. 26 26
      src/jfw/modules/weixin/src/apiclient_key.pem
  23. 34 43
      src/jfw/modules/weixin/src/jrpc/jrpc.go
  24. 21 18
      src/jfw/modules/weixin/src/rootca.pem
  25. 206 110
      src/jfw/pay/weixin.go
  26. 1 1
      src/jfw/tools/rpccall.go
  27. 1 5
      src/web/staticres/dataExport/css/pay_success.css
  28. 67 0
      src/web/templates/pc/waitpay.html
  29. 21 2
      src/web/templates/weixin/jylab/lab-cjss.html
  30. 19 1
      src/web/templates/weixin/jylab/lab-sjdc.html
  31. 21 2
      src/web/templates/weixin/jylab/lab-zbqy.html
  32. 25 6
      src/web/templates/weixin/search/mainSearch.html

+ 1 - 1
src/config.json

@@ -19,7 +19,7 @@
     ],
     "cassandrasize": 5,
     "agreement": "http",
-    "webdomain": "http://webky.qmx.top",
+    "webdomain": "http://webwcj.qmx.top",
     "redirect": {
         "searchinfo": "/jylab/mainSearch",
         "rssset": "/swordfish/historypush",

+ 14 - 4
src/jfw/modules/app/src/config.json

@@ -6,8 +6,8 @@
     "influxdb": "jy_logs",
     "elasticsearch": "http://192.168.3.18:9800",
     "elasticPoolSize": 30,
-    "redisaddrs": "other=192.168.3.18:2379,push=192.168.3.18:2379,sso=192.168.3.18:2379,session=192.168.3.18:2379",
-    "webport": "8010",
+    "redisaddrs": "other=192.168.3.18:2379,push=192.168.3.18:2379,sso=192.168.3.18:2379,session=192.168.3.18:3379",
+    "webport": "8081",
     "weixinrpc": "127.0.0.1:8083",
     "cassandra": [
         "192.168.3.207"
@@ -81,8 +81,8 @@
         ],
         "msg": "f 开关状态:%s //-2 从配置文件重置,-1 关闭,1 打开<br><br>c 并发数:%d //-2 不限制并发数,-1 无条件直接限制,>0 限制并发数<br><br>t 个人查询限制时间:%ds //-1 不限制<br><br>p 限制页数:%d"
     },
-	"share": {
-        "forceShareEnabled" : true,
+    "share": {
+        "forceShareEnabled": false,
         "onlineDate": "2018-08-20 00:00:00",
         "regDaysForNewUser": 5,
         "shareIntervalDays": 7,
@@ -90,5 +90,15 @@
         "endHour": 17,
         "shareTimesUpperLimitR": 4000,
         "shareTimesUpperLimitIrr": 1000
+    },
+    "appPushServiceRpc": "127.0.0.1:5566",
+    "appPower": {
+        "grayflag": false,
+        "openids": [
+            "ocXeA0jceF8KRunDkwf9egT4bKI8",
+            "ocXeA0nBnaRZhKEZYhMBGvd4NvH0",
+            "ocXeA0rBxfsr_4GzysQFzF3Cf81U",
+            "15737190152"
+        ]
     }
 }

+ 10 - 1
src/jfw/modules/app/src/jfw/front/front.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"jfw/config"
 	"jfw/forceShare"
+	jylabutil "jfw/jylabutil"
 	"jfw/limitsearch"
 	"jfw/tools"
 	"log"
@@ -64,7 +65,8 @@ type Front struct {
 	//修改强制分享主动分享状态和时间
 	updateShareStatus xweb.Mapper `xweb:"/jyapp/share/updateShareStatus"`
 	//隐私政策url
-	privacy xweb.Mapper `xweb:"/jyapp/free/privacy"`
+	privacy   xweb.Mapper `xweb:"/jyapp/free/privacy"`
+	changePro xweb.Mapper `xweb:"/jyapp/jylab/changePro"` //修改提示信息状态
 }
 
 var sewx util.SimpleEncrypt //微信的加密方法
@@ -575,3 +577,10 @@ func (s *Front) UpdateShareStatus() error {
 	s.ServeJson(map[string]interface{}{})
 	return nil
 }
+func (s *Front) ChangePro() {
+	defer util.Catch()
+	openid := s.GetSession("openid")
+	if openid != nil {
+		jylabutil.UpdateAuthory(openid.(string), "i_tablepro", 1)
+	}
+}

+ 12 - 5
src/jfw/modules/app/src/jfw/front/login.go

@@ -606,25 +606,31 @@ func (l *Login) UpdateRid() {
 			return ""
 		}
 		jpushid, _ := (*user)["s_jpushid"].(string)
-		if jpushid != "" {
+		if jpushid == rid {
 			return "exists"
 		}
 		l.SetSession("s_jpushid", rid)
+		phoneType := l.GetString("phoneType")
 		mongodb.Update("user", map[string]interface{}{
 			"s_m_openid": openid,
 			"i_appid":    2,
 		}, map[string]interface{}{
-			"$set":  map[string]interface{}{"s_jpushid": rid},
+			"$set": map[string]interface{}{
+				"s_jpushid":     rid,
+				"s_appponetype": phoneType,
+			},
 			"$pull": map[string]interface{}{"a_jpushid": rid},
 		}, false, false)
 		mongodb.Update("follow_project", map[string]interface{}{"s_openid": openid}, map[string]interface{}{
 			"$set": map[string]interface{}{
-				"s_jpushid": rid,
+				"s_jpushid":     rid,
+				"s_appponetype": phoneType,
 			},
 		}, false, true)
 		mongodb.Update("jylab_followent", map[string]interface{}{"s_openid": openid}, map[string]interface{}{
 			"$set": map[string]interface{}{
-				"s_jpushid": rid,
+				"s_jpushid":     rid,
+				"s_appponetype": phoneType,
 			},
 		}, false, true)
 		return createSign(openid, rid, "更新极光id后", qutil.IntAll(l.GetSession("i_type")))
@@ -887,13 +893,14 @@ func checkRepeatLogin(user *map[string]interface{}, rid string) {
 		//
 		go func() {
 			phoneType := qutil.ObjToString((*user)["s_appponetype"])
-			log.Println("极光推送,踢出下线", phoneType, s_m_openid, jpushid)
+			log.Println("踢人下线", phoneType, s_m_openid, jpushid)
 			signOutContent, _ := jgpush.Jgconfig.Title["signOut"].(string)
 			if phoneType == "HUAWEI" {
 				jyutil.AppPushServiceCall(map[string]interface{}{
 					"type":        "signOut",
 					"content":     signOutContent,
 					"deviceToken": jpushid,
+					"phoneType":   "HUAWEI",
 				})
 			} else {
 				options := jgpush.Jgconfig.Config.Options

+ 89 - 1
src/jfw/modules/app/src/jfw/front/me.go

@@ -2,8 +2,12 @@ package front
 
 import (
 	"jfw/config"
+	"log"
 	qutil "qfw/util"
+	"qfw/util/redis"
+	"strconv"
 	"strings"
+	"sync"
 
 	"github.com/go-xweb/xweb"
 )
@@ -20,6 +24,7 @@ type Me struct {
 	noticeDetail xweb.Mapper `xweb:"/jyapp/free/notice/detail/(.*)"` //通知
 	checkUpdate  xweb.Mapper `xweb:"/jyapp/free/checkUpdate"`        //检查是否更新
 	download     xweb.Mapper `xweb:"/jyapp/free/download/(weixin|normal)"`
+	updateMes    xweb.Mapper `xweb:"/jyapp/free/updateMes"` //修改检查是否更新配置文件
 }
 
 func init() {
@@ -110,7 +115,90 @@ func (l *Me) Updatepwd() error {
 	})
 	return nil
 }
+
+//
+var graylock = &sync.Mutex{}
+
 func (l *Me) CheckUpdate() error {
-	l.ServeJson(config.Sysconfig["update"])
+	defer qutil.Catch()
+	graylock.Lock()
+	defer graylock.Unlock()
+	powerarr, _ := config.Sysconfig["appPower"].(map[string]interface{})
+	var grayflag = powerarr["grayflag"].(bool)
+	var usertoken = l.GetString("token")
+	updata := config.Sysconfig["update"].(map[string]interface{})
+	updata["userflag"] = false
+	u, s := analySign("", usertoken)
+	if s == 1 {
+		if grayflag {
+			gray_str, err := redis.Exists("session", "grayusers_"+u.OpenId)
+			if err == nil {
+				updata["userflag"] = gray_str
+			}
+		} else {
+			updata["userflag"] = true
+		}
+	}
+	l.ServeJson(updata)
+	return nil
+}
+
+//
+
+func (l *Me) UpdateMes() error {
+	defer qutil.Catch()
+	openid, _ := l.GetSession("s_m_openid").(string)
+	powerarr, _ := config.Sysconfig["appPower"].(map[string]interface{})
+	openids := qutil.ObjArrToStringArr(powerarr["openids"].([]interface{}))
+	exitsflag := false
+	for _, v := range openids {
+		if v == openid {
+			exitsflag = true
+			break
+		}
+	}
+	if openid != "" && exitsflag {
+		rectype := l.GetString("rtp")
+		switch rectype {
+		case "U": //更新app版本信息
+			version := l.GetString("version")
+			updateflag, _ := l.GetBool("forceflag")
+			var updata = make(map[string]interface{})
+			updata = *qutil.ObjToMap(config.Sysconfig["update"])
+			if updata != nil {
+				updata["version"] = version
+				updata["mustupdate"] = updateflag
+				qutil.WriteSysConfig("../config.json", updata)
+			}
+			l.ServeJson(config.Sysconfig["update"])
+		case "S": //修改灰色发布内容
+			grayflag, _ := l.GetBool("grayflag") //灰色发布标识 true 进行灰色发布 false 进行正式发布
+			powerarr["grayflag"] = grayflag
+			qutil.WriteSysConfig("../config.json", powerarr["grayflag"])
+			graystr := l.GetString("grayusers")
+			var ok = false
+			if graystr != "" && len(strings.Split(graystr, ",")) > 0 {
+				var i = 0
+				for k, v := range strings.Split(graystr, ",") {
+					ok = redis.Put("session", "grayusers_"+v, strconv.Itoa(k), -1)
+					if ok {
+						i = i + 1
+					} else {
+						log.Println("lostuser:", v)
+					}
+				}
+				if i == len(strings.Split(graystr, ",")) {
+					ok = true
+				}
+			}
+			mes := map[string]interface{}{
+				"添加结果:": ok,
+				"修改权限:": powerarr,
+			}
+			l.ServeJson(mes)
+		}
+	} else {
+		l.ServeJson("无权限更新!")
+	}
 	return nil
 }

+ 6 - 0
src/jfw/modules/app/src/jfw/front/search.go

@@ -42,17 +42,23 @@ func (p *Search) Getstatus() error {
 	var entstatus bool
 	var tablepro bool
 	var dataexportstatus bool
+	var smartstatus bool
+	var followent bool
 	if p.GetSession("openid") != nil {
 		supstatus = jylabutil.IsAuthorized(p.GetSession("openid").(string), "i_supersearch")
 		entstatus = jylabutil.IsAuthorized(p.GetSession("openid").(string), "i_entsesearch")
 		tablepro = jylabutil.IsAuthorized(p.GetSession("openid").(string), "i_tablepro")
 		dataexportstatus = jylabutil.IsAuthorized(p.GetSession("openid").(string), "i_dataexport")
+		smartstatus = jylabutil.IsAuthorized(p.GetSession("openid").(string), "i_smartset")
+		followent = jylabutil.IsAuthorized(p.GetSession("openid").(string), "i_followent")
 	}
 	p.ServeJson(map[string]interface{}{
 		"supstatus":        supstatus,
 		"entstatus":        entstatus,
 		"tablepro":         tablepro,
 		"dataexportstatus": dataexportstatus,
+		"smartstatus":      smartstatus,
+		"followent":        followent,
 	})
 	return nil
 }

+ 14 - 17
src/jfw/modules/app/src/web/staticres/jyapp/js/common.js

@@ -247,35 +247,32 @@ function loginSuccess(result){
 			if(typeof(result.openid) != "undefined"){
 				sessionStorage.openid = result.openid;
 			}
-			//setTimeout(function(){
-				JyObj.loginSuccess("");
-			//},100)
+			JyObj.loginSuccess("");
 			window.history.back();
 		}else{
-			//setTimeout(function(){
-				JyObj.loginSuccess("S");//提示app定位搜索菜单
-			//},100)
-			window.location.href = "/jyapp/jylab/mainSearch";
+			JyObj.loginSuccess("S");//提示app定位搜索菜单
+			//window.location.href = "/jyapp/jylab/mainSearch";
+			location.replace("/jyapp/jylab/mainSearch");
 		}
 		return
 	}
 	//
 	var callBackUrl = getUrlParam("url",decodeURIComponent);
 	if(callBackUrl != null){
-		//setTimeout(function(){
-			JyObj.loginSuccess("");
-		//},100)
-		window.location.href = callBackUrl;
+		JyObj.loginSuccess("");
+		//window.location.href = callBackUrl;
+		location.replace(callBackUrl);
 		return
 	}
 	//
 	if(sessionStorage){
 		sessionStorage.mainSearchReload = "1";
 	}
-	//setTimeout(function(){
+	setTimeout(function(){
 		JyObj.loginSuccess("S");
-	//},100)
-	window.location.href = "/jyapp/jylab/mainSearch";
+	},100)
+	//window.location.href = "/jyapp/jylab/mainSearch";
+	//location.replace("/jyapp/jylab/mainSearch");
 }
 //
 $(function(){
@@ -301,13 +298,13 @@ $(function(){
 		$target.trigger("tap");
     });
 	$(".app-layout-header .app-back").unbind("tap").on("tap",function(){
-		if (!mySysIsIos()){
-			JyObj.backUrl("");
-		}
 		try{
 			afterClickBack();
 		}catch(e){}
 		//可以自定义返回url,不过是跳转的方式
+		if (history.length==1&&document.URL.indexOf("/jyapp/jylab/mainSearch")>-1){//无历史浏览记录,且在搜索页面
+			window.location.href = "/jyapp/jylab/mainSearch";
+		}
 		if(typeof(backUrl) != "undefined" && backUrl != null){
 			if(typeof(backUrl) == "string"){
 				window.location.href = backUrl;

+ 10 - 3
src/jfw/modules/app/src/web/staticres/jyapp/js/wxEntsesearch.js

@@ -4,7 +4,7 @@ var EntSearch = {
     noMoreCache: false,
 	dropload: null,
 	requesting: false,
-    noDataCache: false,//是否有列表数据
+    noDataCache: null,//是否有列表数据
     reqParam: {
         "searchname": "",
         "money_from": "",
@@ -327,7 +327,7 @@ var EntSearch = {
 	resetPage: function(flag){
 		this.requesting = false;
 		this.noMoreCache = false;
-		this.noDataCache = false;
+		this.noDataCache = null;
 		this.reqParam = {
             "searchname": "",
             "money_from": "",
@@ -390,9 +390,16 @@ var EntSearch = {
 		if(!sessionStorage){
 			return;
 		}
+		if(sessionStorage.entSearch_noDataCache=="null"){
+			EntSearch.noDataCache = null;
+        	$("#entsearchPage #set_search").addClass("hidden");
+        	$("#entsearchPage #wrapper").addClass("hidden");
+        	$("#entsearchPage .tip_m").addClass("hidden");
+			return
+		}
 		$("#entsearchPage #wrapper tbody tr").remove();
 		if(sessionStorage.entSearch_noDataCache=="true"){
-            EntSearch.noDataCache = false;
+            EntSearch.noDataCache = true;
             EntSearch.hasNoData();
 		}else if(sessionStorage.entSearch_listCache) {
             EntSearch.noMoreCache = sessionStorage.entSearch_noMoreCache;

+ 68 - 59
src/jfw/modules/app/src/web/staticres/jyapp/js/wxSupersearch.js

@@ -233,7 +233,9 @@ var SuperSearch = {
 		////
 		SuperSearch.njTipEasyPopup = new EasyPopup("nijianTip");
 		$("#supersearchPage .q-mark").on("tap",function(){
-			SuperSearch.njTipEasyPopup.show();
+			setTimeout(function(){
+				SuperSearch.njTipEasyPopup.show();
+			},500);
 		});
 		//金额点击事件
 		$("#supersearchPage .money-dialog .btn").on("tap",function(){
@@ -678,6 +680,7 @@ var SuperSearch = {
 		sessionStorage.removeItem("superSearch_limitFlag");
 		sessionStorage.removeItem("superSearch_maxprice");
 		sessionStorage.removeItem("superSearch_minprice");
+		sessionStorage.removeItem("superSearch_showNull");
 	},
 	//js 方法
 	resetSx: function(){         //清除筛选
@@ -966,7 +969,7 @@ var SuperSearch = {
 		var ListHtml='';
 		var TableHtml='';
 		for(var i=0;i<list.length;i++){
-			if(pageNum==1&&i==5&&!SuperSearch.advertIsClose&&$("#advertscript").length>0){
+			if(pageNum==1&&i==5&&!SuperSearch.advertIsClose){
 				ListHtml+='<div class="adv-wxsearch-center" id="E1"></div>'
 			}
 			var index = (pageNum-1)*pageSize+i+1;
@@ -1168,7 +1171,7 @@ var SuperSearch = {
 			}
 		}
 	
-		if(pageNum==1&&list.length<6&&!SuperSearch.advertIsClose&&$("#advertscript").length>0){
+		if(pageNum==1&&list.length<6&&!SuperSearch.advertIsClose){
 			ListHtml+='<div class="adv-wxsearch-center" id="E1">E1</div>'
 		}
 		html["ListHtml"]=ListHtml;
@@ -1501,74 +1504,80 @@ var SuperSearch = {
 			}
 			sessionStorage.superSearch_allSearchModel_isshow=$("#supersearchPage #allSearchModel").is(":visible");
 			sessionStorage.superSearch_limitFlag=SuperSearch.limitFlag;
+			sessionStorage.superSearch_showNull=SuperSearch.showNull;				
 	    }
 	},
 	setUpLastPage: function() {
 		if(!sessionStorage){
 			return;
 		}
-	    $("#supersearchPage .clearInpt").addClass("hidden");
-	    if(sessionStorage.superSearch_limitFlag=="true"){
-			SuperSearch.limitFlag = true;
+		if(sessionStorage.superSearch_showNull == "null"){
+			SuperSearch.showNull = null;
+			$("#supersearchPage .selLable").addClass("hidden");
 		}else{
-			SuperSearch.limitFlag = false;
-		}
-		//页面数据
-	    if(sessionStorage.superSearch_listContent==""){
-			SuperSearch.hasNoData();
-			$("#supersearchPage #hasNoData_tiptext>font").hide();
-			if(sessionStorage.superSearch_hasNoData_tiptext=="-1"){
-				$("#supersearchPage #hasNoData_tiptext>font:eq(1)").show();
-			}else if(sessionStorage.superSearch_hasNoData_tiptext=="-2"){
-				$("#supersearchPage #hasNoData_tiptext>font:eq(2)").show();
+		    $("#supersearchPage .clearInpt").addClass("hidden");
+		    if(sessionStorage.superSearch_limitFlag=="true"){
+				SuperSearch.limitFlag = true;
+			}else{
+				SuperSearch.limitFlag = false;
+			}
+			//页面数据
+		    if(sessionStorage.superSearch_listContent==""){
+				SuperSearch.hasNoData();
+				$("#supersearchPage #hasNoData_tiptext>font").hide();
+				if(sessionStorage.superSearch_hasNoData_tiptext=="-1"){
+					$("#supersearchPage #hasNoData_tiptext>font:eq(1)").show();
+				}else if(sessionStorage.superSearch_hasNoData_tiptext=="-2"){
+					$("#supersearchPage #hasNoData_tiptext>font:eq(2)").show();
+				}else{
+					$("#supersearchPage #hasNoData_tiptext>font:eq(0)").show();
+				}
+				if(sessionStorage.superSearch_allSearchModel_isshow=="true"){
+					$("#supersearchPage #allSearchModel").show();
+				}else{
+					$("#supersearchPage #allSearchModel").hide();
+				}
+		    }else{
+				SuperSearch.noMoreCache = sessionStorage.superSearch_noMoreCache;
+				SuperSearch.showNull = false;
+				var ListContent=$(sessionStorage.superSearch_listContent);
+				ListContent.on("tap", function(event){
+				    var h = $(this).find("a.bt").attr("s");
+				    var sid = $(this).find("a.bt").attr("sid");
+				    var sds = SuperSearch.s_words.replace(/\+/g,"+");
+					var industry = $(this).find(".industry").text();
+				    SuperSearch.myredirect(h,sid,sds,industry);
+				});
+				$("#supersearchPage #list").html(ListContent);
+				SuperSearch.initDropload(SuperSearch.noMoreCache!="true",sessionStorage.superSearch_pageNum);
+				var TableContent=$(sessionStorage.superSearch_tableContent);
+				TableContent.on("tap",function(event){
+				    var h =  $(this).attr("s");
+				    var sid = $(this).attr("sid");
+				    var sds = SuperSearch.s_words.replace(/\+/g,"+");
+					var industry = $(this).attr("i");
+				    SuperSearch.myredirect(h,sid,sds,industry);
+				});
+				$("#supersearchPage #table .data .content").html(TableContent);
+		    }
+			SuperSearch.appendInterceptWord(sessionStorage.superSearch_interceptWord);
+			if(sessionStorage.superSearch_advertIsClose == "false"){
+				SuperSearch.advertIsClose = false;
 			}else{
-				$("#supersearchPage #hasNoData_tiptext>font:eq(0)").show();
+				SuperSearch.advertIsClose = true;
 			}
-			if(sessionStorage.superSearch_allSearchModel_isshow=="true"){
-				$("#supersearchPage #allSearchModel").show();
+			if(sessionStorage.superSearch_dyDiv == "false"){
+				SuperSearch.dyDiv = false;
 			}else{
-				$("#supersearchPage #allSearchModel").hide();
+				SuperSearch.dyDiv = true;
 			}
-	    }else{
-			SuperSearch.noMoreCache = sessionStorage.superSearch_noMoreCache;
-			SuperSearch.showNull = false;
-			var ListContent=$(sessionStorage.superSearch_listContent);
-			ListContent.on("tap", function(event){
-			    var h = $(this).find("a.bt").attr("s");
-			    var sid = $(this).find("a.bt").attr("sid");
-			    var sds = SuperSearch.s_words.replace(/\+/g,"+");
-				var industry = $(this).find(".industry").text();
-			    SuperSearch.myredirect(h,sid,sds,industry);
-			});
-			$("#supersearchPage #list").html(ListContent);
-			SuperSearch.initDropload(SuperSearch.noMoreCache!="true",sessionStorage.superSearch_pageNum);
-			var TableContent=$(sessionStorage.superSearch_tableContent);
-			TableContent.on("tap",function(event){
-			    var h =  $(this).attr("s");
-			    var sid = $(this).attr("sid");
-			    var sds = SuperSearch.s_words.replace(/\+/g,"+");
-				var industry = $(this).attr("i");
-			    SuperSearch.myredirect(h,sid,sds,industry);
-			});
-			$("#supersearchPage #table .data .content").html(TableContent);
-	    }
-		SuperSearch.appendInterceptWord(sessionStorage.superSearch_interceptWord);
-		if(sessionStorage.superSearch_advertIsClose == "false"){
-			SuperSearch.advertIsClose = false;
-		}else{
-			SuperSearch.advertIsClose = true;
-		}
-		if(sessionStorage.superSearch_dyDiv == "false"){
-			SuperSearch.dyDiv = false;
-		}else{
-			SuperSearch.dyDiv = true;
+			var superSearch_yScroll = sessionStorage.superSearch_yScroll;
+			var superSearch_xScroll = sessionStorage.superSearch_xScroll;
+			setTimeout(function(){
+			    $("body").scrollTop(superSearch_yScroll);
+			    $("#supersearchPage #table .data").scrollLeft(superSearch_xScroll);
+			},50);
 		}
-		var superSearch_yScroll = sessionStorage.superSearch_yScroll;
-		var superSearch_xScroll = sessionStorage.superSearch_xScroll;
-		setTimeout(function(){
-		    $("body").scrollTop(superSearch_yScroll);
-		    $("#supersearchPage #table .data").scrollLeft(superSearch_xScroll);
-		},50);
 	    //筛选时间
 	    var ptime= sessionStorage.superSearch_publishtime;
 	    if(typeof(ptime) != "undefined" && ptime != ""){

+ 2 - 4
src/jfw/modules/app/src/web/staticres/jyapp/wxtsguide/main.js

@@ -63,12 +63,10 @@ var Guide = {
 			localStorage.removeItem("tsGuide_step");
 		}
 		$.post("/jyapp/tenderSubscribe/guide",{reqType: "over"},function(){
-			window.location.href = "/jyapp/wxkeyset/keyset/index";
 			if (!mySysIsIos()){
-				setTimeout(function(){
-					JyObj.finishGuide();
-				},100);
+				JyObj.finishGuide();
 			}
+			window.location.href = "/jyapp/wxkeyset/keyset/index";
 		});
 	},
 	//下一步

+ 2 - 2
src/jfw/modules/app/src/web/templates/me/login.html

@@ -92,9 +92,9 @@
 					//setTimeout(function(){
 						JyObj.backUrl("H");
 					//},100);
-					window.location.href = "/jyapp/jylab/mainSearch";
+					//window.location.href = "/jyapp/jylab/mainSearch";
 				}else{
-					JyObj.backUrl("");
+					//JyObj.backUrl("");
 					window.history.back();
 				}
 			});

+ 10 - 1
src/jfw/modules/app/src/web/templates/me/set.html

@@ -77,7 +77,7 @@
 			</div>
 		    <!--退出登录end-->
 			<!--版本号start-->
-			<div class="version" style="color: #888;font-size: 0.26rem;position: absolute;bottom: 0.2rem;text-align: center;width: 100%;">{{Msg "seo" "appVersion"}}</div>
+			<div class="version" style="color: #888;font-size: 0.26rem;position: absolute;bottom: 0.2rem;text-align: center;width: 100%;"></div>
 		    <!--版本号end-->
 			
 			<!--分享好友弹窗-->
@@ -118,6 +118,15 @@
 		}
 	 </script>
 	<script type="text/javascript">
+		$(function(){
+			var version = "";
+			setTimeout(function(){
+				version = JyObj.getVersion();
+				if(version!=""){
+					$(".version").text("当前版本:"+version);
+				}
+			},100)
+		})
 		$("#updatepwd").click(function(){
 			setLiActive(this);
 			window.location.href = "/jyapp/updatepwd";

+ 20 - 2
src/jfw/modules/app/src/web/templates/weixin/jylab/lab-cjss.html

@@ -33,9 +33,9 @@
 				<!--开关-->
 				<div class="weui-cells weui-cells_form title">
 					<div class="weui-cell weui-cell_switch titleInner">
-						<div class="weui-cell__bd">超级搜索 <a href="javascript:jumpTo();" id="searchuse" class="{{ if .T.switchstatus}}{{if ne .T.switchstatus true}}hidden{{end}}{{else}}hidden{{end}}">使用</a></div>
+						<div class="weui-cell__bd">超级搜索 <a href="javascript:jumpTo();" id="searchuse" class="hidden">使用</a></div>
 						<div class="weui-cell__ft">
-							<a id="check" class="weui-switch titleInput{{ if .T.switchstatus}}{{if eq .T.switchstatus true}} checked{{end}}{{end}}" style="display: block;"></a>
+							<a id="check" class="weui-switch titleInput" style="display: hidden;"></a>
 						</div>
 					</div>
 				</div>
@@ -139,6 +139,23 @@
 			}else{
 				$("#searchuse").addClass("hidden");
 			}
+		//
+			$.ajax({
+		        type:'post',
+		        url:'/jyapp/jylab/supsearch/getstatus',
+		        async:false,
+		        dataType:'json', 
+		        success:function(r){
+						if(r&&r.supstatus){
+							$("#check").addClass("checked");
+							$("#searchuse").removeClass("hidden");
+						}else{
+							$("#check").removeClass("checked");
+							$("#searchuse").addClass("hidden");
+						}
+						$("#check").css({"display":"block"});
+					}
+				})
 		})
 
         //行为采集 1-打开开关 2-点赞
@@ -175,6 +192,7 @@
 					sessionStorage.searchpageName = value;
 					window.history.back();
 				}else{
+					sessionStorage.searchpageName = "lab_search_back";
 					window.location.href = "/jyapp/jylab/mainSearch?v=s";
 				}
 			}else{

+ 1 - 1
src/jfw/modules/app/src/web/templates/weixin/jylab/lab-gzqy.html

@@ -162,7 +162,7 @@
 		$(function(){
 			$.ajax({
 		        type:'post',
-		        url:'/jylab/supsearch/getstatus',
+		        url:'/jyapp/jylab/supsearch/getstatus',
 		        async:false,
 		        dataType:'json', 
 		        success:function(r){

+ 1 - 1
src/jfw/modules/app/src/web/templates/weixin/jylab/lab-index.html

@@ -69,7 +69,7 @@ body{
 <!--	{{include "/common/footer.html"}}-->
 </body>
 <script>
-    var s_openid = {{.T.s_m_openid}};
+    var s_openid = {{session "s_m_openid"}};
 	//接收到新的推送
 	function afterReceiveNewMsg(){
 		showRedSpotOnMy();

+ 20 - 1
src/jfw/modules/app/src/web/templates/weixin/jylab/lab-sjdc.html

@@ -35,7 +35,7 @@
 					<div class="weui-cell weui-cell_switch titleInner">
 						<div class="weui-cell__bd">订阅数据导出</div>
 						<div class="weui-cell__ft">
-							<a id="check" class="weui-switch titleInput{{ if .T.switchstatus}}{{if eq .T.switchstatus true}} checked{{end}}{{end}}" style="display: block;"></a>
+							<a id="check" class="weui-switch titleInput" style="display: hidden;"></a>
 						</div>
 					</div>
 				</div>
@@ -156,6 +156,25 @@
 				});
             }
         }
+		//
+		$(function(){
+			$.ajax({
+		        type:'post',
+		        url:'/jyapp/jylab/supsearch/getstatus',
+		        async:false,
+		        dataType:'json', 
+		        success:function(r){
+						if(r&&r.dataexportstatus){
+							$("#check").addClass("checked");
+							$("#searchuse").removeClass("hidden");
+						}else{
+							$("#check").removeClass("checked");
+							$("#searchuse").addClass("hidden");
+						}
+						$("#check").css({"display":"block"});
+					}
+				})
+		})
 	</script>
 
 </html>

+ 22 - 2
src/jfw/modules/app/src/web/templates/weixin/jylab/lab-zbqy.html

@@ -33,9 +33,9 @@
 				<!--开关-->
 				<div class="weui-cells weui-cells_form title">
 					<div class="weui-cell weui-cell_switch titleInner">
-						<div class="weui-cell__bd">中标企业搜索<a href="javascript:jumpTo();" id="searchuse" class="{{ if .T.switchstatus}}{{if ne .T.switchstatus true}}hidden{{end}}{{else}}hidden{{end}}">使用</a></div>
+						<div class="weui-cell__bd">中标企业搜索<a href="javascript:jumpTo();" id="searchuse" class="hidden">使用</a></div>
 						<div class="weui-cell__ft">
-							<a id="check" class="weui-switch titleInput{{ if .T.switchstatus}}{{if eq .T.switchstatus true}} checked{{end}}{{end}}" style="display: block;"></a>
+							<a id="check" class="weui-switch titleInput" style="display: hidden;"></a>
 						</div>
 					</div>
 				</div>
@@ -147,12 +147,32 @@
 					sessionStorage.searchpageName = value;
 					window.history.back();
 				}else{
+					sessionStorage.searchpageName = "lab_ent_back";
 					window.location.href = "/jyapp/jylab/mainSearch?v=e";
 				}
 			}else{
 				window.location.href = "/jyapp/jylab/mainSearch?v=e";
 			}
 		}
+		//
+		$(function(){
+			$.ajax({
+		        type:'post',
+		        url:'/jyapp/jylab/supsearch/getstatus',
+		        async:false,
+		        dataType:'json', 
+		        success:function(r){
+						if(r&&r.entstatus){
+							$("#check").addClass("checked");
+							$("#searchuse").removeClass("hidden");
+						}else{
+							$("#check").removeClass("checked");
+							$("#searchuse").addClass("hidden");
+						}
+						$("#check").css({"display":"block"});
+					}
+				})
+		})
 	</script>
 
 </html>

+ 20 - 2
src/jfw/modules/app/src/web/templates/weixin/jylab/lab-zndy.html

@@ -35,7 +35,7 @@
 					<div class="weui-cell weui-cell_switch titleInner">
 						<div class="weui-cell__bd">智能订阅模式</div>
 						<div class="weui-cell__ft">
-							<a id="check" class="weui-switch titleInput{{ if .T.switchstatus}}{{if eq .T.switchstatus true}} checked{{end}}{{end}}" style="display: block;"></a>
+							<a id="check" class="weui-switch titleInput" style="display: hidden;"></a>
 						</div>
 					</div>
 				</div>
@@ -166,7 +166,25 @@
 				});
             }
         }
-		
+		//
+		$(function(){
+			$.ajax({
+		        type:'post',
+		        url:'/jyapp/jylab/supsearch/getstatus',
+		        async:false,
+		        dataType:'json', 
+		        success:function(r){
+						if(r&&r.smartstatus){
+							$("#check").addClass("checked");
+							$("#searchuse").removeClass("hidden");
+						}else{
+							$("#check").removeClass("checked");
+							$("#searchuse").addClass("hidden");
+						}
+						$("#check").css({"display":"block"});
+					}
+				})
+		})
 	</script>
 
 </html>

+ 34 - 8
src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html

@@ -19,7 +19,7 @@
 <script src="/jyapp/mobiscroll/mobiscroll.min.js"></script>
 <script src="/jyapp/js/dropload.js?v={{Msg "seo" "version"}}"></script>
 <script type="text/javascript" src="/jyapp/js/wxEntsesearch.js?v={{Msg "seo" "version"}}"></script>
-<script type="text/javascript" src="/jyapp/js/wxSupersearch.js?v={{Msg "seo" "version"}}1314"></script>
+<script type="text/javascript" src="/jyapp/js/wxSupersearch.js?v={{Msg "seo" "version"}}"></script>
 <title>搜索</title>
 <script type="text/javascript">
 	var s_openid = {{session "s_m_openid"}};
@@ -538,7 +538,7 @@
 	var random=Math.floor(Math.random()*ADList.length)
 	var AD=ADList[random]
 	var ADHtml="<span class=\"closeadv-bg\"></span>"
-	+"<img src=\"/images/wxqc.png\" class=\"closeadv\" onclick=\"SuperSearch.closeadv(this)\">";
+	+"<img src=\"/jyapp/images/wxqc.png\" class=\"closeadv\" onclick=\"SuperSearch.closeadv(this)\">";
 	if(AD.s_pic){
 		if(AD.s_link){
 			if (AD.s_link.indexOf("w2b")>-1||AD.s_link.indexOf("jianyu360")>-1){
@@ -629,8 +629,21 @@
             window.event.returnValue = false;
 			//超级搜索
 			if(SuperSearch.isMyPage){
+				var max=$("#supersearchPage .maxMrice").val(),min=$("#supersearchPage .minMrice").val();
+		        if(Number(max)<Number(min)&&max!=""&&min!=""){
+		            $("#supersearchPage .maxMrice").val(min);
+		            $("#supersearchPage .minMrice").val(max);
+				}
 				SuperSearch.formSubmit("N");
 			}else if(EntSearch.isMyPage){//企业搜索
+				var money_from = $.trim($("#entsearchPage #money_from").val());
+	            var money_to = $.trim($("#entsearchPage #money_to").val());
+	            var from = parseFloat(money_from);
+	            var to = parseFloat(money_to);
+	            if(from>to){
+	                $("#entsearchPage #money_from").val(money_to);
+	                $("#entsearchPage #money_to").val(money_from);
+				}
 	            EntSearch.formSubmit();
 			}
         }
@@ -672,13 +685,20 @@
 	    $(".rightHref").on("click",function(){
 			JyObj.openExternalLink('http://mp.weixin.qq.com/mp/homepage?__biz=MzIyNTM1NDUyNw==&hid=3&sn=badf2d7da08654c58b58169e773f58f0#wechat_redirect','使用帮助')
 	    });
-		var pageType = getUrlParam("v");
-		if(pageType == "s"){
-			SuperSearch.init(true,false,false);
-		}else if(pageType == "e"){
-			EntSearch.init(true,false,false);
-		}
+		//var pageType = getUrlParam("v");
+		//if(pageType == "s"){
+		//	SuperSearch.init(true,false,false);
+		//}else if(pageType == "e"){
+		//	EntSearch.init(true,false,false);
+		//}
 	});
+	function beforeOpenPushMessage(result){
+		if(SuperSearch.isMyPage){
+			SuperSearch.setSessionStorage();
+		}else if(EntSearch.isMyPage){
+			EntSearch.setSessionStorage();
+		}
+	}
 	function checkIsOpen(){
 		$(".content ul li a:eq(0)").unbind("tap");
 		$(".content ul li a:eq(1)").unbind("tap");
@@ -728,6 +748,12 @@
 			}else if(sessionStorage.searchpageName == "entSearch_back"){
 				EntSearch.init(true,false,true);
 				initFlag = 4;
+			}else if(sessionStorage.searchpageName == "lab_search_back"){
+				SuperSearch.init(true,false,false);
+				initFlag = 5;
+			}else if(sessionStorage.searchpageName == "lab_ent_back"){
+				EntSearch.init(true,false,false);
+				initFlag = 6;
 			}
 		}
 	}

+ 43 - 1
src/jfw/modules/app/src/web/templates/weixin/wxkeyset/index.html

@@ -131,6 +131,7 @@ $(function(){
 				return;
 			}
 			$(".header,.keyWordContent").removeClass("absolute");
+			keysswith(thisClass.val(),thisClass.parents(".keyWordGroup").index());
 			thisClass.parents(".keyWordGroup").nextAll(".keyWordGroup").show();
 			$(".brace").hide();
 			$(".complate").addClass("hide");
@@ -233,6 +234,48 @@ function removesurp(){
 		disflagtwo = false;
 	}
 }
+function keysswith(lastkey,lastnum){
+	var swithint = 0;
+	var swithflag = false;
+	if(lastkey!=""){
+		$(".keyWordGroup").each(function(i){
+			var keyval = $(this).find(".keyword").val();
+			swithint = i;
+			if(keyval==""&&!swithflag){
+				swithflag = true;
+				if(lastnum!=lastkey&&swithint<=lastnum){
+					$(this).find(".keyword").val(lastkey);
+					$(this).addClass("hasinput");
+					return swithflag;
+				}else{
+					return false;
+				}
+			}
+			if(swithflag&&(swithint==lastnum)){
+				$(this).find(".keyword").val("");
+				$(this).removeClass("hasinput");
+				return false;
+			}
+		})
+	}else{
+		$(".keyWordGroup").each(function(i){
+			if(i>lastnum){
+				var keyay = $(this).find(".keyword").val();
+				var keycn = $(this).attr("class");
+				$(this).prev(".keyWordGroup").find(".keyword").val(keyay);
+				if(keyay!=""){
+					$(this).prev(".keyWordGroup").attr("class",keycn);
+				}else{
+					$(this).prev(".keyWordGroup").attr("class","keyWordGroup");
+				}
+				if(i==9){
+					$(this).find(".keyword").val("");
+					$(this).attr("class","keyWordGroup");
+				}
+			}
+		})
+	}
+}
 //
 function surswitch(){
 	$("#surprise").fadeOut("normal");
@@ -603,7 +646,6 @@ function hideTip() {
     localStorage.hasTopMsg="false";
 }
 function afterKeyboardShow(){
-	alert("1111")
 	$(".app-layout-footer").hide();
 }
 function afterKeyboardHide(){

+ 24 - 24
src/jfw/modules/weixin/src/apiclient_cert.pem

@@ -1,26 +1,26 @@
 -----BEGIN CERTIFICATE-----
-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
+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
 -----END CERTIFICATE-----

+ 26 - 26
src/jfw/modules/weixin/src/apiclient_key.pem

@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC3hFkPP3R3BA0M
-RCBIXEMriYmRw5HUwvuGFp1zfzJao8oP2beQJGHwnh1017/A1ryfK/uxYsjpJfSc
-JjX3Ht/OGONBp3xa9ZeAvWTg8+h88IXR52mnvHgpV9xBj5mXOjT2wPto1UxzlFyf
-srhXKrPUJbShDF2aW4flT6R0tipP/8b7xvrAWXSGfPtBgl9KbuH4iLEkf7T/7u10
-NLDD/IhQe0oyoFW3tb9v0Ynw1WgAJJHFtINuVZnJMM3u5KGbTJ6gkLa/YLnP+z57
-iXOz3HvbzWZZiMC4G2fXkbyQZHssEB9Fo3gq2xKY9+3IrqJIFjl44NKkaZKBSRYG
-VI6tq9udAgMBAAECggEBAIYF+9ys5Ot+Y+EPZ9wwtUV4fqWbhEcz1ulIXtjYjfew
-IoOM5wg36ecGMlEAt6Onr703K+uST1QmSgw3w7WkMKKdfmqWXLU5Itn8d03qE2Ib
-bj+rl3fOppra9ZpTu0G8Wq3SpkkbbWgDc9mVdhcCsq4+kzoCg+GU8xw/G8W4vBIL
-Z5pP/XKqtQi0Lvp5Qqjk/3L8y4TdInlKCT6VLppg9gTSXC3v3FBLxze+6bL8P9q1
-AX0JLlQpTWEBiv9XVMEVmI/AFRfNe3W0hjw3Z8Zb5EMIOXm8g5g1WRLTDkrqARVE
-4gZ/CYUGxtIRHYzoKKazJIQyNut4+QaPR9jbbWo0RKkCgYEA3tUSH0GTXcbkxUHh
-IhZT5rwvgtMA3BtfqKLAaCgBEZSbQpKQh4FDO+w+IBc1UVk1SCq0BuYweGZPvDEL
-CfQiNFNptRqzeyvAiYLL2mpaHcMZU7/PQBkAljDStwQkwJVvK6X/QcpN7Kr+yuPL
-RdMOe3umdGEGYULf/Z+9BmjRcEMCgYEA0tUvAHkBzbAsTsftVZ/64yUtK0V6kmJD
-J2AlFZMCbPqfyVJl81T3cUcEXB16t8hAqWlPDT1GmCs0ceraLiRgi8xqiOQx6Ekb
-2F2OF3FvDi6LgVye+fVf2m7Z+SOVcoNXaSCdVXlmXu5/aZJkI5tA0+lm2lKp+XsK
-uHGzIVRjNp8CgYAIN9F4R6HYtoofYEOeTzZ+7vfNmlyQwY2wmXgBH2CStmlXdjJQ
-XQsOvbK42kJEIscdRz3mdzzYY+WS6jgfANr2FRFz9W0jIMT0DVfZUUzLhjN77DoH
-giSMZXaP+14joB8+e9vDIGPpU5EcCHSpuZPyJ+hGqIFkuuOp5edBwkHfIwKBgApn
-XrRlREOEKAuTLhEFnfnLgdkaypuiobG1ut6/rGT4UR48JK/HR5adbIenJMEg7p/t
-hGsg1PT5XNMqRa31OZZsde1fZV8TDH62zyY1AMfwYA34JhgrlZlP0w3KRbuq44ta
-gqkPHpAcsMji4nInXSGX6O1pGt4mxjan1bEVWvf9AoGAQ0Wyy007a4LLHDq1Q6Yy
-SkHTCRifGvp2ffS/gA0Q/1ARb+GSyRXKfHP6gj4gSJwCWuueWiKFF1QghEC8eBbd
-nAJGZ2GZpfwGudM3D/WNmKVcM+RWOIhKv0qUvX8ZTcxJU2+GWoGMQ3e6KpRKPWU9
-x4hIo8fJIfT17le0YbX7VdE=
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/Qa1SjlLobwwJ
+1qqbuczu7q07ZJkj9T746TudYkxzaEwhgDatweEt6Ba43ODEemlRIeX+9MaXSs/6
+NRBhjeOFjGYYE5bL+cjVs906leRkBvRsfCA2/wXQ6IBqxa8+xcaga8gWK27IMumU
+zPd7nSeRkYRZyT+lA8tZwjvHVkskG7z1Pt8JU+EfLL6+S7CNIFTiWrxumvUgpUEi
+TQPW+J/GRJqAPeuJ8svid0HuO+kEkRfb2mPMeyZIcPgd7fZLJN1Hg6tpPdyk85WT
+uVAcH0U5Nh1vNdreUpfgNk/vlISv3kH2w7trqYJjm04ruj0tjId1N1ZyPiEjGE87
+o+KUYVDHAgMBAAECggEAYD1aTBqWGaQXeLPuseHy/6BWx3Y9oVx9TZ9/ghi+w6wN
+8yWjXhgbiZAqLufmqre2Wz8ljv/5FpRsx0kAbzaI8ODPVvo0fXu51d9mSV63yKW/
+RP/I7iOx94enZxMGth2rb3oM+yrr2g3UgC4LssZH7PY+lTexsQWRxB77GbmQoh/7
+nGIsEJIqXx34M+GZTECyDFwJiEgOl/wrgoaC0ioR2jjLBAstR0na1o1/mqO1CsV+
+kFR19yhwpULLRMEEtSGtHEGZQiVU5IAAdWKbd/haqkUmT6os+UZDj9fl1fhoeDni
+pFU9t4NXkydD7xLg5YR4YVlxbIsJdzPoVoUn8KMakQKBgQDw61AfDZqv7ILv2jES
+SxmaGbWHebqoFsMpcHOHHLh+pQ/vbEbMuqHZxlZr2f80T10uRccJNwFyjb2+ajJa
+kYoA8Qk+W4E++zVQWaDRzTeFN3Pp5ZsLtPp3yIiyHkKg1PwCGpCw8IykJVplIDcs
+hKxeSU8Po5H5H9zCxQ0goYhZNQKBgQDLOod0jfzEcoRdriONPjz1NqyFLKGmE7ht
+EGZS+Wa9v6tlz+5ajGCAVflCscOj97W58JjLEbEZPML20lzIYA0EkJ2gRjbHKf4S
+olNcBf+3apqPaT7soheMXdOcIFu61OtTO/ojvCwDOJiDJgH4g7JsafLX7J4bDAZg
+naumv+J9iwKBgQDjfJ7UI6lr8r0UtIffiTBslVgWy3fYHl48M+WysAj59OyeHDSi
+PpxzoVebUWYsQ8Bt4A94AQuJ2pNPSMGxSXnxN6iNzCO3j8cgzvEPCmMhlGIMevUz
+Ubmr/5wr7GznpxUq+2Ci4xE6MdcwZAIVNFX6VeikkMRWY6K1+xFRPZYc/QKBgQDE
+XCbo7Q/fV66hPVJIdGw9mbgTbM47Qy6c4o2bejJVAE7BLqjkgGH1Xhxa3ptjYEIM
+CHX5L3zoH5dZGGRhjrzFPl2usGjZAq/knUbh0UIEnFH+YvhTd0I9c6K0ZWd8G6HM
+aFUGFhiIfDSP8zdQQR8yNSRYkN0q0PGQhIeHtDtIhQKBgQCnm6/z8iWPmws/zOmc
+L+sybWyfM38+kgpCWIlpVscwj5Um+xJr88kTyyEqehgFnk1uVc9hFhSukN8O14js
+y5UIqWXYagMFQ2tAb39S0M2X+d3LNFTl6juPAPuKRe0tOl6fR//JtlT+amXOS8m5
+gGbAHPQ8plDeRM9H0W7s9tfBZg==
 -----END PRIVATE KEY-----

+ 34 - 43
src/jfw/modules/weixin/src/jrpc/jrpc.go

@@ -248,8 +248,8 @@ func (w *WeiXinRpc) GetPrepayId(param map[string]string, res *[]byte) error {
 	mchid := param["mchid"]
 	key := param["key"]
 	notifyUrl := param["notifyUrl"]
-	//生成预订单
-	api_url := "https://api.mch.weixin.qq.com/pay/unifiedorder?token="
+	tradeType := param["tradeType"]
+	appid := param["appid"]
 	//匿名结构体
 	data := struct {
 		XMLName        xml.Name `xml:"xml"`
@@ -267,59 +267,50 @@ func (w *WeiXinRpc) GetPrepayId(param map[string]string, res *[]byte) error {
 		TradeType      string   `xml:"trade_type"`       //支付方式
 		Sign           string   `xml:"sign"`             //签名
 	}{
-		Appid:          config.Sysconfig["appid"].(string),
+		Appid:          appid,
 		Attach:         attachmsg, //"企明星打赏",
 		Body:           bodymsg,   //  "企明星-招标信息打赏",
 		Detail:         detailmsg, //"招标推送信息[" + "xxxx文章标题" + "] 打赏" + "3元",
 		MchId:          mchid,
 		NonceStr:       util.Uuid(32),
 		NotifyUrl:      notifyUrl,
-		Openid:         useropenid, //"obEpLuKW516dqWdc-WT-Ra_5qigo",
-		OutTradeNo:     tradeno,    //"qmx201611290018",
-		SpbillCreateIp: userip,     //"123.56.236.148",
-		TotalFee:       totalfee,   //"1",
-		TradeType:      "JSAPI",
-	}
-	//计算签名
-	tmp := fmt.Sprintf("appid=%s&attach=%s&body=%s&detail=%s&mch_id=%s&nonce_str=%s&notify_url=%s&openid=%s&out_trade_no=%s&spbill_create_ip=%s&total_fee=%s&trade_type=%s&key=%s", data.Appid, data.Attach, data.Body, data.Detail, data.MchId, data.NonceStr, data.NotifyUrl, data.Openid, data.OutTradeNo, data.SpbillCreateIp, data.TotalFee, data.TradeType, key)
-	data.Sign = util.WxSign(tmp) //签名
-	bs, err := xml.Marshal(data)
-	if err != nil {
-		log.Println(err.Error())
-		return err
-	}
-	bs, err = w.Wwx.PostXmlCustom(api_url, data)
-	if err != nil {
-		log.Println(err.Error())
-		return err
+		Openid:         util.If(tradeType == "NATIVE", "", useropenid).(string), //"obEpLuKW516dqWdc-WT-Ra_5qigo",
+		OutTradeNo:     tradeno,                                                 //"qmx201611290018",
+		SpbillCreateIp: userip,                                                  //"123.56.236.148",
+		TotalFee:       totalfee,                                                //"1",
+		TradeType:      tradeType,
 	}
-	log.Println(string(bs))
-	ret := struct {
-		ReturnCode string `xml:"return_code"`
-		ReturnMsg  string `xml:"return_msg"`
-		ResultCode string `xml:"result_code"`
-		PrepayId   string `xml:"prepay_id"`
-		ErrCode    string `xml:"err_code"`
-	}{}
-	err = xml.Unmarshal(bs, &ret)
+	data.Sign = util.CreateWxSign(fmt.Sprintf("&key=%s", key), data)
+	//生成预订单
+	bs, err := w.Wwx.PostXmlCustom("https://api.mch.weixin.qq.com/pay/unifiedorder?token=", data)
 	if err != nil {
-		log.Println(err.Error())
+		log.Println(useropenid, err.Error(), string(bs))
 		return err
 	}
-	r := make(map[string]interface{})
-	r["status"] = -1
-	if ret.ReturnCode == "SUCCESS" {
-		//成功
-		if ret.ResultCode == "SUCCESS" {
-			r["status"] = 1
-			r["prepayid"] = ret.PrepayId
-		} else {
-			//余额不足
-			if ret.ErrCode == "NOTENOUGH" {
-				r["status"] = -2
+	log.Println(useropenid, string(bs))
+	ret := util.XmlToMap(string(bs))
+	respSign := util.CreateWxSign(fmt.Sprintf("&key=%s", key), ret, "sign")
+	if respSign == ret["sign"] {
+		r := make(map[string]string)
+		r["status"] = "-1"
+		if ret["return_code"] == "SUCCESS" {
+			//成功
+			if ret["result_code"] == "SUCCESS" {
+				r["status"] = "1"
+				r["prepayid"] = ret["prepay_id"]
+				r["codeurl"] = ret["code_url"]
+			} else {
+				//余额不足
+				if ret["errcode"] == "NOTENOUGH" {
+					r["status"] = "-2"
+				}
+				r["errcode"] = ret["err_code"]
+				r["errcodedes"] = ret["err_code_des"]
 			}
 		}
+		*res, _ = json.Marshal(&r)
+	} else {
+		log.Println(useropenid, "签名错误!", respSign, ret["sign"])
 	}
-	*res, _ = json.Marshal(&r)
 	return nil
 }

+ 21 - 18
src/jfw/modules/weixin/src/rootca.pem

@@ -1,19 +1,22 @@
 -----BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----

+ 206 - 110
src/jfw/pay/weixin.go

@@ -1,7 +1,10 @@
 package pay
 
 import (
-	"encoding/xml"
+	"bytes"
+	"encoding/base64"
+	"encoding/hex"
+	"encoding/json"
 	"fmt"
 	"jfw/config"
 	"jfw/tools"
@@ -25,14 +28,13 @@ type WxPayAction struct {
 	payIndex      xweb.Mapper `xweb:"/weixin/pay/index"`      //微信支付页面
 	wxPay         xweb.Mapper `xweb:"/weixin/pay/pay"`        //微信支付
 	//pc端扫码支付
-	sacnPay_GetQrCode   xweb.Mapper `xweb:"/weixin/sacnPay/getQrCode"`   //生成支付二维码
+	sacnPay_WaitPay     xweb.Mapper `xweb:"/weixin/sacnPay/waitPay"`     //生成支付二维码
 	sacnPay_CreateOrder xweb.Mapper `xweb:"/weixin/sacnPay/createOrder"` //创建订单
 	//统一回调函数
 	payCallback xweb.Mapper `xweb:"/weixin/pay/callback"` //微信支付回调
 }
 
 type WeixinStruct struct {
-	payCallBackChan   chan bool
 	appid             string
 	mchid             string
 	key               string
@@ -44,13 +46,28 @@ type WeixinStruct struct {
 	sjdc_detailmsg    string
 }
 
+func (w *WeixinStruct) getTradeno(tp string) string {
+	return fmt.Sprintf("%s_%d%s%s", tp, time.Now().UnixNano(), util.GetRandom(5), util.GetLetterRandom(6))
+}
+
+func (w *WeixinStruct) getOrdercode(id string) string {
+	hexid := hex.EncodeToString([]byte(id))
+	p := len(hexid) - 6
+	str := ""
+	if p < 0 {
+		str = hexid[:] + util.GetRandom(-p)
+	} else {
+		str = hexid[len(hexid)-6:]
+	}
+	return str + util.GetRandom(6)
+}
+
 var weixinStruct *WeixinStruct
 
 func init() {
 	xweb.AddAction(&WxPayAction{})
 	payConfig := config.WeixinConfig["pay"].(map[string]interface{})
 	weixinStruct = &WeixinStruct{
-		payCallBackChan:   make(chan bool, 1),
 		appid:             util.ObjToString(config.WeixinConfig["appid"]),
 		mchid:             util.ObjToString(payConfig["mchid"]),
 		key:               util.ObjToString(payConfig["key"]),
@@ -126,9 +143,11 @@ func (p *WxPayAction) WxPay() error {
 		}
 		totalfee := util.IntAll(tf * 100)
 		title := p.GetString("title")
-		tradeno := "jy-" + fmt.Sprint(time.Now().Unix()) + util.Uuid(12)
+		tradeno := weixinStruct.getTradeno("a")
 		//获取预订单号
 		ret, err := tools.GetPrepayId(map[string]string{
+			"appid":      weixinStruct.appid,
+			"tradeType":  "JSAPI",
 			"attachmsg":  weixinStruct.dashang_attachmsg,
 			"bodymsg":    weixinStruct.dashang_bodymsg,
 			"detailmsg":  fmt.Sprintf(weixinStruct.dashang_detailmsg, title, fmt.Sprint(float64(totalfee)/100)),
@@ -146,10 +165,10 @@ func (p *WxPayAction) WxPay() error {
 			})
 			return nil
 		}
-		prepayId, _ := (*ret)["prepayid"].(string)
+		prepayId := (*ret)["prepayid"]
 		if prepayId == "" {
 			p.ServeJson(map[string]interface{}{
-				"status": (*ret)["status"],
+				"status": util.IntAll((*ret)["status"]),
 			})
 			return nil
 		}
@@ -200,69 +219,60 @@ func (p *WxPayAction) WxPay() error {
 	return nil
 }
 func (p *WxPayAction) PayCallback() {
-	weixinStruct.payCallBackChan <- true
-	defer func() {
-		<-weixinStruct.payCallBackChan
-	}()
 	by := p.Body()
 	fmt.Println("回调通知参数", string(by))
-	ret := struct {
-		Appid         string `xml:"appid"`
-		Attach        string `xml:"attach"`
-		BankType      string `xml:"bank_type"`
-		CashFee       int    `xml:"cash_fee"`
-		FeeType       string `xml:"fee_type"`
-		IsSubscribe   string `xml:"is_subscribe"`
-		MchId         string `xml:"mch_id"`
-		NonceStr      string `xml:"nonce_str"`
-		OpenId        string `xml:"openid"`
-		OutTradeNo    string `xml:"out_trade_no"`
-		ResultCode    string `xml:"result_code"`
-		ReturnCode    string `xml:"return_code"`
-		Sign          string `xml:"sign"`
-		TimeEnd       string `xml:"time_end"`
-		TotalFee      string `xml:"total_fee"`
-		TradeType     string `xml:"trade_type"`
-		TransactionId string `xml:"transaction_id"` //微信支付订单号
-	}{}
-	err := xml.Unmarshal(by, &ret)
-	if err == nil {
-		if ret.ReturnCode == "SUCCESS" && ret.Appid == weixinStruct.appid && ret.MchId == weixinStruct.mchid {
-			sign := util.WxSign("appid=%s&attach=%s&bank_type=%s&cash_fee=%d&fee_type=%s&is_subscribe=%s&mch_id=%s&nonce_str=%s&openid=%s&out_trade_no=%s&result_code=%s&return_code=%s&time_end=%s&total_fee=%s&trade_type=%s&transaction_id=%s&key=%s", ret.Appid, ret.Attach, ret.BankType, ret.CashFee, ret.FeeType, ret.IsSubscribe, ret.MchId, ret.NonceStr, ret.OpenId, ret.OutTradeNo, ret.ResultCode, ret.ReturnCode, ret.TimeEnd, ret.TotalFee, ret.TradeType, ret.TransactionId, weixinStruct.key)
-			if ret.Sign == sign {
-				//打赏
-				if strings.HasPrefix(ret.OutTradeNo, "jy_") {
-					query := map[string]interface{}{
-						"s_openid":   ret.OpenId,
-						"s_tradeno":  ret.OutTradeNo,
-						"i_totalfee": ret.CashFee,
-						"i_status":   0,
-					}
-					tools.MQFW.Update("reward", query, map[string]interface{}{
-						"$set": map[string]interface{}{
-							"i_status":        1,
-							"s_timeend":       ret.TimeEnd,
-							"l_updatetime":    time.Now().Unix(),
-							"s_transactionid": ret.TransactionId,
-						},
-					}, false, false)
-				} else if strings.HasPrefix(ret.OutTradeNo, "jysjdc_") { //订阅数据导出
-					//操作mysql库
-
+	ret := util.XmlToMap(string(by))
+	log.Println(ret)
+	if ret["return_code"] == "SUCCESS" && ret["appid"] == weixinStruct.appid && ret["mch_id"] == weixinStruct.mchid {
+		if ret["sign"] == util.CreateWxSign(fmt.Sprintf("&key=%s", weixinStruct.key), ret) {
+			if strings.HasPrefix(ret["out_trade_no"], "a_") { //打赏
+				query := map[string]interface{}{
+					"s_openid":   ret["openid"],
+					"s_tradeno":  ret["out_trade_no"],
+					"i_totalfee": util.IntAll(ret["cash_fee"]),
+					"i_status":   0,
+				}
+				tools.MQFW.Update("reward", query, map[string]interface{}{
+					"$set": map[string]interface{}{
+						"i_status":        1,
+						"s_timeend":       ret["time_end"],
+						"l_updatetime":    time.Now().Unix(),
+						"s_transactionid": ret["transaction_id"],
+					},
+				}, false, false)
+			} else if strings.HasPrefix(ret["out_trade_no"], "b_") { //订阅数据导出
+				now := time.Now()
+				payid := tools.Mysql.Insert("weixin_pay", map[string]interface{}{
+					"transaction_id": ret["transaction_id"],
+					"out_trade_no":   ret["out_trade_no"],
+					"user_openid":    ret["openid"],
+					"create_time":    util.FormatDate(&now, util.Date_Full_Layout),
+					"total_fee":      util.IntAll(ret["total_fee"]),
+					"cash_fee":       util.IntAll(ret["cash_fee"]),
+					"time_end":       ret["time_end"],
+				})
+				if payid > 0 {
+					tools.Mysql.Update("dataexport_order", map[string]interface{}{
+						"order_status": 0,
+						"out_trade_no": ret["out_trade_no"],
+					}, map[string]interface{}{
+						"pay_id":       payid,
+						"pay_money":    util.IntAll(ret["cash_fee"]),
+						"pay_time":     util.FormatDate(&now, util.Date_Full_Layout),
+						"order_status": 1,
+					})
 				}
-				p.Write(`<xml>
+			}
+			p.Write(`<xml>
 			  	<return_code><![CDATA[SUCCESS]]></return_code>
 			  	<return_msg><![CDATA[OK]]></return_msg>
 			</xml>`)
-				return
-			} else {
-				log.Println("支付回调签名校验未通过!")
-			}
+			return
 		} else {
-			log.Println("支付回调参数校验未通过!")
+			log.Println("支付回调签名校验未通过!", ret["openid"])
 		}
 	} else {
-		log.Println(err.Error())
+		log.Println("支付回调参数校验未通过!", ret["openid"])
 	}
 	p.Write(`<xml>
 			<return_code><![CDATA[FAIL]]></return_code>
@@ -285,28 +295,150 @@ func (c *WxPayAction) Qr(code string) error {
 	return err
 }
 func (p *WxPayAction) SacnPay_CreateOrder() {
-	money, _ := p.GetInt("money")
-	content := p.GetString("content")
-	openId, _ := p.GetSession("s_m_openid").(string)
+	user_mail := p.GetString("user_mail")
+	data_spec := p.GetString("data_spec")
 	//
-	money = 1
-	content = "jsdlkfjsdlkfj"
-	openId = "test"
-	if content == "" || openId == "" {
+	id := p.GetString("id")
+	openId := p.GetString("s_m_openid")
+	order_money, _ := p.GetInteger("order_money")
+	data_count, _ := p.GetInteger("data_count")
+	original_price, _ := p.GetInteger("original_price")
+	//
+	if id == "" || openId == "" || data_spec == "" || order_money <= 0 || data_count <= 0 || original_price <= 0 {
+		log.Println("参数不合法!", id, openId, data_spec, order_money, data_count, original_price)
+		p.ServeJson(map[string]interface{}{"status": "n"})
+		return
+	}
+	filter_keys, filter_publishtime, filter := "", "", ""
+	userfilter, ok := tools.MQFW.FindById("export_search", id, nil)
+	if ok && userfilter != nil {
+		keywords, _ := (*userfilter)["keywords"].([]interface{})
+		var buffer bytes.Buffer
+		for _, v := range keywords {
+			vm, _ := v.(map[string]interface{})
+			if buffer.Len() > 0 {
+				buffer.WriteString(",")
+			}
+			buffer.WriteString(util.ObjToString(vm["keyword"]))
+		}
+		filter_keys = buffer.String()
+		if strings.TrimSpace(filter_keys) == "" {
+			log.Println("关键词为空", openId, id)
+			p.ServeJson(map[string]interface{}{"status": "n"})
+			return
+		}
+		filter_publishtime = util.ObjToString((*userfilter)["publishtime"])
+		filterByte, _ := json.Marshal(userfilter)
+		filter = string(filterByte)
+	} else {
+		log.Println("id is not find in mongodb", openId, id)
 		p.ServeJson(map[string]interface{}{"status": "n"})
 		return
 	}
 	nickname, _ := p.GetSession("s_nickname").(string)
-	totalfee := 1
-	tradeno := "jysjdc-" + fmt.Sprint(time.Now().Unix()) + util.Uuid(12)
+	tradeno, ret := CreateOrder(p.IP(), openId, order_money)
+	//存库
+	log.Println("ret", ret)
+	result := map[string]interface{}{
+		"status": "n",
+	}
+	if ret != nil && (*ret)["status"] == "1" {
+		now := time.Now()
+		ordercode := weixinStruct.getOrdercode(openId)
+		orderid := tools.Mysql.Insert("dataexport_order", map[string]interface{}{
+			"order_money":        order_money,
+			"order_status":       0,
+			"user_nickname":      nickname,
+			"user_openid":        openId,
+			"filter":             filter,
+			"prepay_id":          (*ret)["prepayid"],
+			"code_url":           (*ret)["codeurl"],
+			"out_trade_no":       tradeno,
+			"order_code":         ordercode,
+			"product_type":       "历史数据",
+			"create_time":        util.FormatDate(&now, util.Date_Full_Layout),
+			"prepay_time":        util.FormatDate(&now, util.Date_Full_Layout),
+			"original_price":     original_price,
+			"data_spec":          data_spec,
+			"user_mail":          user_mail,
+			"data_count":         data_count,
+			"filter_publishtime": filter_publishtime,
+			"filter_keys":        filter_keys,
+		})
+		if orderid > 0 {
+			result["status"] = "y"
+			result["code"] = ordercode
+			result["token"] = util.GetMd5String(fmt.Sprintf("%s_%d_%s_%s", fmt.Sprint(orderid), order_money, ordercode, openId))
+		}
+	} else {
+		log.Println("生成预支付交易单失败", ret)
+	}
+	p.ServeJson(result)
+}
+func (p *WxPayAction) SacnPay_WaitPay() error {
+	openid := p.GetString("s_m_openid")
+	code := p.GetString("code")
+	token := p.GetString("token")
+	surplus, money, qrcode := func() (int64, int, string) {
+		if openid == "" || code == "" || token == "" {
+			return 0, 0, ""
+		}
+		data := tools.Mysql.FindOne("dataexport_order", map[string]interface{}{"order_code": code, "user_openid": openid}, "id,code_url,prepay_time,order_money", "")
+		if data == nil {
+			log.Println("订单号不存在!", openid)
+			return 0, 0, ""
+		}
+		orderid := (*data)["id"]
+		orderMoney := util.IntAll((*data)["order_money"])
+		realToken := util.GetMd5String(fmt.Sprintf("%s_%d_%s_%s", fmt.Sprint(orderid), orderMoney, code, openid))
+		if realToken != token {
+			log.Println("token错误!", openid, realToken, token)
+			return 0, 0, ""
+		}
+		prepayTime, err := time.ParseInLocation(util.Date_Full_Layout, util.ObjToString((*data)["prepay_time"]), time.Local)
+		surplus_second := prepayTime.Unix() + 7200 - time.Now().Unix()
+		codeUrl := util.ObjToString((*data)["code_url"])
+		if err == nil && surplus_second <= 0 {
+			log.Println("二维码已失效,重新生成预订单!", openid)
+			//重新生成预订单
+			tradeno, ret := CreateOrder(p.IP(), openid, orderMoney)
+			if ret != nil {
+				now := time.Now()
+				tools.Mysql.Update("dataexport_order", map[string]interface{}{
+					"id": orderid,
+				}, map[string]interface{}{
+					"prepay_time":  util.FormatDate(&now, util.Date_Full_Layout),
+					"prepay_id":    (*ret)["prepayid"],
+					"code_url":     (*ret)["codeurl"],
+					"out_trade_no": tradeno,
+				})
+				codeUrl = (*ret)["codeurl"]
+			}
+		}
+		r, _ := qr.Encode(codeUrl, qr.M)
+		pngdat := r.PNG()
+		return surplus_second, orderMoney, base64.StdEncoding.EncodeToString(pngdat)
+	}()
+	p.T["money"] = money / 100
+	p.T["surplus_second"] = surplus
+	p.T["qrcode"] = qrcode
+	return p.Render("/pc/waitpay.html")
+}
+func CreateOrder(ip, openid string, totalfee int) (string, *map[string]string) {
+	tradeno := weixinStruct.getTradeno("b")
 	//获取预订单号
-	ret, err := tools.GetPrepayId(map[string]string{
+	//	ret := &map[string]string{
+	//		"codeurl":  "weixin://wxpay/bizpayurl?pr=qB27xT8",
+	//		"prepayid": "wx06105853258077449e64d6b30019026208",
+	//		"status":   "1",
+	//	}
+	ret, _ := tools.GetPrepayId(map[string]string{
 		"attachmsg":  weixinStruct.sjdc_attachmsg,
 		"bodymsg":    weixinStruct.sjdc_bodymsg,
 		"detailmsg":  weixinStruct.sjdc_detailmsg,
-		"useropenid": openId,
+		"useropenid": openid,
 		"tradeno":    tradeno,
-		"userip":     p.IP(),
+		"userip":     ip,
 		"totalfee":   fmt.Sprint(totalfee),
 		"mchid":      weixinStruct.mchid,
 		"key":        weixinStruct.key,
@@ -314,41 +446,5 @@ func (p *WxPayAction) SacnPay_CreateOrder() {
 		"appid":      weixinStruct.appid,
 		"tradeType":  "NATIVE",
 	})
-	//存库
-	log.Println(ret)
-	result := map[string]interface{}{}
-	if err != nil && ret != nil && util.IntAll((*ret)["status"]) == 1 {
-		now := time.Now()
-		tools.Mysql.Insert("jianyu_order", map[string]interface{}{
-			"order_money":   money,
-			"user_nickname": nickname,
-			"user_openid":   openId,
-			"content":       content,
-			"prepay_id":     (*ret)["prepayid"],
-			"code_url":      (*ret)["codeurl"],
-			"out_trade_no":  tradeno,
-			"create_time":   util.FormatDate(&now, util.Date_Full_Layout),
-		})
-		result["status"] = "y"
-		result["code"] = tradeno
-		result["token"] = (*ret)["sign"]
-	} else {
-		log.Println("生成预支付交易单失败", ret)
-		result["status"] = "n"
-	}
-	p.ServeJson(result)
-}
-func (p *WxPayAction) SacnPay_GetQrCode() error {
-	code := p.GetString("code")
-	//sign := p.GetString("sign")
-	w := p.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")
-	data := fmt.Sprintf("%s/front/pay/redirect?id=%s&source=p", config.Sysconfig["webdomain"].(string), code)
-	r, _ := qr.Encode(data, qr.M)
-	pngdat := r.PNG()
-	_, err := w.Write(pngdat)
-	return err
+	return tradeno, ret
 }

+ 1 - 1
src/jfw/tools/rpccall.go

@@ -150,7 +150,7 @@ func GetShareQRStr(url string) string {
 }
 
 //取得预生成订单编号,我们的系统要控制下,别订单重复了
-func GetPrepayId(param map[string]string) (res *map[string]interface{}, e error) {
+func GetPrepayId(param map[string]string) (res *map[string]string, e error) {
 	util.Try(func() {
 		client, err := rpc.DialHTTP("tcp", rpcserver)
 		defer client.Close()

+ 1 - 5
src/web/staticres/dataExport/css/pay_success.css

@@ -40,14 +40,10 @@
 
 #pay_succ .main .inner { padding: 60px 220px 88px 220px; font-size: 12px; }
 
-#pay_succ .main .inner p { color: #1D1D1D; }
+#pay_succ .main .inner p { color: #1D1D1D; font-size: 14px; }
 
 #pay_succ .main .inner p span { color: #EA5842; }
 
 #pay_succ .main .inner .center { position: relative; margin-top: 28px; }
 
-#pay_succ .main .inner .center .fl { width: 307px; height: 307px; box-sizing: border-box; border: 1px solid #ccc; padding: 10px; }
-
-#pay_succ .main .inner .center .bottom { position: absolute; bottom: 30px; left: 35px; font-size: 16px; color: #1d1d1d; height: 50px; line-height: 50px; padding-left: 40px; background: #fff url(../image/wx_cm.jpg) 0 center no-repeat; }
-
 /*# sourceMappingURL=pay_success.css.map */

+ 67 - 0
src/web/templates/pc/waitpay.html

@@ -0,0 +1,67 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport"
+          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+	<script>
+		var surplus_second = {{.T.surplus_second}};
+		setInterval(function(){
+			surplus_second--;
+			if(document.getElementById("surplus_second")!=null){
+				document.getElementById("surplus_second").innerText = surplus_second;
+			}
+		},1000);
+	</script>
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_624651_bjdvktmum68.css">
+    <link rel="stylesheet" href="/dataExport/css/reset_pc.css">
+    <link rel="stylesheet" href="/dataExport/css/pay_success.css">
+	{{include "/common/pnc.html"}}
+    <title>支付订单</title>
+</head>
+<body>
+<section id="pay_succ" class="w">
+    <div class="progress">
+        <div class="l b2">
+            1.条件筛选
+        </div>
+        <div class="c c3">
+            2.订单支付
+        </div>
+        <div class="r a1">
+            3.数据导出
+        </div>
+    </div>
+    <div class="main">
+        <div class="title clearfix">
+            <div class="text fl">订单提交成功,请尽快支付!</div>
+            <div class="fr money">
+                <div class="clearfix">
+                    <p class="fr">应付总额:现价 <span>¥{{.T.money}}</span></p>
+                </div>
+            </div>
+        </div>
+        <div class="inner">
+            <p>距离二维码过期还有<span id="surplus_second"></span>秒,过期后请重新刷新页面获取二维码</p>
+            <div class="center clearfix">
+                <div class="fl">
+					<div style="position:relative;">
+						<img src="data:image/png;base64,{{.T.qrcode}}" style="width: 330px;position:relative;left:-15px;top:-15px;">
+						<a style="border-radius:3px;position:absolute;top:0px;border: 1px solid #ccc;width: 300px;height:300px;"></a>
+					</div>
+                    <div style="font-size: 16px; color: #1d1d1d;padding-left: 20px;margin-top: 30px;position: relative;top: -30px;">
+						<img src="/dataExport/image/wx_cm.jpg" style="vertical-align: middle;margin-right:10px;position: relative;top: -2px;"><span>使用手机微信扫描二维码支付</span>
+					</div>
+                </div>
+                <div class="fr">
+                    <img src="/dataExport/image/phone_.png" alt="">
+                </div>
+            </div>
+
+        </div>
+    </div>
+
+</section>
+</body>
+</html>

+ 21 - 2
src/web/templates/weixin/jylab/lab-cjss.html

@@ -33,9 +33,9 @@
 			<!--开关-->
 			<div class="weui-cells weui-cells_form title">
 				<div class="weui-cell weui-cell_switch titleInner">
-					<div class="weui-cell__bd">超级搜索 <a href="javascript:jumpTo();" id="searchuse" class="{{ if .T.switchstatus}}{{if ne .T.switchstatus true}}hidden{{end}}{{else}}hidden{{end}}">使用</a></div>
+					<div class="weui-cell__bd">超级搜索 <a href="javascript:jumpTo();" id="searchuse" class="hidden">使用</a></div>
 					<div class="weui-cell__ft">
-						<a id="check" class="weui-switch titleInput{{ if .T.switchstatus}}{{if eq .T.switchstatus true}} checked{{end}}{{end}}" style="display: block;"></a>
+						<a id="check" class="weui-switch titleInput" style="display: hidden;"></a>
 					</div>
 				</div>
 			</div>
@@ -144,12 +144,31 @@
 					sessionStorage.searchpageName = value;
 					window.history.back();
 				}else{
+					sessionStorage.searchpageName = "lab_search_back";
 					window.location.href = "/jylab/mainSearch?v=s";
 				}
 			}else{
 				window.location.href = "/jylab/mainSearch?v=s";
 			}
 		}
+		$(function(){
+			$.ajax({
+		        type:'post',
+		        url:'/jylab/supsearch/getstatus',
+		        async:false,
+		        dataType:'json', 
+		        success:function(r){
+						if(r&&r.supstatus){
+							$("#check").addClass("checked");
+							$("#searchuse").removeClass("hidden");
+						}else{
+							$("#check").removeClass("checked");
+							$("#searchuse").addClass("hidden");
+						}
+						$("#check").css({"display":"block"});
+					}
+				})
+		})
 	</script>
 </body>
 </html>

+ 19 - 1
src/web/templates/weixin/jylab/lab-sjdc.html

@@ -35,7 +35,7 @@
 				<div class="weui-cell weui-cell_switch titleInner">
 					<div class="weui-cell__bd">订阅数据导出</div>
 					<div class="weui-cell__ft">
-						<a id="check" class="weui-switch titleInput{{ if .T.switchstatus}}{{if eq .T.switchstatus true}} checked{{end}}{{end}}" style="display: block;"></a>
+						<a id="check" class="weui-switch titleInput" style="display: hidden;"></a>
 					</div>
 				</div>
 			</div>
@@ -129,6 +129,24 @@
 				});
             }
         }
+		$(function(){
+			$.ajax({
+		        type:'post',
+		        url:'/jylab/supsearch/getstatus',
+		        async:false,
+		        dataType:'json', 
+		        success:function(r){
+						if(r&&r.dataexportstatus){
+							$("#check").addClass("checked");
+							$("#searchuse").removeClass("hidden");
+						}else{
+							$("#check").removeClass("checked");
+							$("#searchuse").addClass("hidden");
+						}
+						$("#check").css({"display":"block"});
+					}
+				})
+		})
 	</script>
 </body>
 </html>

+ 21 - 2
src/web/templates/weixin/jylab/lab-zbqy.html

@@ -33,9 +33,9 @@
 			<!--开关-->
 			<div class="weui-cells weui-cells_form title">
 				<div class="weui-cell weui-cell_switch titleInner">
-					<div class="weui-cell__bd">中标企业搜索<a href="javascript:jumpTo();" id="searchuse" class="{{ if .T.switchstatus}}{{if ne .T.switchstatus true}}hidden{{end}}{{else}}hidden{{end}}">使用</a></div>
+					<div class="weui-cell__bd">中标企业搜索<a href="javascript:jumpTo();" id="searchuse" class="hidden">使用</a></div>
 					<div class="weui-cell__ft">
-						<a id="check" class="weui-switch titleInput{{ if .T.switchstatus}}{{if eq .T.switchstatus true}} checked{{end}}{{end}}" style="display: block;"></a>
+						<a id="check" class="weui-switch titleInput" style="display: hidden;"></a>
 					</div>
 				</div>
 			</div>
@@ -119,12 +119,31 @@
 					sessionStorage.searchpageName = value;
 					window.history.back();
 				}else{
+					sessionStorage.searchpageName = "lab_ent_back";
 					window.location.href = "/jylab/mainSearch?v=e";
 				}
 			}else{
 				window.location.href = "/jylab/mainSearch?v=e";
 			}
 		}
+		$(function(){
+			$.ajax({
+		        type:'post',
+		        url:'/jylab/supsearch/getstatus',
+		        async:false,
+		        dataType:'json', 
+		        success:function(r){
+						if(r&&r.entstatus){
+							$("#check").addClass("checked");
+							$("#searchuse").removeClass("hidden");
+						}else{
+							$("#check").removeClass("checked");
+							$("#searchuse").addClass("hidden");
+						}
+						$("#check").css({"display":"block"});
+					}
+				})
+		})
 	</script>
 </body>
 </html>

+ 25 - 6
src/web/templates/weixin/search/mainSearch.html

@@ -583,8 +583,21 @@
             window.event.returnValue = false;
 			//超级搜索
 			if(SuperSearch.isMyPage){
+				var max=$("#supersearchPage .maxMrice").val(),min=$("#supersearchPage .minMrice").val();
+		        if(Number(max)<Number(min)&&max!=""&&min!=""){
+		            $("#supersearchPage .maxMrice").val(min);
+		            $("#supersearchPage .minMrice").val(max);
+				}
 				SuperSearch.formSubmit("N");
 			}else if(EntSearch.isMyPage){//企业搜索
+				var money_from = $.trim($("#entsearchPage #money_from").val());
+	            var money_to = $.trim($("#entsearchPage #money_to").val());
+	            var from = parseFloat(money_from);
+	            var to = parseFloat(money_to);
+	            if(from>to){
+	                $("#entsearchPage #money_from").val(money_to);
+	                $("#entsearchPage #money_to").val(money_from);
+				}
 	            EntSearch.formSubmit();
 			}
         }
@@ -629,12 +642,12 @@
 	    $(".rightHref").click(function(){
 	        window.open("http://mp.weixin.qq.com/mp/homepage?__biz=MzIyNTM1NDUyNw==&hid=2&sn=379fc869080a36d9d0798a3d4fb9a63a#wechat_redirect");
 	    });
-		var pageType = getUrlParam("v");
-		if(pageType == "s"){
-			SuperSearch.init(true,false,false);
-		}else if(pageType == "e"){
-			EntSearch.init(true,false,false);
-		}
+		//var pageType = getUrlParam("v");
+		//if(pageType == "s"){
+		//	SuperSearch.init(true,false,false);
+		//}else if(pageType == "e"){
+		//	EntSearch.init(true,false,false);
+		//}
 	//});
 	function checkIsOpen(){
 		$(".content ul li a:eq(0)").unbind("tap");
@@ -678,6 +691,12 @@
 			}else if(sessionStorage.searchpageName == "entSearch_back"){
 				EntSearch.init(true,false,true);
 				initFlag = 4;
+			}else if(sessionStorage.searchpageName == "lab_search_back"){
+				SuperSearch.init(true,false,false);
+				initFlag = 5;
+			}else if(sessionStorage.searchpageName == "lab_ent_back"){
+				EntSearch.init(true,false,false);
+				initFlag = 6;
 			}
 		}
 	}