wangkaiyue 5 vuotta sitten
vanhempi
commit
777abc8da4

+ 72 - 0
src/jfw/modules/app/src/app/front/vipsubscribe.go

@@ -1,8 +1,10 @@
 package front
 
 import (
+	"encoding/hex"
 	"jfw/public"
 	"qfw/util"
+	"strings"
 	"time"
 
 	"github.com/go-xweb/xweb"
@@ -37,6 +39,9 @@ type Subscribepay struct {
 
 	//发票
 	openInvoice xweb.Mapper `xweb:"/jyapp/vipsubscribe/openInvoice/(\\w+)"` //开发票
+
+	//订阅付费消息提醒中转
+	msgremind xweb.Mapper `xweb:"/jyapp/vipsubscribe/msgremind"`
 }
 
 func init() {
@@ -188,3 +193,70 @@ func (s *Subscribepay) OpenInvoice(order_code string) {
 	s.T["order_code"] = order_code
 	s.Render("/dataExport/dataExport_applyInvoice.html", &s.T)
 }
+
+func (f *Subscribepay) Msgremind() error {
+	param := map[string]string{}
+	if array := strings.Split(f.Url(), "?"); len(array) == 2 {
+		decode, _ := hex.DecodeString(array[1])
+		for _, v := range strings.Split(string(decode), "&") {
+			if vv := strings.Split(v, "="); len(vv) == 2 {
+				param[vv[0]] = vv[1]
+			}
+		}
+	}
+	userId, _ := f.GetSession("userId").(string)
+	if userId == "" {
+		return f.Render("_error.html")
+	}
+	user, ok := public.MQFW.FindById("user", userId, `{"i_vip_status":1,"l_vip_endtime":1}`)
+	i_vip_status := util.IntAll((*user)["i_vip_status"])
+	if !ok || user == nil || len(*user) == 0 {
+		return f.Render("_error.html")
+	}
+	myLastOrderCode := func(user_id string) string {
+		order := public.Mysql.FindOne("dataexport_order", map[string]interface{}{
+			"user_id":      user_id,
+			"order_status": 1,
+			"product_type": "VIP订阅",
+		}, "id,order_code", "pay_time desc")
+		if order != nil && len(*order) > 0 {
+			return util.ObjToString((*order)["order_code"])
+		} else {
+			return ""
+		}
+	}
+	t := param["type"]
+	if t == "unpaid" { //未支付 已支付
+		return f.Redirect("/jyapp/vipsubscribe/toOrderDetailPage?orderCode=" + param["ordercode"])
+	} else if t == "paid" {
+		if i_vip_status > 0 {
+			return f.Redirect("/jyapp/vipsubscribe/toSubVipSetPage")
+		} else {
+			return f.Redirect("/jyapp/vipsubscribe/vipsubscribe_new?orderCode=" + myLastOrderCode(userId))
+		}
+	} else if t == "ontrial_soonexprie" || t == "ontrial_expried" || t == "soonexprie" || t == "expried" { //试用即将到期 试用已到期 即将到期 已到期
+		if t == "ontrial_soonexprie" || t == "ontrial_expried" {
+			if i_vip_status == 2 {
+				return f.Redirect("/jyapp/vipsubscribe/toSubVipSetPage")
+			} else {
+				return f.Redirect("/jyapp/vipsubscribe/vipsubscribe_new")
+			}
+		} else if t == "soonexprie" || t == "expried" {
+			now_unix := time.Now().Unix()
+			l_vip_endtime := util.Int64All((*user)["l_vip_endtime"])
+			if now_unix < l_vip_endtime-259200 {
+				//已续费
+				return f.Redirect("/jyapp/vipsubscribe/toSubVipSetPage")
+			} else {
+				if now_unix > l_vip_endtime {
+					//未续费已到期,跳转到再次购买页面
+					return f.Redirect("/jyapp/vipsubscribe/vipsubscribe_new?orderCode=" + myLastOrderCode(userId))
+				} else {
+					//未续费未到期,跳转到续费页面
+					return f.Redirect("/jyapp/vipsubscribe/vipsubscribe_renew")
+				}
+			}
+		}
+	}
+	return f.Render("_error.html")
+}

+ 2 - 1
src/jfw/modules/app/src/config.json

@@ -49,7 +49,8 @@
         "followset": "/jyapp/follow/set/%s/%s",
         "myfeedbacks": "/jyapp/swordfish/myFeedbacks",
         "historypush": "/jyapp/swordfish/historypush?f=push",
-        "followEntDetail": "/jyapp/followent/detail/%s"
+        "followEntDetail": "/jyapp/followent/detail/%s",
+        "msgremind": "/jyapp/vipsubscribe/msgremind?%s"
     },
     "followProject": 10,
     "followentlimit": "10",

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

@@ -10,6 +10,7 @@
     "webport": "86",
     "webrpcport": "8600",
     "weixinrpc": "127.0.0.1:8083",
+    "apppushrpc":"127.0.0.1:5566",
     "mysql": {
         "dbName": "jianyu",
         "address": "192.168.3.11:3366",

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

@@ -18,6 +18,7 @@ type config struct {
 	Webport         string
 	Webrpcport      string
 	Weixinrpc       string
+	Apppushrpc          string
 	Cassandra       map[string]interface{}
 	Mysql           struct {
 		DbName       string

+ 14 - 1
src/jfw/modules/subscribepay/src/timetask/timetask.go

@@ -187,6 +187,7 @@ func expireRemind() {
 		}).Iter()
 		for m := make(map[string]interface{}); it.Next(&m); {
 			_id := qutil.BsonIdToSId(m["_id"])
+			log.Println("发送消息", _id)
 			i_vip_status := qutil.IntAll(m["i_vip_status"])
 			i_vip_expire_tip := qutil.IntAll(m["i_vip_expire_tip"])
 			wxPushOk, appPushOk := false, false
@@ -243,7 +244,7 @@ func expireRemind() {
 				keyword4_value = qutil.FormatDateByInt64(&l_vip_endtime, qutil.Date_Short_Layout)
 				break
 			}
-			if isPushWx == 1 && s_m_openid != "" {
+			if isPushWx == 1 && s_m_openid != "" { //微信推送
 				tmplData := map[string]*qrpc.TmplItem{
 					"first": &qrpc.TmplItem{
 						Value: first_value,
@@ -272,6 +273,18 @@ func expireRemind() {
 					Url:      Config.WebDomain + "/front/sess/" + util.Se_Topnet.EncodeString(s_m_openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",msgremind") + "__" + hex.EncodeToString([]byte(fmt.Sprintf("type=%s", tp))),
 				})
 				log.Println("到期提醒,微信推送", _id, wxPushOk)
+			} else if m["s_opushid"] != nil || m["s_jpushid"] != nil { //app推送
+				appPushOk = qrpc.AppPush(Config.Apppushrpc, map[string]interface{}{
+					"phoneType":   m["s_appponetype"],
+					"otherPushId": m["s_opushid"],
+					"jgPushId":    m["s_jpushid"],
+					"url":         Config.WebDomain + "/jyapp/free/sess/" + util.Se_Topnet.EncodeString(_id+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",msgremind") + "__" + hex.EncodeToString([]byte(fmt.Sprintf("type=%s", tp))),
+					"userId":      _id,
+					"type":        "feedback",
+					"descript":    first_value,
+					"title":       "剑鱼提醒",
+				})
+				log.Println("到期提醒,app推送", _id, appPushOk)
 			}
 			if wxPushOk || appPushOk {
 				util.MQFW.UpdateById("user", _id, map[string]interface{}{

+ 26 - 2
src/jfw/modules/subscribepay/src/util/msgremind.go

@@ -86,7 +86,7 @@ func (m *msgRemind) PaySuccess(orderId int, orderCode, userId, prepayTime string
 		s_opushid, _ := (*user)["s_opushid"].(string)
 		s_appponetype, _ := (*user)["s_appponetype"].(string)
 		log.Println("支付成功,推送消息", userId, "s_m_openid", s_m_openid, "s_jpushid", s_jpushid, "s_opushid", s_opushid, "s_appponetype", s_appponetype)
-		if isPushWx == 1 {
+		if isPushWx == 1 && s_m_openid != "" {
 			l_vip_endtime := (*user)["l_vip_endtime"]
 			expireTime := util.FormatDateWithObj(&l_vip_endtime, util.Date_Short_Layout)
 			wxPushOk, _ := qrpc.WxSendTmplMsg(Config.Weixinrpc, &qrpc.WxTmplMsg{
@@ -112,6 +112,18 @@ func (m *msgRemind) PaySuccess(orderId int, orderCode, userId, prepayTime string
 				Url: Config.WebDomain + "/front/sess/" + Se_Topnet.EncodeString(s_m_openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",msgremind") + "__" + hex.EncodeToString([]byte(fmt.Sprintf("type=paid"))),
 			})
 			log.Println("支付成功,微信推送", userId, wxPushOk)
+		} else if s_opushid != "" || s_jpushid != "" {
+			appPushOk := qrpc.AppPush(Config.Apppushrpc, map[string]interface{}{
+				"phoneType":   s_appponetype,
+				"otherPushId": s_opushid,
+				"jgPushId":    s_jpushid,
+				"url":         Config.WebDomain + "/jyapp/free/sess/" + Se_Topnet.EncodeString(userId+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",msgremind") + "__" + hex.EncodeToString([]byte(fmt.Sprintf("type=paid"))),
+				"userId":      userId,
+				"type":        "feedback",
+				"descript":    fmt.Sprintf(MessageConfig.WxTpl_PaySuccess.First.Value, orderCode),
+				"title":       "剑鱼提醒",
+			})
+			log.Println("支付成功,app推送", userId, appPushOk)
 		}
 	}()
 }
@@ -171,7 +183,7 @@ func (m *msgRemind) run() {
 			s_appponetype, _ := (*user)["s_appponetype"].(string)
 			log.Println("未支付订单,推送消息", unpaidOrder.userId, "remind_status", remind_status, "i_ispush", isPushWx, "s_m_openid", s_m_openid, "s_jpushid", s_jpushid, "s_opushid", s_opushid, "s_appponetype", s_appponetype)
 			wxPushOk, appPushOk := false, false
-			if isPushWx == 1 {
+			if isPushWx == 1 && s_m_openid != "" {
 				tmplData := map[string]*qrpc.TmplItem{
 					"first": &qrpc.TmplItem{
 						Value: fmt.Sprintf(MessageConfig.WxTpl_Unpaid.First.Value, unpaidOrder.orderCode),
@@ -202,6 +214,18 @@ func (m *msgRemind) run() {
 					Url:      Config.WebDomain + "/front/sess/" + Se_Topnet.EncodeString(s_m_openid+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",msgremind") + "__" + hex.EncodeToString([]byte(fmt.Sprintf("type=unpaid&ordercode=%s", unpaidOrder.orderCode))),
 				})
 				log.Println("未支付订单,微信推送", unpaidOrder.userId, wxPushOk)
+			} else if s_opushid != "" || s_jpushid != "" {
+				appPushOk = qrpc.AppPush(Config.Apppushrpc, map[string]interface{}{
+					"phoneType":   s_appponetype,
+					"otherPushId": s_opushid,
+					"jgPushId":    s_jpushid,
+					"url":         Config.WebDomain + "/jyapp/free/sess/" + Se_Topnet.EncodeString(unpaidOrder.userId+",uid,"+strconv.Itoa(int(time.Now().Unix()))+",msgremind") + "__" + hex.EncodeToString([]byte(fmt.Sprintf("type=unpaid&ordercode=%s", unpaidOrder.orderCode))),
+					"userId":      unpaidOrder.userId,
+					"type":        "feedback",
+					"descript":    fmt.Sprintf(MessageConfig.WxTpl_Unpaid.First.Value, unpaidOrder.orderCode),
+					"title":       "剑鱼提醒",
+				})
+				log.Println("未支付订单,app推送", unpaidOrder.userId, appPushOk)
 			}
 			if wxPushOk || appPushOk {
 				if remind_status == 2 {