xuzhiheng 5 年之前
父节点
当前提交
103efb52e7
共有 61 个文件被更改,包括 1329 次插入1091 次删除
  1. 1 1
      src/config.json
  2. 0 30
      src/jfw/front/dataExport.go
  3. 28 26
      src/jfw/front/swordfish.go
  4. 13 13
      src/jfw/front/vipsubscribe.go
  5. 3 0
      src/jfw/front/wxMyOrder.go
  6. 5 5
      src/jfw/modules/subscribepay/src/a/init.go
  7. 1 0
      src/jfw/modules/subscribepay/src/config.json
  8. 5 10
      src/jfw/modules/subscribepay/src/config/config.go
  9. 9 10
      src/jfw/modules/subscribepay/src/entity/dataexport.go
  10. 114 25
      src/jfw/modules/subscribepay/src/entity/subscribeVip.go
  11. 16 2
      src/jfw/modules/subscribepay/src/main.go
  12. 57 34
      src/jfw/modules/subscribepay/src/pay/aliPay.go
  13. 27 7
      src/jfw/modules/subscribepay/src/pay/util.go
  14. 5 4
      src/jfw/modules/subscribepay/src/pay/wxPay.go
  15. 27 15
      src/jfw/modules/subscribepay/src/rpcfollow/rpc.go
  16. 35 9
      src/jfw/modules/subscribepay/src/service/afterPay.go
  17. 31 1
      src/jfw/modules/subscribepay/src/service/commonAction.go
  18. 5 3
      src/jfw/modules/subscribepay/src/service/dataExportPay_mobile.go
  19. 3 27
      src/jfw/modules/subscribepay/src/service/dataExportPay_pc.go
  20. 18 64
      src/jfw/modules/subscribepay/src/service/orderListDetails.go
  21. 3 1
      src/jfw/modules/subscribepay/src/service/payCallback.go
  22. 0 176
      src/jfw/modules/subscribepay/src/service/trial.go
  23. 4 4
      src/jfw/modules/subscribepay/src/service/vipSubscribeEdit.go
  24. 52 39
      src/jfw/modules/subscribepay/src/service/vipSubscribePay.go
  25. 166 6
      src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go
  26. 二进制
      src/jfw/modules/subscribepay/src/web/staticres/res/dataexport/20191102164927_144238100357_zxkMq.xlsx
  27. 1 0
      src/jfw/modules/subscribepay/src/web/staticres/res/dataexport/a.txt
  28. 62 8
      src/jfw/public/historypush.go
  29. 1 1
      src/jfw/rpcfollow/rpc.go
  30. 13 7
      src/web/staticres/vipsubscribe/css/choose_area.css
  31. 10 3
      src/web/staticres/vipsubscribe/css/choose_industry.css
  32. 10 8
      src/web/staticres/vipsubscribe/css/keyWord.css
  33. 5 4
      src/web/staticres/vipsubscribe/css/subscribe_list.css
  34. 8 0
      src/web/staticres/vipsubscribe/css/trial_info.css
  35. 1 1
      src/web/staticres/vipsubscribe/css/vip_index.css
  36. 6 4
      src/web/staticres/vipsubscribe/css/vip_introduce.css
  37. 2 0
      src/web/staticres/vipsubscribe/css/vip_order_detail.css
  38. 2 0
      src/web/staticres/vipsubscribe/css/vip_pay_success.css
  39. 4 0
      src/web/staticres/vipsubscribe/css/vip_purchase.css
  40. 26 0
      src/web/staticres/vipsubscribe/js/keyWord.js
  41. 8 4
      src/web/templates/pc/myOrder.html
  42. 1 1
      src/web/templates/weixin/dataExport/dataExport_applyInvoice.html
  43. 22 317
      src/web/templates/weixin/dataExport/dataExport_toMyOrder.html
  44. 5 2
      src/web/templates/weixin/email/bind_email.html
  45. 7 2
      src/web/templates/weixin/email/bind_success.html
  46. 5 2
      src/web/templates/weixin/email/unbind_email.html
  47. 147 109
      src/web/templates/weixin/historypush.html
  48. 5 1
      src/web/templates/weixin/my.html
  49. 3 0
      src/web/templates/weixin/vipsubscribe/choose_area.html
  50. 2 0
      src/web/templates/weixin/vipsubscribe/choose_industry.html
  51. 5 4
      src/web/templates/weixin/vipsubscribe/edit_subscribe.html
  52. 1 1
      src/web/templates/weixin/vipsubscribe/edit_subscribe_city.html
  53. 217 11
      src/web/templates/weixin/vipsubscribe/keyWord.html
  54. 1 1
      src/web/templates/weixin/vipsubscribe/modal.html
  55. 1 1
      src/web/templates/weixin/vipsubscribe/trial_info.html
  56. 4 4
      src/web/templates/weixin/vipsubscribe/vip_index.html
  57. 2 2
      src/web/templates/weixin/vipsubscribe/vip_introduce.html
  58. 74 51
      src/web/templates/weixin/vipsubscribe/vip_order_detail.html
  59. 16 14
      src/web/templates/weixin/vipsubscribe/vip_pay_success.html
  60. 15 7
      src/web/templates/weixin/vipsubscribe/vip_purchase.html
  61. 9 9
      src/web/templates/weixin/vipsubscribe/vip_viewPage.html

+ 1 - 1
src/config.json

@@ -10,7 +10,7 @@
     "strTimeNumber": 30,
     "elasticsearch": "http://192.168.3.128:9800",
     "elasticPoolSize": 30,
-    "redisaddrs": "other=192.168.3.128:1712,push=192.168.3.128:1712,pushcache_1=192.168.3.128:1712,pushcache_2_a=192.168.3.128:1712,pushcache_2_b=192.168.3.128:1712,sso=192.168.3.128:1712,session=192.168.3.128:1712,recovery=192.168.3.128:1712",
+    "redisaddrs": "other=192.168.3.128:1712,push=192.168.3.128:1712,pushcache_1=192.168.3.128:5000,pushcache_2_a=192.168.3.128:5001,pushcache_2_b=192.168.3.128:5002,sso=192.168.3.128:1712,session=192.168.3.128:1712,recovery=192.168.3.128:1712",
     "redislogin": "login=192.168.3.128:1712",
     "webport": "83",
     "webrpcport": "8084",

+ 0 - 30
src/jfw/front/dataExport.go

@@ -6,8 +6,6 @@ import (
 	"errors"
 	"fmt"
 	"jfw/config"
-
-	//	"jfw/pay"
 	"jfw/public"
 	"log"
 	"qfw/util"
@@ -28,7 +26,6 @@ type DataExport struct {
 	sieveData     xweb.Mapper `xweb:"/front/dataExport/sieveData"`           //筛选数据
 	toMyOrder     xweb.Mapper `xweb:"/front/dataExport/toMyOrder"`           //我的订单
 	queryOrder    xweb.Mapper `xweb:"/front/dataExport/queryOrder"`          //查询我的订单
-	deleteOrder   xweb.Mapper `xweb:"/front/dataExport/deleteOrder"`         //删除订单
 	toOrderDetail xweb.Mapper `xweb:"/front/dataExport/toOrderDetail/(.*)"`  //订单详情
 	getOrderCode  xweb.Mapper `xweb:"/front/dataExport/getOrderCode/(\\w+)"` //申请发票获取订单编号
 
@@ -262,33 +259,6 @@ func (d *DataExport) CancelOrder() error {
 	return nil
 }
 
-/**
-
-根据 id+openid 删除
-*/
-func (d *DataExport) DeleteOrder() error {
-	if userId := d.GetSession("userId"); userId != nil {
-		queryMap := map[string]interface{}{
-			"id":      d.GetString("id"),
-			"user_id": userId.(string),
-		}
-		flag := false
-		order := public.Mysql.FindOne(tableName_order, queryMap, "pay_way,out_trade_no,prepay_time,order_status", "")
-		if order != nil {
-			if util.IntAll((*order)["order_status"]) == 0 { //未支付状态下 删除订单需要先关闭订单
-				//flag = pay.CloseDataExportOrder(util.ObjToString((*order)["pay_way"]), util.ObjToString((*order)["out_trade_no"]), util.ObjToString((*order)["prepay_time"]))
-			} else {
-				flag = true
-			}
-		}
-		if flag {
-			flag = public.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -1})
-		}
-		d.ServeJson(map[string]interface{}{"success": flag})
-	}
-	return nil
-}
-
 /**
 根据 订单编号+userId 查询
 */

+ 28 - 26
src/jfw/front/swordfish.go

@@ -1547,15 +1547,11 @@ func (m *Front) Share(openids string) error {
 }
 func (m *Front) WxpushAjaxReq() error {
 	defer util.Catch()
-	index, _ := m.GetInteger("index")
-	date, _ := m.GetInt("_id")
-	userid := util.ObjToString(m.GetSession("userId"))
-	vsid := m.GetString("vsid")
-	times := m.GetString("times")
-	if times != "" {
-		jy.HistoryPush.ClearPushCache(userid)
+	userId := util.ObjToString(m.GetSession("userId"))
+	if userId != "" {
+		vsid := m.GetString("vsid")
+		public.HistoryPush.Visit_Mysql(userId, vsid)
 	}
-	public.HistoryPush.Visit(userid, vsid, date, index)
 	return nil
 }
 
@@ -2354,30 +2350,28 @@ func (f *Front) HasPushHistory() {
 	//获取时间
 	var formatTime string
 	selectTime := f.GetString("selectTime")
-	log.Println("selecttime:", selectTime)
 	lenStr := len([]rune(selectTime))
 	if selectTime != "" {
 		if selectTime != "undefined" && lenStr >= 10 {
 			selectTime = selectTime[0:10]
 			select_time, _ := strconv.ParseInt(selectTime, 10, 64)
 			//转化
-			formatTime = time.Unix(select_time, 0).Format("20060102")
+			formatTime = time.Unix(select_time, 0).Format("2006-01-02")
 		} else if lenStr < 10 {
-			formatTime = "1111111111"
+			formatTime = ""
 		}
 	}
 	userId := util.ObjToString(f.GetSession("userId"))
 	if userId == "" {
 		return
 	}
-	user, firstPushTime := public.HistoryPush.UserInfo(userId)
+	user, _ := public.HistoryPush.UserInfo(userId)
 	hasKeyFlag := false
 	isVipFlag := false
 	isPassCount := false
 	isExpire := 0
 	tedayNum := time.Unix(time.Now().Unix(), 1).Format("20060102")
 	isOnTail := 0
-	log.Println(tedayNum)
 	if util.IntAll((*user)["i_vip_status"]) == 1 || util.IntAll((*user)["i_vip_status"]) == 2 {
 		//
 		var threeRemind = int64(3 * 24 * 60 * 60)
@@ -2411,13 +2405,19 @@ func (f *Front) HasPushHistory() {
 		}
 		isPassCount = redis.GetInt("pushcache_2_a", "oncecount_"+tedayNum+"_"+userId) > 50
 	}
-	hasNextPage, list, err := public.HistoryPush.Datas(userId, 1, firstPushTime, formatTime)
-	if err == nil && hasKeyFlag && len(list) == 0 && formatTime == "" && !isVipFlag {
-		flag, data := public.HistoryPush.MakeHistoryDatas(userId, bidSearch_field_1)
-		if flag && data != nil {
-			list = data
-		}
+	//	hasNextPage, list, err := public.HistoryPush.Datas(userId, 1, firstPushTime, formatTime)
+	//	if err == nil && hasKeyFlag && len(list) == 0 && formatTime == "" && !isVipFlag {
+	//		flag, data := public.HistoryPush.MakeHistoryDatas(userId, bidSearch_field_1)
+	//		if flag && data != nil {
+	//			list = data
+	//		}
+	//	}
+	pageNum, _ := f.GetInteger("pageNum")
+	if pageNum == 0 {
+		pageNum = 1
 	}
+	area := f.GetString("area")
+	hasNextPage, list := public.HistoryPush.Datas_Mysql(userId, pageNum, formatTime, area)
 	//
 	f.ServeJson(map[string]interface{}{
 		"haskey":      hasKeyFlag,
@@ -2482,17 +2482,19 @@ func (f *Front) HistorypushPaging() error {
 		selectTime = selectTime[0:10]
 		select_time, _ := strconv.ParseInt(selectTime, 10, 64)
 		//转化
-		formatTime = time.Unix(select_time, 0).Format("20060102")
+		formatTime = time.Unix(select_time, 0).Format("2006-01-02")
 	}
-	log.Println("~~~~~:", formatTime, "~~~~", selectTime, "~~~", pageNum)
+	area := f.GetString("area")
+	log.Println("~~~~~:", formatTime, "~~~~", selectTime, "~~~", pageNum, "~~~", area)
 	//
 	userId := util.ObjToString(f.GetSession("userId"))
 	if userId != "" {
-		user, firstPushTime := public.HistoryPush.UserInfo(userId)
-		if user == nil {
-			return nil
-		}
-		hasNextPage, list, _ := public.HistoryPush.Datas(userId, pageNum, firstPushTime, formatTime)
+		//		user, firstPushTime := public.HistoryPush.UserInfo(userId)
+		//		if user == nil {
+		//			return nil
+		//		}
+		hasNextPage, list := public.HistoryPush.Datas_Mysql(userId, pageNum, formatTime, area)
+		//		hasNextPage, list, _ := public.HistoryPush.Datas(userId, pageNum, firstPushTime, formatTime)
 		f.ServeJson(map[string]interface{}{
 			"hasNextPage": hasNextPage,
 			"data":        list,

+ 13 - 13
src/jfw/front/vipsubscribe.go

@@ -8,19 +8,19 @@ import (
 
 type Subscribepay struct {
 	*xweb.Action
-	introduce         xweb.Mapper `xweb:"/front/vipsubscribe/introducePage"`       //订阅收费介绍页
-	trialInfo         xweb.Mapper `xweb:"/front/vipsubscribe/trialInfo"`           //vip订阅服务-用户信息录入页面
-	toPurchasePage    xweb.Mapper `xweb:"/front/vipsubscribe/toPurchasePage/(.*)"` //订阅收费购买页面(试用用户)
-	toChooseArea      xweb.Mapper `xweb:"/front/vipsubscribe/toChooseArea"`        //订阅收费地区筛选
-	toChooseIndustry  xweb.Mapper `xweb:"/front/vipsubscribe/toChooseIndustry"`    //订阅收费行业筛选
-	toPaySuccessPage  xweb.Mapper `xweb:"/front/vipsubscribe/toPaySuccessPage"`    //订阅支付完成页面
-	toOrderDetailPage xweb.Mapper `xweb:"/front/vipsubscribe/toOrderDetailPage"`   //订阅收费支付订单详情页面
-	toSetKeyWordPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetKeyWordPage"`    //订阅收费设置关键词
-	toSetPage         xweb.Mapper `xweb:"/front/vipsubscribe/toSetPage"`           //订阅收费设置
-	toSetInfoTypePage xweb.Mapper `xweb:"/front/vipsubscribe/toSetInfoTypePage"`   //订阅收费设置信息类型
-	toSetPushSetPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetPushSetPage"`    //订阅收费推送设置
-	toSetOtherKwsPage xweb.Mapper `xweb:"/front/vipsubscribe/toSet(.*)Page"`       //订阅收费附加词和排除词设置
-	toVIPViewPage     xweb.Mapper `xweb:"/front/vipsubscribe/toVIPViewPage"`       //订阅收费预览
+	introduce         xweb.Mapper `xweb:"/front/vipsubscribe/introducePage"`     //订阅收费介绍页
+	trialInfo         xweb.Mapper `xweb:"/front/vipsubscribe/trialInfo"`         //vip订阅服务-用户信息录入页面
+	toPurchasePage    xweb.Mapper `xweb:"/weixin/pay/vipsubscribe_(.*)"`         //订阅收费购买页面(试用用户)
+	toChooseArea      xweb.Mapper `xweb:"/front/vipsubscribe/toChooseArea"`      //订阅收费地区筛选
+	toChooseIndustry  xweb.Mapper `xweb:"/front/vipsubscribe/toChooseIndustry"`  //订阅收费行业筛选
+	toPaySuccessPage  xweb.Mapper `xweb:"/front/vipsubscribe/toPaySuccessPage"`  //订阅支付完成页面
+	toOrderDetailPage xweb.Mapper `xweb:"/front/vipsubscribe/toOrderDetailPage"` //订阅收费支付订单详情页面
+	toSetKeyWordPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetKeyWordPage"`  //订阅收费设置关键词
+	toSetPage         xweb.Mapper `xweb:"/front/vipsubscribe/toSetPage"`         //订阅收费设置
+	toSetInfoTypePage xweb.Mapper `xweb:"/front/vipsubscribe/toSetInfoTypePage"` //订阅收费设置信息类型
+	toSetPushSetPage  xweb.Mapper `xweb:"/front/vipsubscribe/toSetPushSetPage"`  //订阅收费推送设置
+	toSetOtherKwsPage xweb.Mapper `xweb:"/front/vipsubscribe/toSet(.*)Page"`     //订阅收费附加词和排除词设置
+	toVIPViewPage     xweb.Mapper `xweb:"/front/vipsubscribe/toVIPViewPage"`     //订阅收费预览
 
 	//修改
 	toEditSubPage     xweb.Mapper `xweb:"/front/vipsubscribe/toEditSubPage"`     //订阅收费修改页面

+ 3 - 0
src/jfw/front/wxMyOrder.go

@@ -173,6 +173,9 @@ func (w *WxMyOrder) MyMenu() error {
 		if util.ObjToString((*res)["s_myemail"]) == "" {
 			w.T["isNoEmail"] = true
 		}
+		if util.Int64All((*res)["i_vip_status"]) == 1 || util.Int64All((*res)["i_vip_status"]) == 2 {
+			w.T["isVip"] = true
+		}
 	}
 	//分享
 	w.T["signature"] = wx.SignJSSDK(w.Site() + w.Url())

+ 5 - 5
src/jfw/modules/subscribepay/src/a/init.go

@@ -22,11 +22,11 @@ func init() {
 	xweb.RootApp().Logger.SetOutputLevel(1) //输出日志,改为4则不输出任何日志
 	//
 	xweb.AddRouter("/subscribepay", &service.AfterPay{})
-	xweb.AddRouter("/subscribepay", &service.Trial{})
-	xweb.AddRouter("/subscribepay", &service.Order{})
-	xweb.AddRouter("/subscribepay", &service.EditSub{})
-	//xweb.AddRouter("/subscribepay",&service.OrderListDetails{})
-	xweb.AddRouter("/subscribepay", &service.RenewUpgrade{})
+	xweb.AddRouter("/subscribepay", &service.TrialOrder{})       //试用&订单
+	xweb.AddRouter("/subscribepay", &service.SubVipPayOrder{})   //付费&订单
+	xweb.AddRouter("/subscribepay", &service.EditSub{})          //购买内容修改
+	xweb.AddRouter("/subscribepay", &service.OrderListDetails{}) //订单详情&列表
+	xweb.AddRouter("/subscribepay", &service.RenewUpgrade{})     //续费&升级
 
 	//数据导出
 	xweb.AddRouter("/jypay", &service.DataExportPayMobile{})

+ 1 - 0
src/jfw/modules/subscribepay/src/config.json

@@ -6,6 +6,7 @@
     "elasticsearch": "http://192.168.3.128:9800",
     "elasticPoolSize": 30,
     "webport": "86",
+    "webrpcport": "8600",
     "weixinrpc": "127.0.0.1:8083",
     "cassandra": {
         "log": {

+ 5 - 10
src/jfw/modules/subscribepay/src/config/config.go

@@ -13,6 +13,7 @@ type config struct {
 	ElasticPoolSize int
 	Redisaddrs      string
 	Webport         string
+	Webrpcport      string
 	Weixinrpc       string
 	Cassandra       struct {
 		Host []string
@@ -26,11 +27,11 @@ type config struct {
 		PassWord string
 	}
 	AppPushServiceRpc string
-	WebDomain string
-	Mail []struct{
+	WebDomain         string
+	Mail              []struct {
 		Addr string
 		Port int
-		Pwd string
+		Pwd  string
 		User string
 	}
 }
@@ -43,7 +44,7 @@ var PayConf map[string]interface{}
 var AliPayConf map[string]interface{}
 var WxPayConf map[string]interface{}
 
-var Wxoauth,Wxoauthinfo string
+var Wxoauth, Wxoauthinfo string
 
 func init() {
 	//程序配置文件
@@ -66,9 +67,3 @@ func init() {
 	Wxoauthinfo = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=` + qutil.ObjToString(WxPayConf["appid"]) + `&secret=` + qutil.ObjToString(WxPayConf["appsecret"]) + `&code=%s&grant_type=authorization_code`
 
 }
-
-
-
-
-
-

+ 9 - 10
src/jfw/modules/subscribepay/src/entity/dataexport.go

@@ -20,7 +20,7 @@ import (
 
 var ExConf *DataexportConfig
 
-func init()  {
+func init() {
 	qutil.ReadConfig("./dataexport.json", &ExConf)
 }
 
@@ -71,14 +71,14 @@ func (m *myWrite) Write(p []byte) (n int, err error) {
 	return
 }
 
-type dataExportStruct struct {}
+type dataExportStruct struct{}
 
 var JyDataExportStruct dataExportStruct
 
 //数据导出支付完成回调方法
-func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
+func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool {
 	now := time.Now()
-	update:=false
+	update := false
 	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
 		"out_trade_no": param.OutTradeno,
 		"order_money":  param.TotalFee,
@@ -91,8 +91,8 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
 		if order_status == 0 {
 			update = util.Mysql.Update("dataexport_order", map[string]interface{}{
 				"order_status": 0,
-				"out_trade_no":  param.OutTradeno ,
-				"order_money":  param.TotalFee ,
+				"out_trade_no": param.OutTradeno,
+				"order_money":  param.TotalFee,
 				//"user_openid":  openid,
 			}, map[string]interface{}{
 				"pay_money":    param.CashFee,
@@ -102,8 +102,8 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
 			})
 			if update {
 				//先发个通知
-				go SendNotice(orderdata, float64(param.CashFee) / 100, pay_time, download_url, config.GmailAuth)
-				go SendMailToPayUser(orderdata, float64(param.CashFee) / 100, pay_time, filename, download_url, config.GmailAuth)
+				go SendNotice(orderdata, float64(param.CashFee)/100, pay_time, download_url, config.GmailAuth)
+				go SendMailToPayUser(orderdata, float64(param.CashFee)/100, pay_time, filename, download_url, config.GmailAuth)
 				go SendMailToBJFinance(orderdata, pay_time, param.TransactionId, 1, config.GmailAuth)
 			}
 		} else {
@@ -113,7 +113,6 @@ func (d *dataExportStruct) PayCallBack(param *CallBackParam) bool{
 	return update
 }
 
-
 //发送邮箱验证码
 func SendMailIdentCode(to, code string, auth []*mail.GmailAuth) bool {
 	html := fmt.Sprintf(`<div>
@@ -121,7 +120,7 @@ func SendMailIdentCode(to, code string, auth []*mail.GmailAuth) bool {
 			%s,您好!
 		</div>
 		<div style="padding: 20px 70px 10px 70px;">
-			<p>您正在进行导出邮箱地址验证,请在邮件验证码输入框输入下方验证码:</p>
+			<p>您正在进行绑定邮箱地址验证,请在邮件验证码输入框输入下方验证码:</p>
 			<span style="font-weight: bold;font-size: x-large;">%s</span>
 			<p>请勿向任何人泄露您收到的验证码。</p>
 			<p>如果您没有使用剑鱼标讯,请忽略此邮件。</p>

+ 114 - 25
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -1,6 +1,8 @@
 package entity
+
 //vip订阅公共方法
 import (
+	"encoding/json"
 	"log"
 	"time"
 	"util"
@@ -10,20 +12,97 @@ import (
 	qutil "qfw/util"
 )
 
-//设置开始试用
-func StartTrial(userId string, area *map[string]interface{}, industry []string) bool {
+type vipSubscribeStruct struct{}
+
+var JyVipSubStruct vipSubscribeStruct
+
+type VipSimpleMsg struct {
+	Id         string                  `json:"_id"`
+	Area       *map[string]interface{} `json:"area"`
+	Industry   []string                `json:"industry"`
+	Cyclecount int                     `json:"cyclecount"`
+	Cycleunit  int                     `json:"cycleunit"`
+}
+
+//支付完成回调
+func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) (ok bool) {
+	now := time.Now()
+	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
+		"out_trade_no": param.OutTradeno,
+		"order_money":  param.TotalFee,
+	}, "id,filter,order_code,order_status,user_id", "")
+	pay_time := qutil.FormatDate(&now, qutil.Date_Full_Layout)
+	if orderdata != nil {
+		order_status := qutil.IntAll((*orderdata)["order_status"])
+		if order_status == 0 {
+			//计算时长
+			vmsg := VipSimpleMsg{}
+			filterStr := qutil.ObjToString((*orderdata)["filter"])
+			userid := qutil.ObjToString((*orderdata)["user_id"])
+			if err := json.Unmarshal([]byte(filterStr), &vmsg); err != nil {
+				log.Printf("%s vipSubscribeStruct PayCallBack Unmarshal 出错 [%s]\n", userid, filterStr)
+			}
+			startTime := time.Now()
+			var endTime time.Time
+			if vmsg.Cycleunit == 1 { //年
+				endTime = startTime.AddDate(vmsg.Cyclecount, 0, 0)
+			} else if vmsg.Cycleunit == 2 { //月
+				endTime = startTime.AddDate(0, vmsg.Cyclecount, 0)
+			}
+			update := util.Mysql.Update("dataexport_order", map[string]interface{}{
+				"order_status": 0,
+				"out_trade_no": param.OutTradeno,
+				"order_money":  param.TotalFee,
+				//"user_openid":  openid,
+			}, map[string]interface{}{
+				"pay_money":     param.CashFee,
+				"pay_time":      pay_time,
+				"order_status":  1,
+				"vip_starttime": qutil.FormatDate(&startTime, qutil.Date_Full_Layout),
+				"vip_endtime":   qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
+			})
+			if update {
+				if JyVipSubStruct.StartSubVip(userid, vmsg.Area, vmsg.Industry, startTime, endTime, false) {
+					ok = true
+				}
+			}
+		} else {
+			ok = true
+		}
+	}
+	return ok
+}
+
+//设置开始使用
+func (this *vipSubscribeStruct) StartSubVip(userId string, area *map[string]interface{}, industry []string, startTime, endTime time.Time, isTrial bool) bool {
+	buyset := [3]int{-1, -1, -1}
+	//a_buyset 计算  0:省份数量 1:城市数量 2:行业数量
+	if !isTrial {
+		if len(*area) > 0 {
+			areaCount := JyVipSubStruct.GetBuyAreaCount(area)
+			buyset[0] = areaCount[0] //省份数量
+			buyset[1] = areaCount[1] //城市数量
+		} else {
+			buyset[0] = -1
+			buyset[1] = -1
+		}
+		if len(industry) > 0 {
+			buyset[2] = len(industry) //行业数量
+		} else {
+			buyset[2] = -1
+		}
+	}
+
 	//计算服务时间
-	startTime := time.Now()
-	endTime := startTime.AddDate(0, 0, 7)
 	if !util.MQFW.UpdateById("user", userId,
 		bson.M{"$set": bson.M{
-			"o_vipjy.i_trial":      -1,                //已激活试用
-			"o_vipjy.o_area":       area,              //试用设置地区
-			"o_vipjy.a_buyerclass": industry,          //试用设置行业
-			"o_vipjy.a_buyset":     []int{-1, -1, -1}, //购买内容 城市、省份、行业数量
-			"l_vip_starttime":      startTime.Unix(),  //开始时间
-			"l_vip_endtime":        endTime.Unix(),    //结束时间
-			"i_vip_status":         1,                 //1试用 2正式
+			"o_vipjy.i_trial":      -1,                      //已激活试用
+			"o_vipjy.o_area":       area,                    //试用设置地区
+			"o_vipjy.a_buyerclass": industry,                //试用设置行业
+			"o_vipjy.a_buyset":     buyset,                  //购买内容 城市、省份、行业数量
+			"l_vip_starttime":      startTime.Unix(),        //开始时间
+			"l_vip_endtime":        endTime.Unix(),          //结束时间
+			"i_vip_status":         qutil.If(isTrial, 1, 2), //1试用 2正式
 		}}) {
 		return false
 	}
@@ -31,28 +110,25 @@ func StartTrial(userId string, area *map[string]interface{}, industry []string)
 }
 
 //查询是否有试用权限
-func CanTrial(userId string) bool {
-	m, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1}`)
+func (this *vipSubscribeStruct) CanTrial(userId string) bool {
+	m, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1}`)
 	if m == nil || len(*m) == 0 || !ok {
 		return false
 	}
 	obj := qutil.ObjToMap((*m)["o_vipjy"])
-	if qutil.IntAll((*obj)["i_trial"]) != 1 {
+	if qutil.IntAll((*obj)["i_trial"]) != 1 { //是否有试用资格
 		return false
 	}
-	return true
-}
-
-//设置已试用
-func SetTrialed(userId string) {
-	if !util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"o_vipjy.i_trial": -1}}) {
-		log.Println(userId, "更新使用状态出错")
+	//是否使用过(使用过VIP订阅功能,就不能试用)
+	if qutil.IntAll((*m)["i_vip_status"]) != 0 { //开启状态:0-暂不使用vip订阅 1-试用 2-正式 -1-试用到期 -2-正式到期
+		return false
 	}
+	return true
 }
 
 //获取省份,城市,行业购买数量;-1为全部
 //[省份,城市,行业]
-func GetBuySet(userId string) (result [3]int) {
+func (this *vipSubscribeStruct) GetBuySet(userId string) (result [3]int) {
 	mData, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1}`)
 	if !ok || len(*mData) == 0 || mData == nil {
 		return
@@ -65,10 +141,10 @@ func GetBuySet(userId string) (result [3]int) {
 }
 
 //根据区域获取城市和省份数量
-func GetBuyAreaCount(area map[string]interface{}) (result [2]int) {
+func (this *vipSubscribeStruct) GetBuyAreaCount(area *map[string]interface{}) (result [2]int) {
 	p := []interface{}{} //省份
 	c := []interface{}{} //城市
-	for k, v := range area {
+	for k, v := range *area {
 		tmp := v.([]interface{})
 		if len(tmp) == 0 { //省份
 			result[0]++
@@ -83,7 +159,7 @@ func GetBuyAreaCount(area map[string]interface{}) (result [2]int) {
 }
 
 //计算价格
-func GetSubVipPrice(area *map[string]interface{}, industry []string, count, unit int) int {
+func (this *vipSubscribeStruct) GetSubVipPrice(area *map[string]interface{}, industry []string, count, unit int) int {
 	if len(*area) == 0 { //全国
 		if len(industry) == 1 {
 			return getSetMealPrice(0, 1, unit) * count //全国1行业套餐
@@ -180,3 +256,16 @@ func getSetMealPrice(c, i, u int) int {
 		}
 	}
 }
+
+//支付成功后,将该订单以外的所有订单状态改为已取消状态 已取消:-2
+func PayCancel(userId string) bool {
+	//参数:查询语句,不等语句,修改条件
+	bl := util.Mysql.Update("dataexport_order", bson.M{
+		"user_id":      userId,
+		"product_type": "vip订阅",
+		"order_status": 0,
+	}, bson.M{
+		"order_status": -2,
+	})
+	return bl
+}

+ 16 - 2
src/jfw/modules/subscribepay/src/main.go

@@ -4,15 +4,29 @@ import (
 	_ "a"
 	. "config"
 	_ "filter"
+	"github.com/go-xweb/xweb"
+	"log"
 	"net/http"
+	"net/rpc"
+	"rpcfollow"
 	_ "service"
 	"timetask"
 	_ "util"
-
-	"github.com/go-xweb/xweb"
 )
 
 func main() {
+
+	go func() {
+		frpc := new(rpcfollow.JyPayRpc)
+		rpc.Register(frpc)
+		rpc.HandleHTTP()
+
+		err := http.ListenAndServe(":"+Config.Webrpcport, nil)
+		if err != nil {
+			log.Println("ListenAndServe: ", err)
+		}
+	}()
+
 	go timetask.Run()
 	mux1 := http.NewServeMux()
 	xweb.RunBase(":"+Config.Webport, mux1)

+ 57 - 34
src/jfw/modules/subscribepay/src/pay/aliPay.go

@@ -17,7 +17,7 @@ import (
 	"time"
 )
 
-type AliPayStruct struct {
+type aliPayStruct struct {
 	Appid          string
 	PrivateKey     *rsa.PrivateKey //请求接口秘钥
 	AliPublicKey   *rsa.PublicKey  //支付完成回调,校验使用(取支付宝后台)
@@ -28,7 +28,7 @@ type AliPayStruct struct {
 	Subject_subvip string          //支付小标题
 }
 
-var Alipay *AliPayStruct
+var Alipay *aliPayStruct
 
 func init() {
 	//加载本地私钥
@@ -41,7 +41,7 @@ func init() {
 	if err != nil {
 		panic(err)
 	}
-	Alipay = &AliPayStruct{
+	Alipay = &aliPayStruct{
 		Appid:          qutil.ObjToString(config.AliPayConf["appid"]),
 		PrivateKey:     privateKey,
 		AliPublicKey:   aliPublicKey,
@@ -54,6 +54,13 @@ func init() {
 }
 
 const (
+	//支付宝接口
+	Method_Type_Create_Pc  = "alipay.trade.page.pay" //支付宝获取pc端支付接口
+	Method_Type_Create_App = "alipay.trade.app.pay"  //支付宝获取App端支付接口
+	Method_Tpye_Cancel     = "alipay.trade.cancel"   //支付宝取消订单接口(若已支付24h调用,则会退款)
+	Method_Type_Close      = "alipay.trade.close"    //支付宝订单关闭接口
+
+	//订单标识
 	ALI_DATAEXPORT_NATIVE = "z" //支付宝数据导出-扫码支付
 	ALI_DATAEXPORT_APP    = "Z" //支付宝数据导出-app支付
 	ALI_DATAREPORT_APP    = "X" //支付宝数据报告-app支付
@@ -61,7 +68,7 @@ const (
 	ALI_SUBVIP_APP        = "Y" //支付宝数vip订阅--扫码支付
 )
 
-func (w *AliPayStruct) GetTradeno(tradenoSign string) (string, string) {
+func (w *aliPayStruct) GetTradeno(tradenoSign string) (string, string) {
 	tradeno, subject := "", ""
 	if tradenoSign == ALI_DATAEXPORT_NATIVE || tradenoSign == ALI_DATAEXPORT_APP {
 		subject = w.Subject_sjdc
@@ -75,7 +82,7 @@ func (w *AliPayStruct) GetTradeno(tradenoSign string) (string, string) {
 }
 
 //获取网页支付二维码地址
-func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, tradenoSign string) (string, string, error) {
+func (a *aliPayStruct) GetOrderPayParam(order_money float64, time_expire, tradenoSign string) (string, string, error) {
 	//支付标题
 	tradeno, subject := a.GetTradeno(tradenoSign)
 	var bizByte []byte
@@ -95,7 +102,7 @@ func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, traden
 			TimeoutExpress: "2h",
 		}
 		bizByte, _ = json.Marshal(bizContent)
-		methodStr = "alipay.trade.app.pay"
+		methodStr = Method_Type_Create_App
 	} else { //扫码支付
 		bizContent := struct {
 			Subject      string  `json:"subject"`
@@ -115,7 +122,7 @@ func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, traden
 			Time_expire:  time_expire,
 		}
 		bizByte, _ = json.Marshal(bizContent)
-		methodStr = "alipay.trade.page.pay"
+		methodStr = Method_Type_Create_Pc
 	}
 
 	var data = url.Values{}
@@ -143,7 +150,7 @@ func (a *AliPayStruct) GetOrderPayParam(order_money float64, time_expire, traden
 }
 
 //校验回调sign
-func (a *AliPayStruct) CheckCallBackSign(param, sign string) bool {
+func (a *aliPayStruct) CheckCallBackSign(param, sign string) bool {
 	newHash := sha256.New()
 	newHash.Write([]byte(param))
 	hashed := newHash.Sum(nil)
@@ -163,60 +170,76 @@ func (a *AliPayStruct) CheckCallBackSign(param, sign string) bool {
 	return true
 }
 
-//支付宝关闭订单(生成的订单二维码,未扫码无法关闭订单)
-func (a *AliPayStruct) CloseOrder(tradeno string) bool {
-	toClose := struct {
-		OutTradeNo string `json:"out_trade_no"`
-	}{
-		OutTradeNo: tradeno,
-	}
-	bizbyte, err := json.Marshal(toClose)
-	if err != nil {
-		log.Println()
-		return false
-	}
+//支付宝支付统一HTTP调用接口
+func (a *aliPayStruct) DoRequest(content, tradeno, methodType string) (*map[string]interface{}, error) {
 	var data = url.Values{}
 	data.Add("app_id", Alipay.Appid)
-	data.Add("method", "alipay.trade.close")
+	data.Add("method", methodType)
 	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))
+	data.Add("biz_content", content)
 	signContentBytes, _ := url.QueryUnescape(data.Encode())
 	log.Println(signContentBytes)
 	signature, err := a.getSign([]byte(signContentBytes))
 	if err != nil {
-		log.Println(tradeno, "获取签名出错", err)
-		return false
+		return nil, err
 	}
 	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
+		return nil, err
 	}
 	bArr, err := ioutil.ReadAll(res.Body)
 	if err != nil {
-		log.Printf("%s支付宝关闭订单  读取相应出错%v\n", tradeno, err)
-		return false
+		return nil, err
 	}
 	m := map[string]interface{}{}
 	err = json.Unmarshal(bArr, &m)
+	return &m, nil
+}
+
+//支付宝关闭订单(生成的订单二维码,未扫码无法关闭订单)
+func (a *aliPayStruct) CloseOrder(tradeno string) bool {
+	toClose := struct {
+		OutTradeNo string `json:"out_trade_no"`
+	}{
+		OutTradeNo: tradeno,
+	}
+	bizbyte, _ := json.Marshal(toClose)
+	resMap, err := Alipay.DoRequest(string(bizbyte), tradeno, Method_Type_Close)
 	if err != nil {
-		log.Println(string(bArr))
-		log.Println("%s支付宝关闭订单   解析相应参数出错%v\n", tradeno, err)
+		log.Printf("%s 支付宝关闭订单出错 %v\n", tradeno, err)
 	}
-	msg := (*qutil.ObjToMap(m["alipay_trade_close_response"]))["sub_msg"]
-	log.Printf("%s msg:%s 订单关闭相应参数  %+v", tradeno, msg, m)
-	if msg == "交易状态不合法" || msg == "REASON_ILLEGAL_STATUS" { //已支付
+	valus := *qutil.ObjToMap((*resMap)["alipay_trade_close_response"])
+	log.Printf("%s 订单关闭相应参数  %+v", tradeno, valus)
+	if valus["msg"] == "Success" {
+		return true
+	} else if valus["sub_code"] == "ACQ.TRADE_NOT_EXIST" { //用户未扫码(调用撤销订单)
+		return true
+		//return Alipay.cancelOrder(tradeno)
+	}
+	/*else if valus["sub_code"] == "ACQ.INVALID_PARAMETER" || valus["sub_code"] == "ACQ.TRADE_STATUS_ERROR" || valus["sub_code"] == "ACQ.SYSTEM_ERROR" { //参数异常  交易状态不合法  系统异常
 		return false
+	}*/
+	return false
+}
+
+//撤销订单
+func (a *aliPayStruct) cancelOrder(tradeno string) bool {
+	cancel := struct {
+		OutTradeNo string `json:"out_trade_no"`
+	}{
+		OutTradeNo: tradeno,
 	}
+	bizbyte, _ := json.Marshal(cancel)
+	resMap, err := Alipay.DoRequest(string(bizbyte), tradeno, Method_Tpye_Cancel)
+	log.Println(resMap, err)
 	return true
 }

+ 27 - 7
src/jfw/modules/subscribepay/src/pay/util.go

@@ -9,21 +9,41 @@ import (
 	"encoding/base64"
 	"encoding/pem"
 	"errors"
+	"fmt"
 	"hash"
+	"log"
+	qutil "qfw/util"
 	"strings"
 	"time"
-	qutil "qfw/util"
-	"fmt"
 )
 
-
-
-
 //创建订单号
 func GetOrderCode(id string) string {
 	return fmt.Sprintf("%s%s", time.Now().Format("150405"), qutil.GetRandom(6))
 }
 
+//关闭订单
+func CloseDataExportOrder(payWay, tradeno, prepayTime string) (status bool) {
+	//如果订单超时 则不用关闭订单
+	t, err := time.ParseInLocation(qutil.Date_Full_Layout, prepayTime, time.Local)
+	if err == nil {
+		if t.Add(time.Hour * 2).Before(time.Now()) {
+			return true
+		}
+	}
+	log.Printf("%s取消订单,订单号%s\n", payWay, tradeno)
+
+	if strings.HasPrefix(payWay, "ali_") {
+		status = Alipay.CloseOrder(tradeno)
+	} else if strings.HasPrefix(payWay, "wx_") {
+		status = WxStruct.CloseOrder(tradeno, payWay)
+	}
+	if !status {
+		log.Printf("%s订单关闭失败:%s\n", payWay, tradeno)
+	}
+	return status
+}
+
 //加载秘钥
 func parsePrivateKey(key string) (*rsa.PrivateKey, error) {
 	block, _ := pem.Decode([]byte(key))
@@ -57,7 +77,7 @@ func parseAliPayPublicKey(key string) (*rsa.PublicKey, error) {
 }
 
 //生成加密token
-func (a *AliPayStruct) getSign(data []byte) (signature string, err error) {
+func (a *aliPayStruct) getSign(data []byte) (signature string, err error) {
 	var h hash.Hash
 	var hType crypto.Hash
 	h = sha256.New()
@@ -72,4 +92,4 @@ func (a *AliPayStruct) getSign(data []byte) (signature string, err error) {
 	}
 	signature = base64.StdEncoding.EncodeToString(bs)
 	return
-}
+}

+ 5 - 4
src/jfw/modules/subscribepay/src/pay/wxPay.go

@@ -77,12 +77,12 @@ func (w *WeixinStruct) CreatePrepayOrder(tradeno, ip, openid, detailmsg string,
 	}
 	//支付类型分类
 
-	tradeType,appid := "",w.Appid
+	tradeType, appid := "", w.Appid
 	if tradeno == WX_REWARD_JSAPI || tradeno == WX_DATAEXPORT_JSAPI || tradeno == WX_DATAREPORT_JSAPI || tradeno == WX_SUBVIP_JSAPI { //微信js支付
 		tradeType = "JSAPI"
 	} else if tradeno == WX_DATAEXPORT_APP || tradeno == WX_DATAREPORT_APP || tradeno == WX_SUBVIP_APP { //app支付
 		tradeType = "APP"
-		appid=w.Appid_app
+		appid = w.Appid_app
 	} else if tradeno == WX_DATAEXPORT_NATIVE { //扫码支付
 		tradeType = "NATIVE"
 	}
@@ -135,9 +135,9 @@ func (w *WeixinStruct) GetPrepayId(weixinrpc string, param map[string]string) (r
 }
 
 //微信支付订单关闭
-func (w *WeixinStruct) CloseOrder(weixinrpc, tradeno string) (r bool) {
+func (w *WeixinStruct) CloseOrder(tradeno, payWay string) (r bool) {
 	util.Try(func() {
-		client, err := rpc.DialHTTP("tcp", weixinrpc)
+		client, err := rpc.DialHTTP("tcp", config.Config.Weixinrpc)
 		defer client.Close()
 		if err != nil {
 			return
@@ -202,6 +202,7 @@ func (wx *WeixinStruct) GetAppWxPayStr(prepayid string) string {
 	}
 	return string(byteArr)
 }
+
 //获取js支付参数(为方便存库返回string,前端需要转成json)
 func GetWxJsPayStr(prepayid string) string {
 	//获取订单支付字符串

+ 27 - 15
src/jfw/modules/subscribepay/src/rpc/rpc.go → src/jfw/modules/subscribepay/src/rpcfollow/rpc.go

@@ -1,13 +1,25 @@
-package rpc
+package rpcfollow
+
+import (
+	"config"
+	"entity"
+	qutil "qfw/util"
+	"util"
+	"time"
+	"log"
+	"fmt"
+	frpc "qfw/util/rpc"
+)
+
+type JyPayRpc struct{}
 
-/*
 //数据导出线下支付完成调用
-func (c *MyfollowRpc) DateExportOrderFinishByOffline(param *frpc.DateExportData, ret *string) error {
+func (c *JyPayRpc) DateExportOrderFinishByOffline(param *frpc.DateExportData, ret *string) error {
 	log.Println("DateExportOrderFinishByOffline---", param)
-	util.Try(func() {
+	qutil.Try(func() {
 		*ret = "1"
 		//查询订单
-		orderdata := public.Mysql.FindOne("dataexport_order", map[string]interface{}{
+		orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
 			"order_code": param.OrderCode,
 		}, "id,filter,user_mail,product_type,data_spec,user_phone,filter_id,order_code,data_count,order_status,order_money,out_trade_no,create_time", "")
 
@@ -15,15 +27,15 @@ func (c *MyfollowRpc) DateExportOrderFinishByOffline(param *frpc.DateExportData,
 			*ret = "order_nofind"
 			return
 		}
-		if util.Int64All((*orderdata)["order_status"]) != 0 {
+		if qutil.Int64All((*orderdata)["order_status"]) != 0 {
 			*ret = "order_errStat"
 			return
 		}
 		//插入数据
 		now := time.Now()
-		pay_time := util.FormatDate(&now, util.Date_Full_Layout)
+		pay_time := qutil.FormatDate(&now, qutil.Date_Full_Layout)
 
-		insertNum := public.Mysql.Insert("offline_pay", map[string]interface{}{
+		insertNum := util.Mysql.Insert("offline_pay", map[string]interface{}{
 			"out_trade_no": (*orderdata)["out_trade_no"],
 			"create_time":  pay_time,
 			"img_src":      param.ImgSrc,
@@ -33,9 +45,9 @@ func (c *MyfollowRpc) DateExportOrderFinishByOffline(param *frpc.DateExportData,
 			return
 		}
 		//修改订单状态
-		filename := fmt.Sprintf("%s.xlsx", fmt.Sprintf("%s_%s_%s", time.Now().Format("20060102150405"), util.ObjToString((*orderdata)["order_code"]), util.GetLetterRandom(5)))
+		filename := fmt.Sprintf("%s.xlsx", fmt.Sprintf("%s_%s_%s", time.Now().Format("20060102150405"), qutil.ObjToString((*orderdata)["order_code"]), qutil.GetLetterRandom(5)))
 		download_url := fmt.Sprintf("/res/dataexport/%s", filename)
-		updateNum := public.Mysql.Update("dataexport_order", map[string]interface{}{
+		updateNum := util.Mysql.Update("dataexport_order", map[string]interface{}{
 			"order_code": param.OrderCode,
 		}, map[string]interface{}{
 			"pay_time":     pay_time,
@@ -48,11 +60,11 @@ func (c *MyfollowRpc) DateExportOrderFinishByOffline(param *frpc.DateExportData,
 			return
 		}
 		*ret = "y"
-		order_money := util.IntAll((*orderdata)["order_money"])
+		order_money := qutil.IntAll((*orderdata)["order_money"])
 		ordermoney := float64(order_money) / 100
-		go public.SendNotice(orderdata, ordermoney, pay_time, download_url, config.GmailAuth)
-		go public.SendMailToPayUser(orderdata, ordermoney, pay_time, filename, download_url, config.GmailAuth)
-		go public.SendMailToBJFinance(orderdata, pay_time, "", 1, config.GmailAuth)
+		go entity.SendNotice(orderdata, ordermoney, pay_time, download_url, config.GmailAuth)
+		go entity.SendMailToPayUser(orderdata, ordermoney, pay_time, filename, download_url, config.GmailAuth)
+		go entity.SendMailToBJFinance(orderdata, pay_time, "", 1, config.GmailAuth)
 	}, func(e interface{}) {})
 	return nil
-}*/
+}

+ 35 - 9
src/jfw/modules/subscribepay/src/service/afterPay.go

@@ -4,7 +4,6 @@ import (
 	"fmt"
 	"log"
 	qutil "qfw/util"
-	"qfw/util/redis"
 	"strconv"
 	"strings"
 	"time"
@@ -17,9 +16,30 @@ import (
 //完成支付数据交互接口
 type AfterPay struct {
 	*xweb.Action
-	getUserInfo xweb.Mapper `xweb:"/afterPay/getUserInfo"` //获取用户当前支付后的信息
-	setUserInfo xweb.Mapper `xweb:"/afterPay/setUserInfo"` //保存用户当前支付后的信息
-	getPushView xweb.Mapper `xweb:"/afterPay/getPushView"` //VIP推送预览
+	getUserInfo    xweb.Mapper `xweb:"/afterPay/getUserInfo"`    //获取用户当前支付后的信息
+	setUserInfo    xweb.Mapper `xweb:"/afterPay/setUserInfo"`    //保存用户当前支付后的信息
+	getPushView    xweb.Mapper `xweb:"/afterPay/getPushView"`    //VIP推送预览
+	updateUserTips xweb.Mapper `xweb:"/afterPay/updateUserTips"` //修改用户未分类关键词提醒
+}
+
+//
+func (a *AfterPay) UpdateUserTips() error {
+	defer qutil.Catch()
+	userId, _ := a.GetSession("userId").(string)
+	flag := false
+	if userId != "" {
+		classify_index := a.GetString("classify_index")
+		kws_tips, _ := a.GetInteger("kws_tips")
+		saveData := make(map[string]interface{})
+		saveData["o_vipjy.a_items."+classify_index+".i_tips"] = kws_tips
+		flag = util.MQFW.UpdateById("user", userId, map[string]interface{}{
+			"$set": saveData,
+		})
+	}
+	a.ServeJson(map[string]interface{}{
+		"flag": flag,
+	})
+	return nil
 }
 
 //
@@ -85,7 +105,7 @@ func (a *AfterPay) SetUserInfo() error {
 					flag = util.MQFW.UpdateById("user", userId,
 						bson.M{
 							"$push": bson.M{"o_vipjy.a_items." + classify_index + ".a_key": bson.M{"key": _kws, "appendkey": addtion_kws, "notkey": not_kws}},
-							"$set":  bson.M{"o_vipjy.a_items." + classify_index + ".s_item": classify_name, "o_vipjy.l_modifydate": time.Now().Unix()},
+							"$set":  bson.M{"o_vipjy.a_items." + classify_index + ".s_item": classify_name, "o_vipjy.a_items." + classify_index + ".i_tips": 0, "o_vipjy.l_modifydate": time.Now().Unix()},
 						})
 				}
 			} else if actionType == "DK" { //删除关键词
@@ -147,14 +167,22 @@ func (a *AfterPay) GetUserInfo() error {
 					}
 				}
 			}
-			(*data)["o_area"] = strings.TrimRight(area, "、")
+			if area == "" {
+				(*data)["o_area"] = "全国"
+			} else {
+				(*data)["o_area"] = strings.TrimRight(area, "、")
+			}
 			//采购行业
 			_buyClass := (*data)["a_buyerclass"].([]interface{})
 			var buyClass = ""
 			for _, v := range _buyClass {
 				buyClass += v.(string) + "、"
 			}
-			(*data)["a_buyerclass"] = strings.TrimRight(buyClass, "、")
+			if buyClass == "" {
+				(*data)["a_buyerclass"] = "全部"
+			} else {
+				(*data)["a_buyerclass"] = strings.TrimRight(buyClass, "、")
+			}
 			//有效日期
 			var _starttime = (*userData)["l_vip_starttime"]
 			(*userData)["l_vip_starttime"] = strings.Replace(qutil.FormatDateWithObj(&_starttime, qutil.Date_Short_Layout), "-", ".", -1)
@@ -178,8 +206,6 @@ func (a *AfterPay) GetUserInfo() error {
 			} else if qutil.Int64All(_endtime)-time.Now().Unix() < 0 {
 				(*data)["expRemind"] = "0" //已经到期
 			}
-			//每月修改次数
-			(*data)["modTimes"] = redis.GetInt("other", "vipSubscribe_"+userId+"_"+time.Now().Month().String()) //每个月修改次数
 			//信息类型
 			if (*data)["a_infotype"] != nil {
 				_infotype := (*data)["a_infotype"].([]interface{})

+ 31 - 1
src/jfw/modules/subscribepay/src/service/commonAction.go

@@ -4,6 +4,7 @@ import (
 	"config"
 	"entity"
 	"github.com/go-xweb/xweb"
+	"pay"
 	qutil "qfw/util"
 	"time"
 	"util"
@@ -12,9 +13,11 @@ import (
 //付费公用方法
 type CommonAction struct {
 	*xweb.Action
-	applyInvoice xweb.Mapper `xweb:"/applyInvoice"`          //申请发票
 	isPaySuccess xweb.Mapper `xweb:"/isPaySuccess"`          //数据导出是否支付成功
 	paySuccess   xweb.Mapper `xweb:"/dataReport/paySuccess"` //数据报告支付完成
+	deleteOrder xweb.Mapper `xweb:"/deleteOrder"` //删除订单
+
+	applyInvoice xweb.Mapper `xweb:"/applyInvoice"`          //申请发票
 }
 
 //----------------------------申请发票------------------------------------
@@ -60,6 +63,33 @@ func (d *CommonAction) ApplyInvoice() error {
 	return nil
 }
 
+/**
+
+根据 id+openid 删除
+*/
+func (d *CommonAction) DeleteOrder() error {
+	if userId := d.GetSession("userId"); userId != nil {
+		queryMap := map[string]interface{}{
+			"id":      d.GetString("id"),
+			"user_id": userId.(string),
+		}
+		flag := false
+		order := util.Mysql.FindOne(tableName_order, queryMap, "pay_way,out_trade_no,prepay_time,order_status", "")
+		if order != nil {
+			if qutil.IntAll((*order)["order_status"]) == 0 { //未支付状态下 删除订单需要先关闭订单
+				flag = pay.CloseDataExportOrder(qutil.ObjToString((*order)["pay_way"]), qutil.ObjToString((*order)["out_trade_no"]), qutil.ObjToString((*order)["prepay_time"]))
+			} else {
+				flag = true
+			}
+		}
+		if flag {
+			flag = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -1})
+		}
+		d.ServeJson(map[string]interface{}{"success": flag})
+	}
+	return nil
+}
+
 //数据导出-是否支付完成
 func (p *CommonAction) IsPaySuccess() {
 	defer qutil.Catch()

+ 5 - 3
src/jfw/modules/subscribepay/src/service/dataExportPay_mobile.go

@@ -337,7 +337,7 @@ func (p *DataExportPayMobile) WxSacnPay_CreateOrder() {
 			}
 		} else {
 			//在此关闭之前的订单
-			if !CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
+			if !pay.CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
 				p.ServeJson(map[string]interface{}{
 					"status": "n",
 				})
@@ -562,12 +562,12 @@ func (w *DataExportPayMobile) GetPayParm() error {
 	surplus_second := prepayTime.Unix() + 7200 - time.Now().Unix()
 	if (err == nil && surplus_second <= 0) || prepayId == "" || pay_way != "wx_js" {
 		//在此关闭之前的订单
-		/*if !pay.CloseDataExportOrder(util.ObjToString((*Order)["pay_way"]), util.ObjToString((*Order)["out_trade_no"]), util.ObjToString((*Order)["prepay_time"])) {
+		if !pay.CloseDataExportOrder(qutil.ObjToString((*Order)["pay_way"]), qutil.ObjToString((*Order)["out_trade_no"]), qutil.ObjToString((*Order)["prepay_time"])) {
 			w.ServeJson(map[string]interface{}{
 				"status": "n",
 			})
 			return nil
-		}*/
+		}
 		log.Println("订单过期或支付pc端订单,重新生成预订单!", userid)
 		tradeno, ret := pay.WxStruct.CreatePrepayOrder("c", w.IP(), openid, "", orderMoney)
 		if ret != nil {
@@ -583,6 +583,7 @@ func (w *DataExportPayMobile) GetPayParm() error {
 				prepayId = (*ret)["prepayid"]
 			}
 		}
+		realToken = entity.GetWaitPayToken(orderid, orderMoney, order_code, pay_way, userid) //刷新token
 	}
 	timestamp := time.Now().Unix()
 	nonceStr := qutil.GetRandom(16) + qutil.GetLetterRandom(16)
@@ -597,6 +598,7 @@ func (w *DataExportPayMobile) GetPayParm() error {
 		"prepayId":   "prepay_id=" + prepayId,
 		"order_code": order_code,
 		"user_mail":  user_mail,
+		"token":      realToken,
 	})
 	return nil
 }

+ 3 - 27
src/jfw/modules/subscribepay/src/service/dataExportPay_pc.go

@@ -2,7 +2,6 @@ package service
 
 import (
 	"bytes"
-	"config"
 	"encoding/base64"
 	"encoding/json"
 	"entity"
@@ -180,7 +179,7 @@ func (p *DataExportPayPC) SacnPay_CreateOrder() {
 		//价格支付方式变动需要重新生成订单二维码(关闭之前的订单)
 		if (data_spec != "" && data_spec != qutil.ObjToString((*oldOrder)["data_spec"])) || pay_way != qutil.ObjToString((*oldOrder)["pay_way"]) {
 			//在此关闭之前的订单
-			if !CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
+			if !pay.CloseDataExportOrder(qutil.ObjToString((*oldOrder)["pay_way"]), qutil.ObjToString((*oldOrder)["out_trade_no"]), qutil.ObjToString((*oldOrder)["prepay_time"])) {
 				p.ServeJson(map[string]interface{}{
 					"status": "n",
 				})
@@ -392,7 +391,7 @@ func (p *DataExportPayPC) GetOrderPayMsg() {
 			return "", "订单状态异常", false
 		}
 		//在此关闭没有超时之前的订单 在pc端支付微信端订单,pay_way是wx_js 先进行关闭,再重新创建订单的时候,pay_way需要修改成wx_pc。
-		if !CloseDataExportOrder(qutil.ObjToString((*queryOrder)["pay_way"]), qutil.ObjToString((*queryOrder)["out_trade_no"]), qutil.ObjToString((*queryOrder)["prepay_time"])) {
+		if !pay.CloseDataExportOrder(qutil.ObjToString((*queryOrder)["pay_way"]), qutil.ObjToString((*queryOrder)["out_trade_no"]), qutil.ObjToString((*queryOrder)["prepay_time"])) {
 			return "", "订单关闭异常", false
 		}
 		//修改支付方式
@@ -457,27 +456,4 @@ func (p *DataExportPayPC) GetOrderPayMsg() {
 	})
 
 }
-func CloseDataExportOrder(payWay, tradeno, prepayTime string) (status bool) {
-	//如果订单超时 则不用关闭订单
-	local, _ := time.LoadLocation("Local")
-	t, err := time.ParseInLocation(qutil.Date_Full_Layout, prepayTime, local)
-	//t, err := time.Parse(util.Date_Full_Layout, prepayTime)
-	if err == nil {
-		if t.Add(time.Hour * 2).Before(time.Now()) {
-			return true
-		}
-	}
-	log.Printf("%s取消订单,订单号%s\n", payWay, tradeno)
-	if payWay == "ali_pc" {
-		status = pay.Alipay.CloseOrder(tradeno)
-	} else if payWay == "wx_pc" || payWay == "wx_js" {
-		status = pay.WxStruct.CloseOrder(config.Config.Weixinrpc, tradeno)
-	} else {
-		//非扫码支付 暂不处理
-		status = true
-	}
-	if !status {
-		log.Printf("%s订单关闭失败:%s\n", payWay, tradeno)
-	}
-	return status
-}
+

+ 18 - 64
src/jfw/modules/subscribepay/src/service/orderListDetails.go

@@ -25,7 +25,6 @@ type OrderListDetails struct {
 	myOrder             xweb.Mapper `xweb:"/orderListDetails/myOrder"`             //查询订单首页
 	myOrderPaging       xweb.Mapper `xweb:"/orderListDetails/myOrderPaging"`       //查询订单分页
 	deleteOrder         xweb.Mapper `xweb:"/orderListDetails/deleteOrder"`         //删除订单
-	applyInvoice        xweb.Mapper `xweb:"/orderListDetails/applyInvoice"`        //开发票
 	payCancel           xweb.Mapper `xweb:"/orderListDetails/payCancel"`           //支付成功后,其余订单改为已取消
 	setEmail            xweb.Mapper `xweb:"/orderListDetails/setEmail"`            //设置邮箱
 	checkMailCodeVerify xweb.Mapper `xweb:"/orderListDetails/checkMailCodeVerify"` //验证码
@@ -56,18 +55,23 @@ func (this *OrderListDetails) GetOrderPayAllMsg() {
 			"order_code": orderCode,
 			//"order_status": 1,
 		}
-		oData := util.Mysql.FindOne("dataexport_order", query, "prepay_time,pay_time,pay_way,original_price,applybill_status,out_trade_no,filter,product_type,order_status,applybill_type,applybill_taxnum,applybill_company", "")
+		oData := util.Mysql.FindOne("dataexport_order", query, "prepay_time,pay_time,pay_way,original_price,applybill_status,out_trade_no,filter,product_type,order_status,applybill_type,applybill_taxnum,applybill_company,vip_starttime,vip_endtime", "")
 		log.Println("odata:", oData)
 		//查询订单信息
 		if oData == nil || len(*oData) == 0 {
 			return &entity.FuncResult{false, errors.New("未找到此订单"), nil}
 		}
-		//已支付订单查询有效时间   -已取消的也查看有效时间 用于判断再次购买
-		uData, ok := util.MQFW.FindById("user", userId, `{"l_vip_starttime":1,"l_vip_endtime":1}`)
-		if uData == nil || len(*uData) == 0 || !ok {
+
+		uData := util.Mysql.FindOne(tableName_order, query, "vip_starttime,vip_endtime", "")
+		if uData == nil || len(*uData) == 0 {
 			return &entity.FuncResult{false, errors.New("数据库查询异常"), nil}
 		}
-		//
+		//		//判断用户状态
+		//		uStatus, ok := util.MQFW.FindById("user", userId, `{"i_vip_status":1}`)
+		//		if uStatus == nil || len(*uStatus) == 0 || !ok {
+		//			return &entity.FuncResult{false, errors.New("数据库查询异常"), nil}
+		//		}
+		//		log.Println("udata:", uData)
 		if qutil.IntAll((*oData)["order_status"]) != 1 {
 			return &entity.FuncResult{true, nil, map[string]interface{}{
 				"order": oData,
@@ -118,6 +122,7 @@ func (o *OrderListDetails) MyOrder() error {
 	if res != nil {
 		o.SetRes(res, queryM)
 	}
+	log.Println("res:", res)
 	o.ServeJson(map[string]interface{}{
 		"res":         res,
 		"pageSize":    order_pageSize,
@@ -217,51 +222,9 @@ func (o *OrderListDetails) DeleteOrder() error {
 	return nil
 }
 
-//开发票
-func (o *OrderListDetails) ApplyInvoice() error {
-	var applyBill_status int
-	var order_code, applyBill_company, applyBill_taxnum, applyBill_type string
-	var updateBl bool = false
-	order_code = o.GetString("order_code")
-	//获取数据
-	applyBill_type = o.GetString("demo-radio") //个人 单位
-	queryMap := map[string]interface{}{
-		"order_code": order_code,
-	}
-	if applyBill_type == "个人" {
-		applyBill_status = 1
-		updateBl = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"applyBill_status": applyBill_status})
-
-	} else if applyBill_type == "单位" {
-		applyBill_status = 1                                 //状态
-		applyBill_company = o.GetString("applyBill_company") //公司名
-		applyBill_taxnum = o.GetString("applyBill_taxnum")   //纳税人识别号
-		updateBl = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{
-			"applyBill_company": applyBill_company,
-			"applyBill_taxnum":  applyBill_taxnum,
-			"applyBill_status":  applyBill_status,
-			"applyBill_type":    1,
-		}) //修改操作
-	}
-	//判断条件
-	if updateBl {
-		go func() {
-			orderdata := util.Mysql.FindOne(tableName_order, map[string]interface{}{
-				"order_code": order_code,
-			}, "id,filter,user_mail,user_phone,product_type,data_spec,filter_id,order_code,data_count,order_status,order_money,out_trade_no,applybill_type,applybill_company,applybill_taxnum,user_openid,create_time,pay_time,pay_way", "")
-			tt := time.Now()
-			pay_time := qutil.FormatDate(&tt, qutil.Date_Full_Layout)
-			entity.SendMailToBJFinance(orderdata, pay_time, "", 2, config.GmailAuth)
-		}()
-	}
-	o.ServeJson(map[string]interface{}{
-		"flag": updateBl,
-	})
-	return nil
-}
-
 //设置邮箱-发送验证码
 func (o *OrderListDetails) SetEmail() {
+	log.Println("--")
 	email := o.GetString("email")
 	userId := qutil.ObjToString(o.GetSession("userId"))
 	if userId != "" {
@@ -310,7 +273,6 @@ func (o *OrderListDetails) SetEmail() {
 					o.T["time"] = timeSpaceing
 					o.T["errMsg"] = "验证码发送次数已达到今日上限"
 				}
-
 			} else {
 				o.T["success"] = false
 				o.T["errCode"] = 2
@@ -348,6 +310,7 @@ func (o *OrderListDetails) EmailOperation() {
 	operation := o.GetString("operation")
 	email := o.GetString("email")
 	userId := qutil.ObjToString(o.GetSession("userId"))
+	log.Println("userid---", userId)
 	bo := false
 	if email != "" {
 		switch operation {
@@ -416,28 +379,19 @@ func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[strin
 		if lastbuy_code == v["order_code"] {
 			v["lastbuy_code"] = lastbuy_code
 		}
-		//订阅周期时间 TODO 错的   查msyql
-		if v["pay_time"] != nil && v["product_type"] == "vip订阅" {
-			//TODO 还没录入数据
-			data, err := util.MQFW.FindOne("user", bson.M{"_id": queryM["user_id"]})
+		//
+		if v["pay_time"] != nil && ((v["product_type"] == "vip订阅") || (v["product_type"] == "VIP订阅")) {
+			data, err := util.MQFW.FindOne("user", bson.M{"_id": bson.ObjectIdHex(qutil.ObjToString(o.GetSession("userId")))})
 			if len(*data) > 0 && err {
-				v["i_vip_status"] = qutil.ObjToString((*data)["i_vip_status"])
-				v["l_vip_starttime"] = qutil.ObjToString((*data)["l_vip_starttime"])
-				v["l_vip_endtime"] = qutil.ObjToString((*data)["l_vip_endtime"])
-			} else {
-				/* 0:暂不使用vip订阅 1:试用 2:正式 -1:试用到期 -2:正式到期 */
-				v["i_vip_status"] = "1"
-				v["l_vip_starttime"] = "1571991460"
-				v["l_vip_endtime"] = "1572596260"
+				v["i_vip_status"] = qutil.Int64All((*data)["i_vip_status"])
 			}
 		}
 	}
-	log.Println(res)
 }
 
 //查询数据
 func (o *OrderListDetails) Datas(queryM map[string]interface{}, pageNum int) (haveNextPage bool, result []map[string]interface{}, err error) {
-	res := *util.Mysql.Find(tableName_order, queryM, "id,order_code,filter_publishtime,create_time,data_spec,filter_id,filter_keys,order_money,data_count,order_status,pay_way,product_type,filter,pay_time", "create_time desc", -1, 0)
+	res := *util.Mysql.Find(tableName_order, queryM, "id,order_code,filter_publishtime,create_time,data_spec,filter_id,filter_keys,order_money,data_count,order_status,pay_way,product_type,filter,pay_time,vip_starttime,vip_endtime", "create_time desc", -1, 0)
 	if len(res) > 0 {
 		start := (pageNum - 1) * pagesize_max
 		end := pageNum * pagesize_max

+ 3 - 1
src/jfw/modules/subscribepay/src/service/payCallback.go

@@ -100,7 +100,9 @@ func (p *PayCallBackAction) WxPayCallback() {
 				log.Printf("微信数据报告更新执行出错 %+v\n", thisParam)
 			}
 		} else if strings.HasPrefix(thisParam.OutTradeno, pay.WX_SUBVIP_APP) || strings.HasPrefix(thisParam.OutTradeno, pay.WX_SUBVIP_JSAPI) { //vip订阅
-
+			if update=entity.JyVipSubStruct.PayCallBack(thisParam);!update{
+				log.Printf("微信vip订阅更新执行出错 %+v\n", thisParam)
+			}
 		}
 		if insert = thisParam.SaveWxPayRecord(); !insert {
 			log.Printf("微信支付保存支付记录出错 %+v\n", thisParam)

+ 0 - 176
src/jfw/modules/subscribepay/src/service/trial.go

@@ -1,176 +0,0 @@
-package service
-
-import (
-	"log"
-	qutil "qfw/util"
-	"regexp"
-	"time"
-	"util"
-
-	"github.com/go-xweb/httpsession"
-
-	"github.com/dchest/captcha"
-	"github.com/go-xweb/xweb"
-	"gopkg.in/mgo.v2/bson"
-)
-
-//试用用户接口
-type Trial struct {
-	*xweb.Action
-	getUserPhone     xweb.Mapper `xweb:"/trial/GetUserPhone"`     //获取用户手机号码
-	captcha          xweb.Mapper `xweb:"/trial/captcha"`          //图形验证码
-	sendPhoneCaptcha xweb.Mapper `xweb:"/trial/sendPhoneCaptcha"` //发送手机验证码
-	submitApply      xweb.Mapper `xweb:"/trial/submitApply"`      //提交申请信息
-}
-
-var (
-	phoneReg = regexp.MustCompile("^[1][3-9][0-9]{9}$")
-	nameReg  = regexp.MustCompile("^[\u4E00-\u9FA5A-Za-z\\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$")
-)
-
-//获取之前用户信息
-func (t *Trial) GetUserPhone() {
-	var phoneNum string
-	userId := qutil.ObjToString(t.GetSession("userId"))
-	if userId != "" {
-		m, ok := util.MQFW.FindById("user", userId, `{"s_phone":1}`)
-		if ok && len(*m) > 0 {
-			phoneNum = qutil.ObjToString((*m)["s_phone"])
-		}
-	}
-	if phoneNum == "" {
-		openid := qutil.ObjToString(t.GetSession("s_m_openid"))
-		if openid != "" {
-			m, ok := util.MQFW.FindOneByField("applysub_user", bson.M{"s_openid": openid}, `{"s_phone":1}`)
-			if ok && len(*m) > 0 {
-				phoneNum = qutil.ObjToString((*m)["s_phone"])
-			}
-		}
-	}
-	t.ServeJson(map[string]interface{}{
-		"success":  qutil.If(phoneNum == "", false, true).(bool),
-		"phoneNum": phoneNum,
-	})
-}
-
-//试用用户图片验证码
-func (t *Trial) Captcha() error {
-	id := captcha.NewLen(4)
-	t.SetSession("subvip_trial_imgCode", id)
-	w := t.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")
-	return captcha.WriteImage(w, id, 90, 30)
-}
-
-//发送手机验证码
-func (t *Trial) SendPhoneCaptcha() {
-	phoneNum := t.GetString("phoneNum")
-	imgcode_req := t.GetString("imgCancode")
-	ok, errMsg := func() (bool, string) {
-		if !phoneReg.MatchString(phoneNum) {
-			return false, "手机格式不正确"
-		}
-		imgcode_sess := qutil.ObjToString(t.GetSession("subvip_trial_imgCode"))
-		if !captcha.VerifyString(imgcode_sess, imgcode_req) || imgcode_req == "" {
-			return false, "验证码不正确"
-		}
-		//获取上次发送验证码时间
-		lastSend := qutil.Int64All(t.GetSession("subvip_trial_lastSend"))
-		if time.Now().Unix()-lastSend < 60 {
-			return false, "信息已发送"
-		}
-		//判断手机号是否存在
-		if isExist(phoneNum) {
-			return false, "手机号已使用"
-		}
-		MsgCode := qutil.GetRandom(6)
-		t.SetSession("subvip_trial_MsgCode", MsgCode)
-		t.SetSession("subvip_trial_phoneNum", phoneNum)
-		t.SetSession("subvip_trial_lastSend", time.Now().Unix())
-		log.Printf("%s 发送短信验证码 %s\n", t.GetSession("userId"), MsgCode)
-		go func() {
-			util.SendSMS("2828060", phoneNum, map[string]string{"code": MsgCode})
-		}()
-		return true, ""
-	}()
-	t.ServeJson(map[string]interface{}{
-		"success": ok,
-		"errMsg":  errMsg,
-	})
-}
-
-//提交申请信息
-func (t *Trial) SubmitApply() {
-	name := t.GetString("name")
-	tel := t.GetString("tel")
-	code := t.GetString("code")
-	company := t.GetString("company")
-	job := t.GetString("job")
-	ok, errMsg := func() (bool, string) {
-		//校验数据
-		if !nameReg.MatchString(name) || code == "" || company == "" {
-			return false, "输入校验不通过"
-		}
-		//校验验证码
-		lastSend := qutil.Int64All(t.GetSession("subvip_trial_lastSend"))
-		if time.Now().Unix()-lastSend > 60*5 {
-			return false, "短信验证码已过期"
-		}
-		code_sess := qutil.ObjToString(t.GetSession("subvip_trial_MsgCode"))
-		tel_sess := qutil.ObjToString(t.GetSession("subvip_trial_phoneNum"))
-		if code != code_sess || tel != tel_sess {
-			log.Println(code, code_sess, tel, tel_sess)
-			return false, "短信验证码错误"
-		}
-		if isExist(tel_sess) {
-			return false, "手机号已使用"
-		}
-		//储存数据
-		userId := qutil.ObjToString(t.GetSession("userId"))
-		flag := util.MQFW.Save("user_msg", map[string]interface{}{
-			"s_userId":  userId,
-			"s_name":    name,
-			"s_phone":   tel,
-			"s_openid":  t.GetSession("s_m_openid"),
-			"s_company": company,
-			"s_job":     job,
-			"i_time":    time.Now().Unix(),
-			"s_source":  "vipsub_trial",
-		})
-		if flag == "" {
-			return false, "稍后重试"
-		}
-		go func() {
-			//更新user表可试用
-			if !util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"o_vipjy.i_trial": 1}}) {
-				log.Println("更新使用状态出错", userId)
-			}
-		}()
-		clearTrialSession(t.Session())
-		return true, ""
-	}()
-	t.ServeJson(map[string]interface{}{
-		"success": ok,
-		"errMsg":  errMsg,
-	})
-}
-
-//查询手机号是否存在
-func isExist(phone string) bool {
-	res, ok := util.MQFW.FindOne("user_msg", bson.M{"s_phone": phone})
-	if ok && len(*res) > 0 {
-		return true
-	}
-	return false
-}
-
-//清除session
-func clearTrialSession(session *httpsession.Session) {
-	session.Del("subvip_trial_MsgCode")
-	session.Del("subvip_trial_phoneNum")
-	session.Del("subvip_trial_lastSend")
-	session.Del("subvip_trial_imgCode")
-}

+ 4 - 4
src/jfw/modules/subscribepay/src/service/vipSubscribeEdit.go

@@ -50,12 +50,12 @@ func (this *EditSub) GetSubBuyMsg() {
 		}
 		o_vipjy := qutil.ObjToMap((*mData)["o_vipjy"])
 		//地区 城市 数量 修改次数
-		editNum := qutil.IntAll(redis.Get("other", userId+"_SubEdit_"+time.Now().Month().String()))
+		//editNum := qutil.IntAll(redis.Get("other", userId+"_SubEdit_"+time.Now().Month().String()))
 		return &editSubResult{true, nil, map[string]interface{}{
 			"area":     (*o_vipjy)["o_area"],
 			"industry": (*o_vipjy)["a_buyerclass"],
 			"buyset":   (*o_vipjy)["a_buyset"],
-			"editNum":  editNum,
+			//"editNum":  editNum,
 		}}
 	}()
 	if r.Err != nil {
@@ -75,7 +75,7 @@ func (this *EditSub) SaveSubEdit() {
 			return &editSubResult{false, errors.New("修改次数已达上限"), nil}
 		}
 		//获取购买数量
-		buyset := entity.GetBuySet(userId)
+		buyset := entity.JyVipSubStruct.GetBuySet(userId)
 		switch doType {
 		case "area":
 			areaNew := map[string]interface{}{}
@@ -85,7 +85,7 @@ func (this *EditSub) SaveSubEdit() {
 			if err != nil {
 				return &editSubResult{false, errors.New("数据格式错误"), nil}
 			}
-			count := entity.GetBuyAreaCount(areaNew)
+			count := entity.JyVipSubStruct.GetBuyAreaCount(&areaNew)
 			if (count[0] > buyset[0] || count[1] > buyset[1]) && buyset[0] != -1 {
 				return &editSubResult{false, errors.New("非法操作"), nil}
 			}

+ 52 - 39
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -17,20 +17,19 @@ import (
 	"github.com/go-xweb/xweb"
 )
 
-//订单结构
-type Order struct {
+//vip订阅付费
+type SubVipPayOrder struct {
 	*xweb.Action
-	createOrder xweb.Mapper `xweb:"/jypay/vipsubscribe/createOrder"` //创建订单并支付
-	orderToPay  xweb.Mapper `xweb:"/jypay/vipsubscribe/orderToPay"`  //支付已创建订单
+	createOrder xweb.Mapper `xweb:"/vipsubscribe/createOrder"` //创建订单并支付
+	orderToPay  xweb.Mapper `xweb:"/vipsubscribe/orderToPay"`  //支付已创建订单
 }
 
 func init() {
-	xweb.AddAction(&Order{})
+	xweb.AddAction(&SubVipPayOrder{})
 }
 
-
 //创建订单返回支付串
-func (this *Order) CreateOrder() {
+func (this *SubVipPayOrder) CreateOrder() {
 	area := qutil.ObjToMap(this.GetString("area"))
 	industry := strings.Split(this.GetString("industry"), ",")
 	date := this.GetString("time")
@@ -43,6 +42,9 @@ func (this *Order) CreateOrder() {
 		if len(industry) == 1 { //去掉[""]
 			industry = []string{}
 		}
+		if !(payWay == "wx_js" || payWay == "wx_app" || payWay == "ali_app") {
+			return &entity.FuncResult{false, errors.New("未知支付"), nil}
+		}
 		date_count, date_unit, err := checkReqDate(date)
 		if err != nil {
 			return &entity.FuncResult{false, err, nil}
@@ -62,39 +64,56 @@ func (this *Order) CreateOrder() {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
 		//计算价格
-		totalfee := entity.GetSubVipPrice(area, industry, date_count, date_unit)
+		//totalfee := entity.GetSubVipPrice(area, industry, date_count, date_unit)
+		totalfee := 1
 		//创建订单
-		tradeno, ret := pay.WxStruct.CreatePrepayOrder( "e", this.IP(), openId, "", totalfee)
-		if ret == nil || (*ret)["status"] != "1" {
-			errMsg := "创建微信订单出错"
-			if (*ret)["errcodedes"] != "" {
-				errMsg = (*ret)["errcodedes"]
-			} else if (*ret)["errcode"] != "" {
-				errMsg = (*ret)["errcode"]
+		tradeno, prepayid, payStr := "", "", ""
+
+		if payWay == "wx_js" { //微信js支付
+			var ret *map[string]string
+			tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_JSAPI, this.IP(), openId, "", totalfee)
+			if ret == nil || (*ret)["status"] != "1" {
+				errMsg := "创建微信订单出错"
+				if (*ret)["errcodedes"] != "" {
+					errMsg = (*ret)["errcodedes"]
+				} else if (*ret)["errcode"] != "" {
+					errMsg = (*ret)["errcode"]
+				}
+				return &entity.FuncResult{false, errors.New(errMsg), nil}
 			}
-			return &entity.FuncResult{false, errors.New(errMsg), nil}
+			prepayid = qutil.ObjToString((*ret)["prepayid"])
+			payStr = pay.GetWxJsPayStr(prepayid)
+		} else if payWay == "wx_app" {
+			var ret *map[string]string
+			tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_JSAPI, this.IP(), openId, "", totalfee)
+			if ret == nil || (*ret)["status"] != "1" {
+				errMsg := "创建微信订单出错"
+				if (*ret)["errcodedes"] != "" {
+					errMsg = (*ret)["errcodedes"]
+				} else if (*ret)["errcode"] != "" {
+					errMsg = (*ret)["errcode"]
+				}
+				return &entity.FuncResult{false, errors.New(errMsg), nil}
+			}
+			prepayid = qutil.ObjToString((*ret)["prepayid"])
+			payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
 		}
-		//存入订单表
-		ordercode := pay.GetOrderCode(openId)
-		prepayid := qutil.ObjToString((*ret)["prepayid"])
-		jsPayParam := pay.GetWxJsPayStr(prepayid)
-
-		filter := map[string]interface{}{
-			"_id":        mog_id,
-			"area":       area,
-			"industry":   industry,
-			"cyclecount": date_count, //时长
-			"cycleunit":  date_unit,  //单位
+		filter := entity.VipSimpleMsg{
+			mog_id,
+			area,
+			industry,
+			date_count,
+			date_unit,
 		}
 		filterStr, _ := json.Marshal(filter)
-
+		ordercode := pay.GetOrderCode(userId)
 		orderid := util.Mysql.Insert("dataexport_order", map[string]interface{}{
 			"order_money":    totalfee,
 			"order_status":   0,
 			"user_nickname":  qutil.ObjToString(this.GetSession("s_nickname")),
 			"user_openid":    openId,
 			"prepay_id":      prepayid,
-			"code_url":       jsPayParam,
+			"code_url":       payStr,
 			"out_trade_no":   tradeno,
 			"order_code":     ordercode,
 			"product_type":   "VIP订阅",
@@ -109,10 +128,7 @@ func (this *Order) CreateOrder() {
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
 		}
-		return &entity.FuncResult{true, nil, map[string]interface{}{
-			"code": ordercode,
-			"res":  jsPayParam,
-		}}
+		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode, "res": payStr}}
 	}()
 	if r.Err != nil {
 		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
@@ -121,7 +137,7 @@ func (this *Order) CreateOrder() {
 }
 
 //支付已创建订单
-func (this *Order) OrderToPay() {
+func (this *SubVipPayOrder) OrderToPay() {
 	orderCode := qutil.ObjToString(this.GetString("orderCode"))
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	r := func() *entity.FuncResult {
@@ -140,9 +156,7 @@ func (this *Order) OrderToPay() {
 		jsPayParam := qutil.ObjToString((*oData)["code_url"])
 		if time.Now().Before(prepayTime.Add(time.Hour*2)) && jsPayParam != "" {
 			//未过期
-			return &entity.FuncResult{true, nil, map[string]interface{}{
-				"res": jsPayParam,
-			}}
+			return &entity.FuncResult{true, nil, map[string]interface{}{"res": jsPayParam}}
 		}
 		//重新生成订单
 		openId := qutil.ObjToString((*oData)["user_openid"])
@@ -170,7 +184,7 @@ func (this *Order) OrderToPay() {
 		if !ok {
 			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
 		}
-		return &entity.FuncResult{true, nil, map[string]interface{}{"res": jsPayParam	}}
+		return &entity.FuncResult{true, nil, map[string]interface{}{"res": jsPayParam}}
 	}()
 	if r.Err != nil {
 		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
@@ -200,4 +214,3 @@ func checkReqDate(dateStr string) (cyclecount, cycleunit int, err error) {
 	}
 	return -1, -1, errors.New(fmt.Sprintf("日期%s格式化出错", dateStr))
 }
-

+ 166 - 6
src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go

@@ -4,7 +4,11 @@ import (
 	"encoding/json"
 	"entity"
 	"errors"
+	"github.com/dchest/captcha"
+	"github.com/go-xweb/httpsession"
+	"gopkg.in/mgo.v2/bson"
 	"pay"
+	"regexp"
 
 	"log"
 
@@ -17,11 +21,166 @@ import (
 	"github.com/go-xweb/xweb"
 )
 
-//订单结构
+//试用用户
 type TrialOrder struct {
 	*xweb.Action
-	getTrialOrderPayMsg xweb.Mapper `xweb:"/order/getTrialOrderPayMsg"` //订单数据展示(支付成功页面)
+	getUserPhone        xweb.Mapper `xweb:"/trial/GetUserPhone"`        //获取用户手机号码
+	captcha             xweb.Mapper `xweb:"/trial/captcha"`             //图形验证码
+	sendPhoneCaptcha    xweb.Mapper `xweb:"/trial/sendPhoneCaptcha"`    //发送手机验证码
+	submitApply         xweb.Mapper `xweb:"/trial/submitApply"`         //提交申请信息
 	trialPay            xweb.Mapper `xweb:"/order/trialPay"`            //试用用户创建订单
+	getTrialOrderPayMsg xweb.Mapper `xweb:"/order/getTrialOrderPayMsg"` //订单数据展示(支付成功页面)
+}
+
+var (
+	phoneReg = regexp.MustCompile("^[1][3-9][0-9]{9}$")
+	nameReg  = regexp.MustCompile("^[\u4E00-\u9FA5A-Za-z\\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$")
+)
+//获取之前用户信息
+func (t *TrialOrder) GetUserPhone() {
+	var phoneNum string
+	userId := qutil.ObjToString(t.GetSession("userId"))
+	if userId != "" {
+		m, ok := util.MQFW.FindById("user", userId, `{"s_phone":1}`)
+		if ok && len(*m) > 0 {
+			phoneNum = qutil.ObjToString((*m)["s_phone"])
+		}
+	}
+	if phoneNum == "" {
+		openid := qutil.ObjToString(t.GetSession("s_m_openid"))
+		if openid != "" {
+			m, ok := util.MQFW.FindOneByField("applysub_user", bson.M{"s_openid": openid}, `{"s_phone":1}`)
+			if ok && len(*m) > 0 {
+				phoneNum = qutil.ObjToString((*m)["s_phone"])
+			}
+		}
+	}
+	t.ServeJson(map[string]interface{}{
+		"success":  qutil.If(phoneNum == "", false, true).(bool),
+		"phoneNum": phoneNum,
+	})
+}
+
+//试用用户图片验证码
+func (t *TrialOrder) Captcha() error {
+	id := captcha.NewLen(4)
+	t.SetSession("subvip_trial_imgCode", id)
+	w := t.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")
+	return captcha.WriteImage(w, id, 90, 30)
+}
+
+//发送手机验证码
+func (t *TrialOrder) SendPhoneCaptcha() {
+	phoneNum := t.GetString("phoneNum")
+	imgcode_req := t.GetString("imgCancode")
+	ok, errMsg := func() (bool, string) {
+		if !phoneReg.MatchString(phoneNum) {
+			return false, "手机格式不正确"
+		}
+		imgcode_sess := qutil.ObjToString(t.GetSession("subvip_trial_imgCode"))
+		if !captcha.VerifyString(imgcode_sess, imgcode_req) || imgcode_req == "" {
+			return false, "验证码不正确"
+		}
+		//获取上次发送验证码时间
+		lastSend := qutil.Int64All(t.GetSession("subvip_trial_lastSend"))
+		if time.Now().Unix()-lastSend < 60 {
+			return false, "信息已发送"
+		}
+		//判断手机号是否存在
+		if isExist(phoneNum) {
+			return false, "手机号已使用"
+		}
+		MsgCode := qutil.GetRandom(6)
+		t.SetSession("subvip_trial_MsgCode", MsgCode)
+		t.SetSession("subvip_trial_phoneNum", phoneNum)
+		t.SetSession("subvip_trial_lastSend", time.Now().Unix())
+		log.Printf("%s 发送短信验证码 %s\n", t.GetSession("userId"), MsgCode)
+		go func() {
+			util.SendSMS("2828060", phoneNum, map[string]string{"code": MsgCode})
+		}()
+		return true, ""
+	}()
+	t.ServeJson(map[string]interface{}{
+		"success": ok,
+		"errMsg":  errMsg,
+	})
+}
+
+//提交申请信息
+func (t *TrialOrder) SubmitApply() {
+	name := t.GetString("name")
+	tel := t.GetString("tel")
+	code := t.GetString("code")
+	company := t.GetString("company")
+	job := t.GetString("job")
+	ok, errMsg := func() (bool, string) {
+		//校验数据
+		if !nameReg.MatchString(name) || code == "" || company == "" {
+			return false, "输入校验不通过"
+		}
+		//校验验证码
+		lastSend := qutil.Int64All(t.GetSession("subvip_trial_lastSend"))
+		if time.Now().Unix()-lastSend > 60*5 {
+			return false, "短信验证码已过期"
+		}
+		code_sess := qutil.ObjToString(t.GetSession("subvip_trial_MsgCode"))
+		tel_sess := qutil.ObjToString(t.GetSession("subvip_trial_phoneNum"))
+		if code != code_sess || tel != tel_sess {
+			log.Println(code, code_sess, tel, tel_sess)
+			return false, "短信验证码错误"
+		}
+		if isExist(tel_sess) {
+			return false, "手机号已使用"
+		}
+		//储存数据
+		userId := qutil.ObjToString(t.GetSession("userId"))
+		flag := util.MQFW.Save("user_msg", map[string]interface{}{
+			"s_userId":  userId,
+			"s_name":    name,
+			"s_phone":   tel,
+			"s_openid":  t.GetSession("s_m_openid"),
+			"s_company": company,
+			"s_job":     job,
+			"i_time":    time.Now().Unix(),
+			"s_source":  "vipsub_trial",
+		})
+		if flag == "" {
+			return false, "稍后重试"
+		}
+		go func() {
+			//更新user表可试用
+			if !util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"o_vipjy.i_trial": 1}}) {
+				log.Println("更新使用状态出错", userId)
+			}
+		}()
+		clearTrialSession(t.Session())
+		return true, ""
+	}()
+	t.ServeJson(map[string]interface{}{
+		"success": ok,
+		"errMsg":  errMsg,
+	})
+}
+
+//查询手机号是否存在
+func isExist(phone string) bool {
+	res, ok := util.MQFW.FindOne("user_msg", bson.M{"s_phone": phone})
+	if ok && len(*res) > 0 {
+		return true
+	}
+	return false
+}
+
+//清除session
+func clearTrialSession(session *httpsession.Session) {
+	session.Del("subvip_trial_MsgCode")
+	session.Del("subvip_trial_phoneNum")
+	session.Del("subvip_trial_lastSend")
+	session.Del("subvip_trial_imgCode")
 }
 
 //订单数据展示(支付成功页面)
@@ -60,7 +219,6 @@ func (this *TrialOrder) TrialPay() {
 		if len(industry) == 1 { //去掉[""]
 			industry = []string{}
 		}
-		log.Println(area, industry)
 		//插入订单表
 		mog_id := util.MQFW.Save("subvip_select", map[string]interface{}{
 			"o_area":       area,     //地区(对象)
@@ -74,7 +232,7 @@ func (this *TrialOrder) TrialPay() {
 		if mog_id == "" {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
-		if !entity.CanTrial(userId) {
+		if !entity.JyVipSubStruct.CanTrial(userId) {
 			return &entity.FuncResult{false, errors.New("无试用权限"), nil}
 		}
 		//计算价格
@@ -89,7 +247,7 @@ func (this *TrialOrder) TrialPay() {
 			"cycleunit":  date_unit,  //单位
 		}
 		filterStr, _ := json.Marshal(filter)
-
+		endTime := now.AddDate(0, 0, 7)
 		orderid := util.Mysql.Insert("dataexport_order", map[string]interface{}{
 			"order_money":    totalfee,
 			"order_status":   1,
@@ -106,11 +264,13 @@ func (this *TrialOrder) TrialPay() {
 			"user_id":        userId,
 			"filter":         string(filterStr), //筛选
 			"pay_time":       qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"vip_starttime":  qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"vip_endtime":    qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
 		})
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据保存异常"), nil}
 		}
-		if !entity.StartTrial(userId, area, industry) { //设置开始试用
+		if !entity.JyVipSubStruct.StartSubVip(userId, area, industry, now, endTime,true) { //设置开始试用
 			return &entity.FuncResult{false, errors.New("开通试用异常"), nil}
 		}
 		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode}}

二进制
src/jfw/modules/subscribepay/src/web/staticres/res/dataexport/20191102164927_144238100357_zxkMq.xlsx


+ 1 - 0
src/jfw/modules/subscribepay/src/web/staticres/res/dataexport/a.txt

@@ -0,0 +1 @@
+asdasd

+ 62 - 8
src/jfw/public/historypush.go

@@ -23,6 +23,53 @@ var HistoryPush = &historyPush{}
 
 type historyPush struct{}
 
+var Mysql_table = "pushsubscribe"
+
+//
+func (h *historyPush) Datas_Mysql(userId string, pageNum int, selectTime, area string) (hasNextPage bool, result []map[string]interface{}) {
+	if userId == "" {
+		return
+	}
+	findSQL := "select * from pushsubscribe where userid = '" + userId + "'"
+	countSQL := "select count(1) as count from pushsubscribe where userid = '" + userId + "'"
+	findStr := ""
+	if selectTime != "" {
+		startTime := selectTime + " 00:00:00"
+		endTime := selectTime + " 23:59:59"
+		st, _ := time.ParseInLocation("2006-01-02 15:04:05", startTime, time.Local)
+		et, _ := time.ParseInLocation("2006-01-02 15:04:05", endTime, time.Local)
+		fmt.Println(st.Unix())
+		_startTime := st.Unix()
+		_endTime := et.Unix()
+		log.Println(_startTime, "--", _endTime)
+		findStr += " and date < " + fmt.Sprint(_endTime) + " and date >= " + fmt.Sprint(_startTime)
+	}
+	if area != "" {
+		findStr += " and city in ("
+		for k, v := range strings.Split(area, ",") {
+			if k > 0 {
+				findStr += ","
+			}
+			findStr += "'" + v + "'"
+		}
+		findStr += ")"
+	}
+	countSQL = countSQL + findStr
+	count := Mysql.CountBySql(countSQL)
+	start := (pageNum - 1) * pageSize
+	findStr += " order by date desc limit " + fmt.Sprint(start) + "," + fmt.Sprint(pageSize)
+	findSQL = findSQL + findStr
+	list := Mysql.SelectBySql(findSQL)
+	if len(*list) > 0 {
+		pushCas := h.getJyPushs(*list)
+		result = h.getInfoByIds(pushCas)
+	} else {
+		result = []map[string]interface{}{}
+	}
+	hasNextPage = int(count) > pageNum*pageSize
+	return
+}
+
 //获取历史推送记录入口
 //selectTime 查询推送的日期 传入的值为‘20060102’ 如果不查询具体天数 传入""
 func (h *historyPush) Datas(userId string, pageNum int, firstPushTime int64, selectTime string) (hasNextPage bool, result []map[string]interface{}, err error) {
@@ -256,22 +303,21 @@ func (h *historyPush) halfYearAgoDatas(userId string, firstPushTime int64) (push
 func (h *historyPush) getJyPushs(datas []map[string]interface{}) (pushCas []*jy.PushCa) {
 	pushCas = []*jy.PushCa{}
 	for _, v := range datas {
-		isvisit := util.Int64All(v["isvisit"])
-		keys := v["keys"].([]string)
+		keys := v["matchkeys"].(string)
 		//		for id_k, id_v := range strings.Split(util.ObjToString(v["pushinfo"]), ",") {
 		pushCas = append(pushCas, &jy.PushCa{
 			Date:       util.Int64All(v["date"]),
-			InfoId:     util.ObjToString(v["pushinfo"]),
-			Visit:      h.isVisited(isvisit, 1),
+			InfoId:     util.ObjToString(v["infoid"]),
+			Visit:      util.IntAll(v["isvisit"]),
 			Index:      1,
 			Area:       util.ObjToString(v["area"]),
 			City:       util.ObjToString(v["city"]),
 			Buyerclass: util.ObjToString(v["buyerclass"]),
-			Keys:       keys,
+			Keys:       strings.Split(keys, " "),
 		})
-		if len(pushCas) == 4000 {
-			return
-		}
+		//		if len(pushCas) == 4000 {
+		//			return
+		//		}
 		//		}
 	}
 	return
@@ -319,6 +365,7 @@ func (h *historyPush) getInfoByIds(pushCas []*jy.PushCa) []map[string]interface{
 			es_ids = append(es_ids, v)
 		}
 	}
+	//	log.Println(es_ids)
 	//elasticsearch
 	if len(es_ids) > 0 {
 		list := elastic.Get("bidding", "bidding", fmt.Sprintf(query, strings.Join(es_ids, `","`), len(es_ids)))
@@ -475,6 +522,13 @@ func (h *historyPush) UserInfo(userId string) (*map[string]interface{}, int64) {
 	}
 	return user, util.Int64All((*user)["l_firstpushtime"])
 }
+func (h *historyPush) Visit_Mysql(userId, infoId string) {
+	if infoId == "" || userId == "" {
+		return
+	}
+	ok := Mysql.UpdateOrDeleteBySql("update pushsubscribe set isvisit=1 where userid='" + userId + "' and infoid='" + util.DecodeArticleId2ByCheck(infoId)[0] + "'")
+	log.Println("--update:", ok)
+}
 
 //已访问过的,改变状态值
 func (h *historyPush) Visit(userId, infoId string, date int64, index int) {

+ 1 - 1
src/jfw/rpcfollow/rpc.go

@@ -1,4 +1,4 @@
-// rpc
+// rpcfollow
 package rpcfollow
 
 import (

+ 13 - 7
src/web/staticres/vipsubscribe/css/choose_area.css

@@ -63,11 +63,13 @@
 }
 
 .tips_btn {
-  display: flex;
-  position: relative;
-  flex-direction: column;
-  align-items: center;
-  justify-content: space-between;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: space-between;
+    position: fixed;
+    width: 100%;
+    bottom: 0;
 }
 
 .tips_btn .tips_discount {
@@ -109,6 +111,7 @@
   line-height: .94rem;
   color: #fff;
   font-size: .34rem;
+  background-color: #fff;
 }
 
 .tips_btn .btns .save-btn,
@@ -406,10 +409,13 @@
 }
 
 #choose_area .result {
-  position: relative;
+  position: fixed;
   padding: .2rem .3rem;
   font-size: .26rem;
   text-align: justify;
+  width:100%;
+  background:rgba(245,244,249,1);
+  z-index:999;
 }
 
 #choose_area .result .result_text {
@@ -452,7 +458,7 @@
 }
 
 #choose_area .select-area-box {
-  padding-bottom: .94rem;
+  padding-bottom: 1.44rem;
 }
 
 #choose_area .select-area-box .tab {

+ 10 - 3
src/web/staticres/vipsubscribe/css/choose_industry.css

@@ -64,10 +64,12 @@
 
 .tips_btn {
   display: flex;
-  position: relative;
+  position: fixed;
+  bottom: 0;
   flex-direction: column;
   align-items: center;
   justify-content: space-between;
+  width: 100%;
 }
 
 .tips_btn .tips_discount {
@@ -109,6 +111,7 @@
   line-height: .94rem;
   color: #fff;
   font-size: .34rem;
+  background-color: #fff;
 }
 
 .tips_btn .btns .save-btn,
@@ -402,6 +405,10 @@
 
 .choose_industry .result {
   padding: .2rem .3rem;
+  background:rgba(245,244,249,1);
+  z-index:999;
+  position: fixed;
+  width:100%;	 
 }
 
 .choose_industry .form {
@@ -410,7 +417,7 @@
 }
 
 .choose_industry .slide {
-  position: absolute;
+  position: fixed;
   top: 50%;
   right: 0;
   display: flex;
@@ -425,7 +432,7 @@
 }
 
 .choose_industry .select-area-box {
-  padding-bottom: .94rem;
+  padding-bottom: 1.44rem;
   background-color: #fff;
   min-height: 100%;
 }

+ 10 - 8
src/web/staticres/vipsubscribe/css/keyWord.css

@@ -2,8 +2,8 @@
   display: flex;
   flex-direction: column;
   justify-content: space-between;
-  width: 100;
-  height: 100%;
+  width: 100%;
+  height: 100vh;
   overflow: hidden;
 }
 
@@ -109,15 +109,15 @@
 }
 
 .keyWord .all-classify-column .classify-list {
-  margin-top: .24rem;
+  margin-top: .8rem;
 }
 
 .keyWord .all-classify-column .classify-list .classify-item {
-  display: flex;
+  /*display: flex;*/
   align-items: center;
   justify-content: space-between;
-  padding: 0 .3rem;
-  height: 1.1rem;
+  padding: 0.3rem;
+  height: 1.6rem;
   background-color: #fff;
   border-bottom: 1px solid #CECECE;
 }
@@ -132,12 +132,14 @@
 }
 
 .keyWord .all-classify-column .classify-list .classify-item .classify-item-r {
-  display: flex;
+  /*display: flex;*/
   align-items: center;
   justify-content: end;
-  height: 100%;
+  /*height: 100%;*/
   color: #888888;
   font-size: .28rem;
+  /*new*/
+  float: right;
 }
 
 .keyWord .all-classify-column .classify-list .classify-item .classify-item-r .icon-arrow {

+ 5 - 4
src/web/staticres/vipsubscribe/css/subscribe_list.css

@@ -162,9 +162,10 @@
   line-height: .88rem;
   padding: 0 .3rem;
   background: #fff;
+      border-bottom: 1px solid #E6E6E6;
 }
 
-.filter_tab:after {
+/*.filter_tab:after {
   position: absolute;
   content: '';
   left: 0;
@@ -174,7 +175,7 @@
   background-color: #E6E6E6;
   transform-origin: 0 0;
   transform: scaleY(0.5);
-}
+}*/
 
 .filter_tab .tab_left {
   flex: 1;
@@ -248,7 +249,7 @@
 
 .filter_tab .area_container .area_wrap .area_data {
   flex: 1;
-  overflow-y: scroll;
+  overflow-y: hidden;
   display: flex;
   justify-content: space-between;
 }
@@ -290,7 +291,7 @@
   height: 1px;
   background-color: #E0E0E0;
   transform-origin: 0 0;
-  transform: scaleY(0.5);
+  /*transform: scaleY(0.5);*/
 }
 
 .filter_tab .area_container .area_wrap .area_data .active {

+ 8 - 0
src/web/staticres/vipsubscribe/css/trial_info.css

@@ -2,6 +2,7 @@
   width: 100%;
   height: 100%;
   overflow: hidden;
+  padding-bottom: .94rem;
 }
 
 .trial_info .form {
@@ -178,3 +179,10 @@
 .custom-toast .weui-toast__content {
   margin: 0;
 }
+
+.trial_info .trial_btn{
+	position: fixed;
+	bottom: 0;
+	width: 100%;
+	background: #fff;
+}

+ 1 - 1
src/web/staticres/vipsubscribe/css/vip_index.css

@@ -409,7 +409,7 @@
   flex-direction: column;
   flex-wrap: nowrap;
   width: 100%;
-  height: 100%;
+  height: 100vh;
   padding-top: constant(safe-area-inset-top);
   padding-top: env(safe-area-inset-top);
   padding-bottom: constant(safe-area-inset-bottom);

+ 6 - 4
src/web/staticres/vipsubscribe/css/vip_introduce.css

@@ -34,6 +34,7 @@
   display: flex;
   flex-direction: column;
   justify-content: space-between;
+  margin-bottom: .94rem;
 }
 
 .vip_introduce .main {
@@ -168,10 +169,11 @@
 }
 
 .vip_introduce .menu {
-  position: relative;
-  width: 100%;
-  height: .94rem;
-  line-height: .94rem;
+   position: fixed;
+   width: 100%;
+   height: .94rem;
+   bottom: 0;
+   line-height: .94rem;
 }
 
 .vip_introduce .menu:after {

+ 2 - 0
src/web/staticres/vipsubscribe/css/vip_order_detail.css

@@ -479,6 +479,8 @@
   line-height: .94rem;
   text-align: center;
   font-size: .36rem;
+  position: absolute;
+  bottom: 0px;
 }
 
 .vip_order_detail .align {

+ 2 - 0
src/web/staticres/vipsubscribe/css/vip_pay_success.css

@@ -26,6 +26,8 @@
   align-items: center;
   width: 100%;
   height: .94rem;
+  position: fixed;
+  bottom: 0;
 }
 
 .bottom_button .left_btn,

+ 4 - 0
src/web/staticres/vipsubscribe/css/vip_purchase.css

@@ -417,6 +417,7 @@
   height: 100%;
   flex-direction: column;
   justify-content: space-between;
+  padding-bottom: 2.5rem;
 }
 
 .vip_purchase .choose_condition::-webkit-scrollbar {
@@ -559,7 +560,10 @@
 }
 
 .vip_purchase .fixed-bottom-box {
+  width: 100%;	
   background-color: #fff;
+  position: fixed;
+  bottom: 0;
 }
 
 .vip_purchase .fixed-bottom-box .price {

+ 26 - 0
src/web/staticres/vipsubscribe/js/keyWord.js

@@ -53,6 +53,7 @@ $(function () {
         if(kws_count>300){
             alert("您设置的关键词已超出最高上限,请调整后再添加。")
         }else if (saveData("SK")){
+            $(".add-keyword-container .addNewKeyword").show();
             //点击保存关键词,查看缓存中存的附加词 和排除词。
             $(".kws_count").text(kws_count);
             var html = `<li><div class="one"><div>
@@ -104,6 +105,26 @@ $(function () {
             if(a_items.length==0){
                 setEmptyHistory();
             }
+            //保存关键词 查看关键词数量 未分类 超过20 100提示
+            if(classify_name.indexOf("未分类")>-1){
+                if((kws_tips==0&&$(".showKeyWord li").length==2)||(kws_tips==20&&$(".showKeyWord li").length==5)){
+                    //未分类 20个关键词提示,100个关键词提示
+                    showMeg();
+                    var param = {};
+                    param.classify_index = classify_index;
+                    if(kws_tips==0){
+                        param.kws_tips = 20;
+                    }else if(kws_tips==20){
+                        param.kws_tips = 100;
+                    }
+                    $.post("/subscribepay/afterPay/updateUserTips",param,function(r){
+                        if(r.flag){
+                            kws_tips = param.kws_tips;
+                            $(".classify").attr("tips",kws_tips);
+                        }
+                    })
+                }
+            }
             //
             doSessionData();
         }
@@ -223,6 +244,11 @@ $(function () {
         if (classify_name.length === 0) {
             return
         }
+        //分类名称是否已存在
+        if($.inArray(classify_name, classify_arr)>-1){
+            alert("此分类名称已存在!")
+            return
+        }
         $(this).removeClass("opacity6");
         $('.classify-r .classify-detail').text(classify_name);
         // 关闭弹框后要重置input内容

+ 8 - 4
src/web/templates/pc/myOrder.html

@@ -316,6 +316,10 @@
 							$(".backTop").click();
 							for (var i = 0; i < data.list.length; i++) {
 								var obj = data.list[i];
+								//vip订单不显示 2.8.5
+								if (obj.data_count==null){
+									continue;
+								}
 								var id = obj.id;
 								var orderCode = obj.order_code;
 								var publishTime = obj.filter_publishtime;
@@ -468,7 +472,7 @@
 							action: function() {
 								$.ajax({
 									type: "post",
-									url: "/front/dataExport/deleteOrder",
+									url: "/jypay/deleteOrder",
 									data: {
 										"id": id
 									},
@@ -626,7 +630,7 @@
 					flushpay=true;
 				}
 				if (flushpay) { //二维码超时或者支付微信订单
-					$.post("/dataexport/getOrderPayMsg", {
+					$.post("/jypay/dataexport/getOrderPayMsg", {
 						payway: payway,
 						orderCode: orderCode,
 						prepaytime: prepaytime
@@ -659,7 +663,7 @@
 					alertS("此订单不支持微信支付!");
 					return
 				}
-				$.post("/dataexport/getOrderPayMsg", {
+				$.post("/jypay/dataexport/getOrderPayMsg", {
 					payway: payway,
 					orderCode: orderCode,
 					prepaytime: prepaytime
@@ -714,7 +718,7 @@
 					interval_t--;
 					//查询支付知否完成
 					if (interval_t % 3 == 0) {
-						$.post("/dataExport/pay/isPaySuccess", {
+						$.post("/jypay/isPaySuccess", {
 							code: orderCode
 						}, function(r) {
 							if (r.status == "y") {

+ 1 - 1
src/web/templates/weixin/dataExport/dataExport_applyInvoice.html

@@ -327,7 +327,7 @@
 					}
 				}
 				if (submitBl){
-					$.post('/subscribepay/orderListDetails/applyInvoice',formParam+"&demo-radio="+$(".type").html(),function(data){ 
+					$.post('/jypay/applyInvoice',formParam+"&demo-radio="+$(".type").html(),function(data){ 
 										if(data.flag){
 											//window.location.href="/front/wxMyorder/wxPaySuccess/" + {{.T.order_code}}
 											sessionStorage.applysuccess="1";

+ 22 - 317
src/web/templates/weixin/dataExport/dataExport_toMyOrder.html

@@ -293,6 +293,8 @@
 					gopayIndex = $(e).parent().parent().index();
 					if(res.status == 1){
 						onBridgeReady(res,e);
+            //更新token
+            $(e).attr("token",res.token);
 					}
 				});
 			}
@@ -458,12 +460,9 @@
 			                                    var self = $(obj).parent().parent();
 			                                    var parent = self.parent();
 			                                	deleteIndex=self.index();
-			                                	//删除索引存入缓存
-			                                	//sessionStorage.setItem("deleteIndex",deleteIndex);
 			                                	dataCache.splice(deleteIndex,1)
 			                                	if(data.res!=null){
 			                                		dataCache.push(data.res[0])
-			                                	//	hasNextPage=data.hasNextPage;
 			                                		hasNextPage=data.nextPage;
 			                                	}
 			                                    self.remove();
@@ -474,9 +473,9 @@
 			                                            ok: {
 			                                                text: '确定',
 			                                                btnClass: 'btn-primary-2',
-			                                                action: function() {
-			                                                    		console.log(data)
-			                                                    		console.log(data.res.product_type);
+		                                                action: function() {
+	                                                    		console.log(data)
+	                                                    		console.log(data.res.product_type);
 			                                                    if(parent.children("div").length==0){
 			                                                    	nodataHtml=""
 																	nodataHtml+='<div style="text-align:center;">';
@@ -485,302 +484,7 @@
 			                                                        $(".card_lists").append(nodataHtml);
 			                                                       	$(".dropload-down").hide();
 			                                                    }else{//删除一条数据 往后铺一条数据
-			                                                    	if(data.res[0].product_type=="历史数据"){
-			                                                    		console.log("历史数据")
-			                                                    		var listhtml=""
-				                                                    	var oneD=data.res;
-																		for(var index in oneD){
-																	    var obj=oneD[index];
-																    	count++;
-																		var id = obj.id;
-																		//订单编号
-												                        var orderCode = obj.order_code;
-												                        //创建时间
-												                        var createTime=obj.create_time;
-												                        createTime=createTime.replace(/-/g,".")
-												                        //选择时间
-												                        var publishTime = obj.filter_publishtime;
-												                        if(!publishTime){
-												                            publishTime = "全部";
-												                        }else{
-																			if(publishTime.length==11){
-												                        	 	if(publishTime.slice(0,1)!="_"){
-												                        	 		var publishtime_=publishTime.slice(0,10);
-												                        	 		publishTime=timestampToTime(publishtime_);
-												                        	 		publishTime=publishTime+"-";
-												                        	 	}else{
-												                        	 		var publishtime_=publishTime.slice(1,11);
-												                        	 		publishTime=timestampToTime(publishtime_);
-												                        	 		publishTime=publishTime+"前全部";
-												                        	 	}
-												                        	 }
-																		}
-												                        //1标准字段包 2高级字段包
-												                        var spec = obj.data_spec;
-												                        if(spec==1){
-												                        	spec ="标准字段包";
-												                        }else if(spec ==2){
-												                        	spec="高级字段包";
-												                        }
-												                        //订单状态 0待支付 1已完成 -1删除
-												                        var orderStatus = obj.order_status;
-												                        if(orderStatus==0){
-												                        	orderStatus="待付款"
-												                        	orderHtml=""
-												                        	orderHtml+='<span class="status notpay">'+orderStatus+'</span>'
-												                        	orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id +",this)\"></a>";
-												                        	iconHtml=""
-												                        	iconHtml+='<div class="card-footer">'
-																						+'<a  class="btn cancle" onclick="deleteOrder('+id+',this)">取消订单</a>'
-																						+'<a href="pay_order.html" class="btn pay">去支付</a>'
-																					+'</div>'
-												                        }else if(orderStatus==1){
-												                        	orderStatus="已完成";
-												                        	orderHtml=""
-												                        	orderHtml+='<span class="status">'+orderStatus+'</span>'
-												                        	orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id +",this)\"></a>";
-												                        	iconHtml=""
-												                        	iconHtml+='<div class="card-footer">'
-																						+'<a onclick="onceMore(this)" class="btn cancle">再次购买</a>'
-																					+'</div>'
-												                        }
-												                        //订单总数
-												                        var data_count=obj.data_count;
-												                        //订单金额
-												                        var orderMoney = obj.order_money;
-					                        	                        //金额格式化 小数点前 1,000
-												                        orderMoney=orderMoney+"";
-											           	             	orderMoney_1=toThousands(orderMoney.split(".")[0]);
-																		orderMoney_2=orderMoney.split(".")[1];
-											           	             	if(orderMoney_2){
-											           	             		orderMoney=orderMoney_1+"."+orderMoney_2;
-											           	             	}else{
-											           	             		orderMoney=orderMoney_1;
-											           	             	}
-												                        //
-												                        var token = obj.token;
-												                        //关键词
-																		if(obj.filter_keys && obj.filter_keys.split(",").length>0){
-																			var keysHtml="";
-													                        var keysArr = obj.filter_keys.split(",");
-													                        var keysLen = keysArr.length;for(var j=0;j<keysLen;j++){
-													                            keysHtml += "<span>" + keysArr[j] + "&nbsp</span>";
-													                        }
-													                 	}else{
-													                 		keysHtml=""
-													                 	}
-																		
-																		listhtml+='<div class="card">'
-																						+'<div class="card-header">'
-																							+'<span class="time" style="color:#888888">'+createTime+'</span>'
-																							+orderHtml
-																						+'</div>'
-																						+'<div class="card-content">'
-																							+'<a  eid='+orderCode+' class="media">'
-																								+'<div class="media-img">'
-																									+'<img src="/dataExport/image/historical_data.png">'
-																								+'</div>'
-																								+'<div class="media-info">'
-																									+'<p class="item-ifo ellipsis">关键词:'+ keysHtml+'</p>'
-																									+'<p class="item-ifo ellipsis">数据量:'+ data_count +'条</p>'
-																									+'<p class="item-ifo ellipsis">数据规格:'+spec+'</p>'
-																									+'<p class="item-ifo ellipsis">筛选日期:'+publishTime+'</p>'
-																								+'</div>'
-																							+'</a>'
-																							+'<div class="price">'
-																								+'<strong class="current">¥'+orderMoney+'</strong>'
-																							+'</div>'
-																						+'</div>'
-																						+iconHtml
-																					+'</div>'
-																		
-																			}
-																		//删除完成后补的订单仍可点击
-																		appendList($(listhtml));
-			                                                    	}else if (data.res[0].product_type=="vip订阅"){
-			                                                    		console.log("vip订阅");
-			                                                    		var listhtml=""
-				                                                    	var oneD=data.res;
-																		for(var index in oneD){
-																		    var obj=oneD[index];
-																	    	count++;
-																			var id = obj.id;
-																			//订单编号
-													                        var orderCode = obj.order_code;
-													                        //创建时间
-													                        var createTime=obj.create_time;
-													                        createTime=createTime.replace(/-/g,".")
-													                        //选择时间
-													                        var publishTime = obj.filter_publishtime;
-													                        if(!publishTime){
-													                            publishTime = "全部";
-													                        }else{
-																				if(publishTime.length==11){
-													                        	 	if(publishTime.slice(0,1)!="_"){
-													                        	 		var publishtime_=publishTime.slice(0,10);
-													                        	 		publishTime=timestampToTime(publishtime_);
-													                        	 		publishTime=publishTime+"-";
-													                        	 	}else{
-													                        	 		var publishtime_=publishTime.slice(1,11);
-													                        	 		publishTime=timestampToTime(publishtime_);
-													                        	 		publishTime=publishTime+"前全部";
-													                        	 	}
-													                        	 }
-																			}
-													                        //筛选条件
-													                        var filter_vip = JSON.parse(obj.filter);
-													                        //地区
-																			var region_vipArr = filter_vip.area;
-													                        var region_vip=""
-													                        var province_length=0;
-													                        var city_length=0;
-													                        for( i in region_vipArr){
-																				if(region_vipArr[i].length==0){
-																					province_length++;
-																				}else{
-																					city_length+=region_vipArr[i].length;
-																				}
-													                        }
-													                        region_vip=province_length+"个省级区域、"+city_length+"个地市";
-													                        //行业
-													                        var industry_vip = filter_vip.industry.length;	//数组
-													                        var cyclecount_vip = filter_vip.cyclecount;	//时长
-													                        var cycleunit_vip = filter_vip.cycleunit;		//单位 1:年 2:月
-													                        //订阅周期
-													                        var effectiveduration_vip=""
-													                        if(cycleunit_vip==1){
-													                        	effectiveduration_vip=cyclecount_vip+"年";
-													                        }else if(cycleunit_vip==2){
-													                        	effectiveduration_vip=cyclecount_vip+"个月"
-													                        }
-													                        var vip_status =obj.i_vip_status;	// 1:试用 2:正式 -1:试用到期 -2:正式到期
-													                        if(obj.i_vip_status=="1"){			//试用
-													                        	effectiveduration_vip="7天";
-													                        }
-													                        //订单状态 0待支付 1已完成 -1删除  
-													                        var orderStatus_vip =  obj.order_status;
-													                        var token_vip = obj.token;
-													                        if(sessionStorage&&sessionStorage.getItem("paySuccess_"+obj.order_code)!=null){
-																				orderStatus = sessionStorage.getItem("paySuccess_"+obj.order_code);
-																				if (orderTabActive==1&&orderStatus==1){
-																					gopayIndex = index;
-																					psss=obj.order_code;
-																					continue;
-																				}else{
-																					sessionStorage.removeItem("paySuccess_"+obj.order_code);
-																				}
-																			}
-													                         //订单金额
-													                        var orderMoney_vip = obj.order_money;
-													                        //金额格式化 小数点前 1,000
-													                        orderMoney_vip=orderMoney_vip+"";
-													       	             	orderMoney_vip1=toThousands(orderMoney_vip.split(".")[0]);
-																			orderMoney_vip2=orderMoney_vip.split(".")[1];
-													       	             	if(orderMoney_vip2){
-													       	             		orderMoney_vip=orderMoney_vip1+"."+orderMoney_vip2;
-													       	             	}else{
-													       	             		orderMoney_vip=orderMoney_vip1;
-													       	             	}
-													                        if(orderStatus_vip==0){
-													                        	orderStatus_vip="待付款"
-													                        	orderHtml=""
-													                        	orderHtml+='<span class="status notpay">'+orderStatus_vip+'</span>'
-													                    		orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id_vip +",this)\"></a>";
-													                        	iconHtml=""
-													                        	iconHtml+='<div class="card-footer">'
-																							+'<a  class="btn cancle" onclick="cancelOrder('+id_vip+',this)">取消订单</a>'
-																							+'<a href="javascript:void(0)" onclick="goPay(this)" class="btn pay" filterid="'+obj.filter_id+'" token="'+token_vip+'" id="'+id_vip+'">去支付</a>'
-																						+'</div>'
-													                        }else if(orderStatus_vip==1){
-													                        	orderStatus_vip="已完成";
-													                        	orderHtml=""
-													                        	orderHtml+='<span class="status">'+orderStatus_vip+'</span>'
-													                    		orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id_vip +",this)\"></a>";
-													                        	iconHtml=""
-													                        	//最后一次购买完 1:试用 2:正式 -1:试用到期 -2:正式到期
-													                        	if((vip_status=="-2")&&(obj.lastbuy_code!="")){
-													                        		iconHtml+='<div class="card-footer">'
-																							+'<a  onclick="renewalOrBuyAgain(2,this)" class="btn cancle">再次购买</a>'
-																						+'</div>'
-													                        	}else if((vip_status=="2")&&(obj.lastbuy_code!="")){
-													                        		iconHtml+='<div class="card-footer">'
-																							+'<a  onclick="renewalOrBuyAgain(1,this)" class="btn cancle">续费</a>'
-																						+'</div>'
-													                        	}
-													                        }else if(orderStatus_vip==-2){
-													                        	orderStatus_vip="已取消";
-													                        	orderHtml="";
-													                        	orderHtml+='<span class="status">'+orderStatus_vip+'</span>'
-													                        	orderHtml+="<a class=\"shanchu iconfont  icon-shanchu\" title=\"删除订单\" onclick=\"deleteOrder(" + id_vip +",this)\"></a>";
-													                        	iconHtml="";
-													                        	iconHtml+='<div class="card-footer">'
-												//											+'<a onclick="renewalOrBuyAgain(2,this)" class="btn cancle">再次购买</a>'
-																						+'</div>'
-													                        }
-													                        //vip状态 0不是vip 1试用 2正式
-													                        var status_vip = obj.i_vip_status;
-													                        if (orderStatus_vip!="已完成"){
-													                        //未支付 或 已取消
-													                        	listhtml+='<div class="card">'
-																							+'<div class="card-header">'
-																								+'<span class="time" style="color:#888888">'+createTime_vip+'</span>'
-																								+orderHtml
-																							+'</div>'
-																							+'<div class="card-content">'
-																								+'<a  eid='+orderCode_vip+' class="media" isvipOrder="true">'
-																									+'<div class="media-img">'
-																										+'<img src="/vipsubscribe/image/vip_order.png">'
-																									+'</div>'
-																									+'<div class="media-info">'
-																										+'<p class="item-ifo ellipsis">区域:'+ region_vip+'</p>'
-																										+'<p class="item-ifo ellipsis">行业:'+ industry_vip +'个行业</p>'
-																										+'<p class="item-ifo ellipsis">订阅周期:'+effectiveduration_vip+'</p>'
-																									+'</div>'
-																								+'</a>'
-																								+'<div class="price">'
-																									+'<strong class="current">¥'+orderMoney_vip+'</strong>'
-																								+'</div>'
-																							+'</div>'
-																							+iconHtml
-																					+'</div>'
-													                        }else{
-															                       //有效时间
-															                       var starttime_vip= obj.l_vip_starttime;
-															                       var endtime_vip= obj.l_vip_endtime;
-															                       starttime_vip = timestampToTime(starttime_vip)
-															                       endtime_vip = timestampToTime(endtime_vip)
-															                       var effectivetime_vip =starttime_vip+"-"+endtime_vip;
-															                        //已完成
-															                        	listhtml+='<div class="card">'
-																									+'<div class="card-header">'
-																										+'<span class="time" style="color:#888888">'+createTime_vip+'</span>'
-																										+orderHtml
-																									+'</div>'
-																									+'<div class="card-content">'
-																										+'<a  eid='+orderCode_vip+' class="media" isvipOrder="true">'
-																											+'<div class="media-img">'
-																												+'<img src="/vipsubscribe/image/vip_order.png">'
-																											+'</div>'
-																											+'<div class="media-info">'
-																												+'<p class="item-ifo ellipsis">区域:'+ region_vip+'</p>'
-																												+'<p class="item-ifo ellipsis">行业:'+ industry_vip +'个行业</p>'
-																												+'<p class="item-ifo ellipsis">订阅周期:'+effectiveduration_vip+'</p>'
-																												+'<p class="item-ifo ellipsis">有效日期:'+effectivetime_vip+'</p>'
-																											+'</div>'
-																										+'</a>'
-																										+'<div class="price">'
-																											+'<strong class="current">¥'+orderMoney_vip+'</strong>'
-																										+'</div>'
-																									+'</div>'
-																									+iconHtml
-																							+'</div>'
-													                        }
-												                        }//for end
-																		//删除完成后补的订单仍可点击
-																		appendList($(listhtml));
-			                                                    	} //vip订阅 end
-			                                                    	
-																		
+			                                                    	structureHtml(data.res);
 			                                                    }//铺数据 end
 			                                                    if(parent.children("div").length<10){
 			                                                		$(".dropload-refresh").text("没有更多了");
@@ -927,12 +631,12 @@
 								$(".card_lists").append(nodataHtml);
 							}
 						})
-					//return 的是 暂无数据的情况noDataHtml 
-					if(!result){
-						$(".dropload-down").hide()
-						return
-					}
 					setTimeout(function(){
+						//return 的是 暂无数据的情况noDataHtml 
+						if(!result){
+							$(".dropload-down").hide()
+							return
+						}
 						if(hasNextPage){
 							wxflag = $(' .main').dropload({
 						        scrollArea : $(".main"),
@@ -967,7 +671,7 @@
 						    });
 							noMoreData(wxflag);
 						}
-					},300)
+					},500)
 				}
 				
 				function structureHtml(object){
@@ -1098,7 +802,7 @@
 											+'</div>'
 											+iconHtml
 									+'</div>'
-						}else if(obj.product_type=="vip订阅"){
+						}else if((obj.product_type=="vip订阅")||(obj.product_type=="VIP订阅")){
 							count++;
 							var id_vip = obj.id;
 							//订单编号
@@ -1117,20 +821,22 @@
 								if(region_vipArr[i].length==0){
 									province_length++;
 								}else{
-									city_length+=region_vipArr[i].length;
+									city_length+=region_vipArr[i].count;
 								}
 	                        }
 	                        region_vip=province_length+"个省级区域、"+city_length+"个地市";
 	                        //行业
-	                        var industry_vip = filter_vip.industry.length;	//数组
+	                        var industry_vip = filter_vip.industry.count;	//数组
 	                        var cyclecount_vip = filter_vip.cyclecount;	//时长
-	                        var cycleunit_vip = filter_vip.cycleunit;		//单位 1:年 2:月
+	                        var cycleunit_vip = filter_vip.cycleunit;		//单位 1:年 2:月 3:天
 	                        //订阅周期
 	                        var effectiveduration_vip=""
 	                        if(cycleunit_vip==1){
 	                        	effectiveduration_vip=cyclecount_vip+"年";
 	                        }else if(cycleunit_vip==2){
 	                        	effectiveduration_vip=cyclecount_vip+"个月"
+	                        }else if(cycleunit_vip==3){
+	                        	effectiveduration_vip=cyclecount_vip+"天";	                    
 	                        }
 	                        var vip_status =obj.i_vip_status;	// 1:试用 2:正式 -1:试用到期 -2:正式到期
 	                        //订单状态 0待支付 1已完成 -1删除  
@@ -1193,7 +899,6 @@
 										+'</div>'
 	                        }
 	                        //vip状态 0不是vip 1试用 2正式
-//	                        var status_vip = obj.i_vip_status;
 	                        if (orderStatus_vip!="已完成"){
 	                        //未支付 或 已取消
 	                        	listhtml+='<div class="card">'
@@ -1220,10 +925,10 @@
 									+'</div>'
 	                        }else{
 			                       //有效时间
-			                       var starttime_vip= obj.l_vip_starttime;
-			                       var endtime_vip= obj.l_vip_endtime;
-			                       starttime_vip = timestampToTime(starttime_vip)
-			                       endtime_vip = timestampToTime(endtime_vip)
+			                       var starttime_vip= obj.vip_starttime+"";
+			                       var endtime_vip= obj.vip_endtime+"";
+			                       starttime_vip= starttime_vip.split(" ")[0].replace(/-/g,".")
+			                       endtime_vip= endtime_vip.split(" ")[0].replace(/-/g,".")
 			                       var effectivetime_vip =starttime_vip+"-"+endtime_vip;
 			                        //已完成
 			                        	listhtml+='<div class="card">'

+ 5 - 2
src/web/templates/weixin/email/bind_email.html

@@ -9,6 +9,8 @@
 		{{end}}
		<meta name="Keywords" content="绑定邮箱"/>
		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/reset.css?v={{Msg "seo" "version"}}">
		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/common.css?v={{Msg "seo" "version"}}">
		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/mine.css?v={{Msg "seo" "version"}}"/>        
 		<link rel="stylesheet" type="text/css" href="{{Msg "seo" "cdn"}}/wx_dataExport/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
 
+		{{include "/common/weixin.html"}}
+		<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>
 	</head>
 	<body>
 		<style>
@@ -25,7 +27,8 @@
 		</style>
 		<div class="bind_email">
			<div class="input mgT26">
				<input type="email" placeholder="输入邮箱" name="" id="" value="" class="email_input" />
				<input type="text" placeholder="输入验证码" name="" id="" value="" class="code_input" />
				<button class="sendcode" >获取验证码</button>
 				<button class="code_true"><i class="icon iconfont email_check_ok" style="display: inline;"></i></button>
-				<!--<i class="icon iconfont email_check_ok" style="display: inline;color:#2cb7ca"></i>-->
			</div>
			<button type="button" disabled="disabled" class="common_btn btn" id="bindBtn">绑定</button>
			<div class="toast" style="display: none;">
				<div class="toast_content"></div>
			</div>
		</div>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js//zepto.js?v={{Msg "seo" "version"}}"></script>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/public.js?v={{Msg "seo" "version"}}1"></script>
		<script>
			$(function(){
				var emailVal,code;
+				<!--<i class="icon iconfont email_check_ok" style="display: inline;color:#2cb7ca"></i>-->
			</div>
			<button type="button" disabled="disabled" class="common_btn btn" id="bindBtn">绑定</button>
			<div class="toast" style="display: none;">
				<div class="toast_content"></div>
			</div>
		</div>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js//zepto.js?v={{Msg "seo" "version"}}"></script>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/public.js?v={{Msg "seo" "version"}}1"></script>
		<script>
			$(function(){
+				initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
				var emailVal,code;
 				var userId={{.T.userId}}
				var reg = /^[a-zA-Z0-9]+([._-]*[a-zA-Z0-9]*)*@[a-zA-Z0-9]+.[a-zA-Z0-9{2,5}$]/;
 				//判断是否是更改邮箱;
 				var param = getParam('name');
@@ -71,7 +74,7 @@
 								}
 								promptbox(data.errMsg);
 							}
-						})
+						});
 						//验证码校验
						$('.code_input').bind('input propertychange',()=>{
 							var verity=$(".code_input").val();
 							var email=$(".email_input").val().replace(/\s*/g,"");

+ 7 - 2
src/web/templates/weixin/email/bind_success.html

@@ -4,10 +4,15 @@
 		<meta charset="utf-8">
		<title>绑定成功</title>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
 		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/reset.css?v={{Msg "seo" "version"}}">
 		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/common.css?v={{Msg "seo" "version"}}">
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/mine.css?v={{Msg "seo" "version"}}"/>    
+		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/mine.css?v={{Msg "seo" "version"}}"/>   
+		{{include "/common/weixin.html"}}
+		<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>    
 	</head>
 	<body>
-		<div class="bind_success">
			<div class="success">
				<img src="{{Msg "seo" "cdn"}}/wxmyemail/img/successed.png" >
				<p></p>
			</div>
			<button class="common_btn back">返回 <time class="time">()</time> </button>
		</div>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/zepto.js"></script>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/public.js"></script>
		<script>
			$(function(){
				let param = getParam('name');//获取url传来的参数 判断显示成功的字幕
				console.log(param)
				var time = 6;
				function countDown(){
					if(time == 0){
						$('.time').html('');
						window.location.replace('/front/wxMyOrder/myEmail');
					}else{
						$('.time').html('(' + time + ')');
						time--;
						setTimeout(()=>{
							countDown()
						},1000)
					}
				}
				if(param == 'bindEmail'){
					$('.success>p').html('邮箱绑定成功')
					countDown()
				}else if(param == 'bindPhoe'){
					$('.success>p').html('手机号绑定成功')
					countDown()
				}else if(param == 'changeEmail'){
					$('.success>p').html('邮箱更换成功')
					countDown()
				}else if(param == 'choosePhone'){
					$('.success>p').html('手机号更换成功')
					countDown()
				}else if(param =="unbind"){
+		<div class="bind_success">
			<div class="success">
				<img src="{{Msg "seo" "cdn"}}/wxmyemail/img/successed.png" >
				<p></p>
			</div>
			<button class="common_btn back">返回 <time class="time">()</time> </button>
		</div>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/zepto.js"></script>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/public.js"></script>
		<script>
			$(function(){
+				//分享
+				initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
				
+				let param = getParam('name');//获取url传来的参数 判断显示成功的字幕
				console.log(param)
				var time = 6;
				function countDown(){
					if(time == 0){
						$('.time').html('');
						window.location.replace('/front/wxMyOrder/myEmail');
					}else{
						$('.time').html('(' + time + ')');
						time--;
						setTimeout(()=>{
							countDown()
						},1000)
					}
				}
				if(param == 'bindEmail'){
					$('.success>p').html('邮箱绑定成功')
					countDown()
				}else if(param == 'bindPhoe'){
					$('.success>p').html('手机号绑定成功')
					countDown()
				}else if(param == 'changeEmail'){
					$('.success>p').html('邮箱更换成功')
					countDown()
				}else if(param == 'choosePhone'){
					$('.success>p').html('手机号更换成功')
					countDown()
				}else if(param =="unbind"){
 					$('.success>p').html('邮箱解绑成功')
 					countDown()
 				}
				/* 返回 */
				$('.back').on('click',() =>{
					window.location.replace('/front/wxMyOrder/myEmail');
				})
			})
		</script>
	</body>

+ 5 - 2
src/web/templates/weixin/email/unbind_email.html

@@ -4,10 +4,13 @@
 		<meta charset="utf-8">
 		<title>我的邮箱</title>
		<meta name="keywords" content="更换邮箱 解绑邮箱"/>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/reset.css?v={{Msg "seo" "version"}}">
 		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/common.css?v={{Msg "seo" "version"}}">
-		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/mine.css?v={{Msg "seo" "version"}}"/>    
+		<link rel="stylesheet" href="{{Msg "seo" "cdn"}}/wxmyemail/css/mine.css?v={{Msg "seo" "version"}}"/> 
+		{{include "/common/weixin.html"}}
+		<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>   
 	</head>
 	<body>
-		<div class="unbind_email">
			<div class="input_box mgT26">
				<label>邮箱</label>
				<input type="email" name="email" id="" value="{{.T.text_email}}" readonly="readonly"/>
			</div>
			<button type="button" class="common_btn choose_email">更换邮箱</button>
			<p class="text-algin">
				<a href="javascript:;" class="unbind">解绑</a>
			</p>
			
			<!-- 更换邮箱弹框 -->
			<div class="dialog_confirm" id="choose_email_dialog" style="display: none;">
				<div class="mask"></div>
				<div class="dialog">
					<div class="dialog_hd"><strong>确定更换邮箱</strong></div>
					<div class="dialog_bd">{{.T.text_email}}</div>
					<div class="dialog_ft">
						<a href="javascript:;" class="btn_dialog default" id="cancel_choose">取消</a>
						<a href="javascript:;" class="btn_dialog primary" id="sure_choose">确定</a>
					</div>
				</div>
			</div>
			<!-- 解绑邮箱弹框 -->
			<div class="dialog_confirm" id="unbind_email_dialog" style="display: none;">
				<div class="mask"></div>
				<div class="dialog">
					<div class="dialog_hd"><strong>确定解绑邮箱</strong></div>
					<div class="dialog_bd" style="color: #888;">{{.T.text_email}}</div>
					<div class="dialog_ft">
						<a href="javascript:;" class="btn_dialog default" id="cancel_unbind">取消</a>
						<a href="javascript:;" class="btn_dialog primary" id="sure_unbind">确定</a>
					</div>
				</div>
			</div>
		</div>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/zepto.js"></script>
		<script>
			$(function(){
				/* 更换邮箱 */
				$('.choose_email').on('click',() =>{
+		<div class="unbind_email">
			<div class="input_box mgT26">
				<label>邮箱</label>
				<input type="email" name="email" id="" value="{{.T.text_email}}" readonly="readonly"/>
			</div>
			<button type="button" class="common_btn choose_email">更换邮箱</button>
			<p class="text-algin">
				<a href="javascript:;" class="unbind">解绑</a>
			</p>
			
			<!-- 更换邮箱弹框 -->
			<div class="dialog_confirm" id="choose_email_dialog" style="display: none;">
				<div class="mask"></div>
				<div class="dialog">
					<div class="dialog_hd"><strong>确定更换邮箱</strong></div>
					<div class="dialog_bd">{{.T.text_email}}</div>
					<div class="dialog_ft">
						<a href="javascript:;" class="btn_dialog default" id="cancel_choose">取消</a>
						<a href="javascript:;" class="btn_dialog primary" id="sure_choose">确定</a>
					</div>
				</div>
			</div>
			<!-- 解绑邮箱弹框 -->
			<div class="dialog_confirm" id="unbind_email_dialog" style="display: none;">
				<div class="mask"></div>
				<div class="dialog">
					<div class="dialog_hd"><strong>确定解绑邮箱</strong></div>
					<div class="dialog_bd" style="color: #888;">{{.T.text_email}}</div>
					<div class="dialog_ft">
						<a href="javascript:;" class="btn_dialog default" id="cancel_unbind">取消</a>
						<a href="javascript:;" class="btn_dialog primary" id="sure_unbind">确定</a>
					</div>
				</div>
			</div>
		</div>
		<script src="{{Msg "seo" "cdn"}}/wxmyemail/js/zepto.js"></script>
		<script>
+			initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
			$(function(){
				/* 更换邮箱 */
				$('.choose_email').on('click',() =>{
 					$('#choose_email_dialog').show(400);
 					$("#cancel_choose").on('click',() =>{
 						$('#choose_email_dialog').hide(400);

+ 147 - 109
src/web/templates/weixin/historypush.html

@@ -21,9 +21,9 @@
 	<script src="/vipsubscribe/js/rem.js"></script>
 	<link rel="stylesheet" href="/vipsubscribe/css/weui.min.css"/>
 	<link rel="stylesheet" href="/vipsubscribe/iconfont/iconfont.css" />
-	<link rel="stylesheet" href="/vipsubscribe/css/base.css" />
-	<link rel="stylesheet" href="/vipsubscribe/css/public.css">
-	<link rel="stylesheet" href="/vipsubscribe/css/subscribe_list.css">
+	<link rel="stylesheet" href="/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}" />
+	<link rel="stylesheet" href="/vipsubscribe/css/public.css?v={{Msg "seo" "version"}}">
+	<link rel="stylesheet" href="/vipsubscribe/css/subscribe_list.css?v={{Msg "seo" "version"}}">
 	<script>
 		var zbadd = {{Msg "seo" "ZBADDRESS"}};
 		var firstPage = null;
@@ -35,6 +35,8 @@
 		var wxflag = "";
 		var a_visitedindex = new Array;
 		var closeAdvert=false//是否关闭广告
+		//
+		var selectCity = "";
 		initShare({{.T.signature}},{{.T.openid}},2,"jy_extend",{{.T.nickname}},{{.T.avatar}});
 		$(function(){
 			var isinitpage = false;
@@ -58,20 +60,18 @@
 		var isInTSguide=false;//订阅向导
 		var isVipSub=false;//是不是VIP
 		var firstTime = {{.T.stime}};
-			console.log(firstTime)
 		if (firstTime!=""){
 			firstTime = firstTime+"000";
-		}else{
-			if(sessionStorage.date!==undefined&&sessionStorage.date!==""){
-				firstTime = sessionStorage.date;
-
-			}
-		}		
+		}
+		if(sessionStorage.date!==undefined){
+			firstTime = sessionStorage.date;
+			sessionStorage.removeItem("date");
+		}
 		setTimeout(function(){
 			if(firstTime!=""){
 				var _formatDate = formatDate(firstTime/1000,"2");
+				date = formatDate(firstTime/1000,"1");
 				$('#showDatePicker .time_result').html(_formatDate).addClass('current');
-
 			}
 			$(".tab_left .time").show();
 		},500)
@@ -80,7 +80,7 @@
 			$.ajax({
 				type: 'post',
 				url: '/front/hasPushHistory?t='+new Date().getTime(),
-				data: {"selectTime":firstTime },
+				data: {"selectTime":firstTime,"pageNum":pageIndex},
 				async: false,
 				dataType: 'json',
 				success: function(data){
@@ -90,7 +90,7 @@
 					firstPage = data.data;
 					isVipSub = data.isVipSub;
 					if(isVipSub){
-						if(!data.hasKeyFlag){
+						if(!data.haskey){
 							$(".set_keyword").show();
 							if(data.isPassCount){
 								weuiDialog();
@@ -140,9 +140,6 @@
 				},
 				error: function(xhr, type){
 					hasNoData();
-					if (sessionStorage.date === undefined){
-						$(".findnull").css("display","block")
-					}
 				}
 			});
 			new FastClick(document.body);
@@ -151,31 +148,8 @@
 				window.location.href='/wxkeyset/keyset/index';
 			});
 			if(firstPage.length==0){
-				//选择某天没有数据 显示 .findnull_
-				if(sessionStorage.date!=undefined&&sessionStorage.date!=""&&sessionStorage.historypushCount==0){
-					if($(".findnull").css("display")=="block"){
-						$(".findnull").css("display","none");
-					}
-					$(".listcontent").css("display","none");
-					$(".findnull_").css("display","block");
-					$(".showType").css("display","none");
-					$(".showType").next().css("display","none");
-					$(".loading_").css("display","none");
-
-					sessionStorage.removeItem("historypushDataCache");
-					sessionStorage.removeItem("historypushPageIndexCache");
-					sessionStorage.removeItem("historypushScrollTop");
-					sessionStorage.removeItem("historypushHasNextPage");
-					sessionStorage.removeItem("historypushCount");
-				}else{
-					//最开始没有数据 
-					hasNoData();
-					if (sessionStorage.date === undefined){
-						$(".findnull").css("display","block")
-					}else{
-						$(".findnull_").css("display","block");
-					}
-				}
+				//最开始没有数据 
+				hasNoData();
 				return;
 			}else{
 				$(".showType").css("display","flex");
@@ -183,7 +157,6 @@
 			}
 			$(window).scroll(function(){
 				scrollTop = $(this).scrollTop();
-				console.log(scrollTop)
 			});
 			//
 			if(sessionStorage && sessionStorage.historypushScrollTop && sessionStorage.historypushDataCache){
@@ -191,24 +164,13 @@
 				hasNextPage = sessionStorage.historypushHasNextPage=="true"?true:false;
 				scrollTop = sessionStorage.historypushScrollTop;
 				dataCache = JSON.parse(sessionStorage.historypushDataCache);
+				selectCity = sessionStorage.selectCity;
 			    if(sessionStorage.closeAdvert=="true"){
 			      	closeAdvert=true
 			    }
 				$("#list>*").remove();
 				count = 0;
-				if(sessionStorage.date!=""&&sessionStorage.historypushCount==0){
-					if($(".findnull").css("display")=="block"){
-						$(".findnull").css("display","none");
-					}
-					$(".listcontent").css("display","none");
-					$(".findnull_").css("display","block");
-					$(".showType").css("display","none");
-					$(".showType").next().css("display","none");
-					$(".loading_").css("display","none");
-				}else{
-					structureHtml(dataCache,true);
-				}
-				
+				structureHtml(dataCache,true);
 				$(window).scrollTop(scrollTop);
 				sessionStorage.removeItem("historypushDataCache");
 				sessionStorage.removeItem("historypushPageIndexCache");
@@ -216,9 +178,6 @@
 				sessionStorage.removeItem("historypushHasNextPage");
 				sessionStorage.removeItem("historypushCount");
 			}else{
-				if(firstTime!=""){
-					sessionStorage.date=firstTime;
-				}
 				$("#list").css("visibility","hidden");
 				dataCache = dataCache.concat(firstPage);
 				structureHtml(firstPage,true);
@@ -227,7 +186,6 @@
 					$("#list").css("visibility","visible");
 				},300);
 			}
-			console.log(hasNextPage)
 			if(hasNextPage){
 				wxflag = $('.listcontent').dropload({
 			        scrollArea : window,
@@ -238,7 +196,7 @@
 			            $.ajax({
 			                type: 'post',
 			                url: '/swordfish/historypush/paging',
-							data: {"pageNum": pageIndex, "selectTime":sessionStorage.date},
+							data: {"pageNum": pageIndex, "selectTime":firstTime},
 			                dataType: 'json',
 			                success: function(data){
 								//没有数据
@@ -285,6 +243,8 @@
 				sessionStorage.historypushHasNextPage = hasNextPage;
 				sessionStorage.historypushCount = count;
 				sessionStorage.point="1";
+				sessionStorage.selectCity = selectCity;
+				sessionStorage.date = firstTime;
 			}
 		}
 		//		
@@ -345,9 +305,16 @@
 				//行业
 				var	industryname = "";
 				var industryListname ="";
-				if(obj.s_subscopeclass!=null&&obj.s_subscopeclass!=""){
-					industryname=obj.s_subscopeclass
-					industryListname='<span class="industry">'+industryname+'</span>';
+				if(isVipSub){
+					if(obj.ca_buyerclass!=null&&obj.ca_buyerclass!=""){
+						industryname=obj.ca_buyerclass
+						industryListname='<span class="buyerclass">'+industryname+'</span>';
+					}
+				}else{
+					if(obj.s_subscopeclass!=null&&obj.s_subscopeclass!=""){
+						industryname=obj.s_subscopeclass
+						industryListname='<span class="industry">'+industryname+'</span>';
+					}
 				}
 				//时间
 				var showdateList=""
@@ -472,30 +439,25 @@
 		}
 		//		
 		function setVisitedIndex(obj,eid){
-			var times = sessionStorage.date;
 			if(obj.find("a.bt").hasClass("visited")||obj.hasClass("visited")){
 				return;
 			}
 			obj.find("a.bt").addClass("visited");
 			obj.find("span.xh").addClass("visited");
-			var _id = obj.find("a.bt").attr("push_date");
-			var index = obj.find("a.bt").attr("openlist_index");
 			var vsid=obj.find("a.bt").attr("eid");
 			if (eid != ""){
 				obj.addClass("visited");
 				vsid = eid;
-				_id = obj.attr("push_date");
-				index = obj.attr("openlist_index");
 			}
-			if(index&&_id&&vsid){
-				$.post("/wxpush/bid/ajaxReq",{_id:_id,index:parseInt(index),vsid:vsid,times:times});
+			if(vsid){
+				$.post("/wxpush/bid/ajaxReq",{vsid:vsid});
 			}
 		}
 		//
 		function beforeJump(eid,h,sds,index,pd,vis){
 			if(!vis){
 				for(var i=0;i<dataCache.length;i++){
-					if(dataCache[i].ca_openlist_index==index&&dataCache[i].ca_date==pd){
+					if(dataCache[i]._id==eid&&dataCache[i].ca_date==pd){
 						dataCache[i].ca_visit=1;
 						break
 					}
@@ -505,12 +467,16 @@
 			newredirect(zbadd,h,eid,"subkey_"+sds);
 		}
 		//
-		function ajaxFun(time){
-			console.log(time,"----------")
+		function tosetkeyspage(){
+			setSessionStorage();
+			window.location.href="/front/vipsubscribe/toSetPage"
+		}
+		//
+		function ajaxFun(time,area){
 			$.ajax({
 				type: 'post',
 				url: '/front/hasPushHistory?t=' + new Date().getTime(),
-				data: {"selectTime": time},
+				data: {"selectTime": time,"area":area},
 				async: false,
 				dataType: 'json',
 				success: function (data) {
@@ -519,8 +485,16 @@
 					firstPage = data.data;
 					hasNextPage = data.hasNextPage;
 					count=0;
-					if(time!=""){
-						sessionStorage.time=$("#times").text();
+					if(time!=undefined&&time!=""){
+						firstTime = time;
+					}else{
+						firstTime = ""
+					}
+					if(area!=undefined&&area!=""){
+						sessionStorage.selectCity = area;
+					}else{
+						sessionStorage.removeItem("selectCity");
+						sessionStorage.removeItem("selectedCityName");
 					}
 				},
 				error: function(xhr, type){
@@ -738,10 +712,28 @@
 		.filter_tab .screen{
 			top:1.88rem;
 		}
+		.buyerclass {
+		    border: 1px solid #CFAD89;
+		    background: #CFAD89;
+		    border-radius: 3px;
+		    margin: 0px 5px;
+		    padding: 1px 3px;
+		    color: #fff;
+		    font-size: 14px;
+		}
+		._header{
+			position: fixed;
+			top: 0;
+			width: 100%;
+			z-index: 999;
+		}
+		.subscribe{
+			margin-top: 1rem;
+		}
 	</style>
 </head>
 <body>
-	<div class="subscribe">
+	<div class="_header">
 		<!-- banner -->
 		<div class="vip_banner" style="display: none;">
 			<div class="box">
@@ -774,26 +766,28 @@
                   	</div>
               	</div>
               	<div class="vip_set" style="display: none;">
-              		<a href="vip_index.html" class="vip_set_box">
+              		<a onclick="tosetkeyspage()" class="vip_set_box">
               			<span class="free7days_pic"></span>
               			<span>VIP订阅设置</span>
               		</a>
               	</div>
-          </div>
-          <div class="screen"></div>
-          <div class="area_container">
-          	<section class="area_wrap">
-          		<div class="area_data">
-          			<!-- 这里省份的顺序,和下面省份的顺序对应 -->
-          			
-          		</div>
-          		<div class="handle_menu">
-          			<button class="reset_btn">重置</button>
-          			<button class="enter_btn">确认</button>
-          		</div>
-          	</section>
-          </div>
-      </div>
+	         </div>
+	         <div class="screen"></div>
+	         <div class="area_container">
+	          	<section class="area_wrap">
+	          		<div class="area_data">
+	          			<!-- 这里省份的顺序,和下面省份的顺序对应 -->
+	          			
+	          		</div>
+	          		<div class="handle_menu">
+	          			<button class="reset_btn">重置</button>
+	          			<button class="enter_btn">确认</button>
+	          		</div>
+	          	</section>
+	         </div>
+	     </div>
+    </div>
+	<div class="subscribe">
       <!-- 列表 -->
       <div class="list" style="display: none;">
       	<div class="list_item">
@@ -868,6 +862,23 @@
   	<script type="text/javascript" charset="UTF-8">
   		mapData();
   		function mapData(){
+  			var _citySessionData = null
+  			var _provinceArr = {}
+  			var _cityMap = []
+  			if (sessionStorage&&sessionStorage.selectedCityName!=null){
+  				_citySessionData  = JSON.parse(sessionStorage.selectedCityName);
+  				for(var k=0;k<_citySessionData.length;k++){
+  					_provinceArr[_citySessionData[k]["province"]] = _citySessionData[k]["selectCity"].length
+  					_cityMap = _cityMap.concat(_citySessionData[k]["selectCity"])
+  				}
+  				if(_cityMap.length>0){
+  					 $('#showArea .jymobile-tab-triangle').addClass('current').text(`地区 ${_cityMap.length}`);
+  				}
+				//
+				sessionStorage.removeItem("selectedCityName");
+  			}
+  			// console.log(_provinceArr)
+  			// console.log(_cityMap)
 	  		var provinceArr = ["安徽","澳门","北京","重庆","福建","广东","广西","贵州","甘肃","河北","湖北","黑龙江","海南","河南","湖南","吉林","江苏","江西","辽宁","内蒙古","宁夏","青海","山西","陕西","上海","山东","四川","天津","台湾","西藏","新疆","香港","云南","浙江"]
 	  		var provinceHtml = '<div class="province">';
 	  		var cityHtml = '<div class="city" >';
@@ -876,17 +887,38 @@
 	  			var _active = "";
 	  			for (var i = chinaMapJSON.length - 1; i >= 0; i--) {
 	  				_chinaMap = chinaMapJSON[i]
-	  				if(_chinaMap["name"].indexOf(provinceArr[j])>-1){if (j==0){
-	  					console.log(chinaMapJSON[i])
+	  				if(_chinaMap["name"].indexOf(provinceArr[j])>-1){
+	  					if (j==0){
 	  						shwohide = "";
 	  						_active = "active";
 	  					}
-	  					provinceHtml +='<p class="p_item '+_active+'"><span class="province-name">'+provinceArr[j]+'</span><span class="city-count"></span></p>'
+	  					var provinceFlag = true;
+	  					if(_provinceArr[provinceArr[j]]!=undefined&&_provinceArr[provinceArr[j]]>0){
+								provinceHtml +='<p class="p_item '+_active+'"><span class="province-name">'+provinceArr[j]+'</span><span class="city-count" style="display: inline;">('+_provinceArr[provinceArr[j]]+')</span></p>'
+								//
+								cityHtml +='<div class="province_city" data-id="'+provinceArr[j]+'" style="display:'+shwohide+'">';
+								provinceFlag = false;
+	  					}
+	  					if(provinceFlag){
+	  						provinceHtml +='<p class="p_item '+_active+'"><span class="province-name">'+provinceArr[j]+'</span><span class="city-count"></span></p>'
 	  					
-	  					cityHtml +='<div class="province_city" data-id="'+provinceArr[j]+'" style="display:'+shwohide+'">'
+	  						cityHtml +='<div class="province_city" data-id="'+provinceArr[j]+'" style="display:'+shwohide+'">'
+	  					}
 	  					var cityArr = _chinaMap["city"]
 	  					for(var m = 0;m < cityArr.length;m++){
-	  						cityHtml +='<p class="c_item"><input type="checkbox" class="checkbox"><span class="city-name">'+cityArr[m]["name"]+'</span></p>'
+	  						var cityFlag = true;
+		  					if(_cityMap.length>0){
+			  					for(var k=0;k<_cityMap.length;k++){
+			  						if(_cityMap[k]==cityArr[m]["name"]){
+			  							cityHtml +='<p class="c_item"><input type="checkbox" class="checkbox"  checked><span class="city-name">'+cityArr[m]["name"]+'</span></p>';
+			  							cityFlag = false;
+			  							break;
+			  						}
+			  					}
+			  				}
+			  				if(cityFlag){
+	  							cityHtml +='<p class="c_item"><input type="checkbox" class="checkbox"><span class="city-name">'+cityArr[m]["name"]+'</span></p>'
+	  						}
 	  					}
 	  					cityHtml +='</div>'
 	  				}
@@ -931,21 +963,18 @@
         })();
         //
         function FTAGData(time){
-        	console.log(time)
         	if(time!=undefined&&time.toString()!=""){
 				var Time = new Date(time);
 				var timestemp = Time.getTime();
-				ajaxFun(timestemp.toString());
+				ajaxFun(timestemp.toString(),selectCity);
         	}else{
-        		ajaxFun();
+        		ajaxFun("",selectCity);
         	}
         }
         //
         $(function () { 
-
 			if(firstTime!=""){
 				date = formatDate(firstTime/1000,"1");
-        		console.log(date)
         	}
             // 点击选择时间
             $('#showDatePicker').on('click', function () {
@@ -1003,7 +1032,7 @@
             $('#showArea').on('click', function (){
             	$('.area_container').slideToggle();
             	$('.screen').toggle();
-            	$("body").toggleClass('overClass');
+            	$(".subscribe").toggleClass('overClass');
             })
             // 地区省份选择的操作
             $('.province .p_item').click(function(){
@@ -1032,18 +1061,21 @@
             //
             $('.screen').click(function(){
             	$('.area_container').slideUp();
-            	$("body").toggleClass('overClass');
+            	$(".subscribe").toggleClass('overClass');
             	$('.screen').hide();
             })
             // 地区选择确认按钮
             $('.enter_btn').click(function (){
-            	$("body").toggleClass('overClass');
+            	$(".subscribe").toggleClass('overClass');
             	let cityCount = $('.area_wrap .city input:checked').length;
             	$('.area_container').slideUp();
             	$('.screen').hide()
+                selectCity = "" //重新选择 初始化地区 参数
 
             	if(!cityCount){
             		$('#showArea .jymobile-tab-triangle').removeClass('current').text(`地区`);
+                    sessionStorage.selectedCityName  = JSON.stringify([]);
+            		 ajaxFun(firstTime,selectCity);
             		return
             	}
 
@@ -1066,15 +1098,21 @@
                     var cityArr = []
                     selectedCities.each(function(i, dom){
                         // 对获取到的城市名字符串去空格处理
-                        cityArr.push($(dom).text().replace(/\s+/g, ''))
+                        cityArr.push($(dom).text().replace(/\s+/g, ''));
                     })
-                    
+                    for(var i=0;i<cityArr.length;i++){
+                        if(selectCity!=""){
+                        	selectCity += ","
+                        }
+                        selectCity += cityArr[i];
+                    }
                     selectedCityName.push({
                     	province: provinceName,
                     	selectCity: cityArr
                     });
+                    sessionStorage.selectedCityName  = JSON.stringify(selectedCityName);
+                    ajaxFun(firstTime,selectCity);
                 })
-                console.log(selectedCityName);
                 // 重写地区text
                 $('#showArea .jymobile-tab-triangle').addClass('current').text(`地区 ${cityCount}`);
                 

+ 5 - 1
src/web/templates/weixin/my.html

@@ -92,7 +92,11 @@
 			initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
 			$(function(){
 				$(".vip").on("click",function(){
-		        	window.location.href="/front/vipsubscribe/toPurchasePage";	//vip订阅入口
+					if({{.T.isVip}}==true){
+						window.location.href="/front/vipsubscribe/toSetPage";	    //vip订阅入口  试用或正式vip
+					}else{
+						window.location.href="/front/vipsubscribe/introducePage";	//vip订阅入口  非vip
+					}
 		        })
 		        $(".myorder").on("click",function(){
 		        	window.location.href="/weixin/pay/toMyWxOrder?v=01";

+ 3 - 0
src/web/templates/weixin/vipsubscribe/choose_area.html

@@ -592,6 +592,7 @@
           let pHeight = $('.result_text').height()
           let minHeight = $('.result_text').css('min-height')
           let rows = Math.round(Math.round(pHeight)/ parseFloat(minHeight));
+          $(".select-area-box .area-list").css("margin-top",$('.result_text').height()+20);
           console.log("高度:"+ pHeight,"最小高度"+ minHeight,"行数:" + rows)
           if(rows == 1){
               $('.packup').hide()
@@ -618,12 +619,14 @@
                 $(".result").css("padding-bottom","0.3rem")
                 $(this).hide();
                 $('.packup').show()
+                $(".select-area-box .area-list").css("margin-top",$('.result_text').height()+20);
             })
             $('.packup').click(function () { 
                 $(".result").css("padding-bottom","0.2rem")
                 $('.result_text').addClass('line_two')
                 $(this).hide();
                 $('.detail').show()
+                $(".select-area-box .area-list").css("margin-top",$('.result_text').height()+20);
             })
             $("body").on('click','.slide a',function(){
                 var s = $(this).html()

+ 2 - 0
src/web/templates/weixin/vipsubscribe/choose_industry.html

@@ -300,6 +300,8 @@
                     // 除全部行业外所有按钮都被选中了
                     $('#all button').trigger('click');
                 }
+                //调整高度
+                $(".select-area-box .list").css("margin-top",$(".result").height()+20);
             }
                       
             function showSelect(arr,canclick){

+ 5 - 4
src/web/templates/weixin/vipsubscribe/edit_subscribe.html

@@ -49,9 +49,10 @@
                 <div class="item_bottom"></div>
            </a>
        </div>
+      <!--
        <div class="edit_tips">
            <div class="edit_count">总共可修改次数:<em>3</em> / 3</div>
-       </div>
+       </div>-->
     </div>
     <script src="/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
     <script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
@@ -141,14 +142,14 @@
             }
             
             //可修改次数
-            $(".edit_count em").text(this.reqData.editNum);
+            //$(".edit_count em").text(this.reqData.editNum);
           },
           initClick:function(){
             $(".edit_item").on("click",function(){
-              if(EditSub.reqData.editNum>=3){
+              /*if(EditSub.reqData.editNum>=3){
                 EditSub.showTip("已超过修改次数,不可再做修改");
                 return
-              }
+              }*/
               console.log($(this).attr("data_href"));
               window.location.href=$(this).attr("data_href");
             });

+ 1 - 1
src/web/templates/weixin/vipsubscribe/edit_subscribe_city.html

@@ -30,7 +30,7 @@
             <p>已选择:<span class="result_name">郑州市、洛阳市、淮南市、洛阳市、淮南市、洛阳市、淮南市、洛阳市、淮南市、洛阳市、淮南市</span></p>
         </div>
         <div class="form">
-            <div class="select-area-box" style="padding-bottom: 0;">
+            <div class="select-area-box">
                 <ul class="area-list">
                     <!-- <li>
                         <div class="tab whole">

+ 217 - 11
src/web/templates/weixin/vipsubscribe/keyWord.html

@@ -19,6 +19,96 @@
         .opacity6{
             opacity: 0.6;
         }
+        .keysexplain{
+            position: absolute;
+            font-size: .3rem;
+            top: .18rem;
+            margin-left: .3rem;
+            color: #888;
+        }
+        .classifyKeysShow{
+            font-size: .25rem;
+            color: #686868;
+            margin-top: 0.1rem;
+            text-overflow: ellipsis;
+            overflow: hidden;
+            display: -webkit-box;
+            -webkit-line-clamp: 1;
+            -webkit-box-orient: vertical;
+        }
+        .addClassify{
+            height: 1rem;
+            text-align: center;
+            background: #2CB7CA;
+            width: 100%;
+            line-height: 1rem;
+            color:#FFFFFF;
+            font-size: .32rem;
+        }
+
+        .classify-show-pop .weui-dialog .weui-dialog__hd {
+          padding: 0;
+          text-align: center;
+          font-size: .34rem;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__hd {
+          padding-left: .3rem;
+          height: .88rem;
+          line-height: .88rem;
+          background-color: #F4F4F9;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__bd {
+          padding: .38rem .1rem;
+          text-align: center;
+          font-size: .32rem;
+          color: #1d1d1d;
+          line-height: .6rem;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__bd .classify-keyword {
+          padding: 0 .17rem;
+          height: 0.8rem;
+          width: 100%;
+          font-size: .32rem;
+          border: 1px solid #CECECE;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__ft {
+          margin-top: .1rem;
+          margin-bottom: .3rem;
+          justify-content: space-around;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__ft .dialog__btn {
+          display: inline-block;
+          width: 1.72rem;
+          height: .72rem;
+          line-height: .72rem;
+          color: #fff;
+          font-size: .32rem;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__ft .dialog__btn_confirm {
+            background-color: #2CB7CA;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__ft .dialog__btn_cancel {
+            background-color: #BFBFC3;
+      }
+
+      .classify-show-pop .weui-dialog .weui-dialog__ft:after {
+            border: none;
+      }
+      .keyWord .addKeyWord{
+            position: fixed;
+            bottom: 0;
+      }
+      .all-classify-column{
+            position: relative;
+            padding-bottom: 1rem;
+      }
     </style>
 </head>
 
@@ -61,17 +151,20 @@
                     疑问解答 <i class="iconfont icon-wenhao"></i>
                 </div>
             </section>
+
+            <div class="addKeyWord addNewKeyword" style="display: none;">
+                <i class="iconfont icon-tianjia"></i>
+                <p> 关键词添加数量:<em style="color: #2cb7ca;" class="kws_count">0 </em>/ 300</p>
+            </div>
         </section>
         <section class="all-classify-column" style="display: none;">
+            <div class="keysexplain"><p> 关键词添加数量:<em style="color: #2cb7ca;" class="kws_count">0 </em> / 300</p></div>
             <ul class="classify-list">
                 
             </ul>
-        </section>
 
-        <div class="addKeyWord addNewKeyword" style="display: none;">
-            <i class="iconfont icon-tianjia"></i>
-            <p> 关键词添加数量:<em style="color: #2cb7ca;" class="kws_count">0 </em>/ 300</p>
-        </div>
+            <div class="addKeyWord addNewKeyword" style="display: none;"><div class="addClassify">新增关键词分类</div></div>
+        </section>
 
         <!-- 疑难问题弹窗 -->
         <div class="problemPop dialog-container">
@@ -113,12 +206,36 @@
                 </div>
             </div>
         </div>
+
+        <!-- 关键词分类说明 -->
+        <div class="classify-show-pop dialog-container">
+            <!-- <div class="weui-mask weui-animate-fade-in"></div> -->
+            <div class="weui-dialog weui-animate-fade-in">
+                <div class="weui-dialog__hd">
+                    <strong class="weui-dialog__title">提示信息</strong>
+                </div>
+                <div class="weui-dialog__bd">
+                    关键词分类有利于关键词做整合管理<br>工作更高效!
+                </div>
+                <div class="weui-dialog__ft">
+                    <a href="javascript:;" class="dialog__btn dialog__btn_confirm">去设置</a> 
+                    <a href="javascript:;" class="dialog__btn dialog__btn_cancel">取消</a>
+                </div>
+            </div>
+        </div>
     </div>
     
     <script src="/js/jquery-3.2.1.min.js?v=1412"></script>
     <script src="/js/jquery.cookie.js"></script>
     <script src="/vipsubscribe/js/weui.min.js"></script>
     <script>
+        weui.loading();
+        setTimeout(function(){
+            weui.loading().hide();
+            if(history.state){
+                window.history.go(-1)
+            }
+        },500)
         var a_items = [];//全部数据
         var classify_name = "";//分类名称
         var classify_index = 0;//分类索引
@@ -128,6 +245,8 @@
         var modifyFlag = false;//附加词 排除词变动
         var addition_kws = []; //附加词
         var not_kws = []; //排除词
+        var classify_arr = [];//分类对象
+        var kws_tips = 0;
         // 页面状态
         var pageState = {
             //是否第一次设置关键词
@@ -135,6 +254,26 @@
         }
         $(function(){
             init();
+            // 关键词分类 - 去设置按钮点击事件
+            $('.classify-show-pop .dialog__btn_confirm').on('click', function() {
+                $('.classify-show-pop').hide();
+                setTimeout(function(){
+                    // 如果是苹果手机,打开时候要设置top
+                    var agent = navigator.userAgent.toLowerCase();
+                    var dialog = $('.classify-edit-pop .weui-dialog')
+                    if( /iphone|ipod|ipad|ios/.test(agent) ){
+                        dialog.css({ 'top': '30%' })
+                    } else {
+                        dialog.css({ 'top': '50%' })
+                    }
+                    $('.classify-edit-pop').show();
+                },200)
+            })
+
+            // 关键词分类 - 取消按钮点击事件
+            $('.classify-show-pop .dialog__btn_cancel').on('click', function() {
+                $('.classify-show-pop').hide();
+            })
         })
         //获取数据
         function init(){
@@ -178,6 +317,18 @@
                 })
             }
         }
+        //强制弹出 提示信息
+        function showMeg(){
+            // 如果是苹果手机,打开时候要设置top
+            var agent = navigator.userAgent.toLowerCase();
+            var dialog = $('.classify-show-pop .weui-dialog')
+            if( /iphone|ipod|ipad|ios/.test(agent) ){
+                dialog.css({ 'top': '30%' })
+            } else {
+                dialog.css({ 'top': '50%' })
+            }
+            $('.classify-show-pop').show()
+        }
         //关键词和分类列表切换
         function showKorshowC(state){
             if (state) {
@@ -193,19 +344,29 @@
         function appendHtml(kwsdata){
             kws_count = 0;
             var classifyHtml = '';
+            classify_arr = [];//每次初始化分类对象
             for (var i = 0;  i < kwsdata.length; i++) {
                 var s_item = kwsdata[i]["s_item"]
                 if(s_item==""){
                     s_item = "未分类"
                 }
+                classify_arr.push(s_item);
                 var a_key = kwsdata[i]["a_key"]
                 kws_count += a_key.length;
+                var keystr = '';
+                for(var j=0;j<a_key.length;j++){
+                    if(keystr!=""){
+                        keystr += "、"
+                    }
+                    keystr += a_key[j]["key"].join('、');
+                } 
                 classifyHtml +='<li class="classify-item">'
-                            +'<span class="classify-item-l">'+s_item+'</span>'
+                            +'<div><span class="classify-item-l">'+s_item+'</span>'
                             +'<span class="classify-item-r">'
                             +'<span class="classify-item-detail">关键词'+a_key.length+'个</span>'
                             +'<span class="iconfont icon-arrow"></span>'
-                            +'</span>'
+                            +'</span></div>'
+                            +'<div class="classifyKeysShow">'+keystr+'</div>'
                             +'</li>'
 
             }
@@ -225,6 +386,7 @@
         }
         //修改关键词内容
         function toSetKws(){
+            //分类列表进入
             if(kws_index==-1){
                 var edhtml = '<input type="text" class="enterOne" placeholder="请输入关键词" maxlength="100">'
                             +'<div class="btnChoose">'
@@ -256,6 +418,12 @@
             var kwsHtml = '';
             if( a_items[classify_index]!=undefined){
                 var _keyArr = a_items[classify_index]["a_key"];
+                //未分类 关键词强制提醒标识
+                kws_tips = a_items[classify_index]["i_tips"];
+                if(kws_tips==undefined){
+                    kws_tips = 0;
+                }
+                $(".classify").attr("tips",Number(kws_tips));
                 for (var i = _keyArr.length - 1; i >= 0; i--) {
                     var ak_showClass = 'hide';//是否显示附加词个数
                     var nk_showClass = 'hide';//是否显示排除词个数
@@ -439,6 +607,7 @@
         }
         //处理缓存数据
         function doSessionData(t){
+            //删除关键词
             if(t!="DK"){
                 if(kws_index == ($(".showKeyWord li").length-1)){
                     //新加
@@ -475,12 +644,46 @@
         // 设置一条空记录,用户第一次进入添加关键词点击确定时候调用
         function setEmptyHistory() {
             if (pageState.isFirstSetKeyword) {
-                history.pushState({}, "","")
+                history.pushState({id:1}, "","")
                 pageState.isFirstSetKeyword = false
             }
         }
         //
         $(function(){
+
+            $(".addNewKeyword div").on('click', function () {
+                history.pushState({id:1}, "","");
+                classify_index = $(".classify-list li").length;
+                var noNameIndex = -1;
+                var noName = "未分类"
+                for (var i = classify_arr.length - 1; i >= 0; i--) {
+                    if(classify_arr[i].indexOf("未分类")>-1){
+                       if (noNameIndex < Number(classify_arr[i].split("未分类")[1])){
+                            noNameIndex = Number(classify_arr[i].split("未分类")[1])
+                       }
+                    }
+                }
+                if(noNameIndex!=-1){
+                    noNameIndex = noNameIndex + parseInt(1)
+                    noName = noName + noNameIndex
+                }
+                classify_name = noName;
+                // 还原有数据
+                $('.classify .classify-detail').text(noName);
+                $('.add-keyword-container .showKeyWord ul').html('');
+
+                $('.add-keyword-container').show();
+                $('.all-classify-column').hide();
+
+                // 显示添加关键词的输入框
+                $(".enter.addkeyWord").find(".btnChoose button").eq(0).html('添加 附加词');
+                $(".enter.addkeyWord").find(".btnChoose button").eq(1).html('添加 附加词');
+                $(".enter.addkeyWord").find("input").val("");
+                $(".enter.addkeyWord").show();
+                $(".add-keyword-container .addNewKeyword").hide();
+                //第一次进来分类提示
+                showMeg();
+            })
             // 通过判断是那个隐藏来判断是添加关键词还是添加新分类
             $(".addNewKeyword i").on('click', function () {
                 // 如果是在分类列表点击添加(此时关键词列表是隐藏的)
@@ -494,6 +697,7 @@
                     $('.add-keyword-container .showKeyWord ul').html('');
                     
                 }
+                $(".add-keyword-container .addNewKeyword").hide();
                 $('.add-keyword-container').show();
                 $('.all-classify-column').hide();
                 
@@ -508,9 +712,9 @@
             // 点击分类目录的每一项,进入对应列表
             $('.classify-list').on('click', '.classify-item-r', function() {
                 // 添加一条空历史记录
-                history.pushState({}, "","");
-                classify_name = $(this).parent().find('.classify-item-l').text();
-                classify_index = $(this).parent("li").index()
+                history.pushState({id:1}, "","");
+                classify_name = $(this).parent('div').find('.classify-item-l').text();
+                classify_index = $(this).parent().parent("li.classify-item").index()
                 //展示此关键词信息
                 toSetKws();
             })
@@ -522,6 +726,8 @@
             var loading = weui.loading('loading...', {
                 className: 'custom-classname'
             })
+            $('.classify-show-pop').hide();
+            $('.classify-edit-pop').hide();
             //重新加载数据
             init();
             // 用定时器模拟请求耗时

+ 1 - 1
src/web/templates/weixin/vipsubscribe/modal.html

@@ -8,7 +8,7 @@ $(function(){
 	})
 	$(".toast_but").on("click",function(){
 		$("#myModal").modal("hide");
-        window.location.href="/front/vipsubscribe/tailInfo"
+        window.location.href="/front/vipsubscribe/trialInfo"
 	})
 })
 </script>

+ 1 - 1
src/web/templates/weixin/vipsubscribe/trial_info.html

@@ -67,7 +67,7 @@
                 <!-- 未完善个人信息展示的按钮 type类型为submit-->
                 <button class="btn" disabled type="submit">申请免费试用</button>
                 <!-- 已完善过个人信息 展示的按钮 type类型为button -->
-                <button type="button" style="display: none;" onclick="window.location.href='./vip_purchase.html'">申请免费试用</button>
+                <button type="button" style="display: none;" onclick="window.location.href='/front/vipsubscribe/introducePage'">申请免费试用</button>
             </div>
             
         </form>

+ 4 - 4
src/web/templates/weixin/vipsubscribe/vip_index.html

@@ -90,7 +90,7 @@
                         </div>
                         <a href="/front/vipsubscribe/toSetPushSetPage" class="media_right" id="pushSet"></a>
                     </div>
-                    <div class="media_list" style="margin-top:.2rem;" id="auto_renew">
+                    <div class="media_list" style="margin-top:.2rem;display: none;" id="auto_renew">
                         <div class="media_left">
                             <img src="/vipsubscribe/image/renew.png?v={{Msg "seo" "version"}}" alt="">
                             <span>自动续费</span>
@@ -119,13 +119,13 @@
                 <div>
                     <i class="icon iconfont" id="close_renew">&#xe61a;</i>
                     <span>VIP订阅服务还有 <span class="renew_day"></span> 天到期,请及时续费!</span>
-                    <a href="vip_renew.html">去续费</a>
+                    <a href="/front/vipsubscribe/renewPayPage">去续费</a>
                 </div>
             </div>
             <!-- 升级 续费 -->
             <div class="tabbar">
-                <a href="vip_update.html" class="update_btn">升级</a>
-                <a href="./vip_renew.html" class="renew_btn">续费</a>
+                <a href="/front/vipsubscribe/toUpgradePage" class="update_btn">升级</a>
+                <a href="/front/vipsubscribe/renewPayPage" class="renew_btn">续费</a>
             </div>
         </div>
         <!-- 自动续费关闭提醒 -->

+ 2 - 2
src/web/templates/weixin/vipsubscribe/vip_introduce.html

@@ -133,8 +133,8 @@
                 </div>
         </div>
         <div class="menu">
-            <a href="/front/vipsubscribe/trialInfo" class="try_btn">试用7天</a>
-            <a href="/front/vipsubscribe/toPurchasePage/new" class="subscribe_btn">去订阅</a>
+            <a href="/weixin/pay/vipsubscribe_trial" class="try_btn">试用7天</a>
+            <a href="/weixin/pay/vipsubscribe_new" class="subscribe_btn">去订阅</a>
         </div>
     </div>
 </body>

+ 74 - 51
src/web/templates/weixin/vipsubscribe/vip_order_detail.html

@@ -14,7 +14,9 @@
     <link rel="stylesheet" type="text/css" href="/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}" />
     <link rel="stylesheet" href="/vipsubscribe/css/public.css?v={{Msg "seo" "version"}}">
     <link rel="stylesheet" href="/vipsubscribe/css/weui.min.css?v={{Msg "seo" "version"}}">
-    <link rel="stylesheet" href="/vipsubscribe/css/vip_order_detail.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="/vipsubscribe/css/vip_order_detail.css?v={{Msg "seo" "version"}}1">
+	{{include "/common/weixin.html"}}
+	<script src="{{Msg "seo" "cdn"}}/wxswordfish/share.js?v={{Msg "seo" "version"}}"></script>   
 </head>
 <style>
 	.person > p >span , .unit > p >span{
@@ -35,13 +37,12 @@
                     <div class="card-content">
                         <p class="text ellipsis">订单编号:<span class="orderCode"></span></p>
                         <p class="text ellipsis">下单时间:<span class="prepayTime"></span></p>
-                        <!-- 订单状态为已完成时显示支付时间、自动续费、支付方式和订单号,状态为待付款时不显示 -->
-                        <p class="text ellipsis line_paytime" style="display:none">支付时间:<span class="payTime"></span></p>
-                        <p class="text ellipsis line_autoPay"  style="display:none">自动续费:<span>未开通</span></p>
+                        <!-- 订单状态为已完成时显示支付时间、支付方式和订单号,状态为待付款时不显示 -->
+                        <p class="text ellipsis line_paytime" id="paytime" style="display:none">支付时间:<span class="payTime"></span></p>
                         <p class="text ellipsis line_payway"  style="display:none">支付方式:<span class="payWay"></span></p>
                         <p class="text ellipsis line_transaction"  style="display:none">支付单号:<span class="transaction_id"></span></p>
                         <p class="text ellipsis">产品类型:<span class="productType"></span></p>
-                        <p class="text ellipsis">价格:¥<span class="price"></span></p>
+                        <p class="text ellipsis" id="price">价格:¥<span class="price"></span></p>
                         <!----- 未开发票状态 ----->
                         <p class="text ellipsis invoice">发票:<a class="invoicing" style="display:none">开发票</a></p>
                         <!----- 已开发飘状态 ----->
@@ -106,33 +107,39 @@
 <script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
 <script src="/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
 <script>
-var signature = {{.T.signature}};
-var isConfigSuccess = true;
-var id = {{.T._id}}
-if(signature && signature.length == 4){
-	wx.config({
-	    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
-	    appId: signature[0], // 必填,公众号的唯一标识
-	    timestamp:signature[1], // 必填,生成签名的时间戳
-	    nonceStr: signature[2], // 必填,生成签名的随机串
-	    signature: signature[3],// 必填,签名,见附录1
-	    jsApiList: ['chooseWXPay','hideAllNonBaseMenuItem'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
-	});
-	wx.ready(function () {
-		if(!isConfigSuccess){
-			return;
-		}
-		wx.hideAllNonBaseMenuItem();
-    });
-	wx.error(function(res){
-	    //config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
-		//alert(res);
-		isConfigSuccess = false;
-	});
+try{
+  var signature = {{.T.signature}};
+  var isConfigSuccess = true;
+  var id = {{.T._id}}
+  if(signature && signature.length == 4){
+  	wx.config({
+  	    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+  	    appId: signature[0], // 必填,公众号的唯一标识
+  	    timestamp:signature[1], // 必填,生成签名的时间戳
+  	    nonceStr: signature[2], // 必填,生成签名的随机串
+  	    signature: signature[3],// 必填,签名,见附录1
+  	    jsApiList: ['chooseWXPay','hideAllNonBaseMenuItem'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+  	});
+  	wx.ready(function () {
+  		if(!isConfigSuccess){
+  			return;
+  		}
+  		wx.hideAllNonBaseMenuItem();
+      });
+  	wx.error(function(res){
+  	    //config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
+  		//alert(res);
+  		isConfigSuccess = false;
+  	});
+  }
+}catch(e){
+  console.log(e)
 }
 </script>
 <script>
   $(function(){
+  	//分享
+  	initShare({{.T.signature}},{{.T.openid}},2,"jy_wxmyorder",{{.T.nickname}},{{.T.avatar}});
     var canpay=true;
     var orderCode=decodeURIComponent(getParam("orderCode"));
     if(!orderCode){
@@ -145,11 +152,16 @@ if(signature && signature.length == 4){
     $DoPost("/subscribepay/orderListDetails/getOrderPayAllMsg",{"orderCode":orderCode},function(r){
       if(r.success){
         //下单时间
-        if(r.data.order.prepay_time) $(".prepayTime").text(r.data.order.prepay_time.replace("-",".").replace("-","."));
+        if(r.data.order.prepay_time) {
+        	$(".prepayTime").text(r.data.order.prepay_time.replace("-",".").replace("-","."));
+        }
         //产品类型
         if(r.data.order.product_type) $(".productType").text(r.data.order.product_type);
+        if(r.data.order.original_price==0){
+        	$(".productType").text(r.data.order.product_type+"(试用)")
+        }
         //价格
-        if(r.data.order.original_price) $(".price").text(r.data.order.original_price/100);
+        $(".price").text(r.data.order.original_price/100);
         
         //订单条件        
         if(r.data.order.filter){
@@ -159,9 +171,9 @@ if(signature && signature.length == 4){
               var cityNum=0;
               var provinceNum=0;
               for(var i in filterObj.area) {
-                let citys=filterObj.area[i]
-                if(citys.length>0){
-                  cityNum+=citys.length;
+                let citys=filterObj.area[i];
+                if(citys.count>0){
+                  cityNum+=citys.count;
                 }else{
                   provinceNum++;
                 }
@@ -169,9 +181,7 @@ if(signature && signature.length == 4){
               var areaText="";//1个省级区域、4个地市
               if(provinceNum>0) areaText= areaText + provinceNum+"个省级区域";
               if(cityNum>0){
-                console.log(areaText)
                 if(provinceNum>0) areaText= areaText+"、"
-                console.log(areaText)
                 areaText = areaText+ cityNum+"个地市";
               }
               $(".areaNum").text(areaText);
@@ -182,7 +192,7 @@ if(signature && signature.length == 4){
           
           //行业数
           if(filterObj.industry.length!=0){
-            $(".industryNum").text(filterObj.industry.length+"个行业");
+            $(".industryNum").text(filterObj.industry.count+"个行业");
           }else{
             $(".industryNum").text("全行业");
           }
@@ -194,7 +204,10 @@ if(signature && signature.length == 4){
             $(".cycleunit").text("年")
           }else if(filterObj.cycleunit==2){
             $(".cycleunit").text("个月")
+          }else if(filterObj.cycleunit==3){
+          	 $(".cycleunit").text("天")
           }
+
         }
         
         if(r.data.order.order_status==0){
@@ -217,20 +230,36 @@ if(signature && signature.length == 4){
           //支付时间
           $(".line_paytime").css("display","");
           if(r.data.order.pay_time) $(".payTime").text(r.data.order.pay_time.replace("-",".").replace("-","."));
+          if (r.data.order.original_price==0){
+         	 $(".line_paytime").css("display","none");
+          }
+          
+          //有效周期
+          $(".line_cycle").css("display","");
+          //有效日期  
+          if(r.data.time.vip_starttime&&r.data.time.vip_endtime){
+            	var vip_starttime=r.data.time.vip_starttime+"";
+           		var vip_endtime=r.data.time.vip_endtime+"";
+           		vip_starttime=vip_starttime.split(" ")[0].replace(/-/g,".");
+           		vip_endtime=vip_endtime.split(" ")[0].replace(/-/g,".");
+           		var serviceTime=vip_starttime+" - "+vip_endtime;
+           	  	$(".serviceTime").text(serviceTime)
+          }
+          
           //支付方式
-          $(".line_payway").css("display","");
           if(r.data.order.pay_way.indexOf("wx")>-1){
+            $(".line_payway").css("display","");
             $(".payWay").text("微信支付");
-          }else{
+          }else if(r.data.order.pay_way.indexOf("ali")>-1){
             $(".payWay").text("支付宝支付");
+            $(".line_payway").css("display","");
+          }else{//试用用户
+            $(".invoice").css("display","none");
+            return
           }
-          //自动续费
-          $(".line_autoPay").css("display","");          
-          
-          //支付订单号
+
           $(".line_transaction").css("display","");
           if(r.data.transaction_id) $(".transaction_id").text(r.data.transaction_id);
-          
           //发票
           if(r.data.order.applybill_status==0){ 
             //已支付未申请发票
@@ -240,7 +269,7 @@ if(signature && signature.length == 4){
             });
           }else{
             //已支付已申请发票
-			$(".invoice").css("display","none");
+			      $(".invoice").css("display","none");
             switch (r.data.order.applybill_type){
             	case 0:
             	$(".person").css("display","");
@@ -251,14 +280,8 @@ if(signature && signature.length == 4){
             	$(".taxpayer_number").html(r.data.order.applybill_taxnum);
             	break;
             }
+
           } 
-          
-          //有效周期
-          $(".line_cycle").css("display","");
-          //有效日期  
-          if(r.data.time.l_vip_starttime&&r.data.time.l_vip_endtime){
-            $(".serviceTime").text(formatEffectiveDate(r.data.time.l_vip_starttime,r.data.time.l_vip_endtime))
-          }
         }else if(r.data.order.order_status==-2){
     		$("#pageTitle").text("已取消");
      		$(".invoice").css("display","none");//隐藏开发票

+ 16 - 14
src/web/templates/weixin/vipsubscribe/vip_pay_success.html

@@ -50,26 +50,28 @@
       })
       //设置关键词
       $(".right_btn").on("click",function(){
-        window.location.href ='/front/vipsubscribe/toSetKeyWordPage'
+        window.location.href ='/front/vipsubscribe/toSetPage'
       }) 
       
       var orderCode=decodeURIComponent(getParam("orderCode"));
       $(".orderCode").text(orderCode);
-      $DoPost("/subscribepay/order/getOrderPayMsg",{"orderCode":orderCode},function(r){
+      $DoPost("/subscribepay/orderListDetails/getOrderPayAllMsg",{"orderCode":orderCode},function(r){
         if(r.success){
-          if(r.pay_time){
-            $(".paytime").text(r.pay_time.replace("-","/").replace("-","/"));
-          }
-          if(r.pay_way){
-            var payway
-            if(r.pay_way.indexOf("wx")>-1){
-              payway="微信支付";
-            }else if(r.pay_way.indexOf("ali")>-1){
-              payway="支付宝支付";
-            }else{
-              $(".pay_mode").css("display","none");
+          if(r.data.order.order_status==1){
+            if(r.data.order.pay_time){
+              $(".paytime").text(r.data.order.pay_time.replace("-","/").replace("-","/"));
+            }
+            if(r.data.order.pay_way){
+              var payway
+              if(r.data.order.pay_way.indexOf("wx")>-1){
+                payway="微信支付";
+              }else if(r.data.order.pay_way.indexOf("ali")>-1){
+                payway="支付宝支付";
+              }else{
+                $(".pay_mode").css("display","none");
+              }
+              $(".payway").text(payway);
             }
-            $(".payway").text(payway);
           }
         }
       })

+ 15 - 7
src/web/templates/weixin/vipsubscribe/vip_purchase.html

@@ -14,6 +14,7 @@
 </head>
 
 <body>
+  <div>
     <div class="vip_purchase">
         <div class="choose_condition">
             <ul class="chooseList">
@@ -63,7 +64,7 @@
             </ul>
             <div class="pay_mode">
                 {{if not .T.isTrial }}
-                <div class="select_payment choose_item" disabled="disabled">
+                <div class="select_payment choose_item">
                     <a href="javascript:;">
                         <span class="label">支付方式</span>
                         <span class="info choose_way">微信支付</span>
@@ -259,6 +260,7 @@
     <script src="/vipsubscribe/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
     <script src="/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
     <script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
+    {{include "/common/weixin.html"}}
     <script>
       //微信支付start
       {{if not .T.isTrial }}
@@ -268,7 +270,7 @@
   			var id = {{.T._id}}
   			if(signature && signature.length == 4){
   				wx.config({
-  				    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+  				    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
   				    appId: signature[0], // 必填,公众号的唯一标识
   				    timestamp:signature[1], // 必填,生成签名的时间戳
   				    nonceStr: signature[2], // 必填,生成签名的随机串
@@ -364,7 +366,7 @@
             }
           }
           
-          if(!$.isEmptyObject(data)){
+          if(!$.isEmptyObject(data)&&!this.areaSelect["一个省"]){
             $(".choose_area").val(provinceArr.join(" ")+" "+cityArr.join(" "));
           }
 
@@ -380,7 +382,7 @@
         },
         showIndustry:function(){
           let data = this.industrySelect;
-          if(data.length>0){
+          if(data.length>0&&data[0]!="一个行业"){
             $(".choose_industry").val(data.join(" "));
           }
           if(this.industrySelect.length>0&&this.industrySelect[0]!="全部行业"&&this.industrySelect[0]!="一个行业"){ //选择有行业信息
@@ -416,7 +418,7 @@
         
         
 
-        $(function () {
+        $(function () {           
             purchase.initData();
             purchase.showArea();
             purchase.showIndustry();
@@ -435,6 +437,7 @@
             })
             // 选择支付方式
             $('.select_payment .choose_way').click(function () {
+                return
                 $('#pay_way').show(200);
             })
 
@@ -486,6 +489,10 @@
                 }
                 // 判断是点击的是+ 还是-
                 if ($(e.target).hasClass('add')) {
+                    if(currentNum==11){ //12个月自动跳转1年
+                      $("#number_box_year .year_number:eq(0)").trigger("click");
+                      return
+                    }
                     // 点的+
                     // currentNum = currentNum >= 12 ? 12 : currentNum + 1;
                     currentNum = currentNum >= data.numboxMax ? data.numboxMax : currentNum + data
@@ -617,12 +624,12 @@
                     "time":$(".info:eq(2)").val().trim(),
                     "payWay":"wx_js"
                   }
-                  $DoPost("/front/vipsubscribe/createOrder",param,function(r){
+                  $DoPost("/subscribepay/vipsubscribe/createOrder",param,function(r){
                     if(r.success){
                       clearSessionStorage();
                       onBridgeReady(JSON.parse(r.data.res),r.data.code);
                     }
-                    $("#payHandle").removeAttr("disabled")                    
+                    $("#payHandle").removeAttr("disabled")  
                   })
                 {{else}} 
                   //试用用户
@@ -665,6 +672,7 @@
         }
                    
     </script>
+  </div>  
 </body>
 
 </html>

+ 9 - 9
src/web/templates/weixin/vipsubscribe/vip_viewPage.html

@@ -234,7 +234,7 @@
 				//
 				var buyerclass = "";
 				if(list[i].buyerclass){
-					buyerclass='<span class="buyclass">'+list[i].buyerclass+'</span>'
+					buyerclass='<span class="buyerclass">'+list[i].buyerclass+'</span>'
 				}
 				var tabletime = formatDate(list[i].publishtime);
 				//					
@@ -327,14 +327,14 @@
 		}
 </script>
 <style type="text/css">
-	.restime span.buyclass{
-	border: 1px solid #CFAD89;
-    background: #CFAD89;
-    border-radius: 3px;
-    margin: 0px 5px;
-    padding: 1px 3px;
-    color: #fff;
-    font-size: 14px;
+	.restime span.buyerclass{
+		border: 1px solid #CFAD89;
+	    background: #CFAD89;
+	    border-radius: 3px;
+	    margin: 0px 5px;
+	    padding: 1px 3px;
+	    color: #fff;
+	    font-size: 14px;
 	}
 	.findnull{
 		display:none;