Przeglądaj źródła

Merge branch 'dev2.8.5' of ssh://192.168.3.207:10022/qmx/jy into dev2.8.5

wcj 5 lat temu
rodzic
commit
c57acd427d

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

@@ -324,8 +324,16 @@ func SendMailToBJFinance(order *map[string]interface{}, pay_time, transaction_id
 				}
 			}
 		}
-		mail_title = "电子发票申请,剑鱼标讯历史数据订单【" + order_code + "】,请查收"
-		mailcontent = fmt.Sprintf(ExConf.Mail_invoice_finance_content, bill_title, company_flag, bill_company, taxnum_flag, bill_taxnum, order_code, create_time, pay_time, product_type, isShowTransaction, pay_way, transaction_id, offlineImgSrc, data_spec, data_count, order_money, user_mail, user_phone)
+		//历史数据导出
+		if product_type == "历史数据导出" {
+			mail_title = "电子发票申请,剑鱼标讯历史数据订单【" + order_code + "】,请查收"
+			mailcontent = fmt.Sprintf(ExConf.Mail_invoice_finance_content, bill_title, company_flag, bill_company, taxnum_flag, bill_taxnum, order_code, create_time, pay_time, product_type, isShowTransaction, pay_way, transaction_id, offlineImgSrc, data_spec, data_count, order_money, user_mail, user_phone)
+		} else if product_type == "VIP订阅导出" {
+			//vip
+			product_type = "VIP订阅"
+			mail_title = "电子发票申请,剑鱼标讯VIP订单【" + order_code + "】,请查收"
+			mailcontent = fmt.Sprintf("", bill_title, company_flag, bill_company, taxnum_flag, bill_taxnum, order_code, create_time, pay_time, product_type, isShowTransaction, pay_way, transaction_id, offlineImgSrc, data_spec, data_count, order_money, user_mail, user_phone)
+		}
 	}
 	//发送邮件
 	for _, finance_mail := range ExConf.Finance_emails {

+ 217 - 381
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"errors"
 	"log"
+	"pay"
 	"time"
 	"util"
 
@@ -17,405 +18,114 @@ 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"`
-	Paysource  string                  `json:"paysource"`
-	Endtime    string                  `json:"endtime"`
-	Effect     string                  `json:"effect"`
+	//Id         string                  `json:"_id"`        //mgo id
+	Area       *map[string]interface{} `json:"area"`       //地区
+	Industry   []string                `json:"industry"`   //行业
+	Cyclecount int                     `json:"cyclecount"` //日期数量
+	Cycleunit  int                     `json:"cycleunit"`  //日期单位
+	OrderType  int                     `json:"ordertype"`  //类型 1:订单 2:续费 3:立即升级 4:下月升级
+}
+
+//购买内容
+type SubvipBuySet struct {
+	AreaCount       int                    `json:"areaCount"`       //-1 全国  >0 省份数量
+	Citys           map[string]interface{} `json:"citys"`           //城市数量
+	BuyerclassCount int                    `json:"buyerclassCount"` //行业数
 }
 
 //支付完成回调
-func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) (ok bool) {
+func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) 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", "")
+	}, "id,filter,order_code,order_status,user_id,vip_starttime,vip_endtime", "")
 	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)
-			}
-			if vmsg.Paysource == "open" {
-				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_endtime":  qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
-				})
-				if update {
-					if JyVipSubStruct.StartSubVip(userid, vmsg.Area, vmsg.Industry, startTime, endTime, false, vmsg.Cyclecount, vmsg.Cycleunit) {
-						ok = true
-					}
-				}
-			} else if vmsg.Paysource == "Renew" {
-				endtime := qutil.Int64All(vmsg.Endtime)
-				nowTime := time.Now().Unix()
-				if nowTime > endtime {
-					endtime = nowTime
-				}
-				endtimes := time.Unix(endtime, 0)
-				var endTime time.Time
-				if vmsg.Cycleunit == 1 { //年
-					endTime = endtimes.AddDate(vmsg.Cyclecount, 0, 0)
-				} else if vmsg.Cycleunit == 2 { //月
-					endTime = endtimes.AddDate(0, vmsg.Cyclecount, 0)
-				}
-				update := false
-				if nowTime > endtime {
-					startTime := time.Now()
-					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),
-					})
-				} else {
-					data, oks := util.MQFW.FindById("user", userid, nil)
-					var starttime time.Time
-					if oks && len(*data) > 0 && *data != nil {
-						start := qutil.Int64All((*data)["l_vip_starttime"])
-						starttime = time.Unix(start, 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 {
-					area := *vmsg.Area
-					industry := vmsg.Industry
-					buyset := SubvipBuySet{}
-					if len(area) > 0 {
-						pCount := 0
-						citys := map[string]interface{}{}
-						for k, v := range area {
-							tmp := v.([]interface{})
-							if len(tmp) == 0 { //省份
-								pCount++
-							} else { //城市
-								citys[k] = len(tmp)
-							}
-						}
-						buyset.Citys = citys      //城市
-						buyset.AreaCount = pCount //地区
-					} else {
-						buyset.BuyerclassCount = -1 //全国
-					}
-					//行业数量
-					buyset.BuyerclassCount = qutil.If(len(industry) > 0, len(industry), -1).(int)
-					if nowTime > endtime {
-						if util.MQFW.UpdateById("user", userid,
-							bson.M{"$set": bson.M{
-								"o_vipjy.o_area":       area,            //试用设置地区
-								"o_vipjy.a_buyerclass": industry,        //试用设置行业
-								"o_vipjy.o_buyset":     buyset,          //购买内容 城市、省份、行业数量
-								"o_vipjy.i_cycleunit":  vmsg.Cycleunit,  //购买单位
-								"o_vipjy.i_cyclecount": vmsg.Cyclecount, //购买时长
-								"l_vip_starttime":      nowTime,         //开始时间
-								"l_vip_endtime":        endTime.Unix(),  //结束时间
-							}}) {
-							ok = true
-						}
-					} else {
-						if util.MQFW.UpdateById("user", userid,
-							bson.M{"$set": bson.M{
-								"o_vipjy.o_area":       area,            //试用设置地区
-								"o_vipjy.a_buyerclass": industry,        //试用设置行业
-								"o_vipjy.o_buyset":     buyset,          //购买内容 城市、省份、行业数量
-								"o_vipjy.i_cycleunit":  vmsg.Cycleunit,  //购买单位
-								"o_vipjy.i_cyclecount": vmsg.Cyclecount, //购买时长
-								//								"l_vip_starttime":      startTime.Unix(),        //开始时间
-								"l_vip_endtime": endTime.Unix(), //结束时间
-							}}) {
-							ok = true
-						}
-					}
-				}
-			} else {
-				effect := vmsg.Effect
-				endtime := qutil.Int64All(vmsg.Endtime)
-				endtimes := time.Unix(endtime, 0)
-				var endTime time.Time
-				if effect == "now" {
-					if vmsg.Cycleunit >= 1 {
-						if vmsg.Cycleunit == 1 { //年
-							endTime = endtimes.AddDate(vmsg.Cyclecount, 0, 0)
-						} else if vmsg.Cycleunit == 2 { //月
-							endTime = endtimes.AddDate(0, vmsg.Cyclecount, 0)
-						}
-						data, oks := util.MQFW.FindById("user", userid, nil)
-						var starttime time.Time
-						if oks && len(*data) > 0 && *data != nil {
-							start := qutil.Int64All((*data)["l_vip_starttime"])
-							starttime = time.Unix(start, 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 {
-							area := *vmsg.Area
-							industry := vmsg.Industry
-							buyset := SubvipBuySet{}
-							if len(area) > 0 {
-								pCount := 0
-								citys := map[string]interface{}{}
-								for k, v := range area {
-									tmp := v.([]interface{})
-									if len(tmp) == 0 { //省份
-										pCount++
-									} else { //城市
-										citys[k] = len(tmp)
-									}
-								}
-								buyset.Citys = citys      //城市
-								buyset.AreaCount = pCount //地区
-							} else {
-								buyset.BuyerclassCount = -1 //全国
-							}
-							//行业数量
-							buyset.BuyerclassCount = qutil.If(len(industry) > 0, len(industry), -1).(int)
-							if util.MQFW.UpdateById("user", userid,
-								bson.M{"$set": bson.M{
-									"o_vipjy.o_area":       area,            //试用设置地区
-									"o_vipjy.a_buyerclass": industry,        //试用设置行业
-									"o_vipjy.o_buyset":     buyset,          //购买内容 城市、省份、行业数量
-									"o_vipjy.i_cycleunit":  vmsg.Cycleunit,  //购买单位
-									"o_vipjy.i_cyclecount": vmsg.Cyclecount, //购买时长
-									//								"l_vip_starttime":      startTime.Unix(),        //开始时间
-									"l_vip_endtime": endTime.Unix(), //结束时间
-								}}) {
-								ok = true
-							}
-						}
-					} else {
-						data, oks := util.MQFW.FindById("user", userid, nil)
-						var starttime time.Time
-						if oks && len(*data) > 0 && *data != nil {
-							start := qutil.Int64All((*data)["l_vip_starttime"])
-							starttime = time.Unix(start, 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 {
-							area := *vmsg.Area
-							industry := vmsg.Industry
-							buyset := SubvipBuySet{}
-							if len(area) > 0 {
-								pCount := 0
-								citys := map[string]interface{}{}
-								for k, v := range area {
-									tmp := v.([]interface{})
-									if len(tmp) == 0 { //省份
-										pCount++
-									} else { //城市
-										citys[k] = len(tmp)
-									}
-								}
-								buyset.Citys = citys      //城市
-								buyset.AreaCount = pCount //地区
-							} else {
-								buyset.BuyerclassCount = -1 //全国
-							}
-							//行业数量
-							buyset.BuyerclassCount = qutil.If(len(industry) > 0, len(industry), -1).(int)
-							if util.MQFW.UpdateById("user", userid,
-								bson.M{"$set": bson.M{
-									"o_vipjy.o_area":       area,     //试用设置地区
-									"o_vipjy.a_buyerclass": industry, //试用设置行业
-									"o_vipjy.o_buyset":     buyset,   //购买内容 城市、省份、行业数量
-								}}) {
-								ok = true
-							}
-						}
-					}
-				} else {
-					if vmsg.Cycleunit >= 1 {
-						if vmsg.Cycleunit == 1 { //年
-							endTime = endtimes.AddDate(vmsg.Cyclecount, 0, 0)
-						} else if vmsg.Cycleunit == 2 { //月
-							endTime = endtimes.AddDate(0, vmsg.Cyclecount, 0)
-						}
-						data, oks := util.MQFW.FindById("user", userid, nil)
-						var starttime time.Time
-						if oks && len(*data) > 0 && *data != nil {
-							start := qutil.Int64All((*data)["l_vip_starttime"])
-							starttime = time.Unix(start, 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 util.MQFW.UpdateById("user", userid,
-								bson.M{"$set": bson.M{
-									"o_vipjy.i_cycleunit":  vmsg.Cycleunit,  //购买单位
-									"o_vipjy.i_cyclecount": vmsg.Cyclecount, //购买时长
-									//								"l_vip_starttime":      startTime.Unix(),        //开始时间
-									"l_vip_endtime": endTime.Unix(), //结束时间
-								}}) {
-								ok = true
-							}
-						}
-					} else {
-						data, oks := util.MQFW.FindById("user", userid, nil)
-						var starttime time.Time
-						if oks && len(*data) > 0 && *data != nil {
-							start := qutil.Int64All((*data)["l_vip_starttime"])
-							starttime = time.Unix(start, 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 {
-							ok = true
-						}
-					}
-					area := *vmsg.Area
-					industry := vmsg.Industry
-					validtime := qutil.Int64All(effect)
-					if util.MQFW.Save("vip_upgrade",
-						bson.M{
-							"s_userid":     userid,            //试用设置地区
-							"a_buyerclass": industry,          //试用设置行业
-							"o_area":       area,              //购买内容 城市、省份、行业数量
-							"l_validtime":  validtime,         //生效时间
-							"l_createtime": time.Now().Unix(), //入库时间
-							"i_isvalid":    0,                 //是否已经生效 0-未生效
-						}) == "" {
-						ok = true
-					}
-				}
-			}
-			if ok {
-				//支付成功后 其他未支付vip订阅订单 变为已取消
-				if PayCancel(userid) {
-					log.Println(userid, "更改其余未支付订单失效")
-				}
-			}
-		} else {
-			ok = true
+		return false //未找到订单
+	}
+	userid := qutil.ObjToString((*orderdata)["user_id"])
+	order_status := qutil.IntAll((*orderdata)["order_status"])
+	if order_status == 1 {
+		return true // 或已支付
+	}
+	if order_status != 0 {
+		log.Printf("%s订单状态异常%d\n", userid, order_status)
+		return false //
+	}
+	//计算时长
+	vmsg := VipSimpleMsg{}
+	filterStr := qutil.ObjToString((*orderdata)["filter"])
+	if err := json.Unmarshal([]byte(filterStr), &vmsg); err != nil {
+		log.Printf("%s vipSubscribeStruct PayCallBack Unmarshal 出错 [%s]\n", userid, filterStr)
+		return false
+	}
+	updateMap := map[string]interface{}{
+		"pay_money":    param.CashFee,
+		"pay_time":     pay_time,
+		"order_status": 1,
+	}
+
+	var startTime time.Time
+	var endTime time.Time
+	if vmsg.OrderType == 1 { //新订单 计算开始时间 结束时间
+		startTime := time.Now()
+		if vmsg.Cycleunit == 1 { //年
+			endTime = startTime.AddDate(vmsg.Cyclecount, 0, 0)
+		} else if vmsg.Cycleunit == 2 { //月
+			endTime = startTime.AddDate(0, vmsg.Cyclecount, 0)
 		}
+		updateMap["vip_starttime"] = qutil.FormatDate(&startTime, qutil.Date_Full_Layout)
+		updateMap["vip_endtime"] = qutil.FormatDate(&endTime, qutil.Date_Full_Layout)
 	}
-	return ok
-}
 
-//购买内容
-type SubvipBuySet struct {
-	AreaCount       int                    `json:"areaCount"`       //-1 全国  >0 省份数量
-	Citys           map[string]interface{} `json:"citys"`           //城市数量
-	BuyerclassCount int                    `json:"buyerclassCount"` //行业数
+	update := util.Mysql.Update("dataexport_order", map[string]interface{}{
+		"order_status": 0,
+		"out_trade_no": param.OutTradeno,
+		"order_money":  param.TotalFee,
+	}, updateMap)
+
+	if !update {
+		log.Printf("%s更新订单状态出错%+v\n", userid, updateMap)
+		return false
+	}
+	flag := false
+	if vmsg.OrderType == 1 { //新订单
+		flag = JyVipSubStruct.StartSubVip(userid, vmsg, startTime, endTime, false)
+	} else if vmsg.OrderType == 2 { //续费
+		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 { //下月升级
+		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), false)
+	}
+	//支付成功后 其他未支付vip订阅订单 变为已取消
+	if flag {
+		go PayCancel(userid)
+	}
+	return flag
 }
 
-//设置开始使用
-func (this *vipSubscribeStruct) StartSubVip(userId string, area *map[string]interface{}, industry []string, startTime, endTime time.Time, isTrial bool, count, unit int) bool {
-	buyset := SubvipBuySet{}
-	//a_buyset 计算  0:省份数量 1:城市数量 2:行业数量
+//设置开始使用vip订阅
+func (this *vipSubscribeStruct) StartSubVip(userId string, vmsg VipSimpleMsg, startTime, endTime time.Time, isTrial bool) bool {
+	buyset := &SubvipBuySet{}
 	if !isTrial { //购买
-		if len(*area) > 0 {
-			pCount := 0
-			citys := map[string]interface{}{}
-			for k, v := range *area {
-				tmp := v.([]interface{})
-				if len(tmp) == 0 { //省份
-					pCount++
-				} else { //城市
-					citys[k] = len(tmp)
-				}
-			}
-			buyset.Citys = citys      //城市
-			buyset.AreaCount = pCount //地区
-		} else {
-			buyset.BuyerclassCount = -1 //全国
-		}
-		//行业数量
-		buyset.BuyerclassCount = qutil.If(len(industry) > 0, len(industry), -1).(int)
+		buyset = JyVipSubStruct.NewBuySet(vmsg.Area, vmsg.Industry)
 	} else { //试用
 		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":       area,                    //试用设置地区
-			"o_vipjy.a_buyerclass": industry,                //试用设置行业
+			"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,                  //购买内容 城市、省份、行业数量
-			"o_vipjy.i_cycleunit":  unit,                    //购买单位
-			"o_vipjy.i_cyclecount": count,                   //购买时长
 			"l_vip_starttime":      startTime.Unix(),        //开始时间
 			"l_vip_endtime":        endTime.Unix(),          //结束时间
 			"i_vip_status":         qutil.If(isTrial, 1, 2), //1试用 2正式
@@ -427,6 +137,87 @@ func (this *vipSubscribeStruct) StartSubVip(userId string, area *map[string]inte
 	return true
 }
 
+//续费
+func (this *vipSubscribeStruct) RenewSubVip(userId, endtime string) bool {
+	prepayTime, err := time.ParseInLocation(qutil.Date_Full_Layout, endtime, time.Local)
+	if err != nil {
+		log.Println("%s格式化日期出错%s\n", userId, endtime)
+		return false
+	}
+	return util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"l_vip_endtime": prepayTime.Unix()}})
+}
+
+//升级
+func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg, start, end string, isNow bool) bool {
+	startTime, err := time.ParseInLocation(qutil.Date_Full_Layout, start, time.Local)
+	if err != nil {
+		log.Println("%s格式化日期出错%s\n", userId, start)
+		return false
+	}
+	endTime, err := time.ParseInLocation(qutil.Date_Full_Layout, end, time.Local)
+	if err != nil {
+		log.Println("%s格式化日期出错%s\n", userId, endTime)
+		return false
+	}
+	buyset := JyVipSubStruct.NewBuySet(vmsg.Area, vmsg.Industry)
+	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_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)
+			return false
+		}
+		return util.MQFW.Save("vip_upgrade",
+			bson.M{
+				"s_userid":     userId,            //试用设置地区
+				"a_buyerclass": vmsg.Industry,     //试用设置行业
+				"o_area":       vmsg.Area,         //购买内容 城市、省份、行业数量
+				"l_validtime":  startTime.Unix(),  //生效时间
+				"l_createtime": time.Now().Unix(), //入库时间
+				"o_buyset":     buyset,            //购买内容数量
+				"i_isvalid":    0,                 //是否已经生效 0-未生效
+			}) != ""
+	}
+	return false
+}
+
+//根据行业和地区 返回*SubvipBuySet
+func (this *vipSubscribeStruct) NewBuySet(area *map[string]interface{}, industry []string) *SubvipBuySet {
+	buyset := SubvipBuySet{}
+	if len(*area) > 0 {
+		pCount := 0
+		citys := map[string]interface{}{}
+		for k, v := range *area {
+			tmp := v.([]interface{})
+			if len(tmp) == 0 { //省份
+				pCount++
+			} else { //城市
+				citys[k] = len(tmp)
+			}
+		}
+		buyset.Citys = citys      //城市
+		buyset.AreaCount = pCount //地区
+	} else {
+		buyset.BuyerclassCount = -1 //全国
+	}
+	//行业数量
+	buyset.BuyerclassCount = qutil.If(len(industry) > 0, len(industry), -1).(int)
+	return &buyset
+}
+
 //查询是否有试用权限
 func (this *vipSubscribeStruct) CanTrial(userId string) bool {
 	m, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1}`)
@@ -484,6 +275,20 @@ func (this *vipSubscribeStruct) SubEditCheckArea(area *map[string]interface{}, b
 	return true
 }
 
+//保存筛选日志
+func (this *vipSubscribeStruct) SaveSelectLog(userId, openId string, msg *VipSimpleMsg) string {
+	return util.MQFW.Save("subvip_select", map[string]interface{}{
+		"o_area":       msg.Area,     //地区(对象)
+		"a_industry":   msg.Industry, //行业(数组)
+		"s_userid":     userId,
+		"s_openid":     openId,
+		"i_cyclecount": msg.Cyclecount, //时长
+		"i_cycleunit":  msg.Cycleunit,  //单位
+		"i_comeintime": time.Now().Unix(),
+	})
+
+}
+
 //计算价格
 func (this *vipSubscribeStruct) GetSubVipPrice(area *map[string]interface{}, industry []string, count, unit int) int {
 	if len(*area) == 0 { //全国
@@ -583,14 +388,45 @@ func getSetMealPrice(c, i, u int) int {
 	}
 }
 
-//支付成功后,将该订单以外的所有订单状态改为已取消状态 已取消:-2
+//支付成功后,将该订单以外的所有订单状态改为已取消状态 已取消:-2  先关闭订单再改状态
 func PayCancel(userId string) bool {
-	bl := util.Mysql.Update("dataexport_order", bson.M{
+	queryMap := map[string]interface{}{
 		"user_id":      userId,
-		"product_type": "VIP订阅",
 		"order_status": 0,
-	}, bson.M{
-		"order_status": -2,
-	})
-	return bl
+		"product_type": "VIP订阅",
+	}
+	i, order_len := 0, 0
+	order := util.Mysql.Find("dataexport_order", queryMap, "order_code,pay_way,out_trade_no,prepay_time,order_status", "create_time desc", -1, 0)
+	if order != nil {
+		order_len = len(*order)
+		//遍历未支付订单
+		for _, v := range *order {
+			flag := false
+			if qutil.Int64All(v["order_status"]) == 0 {
+				//关闭未支付订单
+				flag = pay.CloseDataExportOrder(qutil.ObjToString(v["pay_way"]), qutil.ObjToString(v["out_trade_no"]), qutil.ObjToString(v["prepay_time"]))
+
+			} else {
+				flag = true
+			}
+			if flag {
+				//更改未支付订单状态 -2  逐个取消订单
+				bl := util.Mysql.Update("dataexport_order", bson.M{
+					"user_id":      userId,
+					"product_type": "VIP订阅",
+					"order_status": 0,
+					"order_code":   v["order_code"],
+				}, bson.M{
+					"order_status": -2,
+				})
+				if bl {
+					i++
+				}
+			}
+		}
+	}
+	if i != order_len {
+		log.Printf("%s取消其他订单状态失败\n", userId)
+	}
+	return i == order_len //更改成功次数是否等于需要更改次数
 }

+ 13 - 8
src/jfw/modules/subscribepay/src/main_test.go

@@ -1,6 +1,7 @@
 package main
 
 import (
+	"entity"
 	"fmt"
 	"log"
 	"testing"
@@ -15,16 +16,20 @@ func Test_asd(t *testing.T) {
 	fmt.Println(cc)
 }
 func Test_update(t *testing.T) {
-	if !util.MQFW.UpdateById("user", "5db11594f4e498161c85fcf2", bson.M{"$set": bson.M{"o_vipjy.i_trial": 1}}) {
+	if !util.MQFW.UpdateById("user", "5cda80dd2757344674c10c71", bson.M{"$set": bson.M{"o_vipjy.i_trial": 1}}) {
 		log.Println("更新使用状态出错")
 	}
 }
-
-func Test_CanTrial(t *testing.T) {
-	f := util.CanTrial("5db11594f4e498161c85fcf2")
-	fmt.Println(f)
+func Test_cancelOrder(t *testing.T) {
+	userId := "5d9fe93a27573439d033b294"
+	entity.PayCancel(userId)
 }
 
-func Test_SetTrialed(t *testing.T) {
-	util.SetTrialed("5db11594f4e498161c85fcf2")
-}
+//func Test_CanTrial(t *testing.T) {
+//	f := util.CanTrial("5d9fe93a27573439d033b294")
+//	fmt.Println(f)
+//}
+
+//func Test_SetTrialed(t *testing.T) {
+//	util.SetTrialed("5d9fe93a27573439d033b294")
+//}

+ 5 - 4
src/jfw/modules/subscribepay/src/service/commonAction.go

@@ -3,11 +3,12 @@ package service
 import (
 	"config"
 	"entity"
-	"github.com/go-xweb/xweb"
 	"pay"
 	qutil "qfw/util"
 	"time"
 	"util"
+
+	"github.com/go-xweb/xweb"
 )
 
 //付费公用方法
@@ -15,9 +16,9 @@ type CommonAction struct {
 	*xweb.Action
 	isPaySuccess xweb.Mapper `xweb:"/isPaySuccess"`          //数据导出是否支付成功
 	paySuccess   xweb.Mapper `xweb:"/dataReport/paySuccess"` //数据报告支付完成
-	deleteOrder xweb.Mapper `xweb:"/deleteOrder"` //删除订单
+	deleteOrder  xweb.Mapper `xweb:"/deleteOrder"`           //删除订单
 
-	applyInvoice xweb.Mapper `xweb:"/applyInvoice"`          //申请发票
+	applyInvoice xweb.Mapper `xweb:"/applyInvoice"` //申请发票
 }
 
 //----------------------------申请发票------------------------------------
@@ -44,7 +45,7 @@ func (d *CommonAction) ApplyInvoice() error {
 			"applyBill_taxnum":  applyBill_taxnum,
 			"applyBill_status":  applyBill_status,
 			"applyBill_type":    1,
-		})                                                   //修改操作
+		}) //修改操作
 	}
 	//判断条件
 	if updateBl {

+ 21 - 8
src/jfw/modules/subscribepay/src/service/orderListDetails.go

@@ -6,6 +6,7 @@ import (
 	"errors"
 	"fmt"
 	"log"
+	"pay"
 	qutil "qfw/util"
 	"regexp"
 	"strconv"
@@ -203,13 +204,26 @@ func (o *OrderListDetails) DeleteOrder() error {
 			o.SetRes(res, queryM)
 		}
 		var boo = false
-		if cancel == "cancel" {
-			//取消订单
-			boo = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -2})
-		} else {
-			//删除订单
-			boo = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -1})
+		var 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 {
+			if cancel == "cancel" {
+				//取消订单
+				boo = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -2})
+			} else {
+				//删除订单
+				boo = util.Mysql.Update(tableName_order, queryMap, map[string]interface{}{"order_status": -1})
+			}
+		}
+
 		o.ServeJson(map[string]interface{}{
 			"success":     boo,
 			"res":         res,
@@ -222,7 +236,6 @@ func (o *OrderListDetails) DeleteOrder() error {
 
 //设置邮箱-发送验证码
 func (o *OrderListDetails) SetEmail() {
-	log.Println("--")
 	email := o.GetString("email")
 	userId := qutil.ObjToString(o.GetSession("userId"))
 	if userId != "" {
@@ -369,7 +382,7 @@ func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[strin
 			v["lastbuy_code"] = lastbuy_code
 		}
 		//
-		if v["pay_time"] != nil && ((v["product_type"] == "vip订阅") || (v["product_type"] == "VIP订阅")) {
+		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.Int64All((*data)["i_vip_status"])

+ 57 - 77
src/jfw/modules/subscribepay/src/service/vipRenewUpgrade.go

@@ -122,10 +122,10 @@ func (this *RenewUpgrade) GetRenewUpgradePrice() {
 func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
 	area := qutil.ObjToMap(this.GetString("area"))
 	industry := strings.Split(this.GetString("industry"), ",")
-	date := this.GetString("time")
+	date := this.GetString("time") //
 	payWay := this.GetString("payWay")
-	effect := this.GetString("effect")
-	pay_source := this.GetString("pay_source")
+	effect := this.GetString("effect")         //升级 生效日期 Now  下月一号的时间戳
+	pay_source := this.GetString("pay_source") //类型  Renew or Upgrade
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
 	endtime := this.GetString("endtime")
@@ -136,74 +136,74 @@ func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
 		if len(industry) == 1 { //去掉[""]
 			industry = []string{}
 		}
+		if !(pay_source == "Renew" || pay_source == "Upgrade") {
+			return &entity.FuncResult{false, errors.New("未知操作"), nil}
+		}
 		if !(payWay == "wx_js" || payWay == "wx_app" || payWay == "ali_app") {
 			return &entity.FuncResult{false, errors.New("未知支付"), nil}
 		}
-		var date_count int
-		var date_unit int
-		var pro_count int
-		var pro_unit int
-		var err error
-		if effect != "" {
-			if date != "" {
-				pro_count, pro_unit, err = checkReqDates(date)
-				if err != nil {
-					return &entity.FuncResult{false, err, nil}
-				}
-			} else {
-				pro_count = 0
-				pro_unit = 0
-			}
-		} else {
-			date_count, date_unit, err = checkReqDates(date)
-			if err != nil {
+
+		date_count, date_unit, err := checkReqDates(date)
+		if err != nil {
+			if pay_source == "Renew" { //续费 日期不能为空
 				return &entity.FuncResult{false, err, nil}
 			}
 		}
-		log.Println("effect", effect)
-		log.Println("pay_source", pay_source)
-		log.Println("pro_count", pro_count)
-		log.Println("pro_unit", pro_unit)
-		log.Println("effect", effect)
-		log.Println(area, industry, date, payWay)
-		mog_id := ""
-		if effect != "" {
-			//插入订单表
-			mog_id = util.MQFW.Save("subvip_select", map[string]interface{}{
-				"o_area":       area,     //地区(对象)
-				"a_industry":   industry, //行业(数组)
-				"s_userid":     userId,
-				"s_openid":     openId,
-				"i_comeintime": now.Unix(),
-			})
-		} else {
-			mog_id = util.MQFW.Save("subvip_select", map[string]interface{}{
-				"o_area":       area,     //地区(对象)
-				"a_industry":   industry, //行业(数组)
-				"s_userid":     userId,
-				"s_openid":     openId,
-				"i_cyclecount": date_count, //时长
-				"i_cycleunit":  date_unit,  //单位
-				"i_comeintime": now.Unix(),
-			})
+
+		res, ok := util.MQFW.FindById("user", userId, `{"l_vip_endtime":1,"l_vip_starttime":1}`)
+		if res == nil || len(*res) == 0 || !ok {
+			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
 		}
 
+		start := qutil.Int64All((*res)["l_vip_starttime"])
+		end := qutil.Int64All((*res)["l_vip_starttime"])
+		if start == 0 || end == 0 {
+			return &entity.FuncResult{false, errors.New("数据异常"), nil}
+		}
+		startTime := time.Unix(start, 0)
+		endTime := time.Unix(end, 0)
+		orderType := 0
+		if pay_source == "Upgrade" { //计算升级时间
+			if effect == "Now" { //立即生效
+				orderType = 3
+				startTime = time.Now()
+			} else { //下月生效
+				orderType = 4
+				startTime = time.Date(time.Now().Year(), time.Now().Month()+1, 1, 0, 0, 0, 0, time.Local)
+			}
+
+		} else { //续费时间
+			orderType = 2 //续费操作
+			startTime = endTime
+		}
+		if date_unit == 1 { ///延长时间
+			endTime = startTime.AddDate(date_count, 0, 0)
+		} else if date_unit == 2 { //月
+			endTime = startTime.AddDate(0, date_count, 0)
+		}
+		filter := entity.VipSimpleMsg{
+			area,
+			industry,
+			date_count,
+			date_unit,
+			orderType,
+		}
+		mog_id := entity.JyVipSubStruct.SaveSelectLog(userId, openId, &filter)
 		if mog_id == "" {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
 		//计算价格
-		var totalfee int
+		/*var totalfee int
 		if effect != "" {
 			totalfee = qutil.IntAll(this.GetString("price")) * 100
 		} else {
 			totalfee = entity.JyVipSubStruct.GetSubVipPrice(area, industry, date_count, date_unit)
 		}
-		log.Println("price", totalfee)
-		totalfee = 1
+		log.Println("price", totalfee)*/
+		totalfee := 1
 
 		//创建订单
 		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)
@@ -233,34 +233,10 @@ func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
 			prepayid = qutil.ObjToString((*ret)["prepayid"])
 			payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
 		}
-		var filter interface{}
-		if effect != "" {
-			filter = entity.VipSimpleMsg{
-				mog_id,
-				area,
-				industry,
-				pro_count,
-				pro_unit,
-				pay_source,
-				endtime,
-				effect,
-			}
-		} else {
-			filter = entity.VipSimpleMsg{
-				mog_id,
-				area,
-				industry,
-				date_count,
-				date_unit,
-				pay_source,
-				endtime,
-				"",
-			}
-		}
 
 		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")),
@@ -277,7 +253,11 @@ func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
 			"pay_way":        payWay,
 			"user_id":        userId,
 			"filter":         string(filterStr), //筛选
-		})
+			"vip_starttime":  qutil.FormatDate(&startTime, qutil.Date_Full_Layout),
+			"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}
 		}

+ 8 - 20
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -49,17 +49,16 @@ func (this *SubVipPayOrder) CreateOrder() {
 		if err != nil {
 			return &entity.FuncResult{false, err, nil}
 		}
+		filter := entity.VipSimpleMsg{
+			area,
+			industry,
+			date_count,
+			date_unit,
+			1,
+		}
 		log.Println(area, industry, date, payWay)
 		//插入订单表
-		mog_id := util.MQFW.Save("subvip_select", map[string]interface{}{
-			"o_area":       area,     //地区(对象)
-			"a_industry":   industry, //行业(数组)
-			"s_userid":     userId,
-			"s_openid":     openId,
-			"i_cyclecount": date_count, //时长
-			"i_cycleunit":  date_unit,  //单位
-			"i_comeintime": now.Unix(),
-		})
+		mog_id := entity.JyVipSubStruct.SaveSelectLog(userId, openId, &filter)
 		if mog_id == "" {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
@@ -68,7 +67,6 @@ func (this *SubVipPayOrder) CreateOrder() {
 		totalfee := 1
 		//创建订单
 		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)
@@ -98,16 +96,6 @@ func (this *SubVipPayOrder) CreateOrder() {
 			prepayid = qutil.ObjToString((*ret)["prepayid"])
 			payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
 		}
-		filter := entity.VipSimpleMsg{
-			mog_id,
-			area,
-			industry,
-			date_count,
-			date_unit,
-			"open",
-			"",
-			"",
-		}
 		filterStr, _ := json.Marshal(filter)
 		ordercode := pay.GetOrderCode(userId)
 		orderid := util.Mysql.Insert("dataexport_order", map[string]interface{}{

+ 7 - 7
src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go

@@ -279,12 +279,12 @@ func (this *TrialOrder) TrialPay() {
 		totalfee := 0
 		ordercode := pay.GetOrderCode(userId)
 		//存入订单表
-		filter := map[string]interface{}{
-			"_id":        mog_id,
-			"area":       area,
-			"industry":   industry,
-			"cyclecount": date_count, //时长
-			"cycleunit":  date_unit,  //单位
+		filter := entity.VipSimpleMsg{
+			area,
+			industry,
+			date_count,
+			date_unit,
+			0,
 		}
 		filterStr, _ := json.Marshal(filter)
 		endTime := now.AddDate(0, 0, 7)
@@ -310,7 +310,7 @@ func (this *TrialOrder) TrialPay() {
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据保存异常"), nil}
 		}
-		if !entity.JyVipSubStruct.StartSubVip(userId, area, industry, now, endTime, true, date_count, date_unit) { //设置开始试用
+		if !entity.JyVipSubStruct.StartSubVip(userId, filter, now, endTime, true) { //设置开始试用
 			return &entity.FuncResult{false, errors.New("开通试用异常"), nil}
 		}
 		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode}}

+ 1 - 0
src/web/staticres/vipsubscribe/css/vip_update.css

@@ -369,6 +369,7 @@
   margin-left: 0;
   margin-top: -0.47rem;
   transform: translateX(-50%) translateY(-50%);
+  z-index: 99999;
 }
 
 .custom-toast .weui-icon_toast {

+ 2 - 3
src/web/templates/weixin/dataExport/dataExport_toMyOrder.html

@@ -647,8 +647,7 @@
 								nodataHtml+='<div style="color: #888;font-size: .32rem;text-align:center;">暂无数据</div></div>'
 								$(".card_lists").append(nodataHtml);
 							}
-						
-							setTimeout(function(){
+							//setTimeout(function(){
 								//return 的是 暂无数据的情况noDataHtml 
 								if(!result){
 									$(".dropload-down").hide()
@@ -688,7 +687,7 @@
 								    });
 									noMoreData(wxflag);
 								}
-							},500)
+							//},500)
 					})
 				}
 				

+ 8 - 2
src/web/templates/weixin/vipsubscribe/renew_notice.html

@@ -46,8 +46,8 @@
                 </div>
             </div>
 			<div class="renew_box">
-                <button class="renew_service" onclick="window.location.href='/front/vipsubscribe/renewPayPage'">续费</button>
-                <button class="free_service">使用免费订阅</button>
+                <button class="renew_service" onclick="window.location.href='/weixin/pay/renewPayPage'">续费</button>
+                <button class="free_service" onclick="window.location.href='/swordfish/historypush'">使用免费订阅</button>
             </div>
 		</div>
 		<script src="/vipsubscribe/js/jquery-2.1.4.js"></script>
@@ -82,6 +82,9 @@
 			    			}
 			    		}
 			    	}
+			    	if(checkObj(area)){
+						areaHtml = "全国";
+					}
 			    	areaHtml = areaArr.toString().replace(/,/g, "、");
 			    	$('.area-list').text(areaHtml);
 			    }
@@ -90,6 +93,9 @@
 			    		var industry = buyerclass[i];
 			    		buyerclassArr.push(industry);
 			    		buyerclassHtml = buyerclassArr.toString().replace(/,/g, " ");
+			    	}
+			    	if(checkObj(buyerclass)){
+			    		buyerclassHtml = "全行业";
 			    	}
 					$('.industry-list').text(buyerclassHtml);
 			    }

+ 23 - 12
src/web/templates/weixin/vipsubscribe/renew_pay.html

@@ -261,15 +261,7 @@
 		}
     </script>
     <script>
-    	// 当续费时间 + 当前已经买的时间超过36个月,给出提醒
-//      var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:16个月`
-//      weui.toast(overtimeWarning, {
-//          duration: 3000,
-//          className: 'custom-toast',
-//          callback: function() {
-//              console.log('close') 
-//          }
-//      })
+    	
         // 隐藏dialog选择框
         function hideDialog() {
             $('#pay_way').hide(200);
@@ -576,9 +568,9 @@
 		}else{
 			if(endMonth === nowMonth){
 				if(endDay <= nowDay){
-					nowUpgrade = (endYear - nowYear) * 12;
+					nowUpgrade = ((endYear - nowYear) * 12);
 				}else{
-					nowUpgrade = (endYear - nowYear) * 12 +1;
+					nowUpgrade = ((endYear - nowYear) * 12 +1);
 				}
 			}else if(endMonth > nowMonth){
 				if(endDay <= nowDay){
@@ -627,6 +619,26 @@
 	    }
 	    //
 	    $(".save_renew").on("click", function(){
+	    	console.log(nowUpgrade)
+	    	let times = $('.choose_item.select_cycle .info').attr('placeholder');
+	        if (times.match("月") !== null){
+	        	times = Number(times.replace("个月",""));
+	        }else if (times.match("年") !== null){
+	        	times = 12 * Number(times.replace("年",""));
+	        }
+	    	// 当续费时间 + 当前已经买的时间超过36个月,给出提醒
+	    	if(times > 36-nowUpgrade){
+	    		var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:${nowUpgrade}个月`
+		        weui.toast(overtimeWarning, {
+		            duration: 3000,
+		            className: 'custom-toast',
+		            callback: function() {
+		   
+		            }
+		        })
+		        return
+	    	}
+	        
 	    	var param = {
 	    		"area": JSON.stringify(area),
 	    		"industry": buyerclass.toString(),
@@ -641,7 +653,6 @@
                     clearSessionStorage();
                     onBridgeReady(JSON.parse(r.data.res),r.data.code);
                 }
-                $("#payHandle").removeAttr("disabled")  
             })
 	    });
 	    

+ 47 - 13
src/web/templates/weixin/vipsubscribe/vip_upgrade.html

@@ -14,7 +14,7 @@
     <link rel="stylesheet" type="text/css" href="/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}" />
     <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/vip_update.css?v={{Msg "seo" "version"}}3">
+    <link rel="stylesheet" href="/vipsubscribe/css/vip_update.css?v={{Msg "seo" "version"}}4">
 </head>
 <style type="text/css">
 	body,html {
@@ -242,7 +242,7 @@
                                 <i class="weui-icon-checked"></i>
                             </div>
                         </label>
-                        <label class="weui-cell weui-check__label next_label" for="nextMonth">
+                        <label class="weui-cell weui-check__label next_label effect_next" for="nextMonth">
                             <div class="weui-cell__bd read">
                                 <p class="effective_name notnow"></p>
                                 <p class="effective_time notnownow">2019.09.01 - 2020.06.06</p>
@@ -357,15 +357,7 @@
 		}
     </script>
     <script>
-        // 当续费时间 + 当前已经买的时间超过36个月,给出提醒
-//      var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:16个月`
-//      weui.toast(overtimeWarning, {
-//          duration: 3000,
-//          className: 'custom-toast',
-//          callback: function() {
-//              console.log('close') 
-//          }
-//      })
+        
 		var monthPrice = "";
         var yearPrice = "";
 
@@ -392,6 +384,23 @@
          // 选择生效日期
         $('.choose_effect_date > a').click(function () {
             $('#effective_date').show(200);
+            var nowDates = new Date().toLocaleDateString();
+			nowDates = nowDates.split("/");
+			var nowMonths = Number(nowDates[1]);
+			var nowYears = Number(nowDates[0]);
+			var as = nowMonths +1
+			if(as > 12){
+				as = nowMonths-12;
+				nowYear = nowYears +1;
+			}
+			var bs = nowYears+"/"+as+"/1";
+			var effects = new Date(bs).getTime() /1000;
+			var a = nowYears+"."+as+".01";
+			$(".notnownow").text(a + " - " + endTime)
+			if(ends < effects){
+				$(".effect_next").hide();
+//				$(".box").css("height", "2.7rem");
+			}
         })
         //
 		var effectiveName = new Date().getMonth()+2;
@@ -401,6 +410,7 @@
 		var effectiveNames = effectiveName+"月1日生效"
 		$(".effective_name.notnow").text(effectiveNames);
 		$('#nextMonth').val(effectiveNames);
+		
         // 对生效日期方式选择的input绑定点击事件
         $('#effective_date input:radio[name="date"]').click(function () {
             var checkValue = $('input:radio[name="date"]:checked').val();
@@ -489,6 +499,18 @@
                 currentNum = currentNum <= data.numboxMin ? data.numboxMin : currentNum - data
                     .numboxStep;
             }
+            // 当续费时间 + 当前已经买的时间超过36个月,给出提醒
+            if((currentNum+nowRenew)>36){
+            	var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:${nowRenew}个月`
+		        weui.toast(overtimeWarning, {
+		            duration: 3000,
+		            className: 'custom-toast',
+		            callback: function() {
+		            }
+		        })
+		        return
+            }
+	        
             $number.text(currentNum)
             if(currentNum >= 10){
             	currentNum = 10;
@@ -520,6 +542,17 @@
         $('#number_box_year').on('click', 'span', function (e) {
             console.log(e.target.dataset.id)
             let id = e.target.dataset.id;
+            // 当续费时间 + 当前已经买的时间超过36个月,给出提醒
+            if((id*12+nowRenew)>36){
+            	var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:${nowRenew}个月`
+		        weui.toast(overtimeWarning, {
+		            duration: 3000,
+		            className: 'custom-toast',
+		            callback: function() {
+		            }
+		        })
+		        return
+            }
             $('.profit_tips').hide()
             $('#number_box_month').removeClass('active');
             $(this).addClass('active').siblings().removeClass('active')
@@ -795,8 +828,7 @@
 			    }
 			    //
 			    var nowDate = data.now.replace(/-/g, ".");
-			    var a = nowDate+ " - " +endTime
-			    console.log(a)
+			    var a = nowDate+ " - " +endTime;
 			    $(".nownow").text(nowDate+ " - " +endTime)
 			    
 			}
@@ -808,6 +840,7 @@
         var oldMonthPrice = 0;
         var areasArr = {};
 	    var industrysArr = [];
+	    var nowRenew = "";
         function FinallyPrice(){
 	    	var nowUpgrade = "";
 			//
@@ -934,6 +967,7 @@
 					}
 				}
 			}
+			nowRenew = nowUpgrade;
 			console.log("monthold",nowUpgrade)
 			//
 			if(effect === "notnow"){