Forráskód Böngészése

提交即将到期支付

wangkaiyue 5 éve
szülő
commit
dd43551599

+ 7 - 2
src/jfw/front/vipsubscribe.go

@@ -122,9 +122,14 @@ func (s *Subscribepay) TrialInfo() {
 
 //订阅收费购买页面
 func (s *Subscribepay) ToPurchasePage(flag string) {
-	if flag == "trial" {
+	if flag == "trial" { //试用
 		s.T["isTrial"] = true
-	} else {
+	} else { //付费
+		if flag == "willExpire" {
+			s.T["orderType"] = 5
+		} else {
+			s.T["orderType"] = 1
+		}
 		s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url()) //微信支付准备参数
 	}
 	s.Render("/weixin/vipsubscribe/vip_purchase.html")

+ 26 - 12
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -25,7 +25,7 @@ type VipSimpleMsg struct {
 	Industry   []string                `json:"industry"`   //行业
 	Cyclecount int                     `json:"cyclecount"` //日期数量
 	Cycleunit  int                     `json:"cycleunit"`  //日期单位
-	OrderType  int                     `json:"ordertype"`  //类型 1:订单 2:续费 3:立即升级 4:下月升级
+	OrderType  int                     `json:"ordertype"`  //类型 1:订单 2:续费 3:立即升级 4:下月升级 5:即将到期(升降级)
 }
 
 //购买内容
@@ -99,7 +99,7 @@ func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) bool {
 		flag = JyVipSubStruct.RenewSubVip(userid, qutil.ObjToString((*orderdata)["vip_endtime"]))
 	} else if vmsg.OrderType == 3 { //立即升级
 		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), true)
-	} else if vmsg.OrderType == 4 { //下月升级
+	} else if vmsg.OrderType == 4 || vmsg.OrderType == 5 { //下月升级
 		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), false)
 	}
 	//支付成功后 其他未支付vip订阅订单 变为已取消
@@ -118,14 +118,11 @@ func (this *vipSubscribeStruct) StartSubVip(userId string, vmsg VipSimpleMsg, st
 		buyset.AreaCount = -1       //城市数量
 		buyset.BuyerclassCount = -1 //行业数量
 	}
-	//计算服务时间
 	if !util.MQFW.UpdateById("user", userId,
 		bson.M{"$set": bson.M{
 			"o_vipjy.i_trial":      -1,                      //已激活试用
 			"o_vipjy.o_area":       vmsg.Area,               //设置地区
 			"o_vipjy.a_buyerclass": vmsg.Industry,           //设置行业
-			"o_vipjy.i_cycleunit":  vmsg.Cycleunit,          //购买单位
-			"o_vipjy.i_cyclecount": vmsg.Cyclecount,         //购买时长
 			"o_vipjy.o_buyset":     buyset,                  //购买内容 城市、省份、行业数量
 			"l_vip_starttime":      startTime.Unix(),        //开始时间
 			"l_vip_endtime":        endTime.Unix(),          //结束时间
@@ -164,21 +161,18 @@ func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg,
 	if isNow {
 		return util.MQFW.UpdateById("user", userId,
 			bson.M{"$set": bson.M{
-				"o_vipjy.o_area":       vmsg.Area,       //设置地区
-				"o_vipjy.a_buyerclass": vmsg.Industry,   //设置行业
-				"o_vipjy.i_cycleunit":  vmsg.Cycleunit,  //购买单位
-				"o_vipjy.i_cyclecount": vmsg.Cyclecount, //购买时长
+				"o_vipjy.o_area":       vmsg.Area,     //设置地区
+				"o_vipjy.a_buyerclass": vmsg.Industry, //设置行业
 				"o_vipjy.o_buyset":     buyset,
 				"l_vip_endtime":        endTime.Unix(),
 				"i_vip_status":         2,
-				//	"l_vip_starttime":      startTime.Unix(),
 			}})
 	} else {
 		if !util.MQFW.UpdateById("user", userId,
 			bson.M{"$set": bson.M{
 				"l_vip_endtime": endTime.Unix(),
 			}}) {
-			log.Println("%s更新结束日期出错", userId)
+			log.Printf("%s更新结束%d日期出错\n", userId, endTime.Unix())
 			return false
 		}
 		return util.MQFW.Save("vip_upgrade",
@@ -236,6 +230,26 @@ func (this *vipSubscribeStruct) CanTrial(userId string) bool {
 	return true
 }
 
+//校验订单是否可以创建是否合法,返回user表查询信息
+func (this *vipSubscribeStruct) OrderCheck(userId string, orderType int) (bool, *map[string]interface{}) {
+	res, ok := util.MQFW.FindById("user", userId, `{"l_vip_endtime":1,"i_vip_status":1}`)
+	if !ok || len(*res) == 0 {
+		return false, nil
+	}
+	switch orderType { //1:订单 2:续费 3:立即升级 4:下月升级 5:即将到期(升降级)
+	case 1: //新订单 用户不能处于vip状态
+		vipStatus := qutil.IntAll((*res)["i_vip_status"])
+		return vipStatus != 2, res
+	case 5: //是否在到期结束三天内
+		timeStamp := qutil.Int64All((*res)["l_vip_endtime"])
+		if timeStamp == 0 {
+			return false, nil
+		}
+		return time.Now().AddDate(0, 0, 3).After(time.Unix(timeStamp, 0)), res
+	}
+	return false, nil
+}
+
 //获取省份,城市,行业购买内容
 //[省份,城市,行业]
 func (this *vipSubscribeStruct) GetBuySet(userId string) (*SubvipBuySet, error) {
@@ -256,7 +270,7 @@ func (this *vipSubscribeStruct) SubEditCheckArea(area *map[string]interface{}, b
 	if buySet.AreaCount == -1 { //购买全国
 		return true
 	}
-	if len(*area)==0{ //选择全国
+	if len(*area) == 0 { //选择全国
 		return false
 	}
 	pCount := 0

+ 25 - 7
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -28,12 +28,13 @@ func init() {
 	xweb.AddAction(&SubVipPayOrder{})
 }
 
-//创建订单返回支付串
+//新订单 或 即将到期续费
 func (this *SubVipPayOrder) CreateOrder() {
 	area := qutil.ObjToMap(this.GetString("area"))
 	industry := strings.Split(this.GetString("industry"), ",")
 	date := this.GetString("time")
 	payWay := this.GetString("payWay")
+	orderType, _ := this.GetInteger("orderType") //1 简单付费,5 剩余三天 升降级付费
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
 	r := func() *entity.FuncResult {
@@ -42,8 +43,12 @@ func (this *SubVipPayOrder) CreateOrder() {
 		if len(industry) == 1 && industry[0] == "" { //去掉[""]
 			industry = []string{}
 		}
-		if !(payWay == "wx_js" || payWay == "wx_app" || payWay == "ali_app") {
-			return &entity.FuncResult{false, errors.New("未知支付"), nil}
+		if !(payWay == "wx_js" || payWay == "wx_app" || payWay == "ali_app") || !(orderType == 1 || orderType == 5) {
+			return &entity.FuncResult{false, errors.New("参数异常"), nil}
+		}
+		createOk, userData := entity.JyVipSubStruct.OrderCheck(userId, orderType)
+		if createOk { //校验订单
+			return &entity.FuncResult{false, errors.New("非法请求"), nil}
 		}
 		date_count, date_unit, err := checkReqDate(date)
 		if err != nil {
@@ -54,9 +59,9 @@ func (this *SubVipPayOrder) CreateOrder() {
 			industry,
 			date_count,
 			date_unit,
-			1,
+			orderType,
 		}
-		log.Println(area, industry, date, payWay)
+
 		//插入订单表
 		mog_id := entity.JyVipSubStruct.SaveSelectLog(userId, openId, &filter)
 		if mog_id == "" {
@@ -98,7 +103,7 @@ func (this *SubVipPayOrder) CreateOrder() {
 		}
 		filterStr, _ := json.Marshal(filter)
 		ordercode := pay.GetOrderCode(userId)
-		orderid := util.Mysql.Insert("dataexport_order", map[string]interface{}{
+		insertMap := map[string]interface{}{
 			"order_money":    totalfee,
 			"order_status":   0,
 			"user_nickname":  qutil.ObjToString(this.GetSession("s_nickname")),
@@ -115,7 +120,20 @@ func (this *SubVipPayOrder) CreateOrder() {
 			"pay_way":        payWay,
 			"user_id":        userId,
 			"filter":         string(filterStr), //筛选
-		})
+		}
+		if orderType == 5 { //插入生效时间和结束时间
+			timeStamp := qutil.Int64All((*userData)["l_vip_endtime"])
+			startTime := time.Unix(timeStamp, 0)
+			var endTime time.Time
+			if filter.Cycleunit == 1 { //年
+				endTime = startTime.AddDate(filter.Cyclecount, 0, 0)
+			} else if filter.Cycleunit == 2 { //月
+				endTime = startTime.AddDate(0, filter.Cyclecount, 0)
+			}
+			insertMap["vip_starttime"] = qutil.FormatDate(&startTime, qutil.Date_Full_Layout)
+			insertMap["vip_endtime"] = qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
+		}
+		orderid := util.Mysql.Insert("dataexport_order", insertMap)
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
 		}

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

@@ -33,11 +33,9 @@
             }
             $(function(){
                 timer($('.time'),()=>{
-                    // window.location.href="vip_subscribe_edit.html"
                     window.location.replace('/front/vipsubscribe/toEditSubPage');
                 })
                 $('#back').click(function () {  
-                    // window.location.href="vip_subscribe_edit.html"
                     window.location.replace('/front/vipsubscribe/toEditSubPage');
                 })
             })

+ 2 - 1
src/web/templates/weixin/vipsubscribe/vip_purchase.html

@@ -622,7 +622,8 @@
                     "area":JSON.stringify(area),
                     "industry":industry.join(","),
                     "time":$(".info:eq(2)").val().trim(),
-                    "payWay":"wx_js"
+                    "payWay":"wx_js",
+                    "orderType":{{.T.orderType}},
                   }
                   $DoPost("/subscribepay/vipsubscribe/createOrder",param,function(r){
                     if(r.success){