Просмотр исходного кода

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

zhangxinlei1996 6 лет назад
Родитель
Сommit
f55c3aa880
20 измененных файлов с 688 добавлено и 352 удалено
  1. 142 0
      src/jfw/modules/app/src/config.json
  2. 18 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExPort.html
  3. 37 21
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_appended.html
  4. 17 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_appendedInput.html
  5. 17 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_area.html
  6. 17 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerEdit.html
  7. 18 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerInput.html
  8. 38 21
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_exclude.html
  9. 18 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_excludeInput.html
  10. 17 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_industry.html
  11. 19 2
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWord.html
  12. 16 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWordInput.html
  13. 16 1
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_price.html
  14. 18 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_subType.html
  15. 17 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html
  16. 17 0
      src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerInput.html
  17. 146 82
      src/jfw/pay/aliPay.go
  18. 96 218
      src/jfw/pay/dataExportPay.go
  19. 2 2
      src/jfw/pay/weixin.go
  20. 2 2
      src/web/templates/weixin/dataExport/dataExport_payOrder.html

+ 142 - 0
src/jfw/modules/app/src/config.json

@@ -1,4 +1,146 @@
 {
+    "mongodbServers": "192.168.3.11:27080",
+    "mongodbPoolSize": "5",
+    "mongodbName": "qfw",
+    "influxaddr": "http://192.168.3.207:8086",
+    "influxdb": "jy_logs",
+    "elasticsearch": "http://192.168.3.11:9800",
+    "elasticPoolSize": 30,
+    "redisaddrs": "other=192.168.3.11:1712,push=192.168.3.11:1712,pushcache_1=192.168.3.11:2001,pushcache_2_a=192.168.3.18:2002,pushcache_2_b=192.168.3.18:2003,sso=192.168.3.18:1712,session=192.168.3.11:1712,recovery=192.168.3.11:1712",
+    "webport": "89",
+    "weixinrpc": "127.0.0.1:8083",
+    "cassandra": {
+        "log": {
+            "host": [
+                "192.168.3.207"
+            ],
+            "size": 5,
+            "port": 9043
+        },
+        "push": {
+            "host": [
+                "192.168.3.207"
+            ],
+            "size": 5
+        }
+    },
+    "cacheflag": false,
+    "mysql": {
+        "dbName": "jianyu",
+        "address": "192.168.3.11:3366",
+        "userName": "root",
+        "passWord": "Topnet123"
+    },
+    "agreement": "http",
+    "webdomain": "http://web-jydev-xzh.jianyu360.cn",
+    "redirect": {
+        "wxpushlist": "/jyapp/wxpush/bidinfo/%s",
+        "newInfoFollow": "/jyapp/followent/newInfo/%s",
+        "wxpushfollowlist": "/jyapp/follow/notice/%s/%s",
+        "followset": "/jyapp/follow/set/%s/%s",
+        "myfeedbacks": "/jyapp/swordfish/myFeedbacks",
+        "historypush": "/jyapp/swordfish/historypush?f=push",
+        "followEntDetail": "/jyapp/followent/detail/%s"
+    },
+    "followProject": 10,
+    "followentlimit": "10",
+    "followLimitDay": 30,
+    "followTipMsg": {
+        "title": "您关注的项目《%s》将于%s开标!",
+        "remark": "您收到这条信息是因为您之前设置了项目开标提醒,如果您不再需要此类提醒,可点击下方“详情”修改提醒设置。"
+    },
+    "followPushRpc": "127.0.0.1:8759",
+    "recommendThreshold": 0.5,
+    "rewardText": [
+        "憋说话!赏我!",
+        "“赏”就一个字 我只说一次",
+        "厉害了word鱼!",
+        "看官赏点银子偶会更卖力噢!",
+        "各位客官,快来赏点吧!",
+        "夸我还是含蓄点的好,赏一个吧~",
+        "爱,就供养;喜欢,就打赏!",
+        "请简单粗暴地爱我!",
+        "最喜欢你一言不合就打赏的样子了~~~么么!"
+    ],
+    "advertText": [
+        "与其一个人孤单  不如一群人狂欢   赶快加入剑鱼标讯社区",
+        "加入剑鱼标讯社区  和投标大神做朋友",
+        "来剑鱼标讯社区  找最合拍的伙伴",
+        "剑鱼标讯社区,让沟通连接你我。",
+        "剑鱼标讯社区,分享你的知识、解决问题、行业资源交换",
+        "勇敢发声,和老司机一起畅聊招投标。",
+        "春风十里,不如来剑鱼标讯社区!",
+        "只要心相通,相隔千里也能畅快交流。",
+        "弹指一挥间,剑鱼标讯因你而不同!",
+        "携手同行,认真对待每一次招投标"
+    ],
+    "advertImg": "/jyapp/images/advert.png",
+    "advertName": "广告",
+    "advertUrl": "/jyapp/free/swordfish/about",
+    "industry": "分类综合测试",
+    "recommendEntLimit": "50",
+    "update": {
+        "version": "1.0.7",
+        "mustupdate": false,
+        "tipspace": 86400,
+        "ios_version": "2.7.3",
+        "ios_mustupdate": false,
+        "ios_openUpdate": false,
+        "apkurl": "http://web-jydev-wky.jianyu360.cn/jyapp/res/%s/jianyu360.apk",
+        "channelDir": {
+            "baidu": "baiduSem",
+            "shenma": "shenmaSem",
+            "huawei": "huawei",
+            "xiaomi": "xiaomi",
+            "yingyongbao": "yingyongbao",
+            "douyin": "douyin",
+            "weixin": "jywx",
+            "topnet": "topnet",
+            "duanxin": "duanxin",
+            "default": "topnet"
+        }
+    },
+    "limitSearchText": {
+        "flag": false,
+        "count": 3,
+        "timeout": 60,
+        "totalPage": 3,
+        "userIds": [
+            "ocXeA0jceF8KRunDkwf9egT4bKI8",
+            "ocXeA0nBnaRZhKEZYhMBGvd4NvH0",
+            "ocXeA0rBxfsr_4GzysQFzF3Cf81U"
+        ],
+        "msg": "f 开关状态:%s //-2 从配置文件重置,-1 关闭,1 打开<br><br>c 并发数:%d //-2 不限制并发数,-1 无条件直接限制,>0 限制并发数<br><br>t 个人查询限制时间:%ds //-1 不限制<br><br>p 限制页数:%d"
+    },
+    "share": {
+        "forceShareEnabled": false,
+        "onlineDate": "2018-08-20 00:00:00",
+        "regDaysForNewUser": 5,
+        "shareIntervalDays": 7,
+        "startHour": 8,
+        "endHour": 17,
+        "shareTimesUpperLimitR": 4000,
+        "shareTimesUpperLimitIrr": 1000
+    },
+    "appPushServiceRpc": "127.0.0.1:5566",
+    "appPower": {
+        "grayflag": false
+    },
+    "afterSavePushId": 60,
+    "mail": [
+        {
+            "addr": "smtp.exmail.qq.com",
+            "port": 465,
+            "pwd": "ue9Rg9Sf4CVtdm5a",
+            "user": "public03@topnet.net.cn"
+        },
+        {
+            "addr": "smtp.exmail.qq.com",
+            "port": 465,
+            "pwd": "ue9Rg9Sf4CVtdm5a",
+            "user": "public03@topnet.net.cn"
+        }
+    ]
 	"mongodbServers": "192.168.3.11:27080",
 	"mongodbPoolSize": "5",
 	"mongodbName": "qfw",

+ 18 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExPort.html

@@ -9,6 +9,7 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/base.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/dataExport.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
     <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/mobiscroll/mobiscroll.min.css?v={{Msg "seo" "version"}}">
@@ -127,10 +128,22 @@
         top: 0;
         color: #444444;
     }
+    .app-layout-header>.app-back{
+        position: absolute;
+        font-size: 19px;
+        padding-top: 20px;
+        padding-left: 11px;
+        padding-right: 40px;
+        padding-bottom: 7px;
+        left: 0px;
+        top: 18px;
+        color: #444444;
+    }
 
 </style>
 <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         数据导出
     </div>
     <div class="page" style="margin-top:60px">
@@ -572,7 +585,7 @@
                 dataType: 'json',
                 success: function(data){
                     if(data._id!==""){
-                        // window.location.href="/weixin/pay/dataexport?id="+data._id+"&source=d"
+                        window.location.href="/jyapp/front/wx_dataExport/toCreateOrderPage?id="+data._id+"&source=d"
                     }
                 }
             })
@@ -632,6 +645,10 @@
             n = n.toString();
             return n[1] ? n : '0' + n
         }
+        //
+        $(".app-back").on("click", function () {
+            history.back();
+        });
     })
 </script>
     

+ 37 - 21
src/jfw/modules/app/src/web/templates/dataExport/dataExport_appended.html

@@ -11,6 +11,8 @@
     <link rel="stylesheet" href="/jyapp/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
     <script src="/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
 <style>
     .app-layout-header{
@@ -33,9 +35,21 @@
     .keyWord .enter .btn .save {
         float: right;
     }
+    .app-layout-header>.app-back{
+        position: absolute;
+        font-size: 19px;
+        padding-top: 20px;
+        padding-left: 11px;
+        padding-right: 40px;
+        padding-bottom: 7px;
+        left: 0px;
+        top: 18px;
+        color: #444444;
+    }
 </style>
 <body>
 <div class="app-layout-header">
+    <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
     附加词
 </div>
 <div class="keyWord" style="margin-top: 50px">
@@ -105,30 +119,29 @@
             window.onload = function(){
                 backListen();
             };
-        }
-        //
-        // 监听浏览器回退事件
-        function backListen () {
-            if (window.history && window.history.pushState) {
-                $(window).on('popstate', function () { // 点击后退会触发popstate事件
-                    var hashLocation = location.hash; // 获取点击后的页面的hash值
-                    var hashSplit = hashLocation.split("#!/"); // 将哈希值装进数组(这里可以在控制台打印看效果)
-                    var hashName = hashSplit[1]; // 取数组的第一个
+            // 监听浏览器回退事件
+            function backListen () {
+                if (window.history && window.history.pushState) {
+                    $(window).on('popstate', function () { // 点击后退会触发popstate事件
+                        var hashLocation = location.hash; // 获取点击后的页面的hash值
+                        var hashSplit = hashLocation.split("#!/"); // 将哈希值装进数组(这里可以在控制台打印看效果)
+                        var hashName = hashSplit[1]; // 取数组的第一个
 
-                    // 点击后的页面哈希值与上一个页面不同,借助这个区别可以判断是否离开了页面,从而做一些操作
-                    if (hashName !== '') {
-                        var hash = window.location.hash;
-                        if (hash === '') { // 如果当前页面没有哈希值
+                        // 点击后的页面哈希值与上一个页面不同,借助这个区别可以判断是否离开了页面,从而做一些操作
+                        if (hashName !== '') {
+                            var hash = window.location.hash;
+                            if (hash === '') { // 如果当前页面没有哈希值
 
-                            sessionStorage.removeItem("flag"); // 这里我做了清除sessionStorage的操作
+                                sessionStorage.removeItem("flag"); // 这里我做了清除sessionStorage的操作
 
-                            // 强行回退一步,就不用多点一次了😎
-                            history.go(-2); // 直接跳过没有哈希值的页面,就不会出现要点两次才能回到真正的上一页了
+                                // 强行回退一步,就不用多点一次了😎
+                                history.go(-2); // 直接跳过没有哈希值的页面,就不会出现要点两次才能回到真正的上一页了
+                            }
                         }
-                    }
-                });
-                // 将含有哈希值的页面,强行插入浏览器历史记录中,此时相当于该页面有两个url在历史记录中,一个是有hash的,一个是没有hash的。
-                window.history.pushState('forward', null, '#');
+                    });
+                    // 将含有哈希值的页面,强行插入浏览器历史记录中,此时相当于该页面有两个url在历史记录中,一个是有hash的,一个是没有hash的。
+                    window.history.pushState('forward', null, '#');
+                }
             }
         }
         //
@@ -253,7 +266,7 @@
             });
 
             // 添加 按钮的点击事件
-            $('.addkeyWord .btn button').on('click', function(){
+            $('.addkeyWord .btn .save').on('click', function(){
                 var appended = $('.addkeyWord input.enterOne').val();
                 if(appendedArr===undefined){
                     appendedArr = [];
@@ -377,6 +390,9 @@
             $('.addkeyWord .btn .close').on('click', function () {
                 window.history.back();
             });
+            $(".app-back").on("click", function () {
+                history.back();
+            });
         })
 
     </script>

+ 17 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_appendedInput.html

@@ -11,6 +11,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}"2>
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
     </head>
     <style>
         .app-layout-header{
@@ -33,9 +35,21 @@
         .keyWord .enter .btn .save {
             float: right;
         }
+        .app-layout-header>.app-back{
+            position: absolute;
+            font-size: 19px;
+            padding-top: 20px;
+            padding-left: 11px;
+            padding-right: 40px;
+            padding-bottom: 7px;
+            left: 0px;
+            top: 18px;
+            color: #444444;
+        }
     </style>
     <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         附加词
     </div>
     <div class="keyWord" style="margin-top: 50px;">
@@ -198,6 +212,9 @@
             $('.addkeyWord .btn .close').on('click', function () {
                 window.history.back();
             });
+            $(".app-back").on("click", function () {
+                history.back();
+            });
         })
 
     </script>

+ 17 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_area.html

@@ -13,6 +13,8 @@
 		<link rel="stylesheet" href="/jyapp/wx_dataExport/css/public.css?v={{Msg "seo" "version"}}">
 		<link rel="stylesheet" href="/jyapp/wx_dataExport/css/choose_area.css?v={{Msg "seo" "version"}}">
 		<script src="/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+		<script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+		<link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 	</head>
 		<style>
 			#choose_area .main .select-area-box .tab .province .checkbox:checked {
@@ -40,9 +42,21 @@
 				top: 0;
 				color: #444444;
 			}
+			.app-layout-header>.app-back{
+				position: absolute;
+				font-size: 19px;
+				padding-top: 20px;
+				padding-left: 11px;
+				padding-right: 40px;
+				padding-bottom: 7px;
+				left: 0px;
+				top: 18px;
+				color: #444444;
+			}
 		</style>
 	<body>
 		<div class="app-layout-header">
+			<span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
 			区域
 		</div>
 		<div id="choose_area">
@@ -561,6 +575,9 @@
 					 $(this).parent().prev().find(".checkbox").prop("checked", true);
 				 });
 				 //
+				 $(".app-back").on("click", function () {
+					 history.back();
+				 });
 
 			})
 		</script>

+ 17 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerEdit.html

@@ -11,6 +11,8 @@
 	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/weui.min.css">
 	<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css">
 	<script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js"></script>
+	<script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+	<link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
 <style>
 	.keyWord .addKeyWord {
@@ -39,10 +41,22 @@
 	.keyWord .enter .btn .save-btn {
 		float: right;
 	}
+	.app-layout-header>.app-back{
+		position: absolute;
+		font-size: 19px;
+		padding-top: 20px;
+		padding-left: 11px;
+		padding-right: 40px;
+		padding-bottom: 7px;
+		left: 0px;
+		top: 18px;
+		color: #444444;
+	}
 </style>
 
 <body>
 <div class="app-layout-header">
+	<span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
 	采购单位
 </div>
 <div class="keyWord" style="margin-top:70px">
@@ -96,6 +110,9 @@
 		}
 		$('.showKeyWord > ul').prepend(html);
 	}
+	$(".app-back").on("click", function () {
+		history.back();
+	});
 
 </script>
 

+ 18 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_buyerInput.html

@@ -11,6 +11,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}2">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
     </head>
     <style>
         .keyWord .addKeyWord {
@@ -39,10 +41,22 @@
         .keyWord .enter .btn .save-btn {
             float: right;
         }
+        .app-layout-header>.app-back{
+            position: absolute;
+            font-size: 19px;
+            padding-top: 20px;
+            padding-left: 11px;
+            padding-right: 40px;
+            padding-bottom: 7px;
+            left: 0px;
+            top: 18px;
+            color: #444444;
+        }
     </style>
 
     <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         采购单位
     </div>
     <div class="keyWord" style="margin-top: 40px;">
@@ -136,7 +150,10 @@
 
         $(".close").on("click", function () {
             history.back();
-        })
+        });
+        $(".app-back").on("click", function () {
+            history.back();
+        });
 
     </script>
 

+ 38 - 21
src/jfw/modules/app/src/web/templates/dataExport/dataExport_exclude.html

@@ -11,6 +11,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
 <style>
     .app-layout-header{
@@ -33,9 +35,21 @@
     .keyWord .enter .btn .save {
         float: right;
     }
+    .app-layout-header>.app-back{
+        position: absolute;
+        font-size: 19px;
+        padding-top: 20px;
+        padding-left: 11px;
+        padding-right: 40px;
+        padding-bottom: 7px;
+        left: 0px;
+        top: 18px;
+        color: #444444;
+    }
 </style>
 <body>
 <div class="app-layout-header">
+    <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
     排除词
 </div>
 <div class="keyWord" style="margin-top: 50px">
@@ -105,29 +119,29 @@
             window.onload = function(){
                 backListen();
             };
-        }
-        // 监听浏览器回退事件
-        function backListen () {
-            if (window.history && window.history.pushState) {
-                $(window).on('popstate', function () { // 点击后退会触发popstate事件
-                    var hashLocation = location.hash; // 获取点击后的页面的hash值
-                    var hashSplit = hashLocation.split("#!/"); // 将哈希值装进数组(这里可以在控制台打印看效果)
-                    var hashName = hashSplit[1]; // 取数组的第一个
+            // 监听浏览器回退事件
+            function backListen () {
+                if (window.history && window.history.pushState) {
+                    $(window).on('popstate', function () { // 点击后退会触发popstate事件
+                        var hashLocation = location.hash; // 获取点击后的页面的hash值
+                        var hashSplit = hashLocation.split("#!/"); // 将哈希值装进数组(这里可以在控制台打印看效果)
+                        var hashName = hashSplit[1]; // 取数组的第一个
 
-                    // 点击后的页面哈希值与上一个页面不同,借助这个区别可以判断是否离开了页面,从而做一些操作
-                    if (hashName !== '') {
-                        var hash = window.location.hash;
-                        if (hash === '') { // 如果当前页面没有哈希值
+                        // 点击后的页面哈希值与上一个页面不同,借助这个区别可以判断是否离开了页面,从而做一些操作
+                        if (hashName !== '') {
+                            var hash = window.location.hash;
+                            if (hash === '') { // 如果当前页面没有哈希值
 
-                            sessionStorage.removeItem("flag"); // 这里我做了清除sessionStorage的操作
+                                sessionStorage.removeItem("flag"); // 这里我做了清除sessionStorage的操作
 
-                            // 强行回退一步,就不用多点一次了😎
-                            history.go(-2); // 直接跳过没有哈希值的页面,就不会出现要点两次才能回到真正的上一页了
+                                // 强行回退一步,就不用多点一次了😎
+                                history.go(-2); // 直接跳过没有哈希值的页面,就不会出现要点两次才能回到真正的上一页了
+                            }
                         }
-                    }
-                });
-                // 将含有哈希值的页面,强行插入浏览器历史记录中,此时相当于该页面有两个url在历史记录中,一个是有hash的,一个是没有hash的。
-                window.history.pushState('forward', null, '#');
+                    });
+                    // 将含有哈希值的页面,强行插入浏览器历史记录中,此时相当于该页面有两个url在历史记录中,一个是有hash的,一个是没有hash的。
+                    window.history.pushState('forward', null, '#');
+                }
             }
         }
         //
@@ -252,7 +266,7 @@
             });
 
             // 添加 按钮的点击事件
-            $('.addkeyWord .btn button').on('click', function(){
+            $('.addkeyWord .btn .save').on('click', function(){
                 var exclude = $('.addkeyWord input.enterOne').val();
                 if(excludeArr===undefined){
                     excludeArr = [];
@@ -374,7 +388,10 @@
             });
 
             $('.addkeyWord .btn .close').on('click', function () {
-                window.history.back();
+                history.back();
+            });
+            $(".app-back").on("click", function () {
+                history.back();
             });
         })
 

+ 18 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_excludeInput.html

@@ -11,6 +11,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}"3>
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
     </head>
     <style>
         .app-layout-header{
@@ -33,9 +35,21 @@
         .keyWord .enter .btn .save {
             float: right;
         }
+        .app-layout-header>.app-back{
+            position: absolute;
+            font-size: 19px;
+            padding-top: 20px;
+            padding-left: 11px;
+            padding-right: 40px;
+            padding-bottom: 7px;
+            left: 0px;
+            top: 18px;
+            color: #444444;
+        }
     </style>
     <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         排除词
     </div>
     <div class="keyWord" style="margin-top: 50px;">
@@ -154,7 +168,7 @@
             });
 
             // 添加 按钮的点击事件
-            $('.addkeyWord .btn button').on('click', function(){
+            $('.addkeyWord .btn .save').on('click', function(){
                 var exclude = $('.addkeyWord input.enterOne').val();
                 if(excludeArr===undefined){
                     excludeArr = [];
@@ -210,6 +224,9 @@
             $('.addkeyWord .btn .close').on('click', function () {
                 window.history.back();
             });
+            $(".app-back").on("click", function () {
+                history.back();
+            });
         })
 
     </script>

+ 17 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_industry.html

@@ -9,6 +9,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/industry.css?v={{Msg "seo" "version"}}">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
     <style>
         .active{
@@ -40,9 +42,21 @@
             top: 0;
             color: #444444;
         }
+        .app-layout-header>.app-back{
+            position: absolute;
+            font-size: 19px;
+            padding-top: 20px;
+            padding-left: 11px;
+            padding-right: 40px;
+            padding-bottom: 7px;
+            left: 0px;
+            top: 18px;
+            color: #444444;
+        }
     </style>
 <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         行业
     </div>
     <div class="industry" style="margin-top:65px">
@@ -317,6 +331,9 @@
                 }
             }
             //
+            $(".app-back").on("click", function () {
+                history.back();
+            });
 
 
     </script>

+ 19 - 2
src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWord.html

@@ -12,6 +12,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
     <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
 <style>
     .keyWord .addKeyWord {
@@ -41,9 +43,21 @@
     .keyWord .enter .btn .save {
         float: right;
     }
+    .app-layout-header>.app-back{
+        position: absolute;
+        font-size: 19px;
+        padding-top: 20px;
+        padding-left: 11px;
+        padding-right: 40px;
+        padding-bottom: 7px;
+        left: 0px;
+        top: 18px;
+        color: #444444;
+    }
 </style>
 <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         关键词
     </div>
     <div class="keyWord" style="margin-top:53px">
@@ -260,9 +274,12 @@
         });
 
         $('.addkeyWord .btn .close').on('click', function () {
-            window.history.back();
+            history.back();
+        });
+        //
+        $(".app-back").on("click", function () {
+            history.back();
         });
-
 
     </script>
 </body>

+ 16 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_keyWordInput.html

@@ -12,6 +12,7 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}2">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
     <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
 <style>
     .app-layout-header{
@@ -34,9 +35,21 @@
     .keyWord .enter .btn .save {
         float: right;
     }
+    .app-layout-header>.app-back{
+        position: absolute;
+        font-size: 19px;
+        padding-top: 20px;
+        padding-left: 11px;
+        padding-right: 40px;
+        padding-bottom: 7px;
+        left: 0px;
+        top: 18px;
+        color: #444444;
+    }
 </style>
 <body>
 <div class="app-layout-header">
+    <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
     关键词
 </div>
 <div class="keyWord" style="margin-top: 50px;">
@@ -196,6 +209,9 @@
         sessionStorage.keyWord = JSON.stringify(obj);
         window.location.href = "/jyapp/front/dataExport/exclude?keyWord="+keyWord+"_in";
     });
+    $(".app-back").on("click", function () {
+        history.back();
+    });
 
 </script>
 </body>

+ 16 - 1
src/jfw/modules/app/src/web/templates/dataExport/dataExport_price.html

@@ -10,6 +10,7 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/money.css?v={{Msg "seo" "version"}}">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
     <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
 <style>
     .active{
@@ -30,9 +31,21 @@
         top: 0;
         color: #444444;
     }
+    .app-layout-header>.app-back{
+        position: absolute;
+        font-size: 19px;
+        padding-top: 20px;
+        padding-left: 11px;
+        padding-right: 40px;
+        padding-bottom: 7px;
+        left: 0px;
+        top: 18px;
+        color: #444444;
+    }
 </style>
 <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         金额
     </div>
     <div class="industry" style="margin-top:65px">
@@ -111,7 +124,9 @@
                 $(".all span").removeClass("active");
             }
         }
-
+        $(".app-back").on("click", function () {
+            history.back();
+        });
     })
 </script>
 </body>

+ 18 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_subType.html

@@ -9,6 +9,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/messageType.css?v={{Msg "seo" "version"}}">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 </head>
     <style>
         .active{
@@ -40,9 +42,21 @@
             top: 0;
             color: #444444;
         }
+        .app-layout-header>.app-back{
+            position: absolute;
+            font-size: 19px;
+            padding-top: 20px;
+            padding-left: 11px;
+            padding-right: 40px;
+            padding-bottom: 7px;
+            left: 0px;
+            top: 18px;
+            color: #444444;
+        }
     </style>
 <body>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         信息类型
     </div>
     <div class="industry" style="margin-top:60px">
@@ -237,6 +251,10 @@
                     $(_this).parent().find('dt').addClass('active');
                 }
             }
+            //
+            $(".app-back").on("click", function () {
+                history.back();
+            });
 
     </script>
 </body>

+ 17 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerEdit.html

@@ -11,6 +11,8 @@
 	<link rel="stylesheet" href="/jyapp/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
 	<link rel="stylesheet" href="/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}">
 	<script src="/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+	<script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+	<link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
 	</head>
 	<style>
 		.keyWord .addKeyWord {
@@ -39,9 +41,21 @@
 		.keyWord .enter .btn .save-btn {
 			float: right;
 		}
+		.app-layout-header>.app-back{
+			position: absolute;
+			font-size: 19px;
+			padding-top: 20px;
+			padding-left: 11px;
+			padding-right: 40px;
+			padding-bottom: 7px;
+			left: 0px;
+			top: 18px;
+			color: #444444;
+		}
 	</style>
 	<body>
 	<div class="app-layout-header">
+		<span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
 		中标单位
 	</div>
 	<div class="keyWord" style="margin-top:70px;">
@@ -235,6 +249,9 @@
 			$(".close").on('click', function () {
 				history.back();
 			});
+			$(".app-back").on("click", function () {
+				history.back();
+			});
 		})
 
 	</script>

+ 17 - 0
src/jfw/modules/app/src/web/templates/dataExport/dataExport_winnerInput.html

@@ -11,6 +11,8 @@
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/weui.min.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/css/keyWord.css?v={{Msg "seo" "version"}}3">
     <script src="{{Msg "seo" "cdn"}}/jyapp/wx_dataExport/js/rem.js?v={{Msg "seo" "version"}}"></script>
+    <script src="{{Msg "seo" "cdn"}}/jyapp/js/jquery.js"></script>
+    <link rel="stylesheet" type="text/css" href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" />
     </head>
     <style>
         .keyWord .addKeyWord {
@@ -39,6 +41,17 @@
         .keyWord .enter .btn .save-btn {
             float: right;
         }
+        .app-layout-header>.app-back{
+            position: absolute;
+            font-size: 19px;
+            padding-top: 20px;
+            padding-left: 11px;
+            padding-right: 40px;
+            padding-bottom: 7px;
+            left: 0px;
+            top: 18px;
+            color: #444444;
+        }
     </style>
     <body>
 
@@ -51,6 +64,7 @@
     </div>
     </div>
     <div class="app-layout-header">
+        <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
         中标单位
     </div>
     <!-- 添加附加词显示列表 -->
@@ -139,6 +153,9 @@
         $(".close").on('click', function () {
             history.back();
         });
+        $(".app-back").on("click", function () {
+            history.back();
+        });
     })
 
     </script>

+ 146 - 82
src/jfw/pay/aliPay.go

@@ -29,15 +29,17 @@ type AliPayStruct struct {
 	Appid        string
 	PrivateKey   *rsa.PrivateKey //请求接口秘钥
 	AliPublicKey *rsa.PublicKey  //支付完成回调,校验使用(取支付宝后台)
-	Qr_width     int             //二维码宽度
-	CallBackUrl  string          //支付完成回调地址
-	ReturnUrl    string          //支付完成页面跳转地址
 	Requseturl   string          //接口请求地址
 	Subject      string          //支付小标题
+
+	PC_Qr_width    int    //PC扫码二维码宽度
+	PC_CallBackUrl string //pc扫码支付完成回调地址
+
+	APP_CallBackUrl string //app支付完成回调地址
 }
 
-//支付订单生成请求参数(扫码支付)
-type BizContent struct {
+//扫码支付订单生成请求参数
+type BizPcContent struct {
 	Subject      string  `json:"subject"`
 	OutTradeNo   string  `json:"out_trade_no"`
 	TotalAmount  float64 `json:"total_amount"`
@@ -47,14 +49,18 @@ type BizContent struct {
 	Time_expire  string  `json:"time_expire"` //支付超时时间yyyy-MM-dd HH:mm:ss
 }
 
-//支付订单关闭请求参数
+//App支付订单生成请求参数
+type BizAppContent struct {
+	Subject     string  `json:"subject"`
+	OutTradeNo  string  `json:"out_trade_no"`
+	TotalAmount float64 `json:"total_amount"`
+	ProductCode string  `json:"product_code"`
+}
+
+//扫码支付订单关闭结构体
 type CloseContent struct {
 	OutTradeNo string `json:"out_trade_no"`
 }
-type AliPayAction struct {
-	*xweb.Action
-	payCallback xweb.Mapper `xweb:"/alipay/pay/callback"` //微信支付回调
-}
 
 var Alipay *AliPayStruct
 var alipayConf map[string]interface{}
@@ -75,43 +81,49 @@ func init() {
 		Appid:        util.ObjToString(alipayConf["appid"]),
 		PrivateKey:   privateKey,
 		AliPublicKey: aliPublicKey,
-		CallBackUrl:  util.ObjToString(config.Sysconfig["webdomain"]) + "/alipay/pay/callback",
-		Qr_width:     250,
-		ReturnUrl:    "", //不配置
 		Requseturl:   util.ObjToString(alipayConf["reqUrl"]),
 		Subject:      util.ObjToString(alipayConf["Subject"]),
+		//pc扫码参数
+		PC_CallBackUrl: util.ObjToString(config.Sysconfig["webdomain"]) + "/alipay/pay/callback",
+		PC_Qr_width:    250,
+		//app支付参数
+		APP_CallBackUrl: util.ObjToString(config.Sysconfig["webdomain"]) + "/app/alipay/pay/callback",
+	}
+
+	//注册路由
+	if alipayConf["isApp"] == "T" {
+		xweb.AddAction(&AliAppPayAction{})
+	} else {
+		xweb.AddAction(&AliPcPayAction{})
 	}
-	xweb.AddAction(&AliPayAction{})
+
 }
 
 func (w *AliPayStruct) GetTradeno() string {
 	return fmt.Sprintf("%s_%d%s%s", "z", time.Now().UnixNano(), util.GetRandom(5), util.GetLetterRandom(6))
 }
 
-//获取支付连接
+//pc扫码获取支付二维码地址
 func (a *AliPayStruct) GetPayUrl(order_money float64, time_expire string) (string, string, error) {
 	tradeno := a.GetTradeno()
-	bizContent := BizContent{
+	bizPcContent := BizPcContent{
 		Subject:      a.Subject,
 		OutTradeNo:   tradeno,
 		TotalAmount:  order_money / 100,
 		ProductCode:  "FAST_INSTANT_TRADE_PAY",
 		Qr_pay_mode:  "4",
-		Qrcode_width: a.Qr_width,
+		Qrcode_width: a.PC_Qr_width,
 		Time_expire:  time_expire,
 	}
-	bizbyte, err := json.Marshal(bizContent)
+	bizbyte, err := json.Marshal(bizPcContent)
 	if err != nil {
 		return "", "", err
 	}
 	var data = url.Values{}
 	data.Add("app_id", Alipay.Appid)
 	data.Add("method", "alipay.trade.page.pay")
-	if a.CallBackUrl != "" {
-		data.Add("notify_url", a.CallBackUrl) //支付完成回调地址
-	}
-	if a.ReturnUrl != "" {
-		data.Add("return_url", a.ReturnUrl)
+	if a.PC_CallBackUrl != "" {
+		data.Add("notify_url", a.PC_CallBackUrl) //支付完成回调地址
 	}
 	data.Add("format", "json")
 	data.Add("charset", "UTF-8")
@@ -129,6 +141,41 @@ func (a *AliPayStruct) GetPayUrl(order_money float64, time_expire string) (strin
 	return a.Requseturl + "?" + data.Encode(), tradeno, nil
 }
 
+//app支付获取支付token
+func (a *AliPayStruct) GetAliPayToken(order_money float64) (string, string, error) {
+	tradeno := a.GetTradeno()
+	bizAppContent := BizAppContent{
+		Subject:     a.Subject,
+		OutTradeNo:  tradeno,
+		TotalAmount: order_money / 100,
+		ProductCode: "QUICK_MSECURITY_PAY",
+	}
+	bizbyte, err := json.Marshal(bizAppContent)
+	if err != nil {
+		return "", "", err
+	}
+	var data = url.Values{}
+	data.Add("app_id", Alipay.Appid)
+	data.Add("method", "alipay.trade.app.pay")
+	if a.APP_CallBackUrl != "" {
+		data.Add("notify_url", a.APP_CallBackUrl) //支付完成回调地址
+	}
+	data.Add("format", "json")
+	data.Add("charset", "UTF-8")
+	data.Add("sign_type", "RSA2")
+	data.Add("timestamp", time.Now().Format("2006-01-02 15:04:05"))
+	data.Add("version", "1.0")
+	data.Add("biz_content", string(bizbyte))
+
+	signContentBytes, _ := url.QueryUnescape(data.Encode())
+	signature, err := a.getSign([]byte(signContentBytes))
+	if err != nil {
+		return "", "", err
+	}
+	data.Add("sign", signature)
+	return data.Encode(), tradeno, nil
+}
+
 //加载秘钥
 func parsePrivateKey(key string) (*rsa.PrivateKey, error) {
 	block, _ := pem.Decode([]byte(key))
@@ -200,9 +247,82 @@ func (a *AliPayStruct) checkCallBackSign(param, sign string) bool {
 	return true
 }
 
-//支付宝支付回调
-func (a *AliPayAction) PayCallback() {
-	checkSign := a.GetForm()
+//支付宝关闭订单(生成的订单二维码,未扫码无法关闭订单)
+func (a *AliPayStruct) CloseOrder(tradeno string) bool {
+	toClose := CloseContent{
+		OutTradeNo: tradeno,
+	}
+	bizbyte, err := json.Marshal(toClose)
+	if err != nil {
+		log.Println()
+		return false
+	}
+	var data = url.Values{}
+	data.Add("app_id", Alipay.Appid)
+	data.Add("method", "alipay.trade.close")
+	data.Add("format", "json")
+	data.Add("charset", "UTF-8")
+	data.Add("sign_type", "RSA2")
+	data.Add("timestamp", time.Now().Format("2006-01-02 15:04:05"))
+	data.Add("version", "1.0")
+	data.Add("biz_content", string(bizbyte))
+	signContentBytes, _ := url.QueryUnescape(data.Encode())
+	log.Println(signContentBytes)
+	signature, err := a.getSign([]byte(signContentBytes))
+	if err != nil {
+		log.Println(tradeno, "获取签名出错", err)
+		return false
+	}
+	data.Add("sign", signature)
+
+	url := a.Requseturl + "?" + data.Encode()
+	//clien 优化
+	client := http.Client{Jar: nil}
+	req, _ := http.NewRequest("POST", url, nil)
+	res, err := client.Do(req)
+	if err != nil {
+		log.Printf("%s支付宝关闭订单  请求出错%v\n", tradeno, err)
+		return false
+	}
+	bArr, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		log.Printf("%s支付宝关闭订单  读取相应出错%v\n", tradeno, err)
+		return false
+	}
+	m := map[string]interface{}{}
+	err = json.Unmarshal(bArr, &m)
+	if err != nil {
+		log.Println(string(bArr))
+		log.Println("%s支付宝关闭订单   解析相应参数出错%v\n", tradeno, err)
+	}
+	msg := (*util.ObjToMap(m["alipay_trade_close_response"]))["sub_msg"]
+	log.Printf("%s msg:%s 订单关闭相应参数  %+v", tradeno, msg, m)
+	if msg == "交易状态不合法" || msg == "REASON_ILLEGAL_STATUS" { //已支付
+		return false
+	}
+	return true
+}
+
+//pc支付回调地址
+type AliPcPayAction struct {
+	*xweb.Action
+	payCallback xweb.Mapper `xweb:"/alipay/pay/callback"`
+}
+
+//app支付回调地址
+type AliAppPayAction struct {
+	*xweb.Action
+	payCallback xweb.Mapper `xweb:"/app/alipay/pay/callback"`
+}
+
+func (a *AliPcPayAction) PayCallback() {
+	PayCallbackDetail(a.Request)
+}
+func (a *AliAppPayAction) PayCallback() {
+	PayCallbackDetail(a.Request)
+}
+func PayCallbackDetail(a *http.Request) {
+	checkSign := a.Form
 	sign := checkSign.Get("sign") //待验证签名
 	checkSign.Del("sign")
 	checkSign.Del("sign_type")
@@ -275,59 +395,3 @@ func (a *AliPayAction) PayCallback() {
 		log.Println("insertAliPay", insertAliPay)
 	}
 }
-
-//支付宝关闭订单(生成的订单二维码,未扫码无法关闭订单)
-func (a *AliPayStruct) CloseOrder(tradeno string) bool {
-	toClose := CloseContent{
-		OutTradeNo: tradeno,
-	}
-	bizbyte, err := json.Marshal(toClose)
-	if err != nil {
-		log.Println()
-		return false
-	}
-	var data = url.Values{}
-	data.Add("app_id", Alipay.Appid)
-	data.Add("method", "alipay.trade.close")
-	data.Add("format", "json")
-	data.Add("charset", "UTF-8")
-	data.Add("sign_type", "RSA2")
-	data.Add("timestamp", time.Now().Format("2006-01-02 15:04:05"))
-	data.Add("version", "1.0")
-	data.Add("biz_content", string(bizbyte))
-	signContentBytes, _ := url.QueryUnescape(data.Encode())
-	log.Println(signContentBytes)
-	signature, err := a.getSign([]byte(signContentBytes))
-	if err != nil {
-		log.Println(tradeno, "获取签名出错", err)
-		return false
-	}
-	data.Add("sign", signature)
-
-	url := a.Requseturl + "?" + data.Encode()
-	//clien 优化
-	client := http.Client{Jar: nil}
-	req, _ := http.NewRequest("POST", url, nil)
-	res, err := client.Do(req)
-	if err != nil {
-		log.Printf("%s支付宝关闭订单  请求出错%v\n", tradeno, err)
-		return false
-	}
-	bArr, err := ioutil.ReadAll(res.Body)
-	if err != nil {
-		log.Printf("%s支付宝关闭订单  读取相应出错%v\n", tradeno, err)
-		return false
-	}
-	m := map[string]interface{}{}
-	err = json.Unmarshal(bArr, &m)
-	if err != nil {
-		log.Println(string(bArr))
-		log.Println("%s支付宝关闭订单   解析相应参数出错%v\n", tradeno, err)
-	}
-	msg := (*util.ObjToMap(m["alipay_trade_close_response"]))["sub_msg"]
-	log.Printf("%s msg:%s 订单关闭相应参数  %+v", tradeno, msg, m)
-	if msg == "交易状态不合法" || msg == "REASON_ILLEGAL_STATUS" { //已支付
-		return false
-	}
-	return true
-}

+ 96 - 218
src/jfw/pay/dataExportPay.go

@@ -17,211 +17,16 @@ import (
 
 type DataExportPayAction struct {
 	*xweb.Action
-	sacnPay_WaitPay       xweb.Mapper `xweb:"/dataExport/sacnPay/waitPay"`        //生成支付二维码
-	sacnPay_CreateOrder   xweb.Mapper `xweb:"/dataExport/sacnPay/createOrder"`    //创建订单
-	isPaySuccess          xweb.Mapper `xweb:"/dataExport/pay/isPaySuccess"`       //是否支付成功
-	getOrderPayMsg        xweb.Mapper `xweb:"/dataexport/getOrderPayMsg"`         //我的订单页面获取支付二维码
-	wxSacnPay_CreateOrder xweb.Mapper `xweb:"/dataExport/wx_sacnPay/createOrder"` //微信端-创建订单
+	sacnPay_WaitPay     xweb.Mapper `xweb:"/dataExport/sacnPay/waitPay"`     //生成支付二维码
+	sacnPay_CreateOrder xweb.Mapper `xweb:"/dataExport/sacnPay/createOrder"` //创建订单
+	isPaySuccess        xweb.Mapper `xweb:"/dataExport/pay/isPaySuccess"`    //是否支付成功
+	getOrderPayMsg      xweb.Mapper `xweb:"/dataexport/getOrderPayMsg"`      //我的订单页面获取支付二维码
 }
 
 func init() {
 	xweb.AddAction(&DataExportPayAction{})
 }
 
-//微信端创建订单
-func (p *DataExportPayAction) WxSacnPay_CreateOrder() {
-	defer util.Catch()
-	openId, _ := p.GetSession("s_m_openid").(string)
-	userId, _ := p.GetSession("userId").(string)
-	id := util.SE.Decode4Hex(p.GetString("id"))
-	if userId == "" || id == "" {
-		log.Println("userId,id错误", userId, id)
-		p.ServeJson(map[string]interface{}{
-			"status": "n",
-		})
-		return
-	}
-	//
-	data_spec := p.GetString("data_spec")
-	if data_spec == "standard" {
-		data_spec = "标准字段包"
-	} else if data_spec == "senior" {
-		data_spec = "高级字段包"
-	}
-	user_mail_status := util.ObjToString(p.GetSession("DataExportVerifyEmail_val")) != ""
-	pay_way := p.GetString("pay_way")
-	user_mail, _ := p.GetSession("DataExportVerifyEmail_val").(string)
-	user_phone, _ := p.GetSession("DataExportVerifyPhone").(string)
-	if user_phone != "" {
-		p.SetSession("DataExportVerifyPhone_val", user_phone) //提交后下次默认带出手机号
-	} else {
-		user_phone, _ = p.GetSession("DataExportVerifyPhone_val").(string)
-	}
-	//先看有没有创建过预支付订单
-	oldOrder := public.Mysql.FindOne("dataexport_order", map[string]interface{}{
-		"user_id":   userId,
-		"filter_id": id,
-	}, "id,order_status,order_code,order_money,user_mail,user_phone,data_spec,prepay_time,prepay_id", "")
-	if oldOrder != nil {
-		if user_mail != "" && user_mail != util.ObjToString((*oldOrder)["user_mail"]) {
-			public.Mysql.Update("dataexport_order", map[string]interface{}{
-				"user_id":   userId,
-				"filter_id": id,
-			}, map[string]interface{}{
-				"user_mail": user_mail,
-			})
-		}
-		if user_phone != "" && user_phone != util.ObjToString((*oldOrder)["user_phone"]) {
-			public.Mysql.Update("dataexport_order", map[string]interface{}{
-				"user_id":   userId,
-				"filter_id": id,
-			}, map[string]interface{}{
-				"user_phone": user_phone,
-			})
-		}
-		//如果已支付,则返回
-		if util.IntAll((*oldOrder)["order_status"]) != 0 {
-			log.Println("该订单已存在,订单状态不允许支付!", openId)
-			p.ServeJson(map[string]interface{}{
-				"status": "n",
-			})
-			return
-		}
-		//价格支付方式变动需要重新生成订单二维码
-		if data_spec != "" && data_spec == util.ObjToString((*oldOrder)["data_spec"]) {
-			var res map[string]interface{}
-			nonceStr := util.GetRandom(16) + util.GetLetterRandom(16)
-			timestamp := time.Now().Unix()
-			sign := util.WxSign(fmt.Sprintf("appId=%s&nonceStr=%s&package=%s&signType=%s&timeStamp=%d&key=%s", public.WxStruct.Appid, nonceStr, "prepay_id="+util.ObjToString((*oldOrder)["prepay_id"]), "MD5", timestamp, public.WxStruct.Key))
-			res = map[string]interface{}{
-				"appId":     public.WxStruct.Appid,
-				"timestamp": fmt.Sprint(timestamp),
-				"signType":  "MD5",
-				"sign":      sign,
-				"nonceStr":  nonceStr,
-				"prepayId":  "prepay_id=" + util.ObjToString((*oldOrder)["prepay_id"]),
-			}
-			p.ServeJson(map[string]interface{}{
-				"status": "y",
-				"code":   util.ObjToString((*oldOrder)["order_code"]),
-				"token":  public.GetWaitPayToken(util.Int64All((*oldOrder)["id"]), util.IntAll((*oldOrder)["order_money"]), util.ObjToString((*oldOrder)["order_code"]), "微信", userId),
-				"res":    res,
-			})
-			return
-		}
-	}
-	//
-	data_count := public.GetDataExportSearchCountUseId(id)
-	if data_count > public.ExConf.MsgMaxCount {
-		data_count = public.ExConf.MsgMaxCount
-	}
-	order_money_, original_price_ := float64(0), float64(0)
-	if data_spec == "标准字段包" {
-		original_price_ = float64(data_count) * public.ExConf.UnitPrice_normal
-	} else if data_spec == "高级字段包" {
-		original_price_ = float64(data_count) * public.ExConf.UnitPrice_senior
-	}
-	order_money_ = float64(original_price_) * public.ExConf.Discount
-	if order_money_ < public.ExConf.OrderMinPrice {
-		order_money_ = public.ExConf.OrderMinPrice
-	}
-	if original_price_ < public.ExConf.OrderMinPrice {
-		original_price_ = public.ExConf.OrderMinPrice
-	}
-	order_money := int(order_money_ * 100)
-	original_price := int(original_price_ * 100)
-	//order_money = 1
-	//original_price = 1
-	filter_keys, filter_publishtime, filter := "", "", ""
-	//
-	isPass := func() bool {
-		if pay_way == "" || user_mail == "" || user_phone == "" || !user_mail_status || data_spec == "" || order_money <= 0 || data_count <= 0 || original_price <= 0 {
-			log.Println("参数不合法! pay_way, user_mail,user_phone, user_mail_status, data_spec, order_money, data_count, original_price", pay_way, user_mail, user_phone, user_mail_status, data_spec, order_money, data_count, original_price)
-			return false
-		}
-		userfilter, ok := public.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()
-			filter_publishtime = util.ObjToString((*userfilter)["publishtime"])
-			filterByte, _ := json.Marshal(userfilter)
-			filter = string(filterByte)
-		} else {
-			log.Println("id is not find in mongodb", userId, id)
-			return false
-		}
-		return true
-	}()
-	nickname, _ := p.GetSession("s_nickname").(string)
-	result := map[string]interface{}{
-		"status": "n",
-	}
-	if isPass {
-		//创建微信预支付订单,微信端支付tradeclass:c
-		tradeno, ret := public.WxStruct.CreatePrepayOrder(config.Sysconfig["weixinrpc"].(string), "c", p.IP(), openId, "", order_money)
-		log.Println("支付交易单", openId, ret)
-		if ret != nil && (*ret)["status"] == "1" {
-			now := time.Now()
-			ordercode := public.GetOrderCode(openId)
-			orderid := public.Mysql.Insert("dataexport_order", map[string]interface{}{
-				"order_money":        order_money,
-				"order_status":       0,
-				"service_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,
-				"user_phone":         user_phone,
-				"data_count":         data_count,
-				"filter_publishtime": filter_publishtime,
-				"filter_keys":        filter_keys,
-				"filter_id":          id,
-				"pay_way":            pay_way,
-				"user_id":            userId, //20190719 移动端数据导出 生订单添加用户id
-			})
-			if orderid > 0 {
-				var res map[string]interface{}
-				nonceStr := util.GetRandom(16) + util.GetLetterRandom(16)
-				timestamp := time.Now().Unix()
-				sign := util.WxSign(fmt.Sprintf("appId=%s&nonceStr=%s&package=%s&signType=%s&timeStamp=%d&key=%s", public.WxStruct.Appid, nonceStr, "prepay_id="+util.ObjToString((*ret)["prepayid"]), "MD5", timestamp, public.WxStruct.Key))
-				res = map[string]interface{}{
-					"appId":     public.WxStruct.Appid,
-					"timestamp": fmt.Sprint(timestamp),
-					"signType":  "MD5",
-					"sign":      sign,
-					"nonceStr":  nonceStr,
-					"prepayId":  "prepay_id=" + util.ObjToString((*ret)["prepayid"]),
-				}
-				p.SetSession("DataExportVerifyPhone_val", user_phone)
-				result["status"] = "y"
-				result["code"] = ordercode
-				result["token"] = public.GetWaitPayToken(orderid, order_money, ordercode, pay_way, userId)
-				result["res"] = res
-			}
-		} else {
-			log.Println("生成微信预支付交易单失败", ret)
-		}
-	}
-	p.ServeJson(result)
-}
-
 //
 func (p *DataExportPayAction) SacnPay_WaitPay() error {
 	defer util.Catch()
@@ -327,6 +132,10 @@ func (p *DataExportPayAction) SacnPay_CreateOrder() {
 	}
 	user_mail_status := util.ObjToString(p.GetSession("DataExportVerifyEmail_val")) != ""
 	pay_way := p.GetString("pay_way")
+	tradeclass := "b"
+	if pay_way == "wx_js" {
+		tradeclass = "c"
+	}
 	user_mail, _ := p.GetSession("DataExportVerifyEmail_val").(string)
 	user_phone, _ := p.GetSession("DataExportVerifyPhone").(string)
 	if user_phone != "" {
@@ -367,12 +176,12 @@ func (p *DataExportPayAction) SacnPay_CreateOrder() {
 		//价格支付方式变动需要重新生成订单二维码(关闭之前的订单)
 		if (data_spec != "" && data_spec != util.ObjToString((*oldOrder)["data_spec"])) || pay_way != util.ObjToString((*oldOrder)["pay_way"]) {
 			//在此关闭之前的订单
-			if !CloseDataExportOrder(util.ObjToString((*oldOrder)["pay_way"]), util.ObjToString((*oldOrder)["out_trade_no"]), util.ObjToString((*oldOrder)["prepay_time"])) {
-				p.ServeJson(map[string]interface{}{
-					"status": "n",
-				})
-				return
-			}
+			//			if !CloseDataExportOrder(util.ObjToString((*oldOrder)["pay_way"]), util.ObjToString((*oldOrder)["out_trade_no"]), util.ObjToString((*oldOrder)["prepay_time"])) {
+			//				p.ServeJson(map[string]interface{}{
+			//					"status": "n",
+			//				})
+			//				return
+			//			}
 			data_count := public.GetDataExportSearchCountUseId(id)
 			if data_count > public.ExConf.MsgMaxCount {
 				data_count = public.ExConf.MsgMaxCount
@@ -394,21 +203,76 @@ func (p *DataExportPayAction) SacnPay_CreateOrder() {
 			original_price := int(original_price_ * 100)
 			prepayTime, _ := time.ParseInLocation(util.Date_Full_Layout, util.ObjToString((*oldOrder)["prepay_time"]), time.Local)
 			surplus_second := prepayTime.Unix() - 7200 //价格变动  支付二维码更新成超时状态--重新生订单二维码
-			public.Mysql.Update("dataexport_order", map[string]interface{}{
-				"user_id":   userId,
-				"filter_id": id,
-			}, map[string]interface{}{
-				"data_spec":      data_spec,
-				"order_money":    order_money,
-				"original_price": original_price,
-				"prepay_time":    util.FormatDateByInt64(&surplus_second, util.Date_Full_Layout),
-				"pay_way":        pay_way,
-			})
+			//价格变动需重新生预支付订单 更新原来得库的信息
+			var res map[string]interface{}
+			if pay_way == "wx_js" {
+				now := time.Now()
+				tradeno, ret := public.WxStruct.CreatePrepayOrder(config.Sysconfig["weixinrpc"].(string), tradeclass, p.IP(), openId, "", order_money)
+				nonceStr := util.GetRandom(16) + util.GetLetterRandom(16)
+				timestamp := time.Now().Unix()
+				sign := util.WxSign(fmt.Sprintf("appId=%s&nonceStr=%s&package=%s&signType=%s&timeStamp=%d&key=%s", public.WxStruct.Appid, nonceStr, "prepay_id="+util.ObjToString((*ret)["prepayid"]), "MD5", timestamp, public.WxStruct.Key))
+				res = map[string]interface{}{
+					"appId":     public.WxStruct.Appid,
+					"timestamp": fmt.Sprint(timestamp),
+					"signType":  "MD5",
+					"sign":      sign,
+					"nonceStr":  nonceStr,
+					"prepayId":  "prepay_id=" + util.ObjToString((*ret)["prepayid"]),
+				}
+				public.Mysql.Update("dataexport_order", map[string]interface{}{
+					"user_id":   userId,
+					"filter_id": id,
+				}, map[string]interface{}{
+					"data_spec":      data_spec,
+					"order_money":    order_money,
+					"original_price": original_price,
+					"prepay_time":    util.FormatDate(&now, util.Date_Full_Layout),
+					"pay_way":        pay_way,
+					"prepay_id":      (*ret)["prepayid"],
+					"code_url":       (*ret)["codeurl"],
+					"out_trade_no":   tradeno,
+				})
+			} else {
+				public.Mysql.Update("dataexport_order", map[string]interface{}{
+					"user_id":   userId,
+					"filter_id": id,
+				}, map[string]interface{}{
+					"data_spec":      data_spec,
+					"order_money":    order_money,
+					"original_price": original_price,
+					"prepay_time":    util.FormatDateByInt64(&surplus_second, util.Date_Full_Layout),
+					"pay_way":        pay_way,
+				})
+			}
 			(*oldOrder)["order_money"] = order_money
 			p.ServeJson(map[string]interface{}{
 				"status": "y",
 				"code":   util.ObjToString((*oldOrder)["order_code"]),
 				"token":  public.GetWaitPayToken(util.Int64All((*oldOrder)["id"]), util.IntAll((*oldOrder)["order_money"]), util.ObjToString((*oldOrder)["order_code"]), "微信", userId),
+				"res":    res,
+			})
+			return
+		} else if data_spec != "" && data_spec == util.ObjToString((*oldOrder)["data_spec"]) {
+			//微信端 价格没有变动则无需重新生预支付订单
+			var res map[string]interface{}
+			if pay_way == "wx_js" {
+				nonceStr := util.GetRandom(16) + util.GetLetterRandom(16)
+				timestamp := time.Now().Unix()
+				sign := util.WxSign(fmt.Sprintf("appId=%s&nonceStr=%s&package=%s&signType=%s&timeStamp=%d&key=%s", public.WxStruct.Appid, nonceStr, "prepay_id="+util.ObjToString((*oldOrder)["prepay_id"]), "MD5", timestamp, public.WxStruct.Key))
+				res = map[string]interface{}{
+					"appId":     public.WxStruct.Appid,
+					"timestamp": fmt.Sprint(timestamp),
+					"signType":  "MD5",
+					"sign":      sign,
+					"nonceStr":  nonceStr,
+					"prepayId":  "prepay_id=" + util.ObjToString((*oldOrder)["prepay_id"]),
+				}
+			}
+			p.ServeJson(map[string]interface{}{
+				"status": "y",
+				"code":   util.ObjToString((*oldOrder)["order_code"]),
+				"token":  public.GetWaitPayToken(util.Int64All((*oldOrder)["id"]), util.IntAll((*oldOrder)["order_money"]), util.ObjToString((*oldOrder)["order_code"]), "微信", userId),
+				"res":    res,
 			})
 			return
 		}
@@ -469,9 +333,8 @@ func (p *DataExportPayAction) SacnPay_CreateOrder() {
 	}
 	if isPass {
 		//创建微信预支付订单
-		if pay_way == "wx_pc" {
-			tradeno, ret := public.WxStruct.CreatePrepayOrder(config.Sysconfig["weixinrpc"].(string), "b", p.IP(), openId, "", order_money)
-			log.Println("支付交易单", openId, ret)
+		if pay_way == "wx_pc" || pay_way == "wx_js" {
+			tradeno, ret := public.WxStruct.CreatePrepayOrder(config.Sysconfig["weixinrpc"].(string), tradeclass, p.IP(), openId, "", order_money)
 			if ret != nil && (*ret)["status"] == "1" {
 				now := time.Now()
 				ordercode := public.GetOrderCode(openId)
@@ -501,10 +364,25 @@ func (p *DataExportPayAction) SacnPay_CreateOrder() {
 					"user_id":            userId, //20190719 移动端数据导出 生订单添加用户id
 				})
 				if orderid > 0 {
+					var res map[string]interface{}
+					if pay_way == "wx_js" {
+						nonceStr := util.GetRandom(16) + util.GetLetterRandom(16)
+						timestamp := time.Now().Unix()
+						sign := util.WxSign(fmt.Sprintf("appId=%s&nonceStr=%s&package=%s&signType=%s&timeStamp=%d&key=%s", public.WxStruct.Appid, nonceStr, "prepay_id="+util.ObjToString((*ret)["prepayid"]), "MD5", timestamp, public.WxStruct.Key))
+						res = map[string]interface{}{
+							"appId":     public.WxStruct.Appid,
+							"timestamp": fmt.Sprint(timestamp),
+							"signType":  "MD5",
+							"sign":      sign,
+							"nonceStr":  nonceStr,
+							"prepayId":  "prepay_id=" + util.ObjToString((*ret)["prepayid"]),
+						}
+					}
 					p.SetSession("DataExportVerifyPhone_val", user_phone)
 					result["status"] = "y"
 					result["code"] = ordercode
 					result["token"] = public.GetWaitPayToken(orderid, order_money, ordercode, pay_way, userId)
+					result["res"] = res
 				}
 			} else {
 				log.Println("生成微信预支付交易单失败", ret)

+ 2 - 2
src/jfw/pay/weixin.go

@@ -173,7 +173,7 @@ func (p *WxPayAction) WxPay() error {
 	return nil
 }
 
-//pc端扫码支付才会回调,微信端直接支付并没有
+//微信支付成功后回调
 func (p *WxPayAction) PayCallback() {
 	defer util.Catch()
 	by := p.Body()
@@ -226,7 +226,7 @@ func (p *WxPayAction) PayCallback() {
 							"pay_money":    util.IntAll(ret["cash_fee"]),
 							"pay_time":     pay_time,
 							"order_status": 1,
-							"pay_way":      "微信",
+							//"pay_way":      "微信",
 							"download_url": download_url,
 						})
 						if flag_1 {

+ 2 - 2
src/web/templates/weixin/dataExport/dataExport_payOrder.html

@@ -528,11 +528,11 @@
 					canpay=false;
 					
 					var param={};
-					param.pay_way="M-微信";
+					param.pay_way="wx_js";
 					param.data_spec=dataType==2?"senior":"standard";
 					param.id={{.T._id}}
 					//先去创建预支付订单
-					$.post("/dataExport/wx_sacnPay/createOrder",param,function(data){
+					$.post("/dataExport/sacnPay/createOrder",param,function(data){
 						//alert(JSON.stringify(data))
 						if(data.status=="y"){
 							sessionStorage.setItem("order_spec"+{{.T._id}}, dataType);