zhangxinlei1996 5 жил өмнө
parent
commit
1efc115228

+ 182 - 375
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -18,405 +18,114 @@ type vipSubscribeStruct struct{}
 
 
 var JyVipSubStruct vipSubscribeStruct
 var JyVipSubStruct vipSubscribeStruct
 
 
+//订单简单信息
 type VipSimpleMsg struct {
 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()
 	now := time.Now()
 	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
 	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
 		"out_trade_no": param.OutTradeno,
 		"out_trade_no": param.OutTradeno,
 		"order_money":  param.TotalFee,
 		"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)
 	pay_time := qutil.FormatDate(&now, qutil.Date_Full_Layout)
 	if orderdata != nil {
 	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 !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 { //试用
 	} else { //试用
 		buyset.AreaCount = -1       //城市数量
 		buyset.AreaCount = -1       //城市数量
 		buyset.BuyerclassCount = -1 //行业数量
 		buyset.BuyerclassCount = -1 //行业数量
 	}
 	}
-
 	//计算服务时间
 	//计算服务时间
 	if !util.MQFW.UpdateById("user", userId,
 	if !util.MQFW.UpdateById("user", userId,
 		bson.M{"$set": bson.M{
 		bson.M{"$set": bson.M{
 			"o_vipjy.i_trial":      -1,                      //已激活试用
 			"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.o_buyset":     buyset,                  //购买内容 城市、省份、行业数量
-			"o_vipjy.i_cycleunit":  unit,                    //购买单位
-			"o_vipjy.i_cyclecount": count,                   //购买时长
 			"l_vip_starttime":      startTime.Unix(),        //开始时间
 			"l_vip_starttime":      startTime.Unix(),        //开始时间
 			"l_vip_endtime":        endTime.Unix(),          //结束时间
 			"l_vip_endtime":        endTime.Unix(),          //结束时间
 			"i_vip_status":         qutil.If(isTrial, 1, 2), //1试用 2正式
 			"i_vip_status":         qutil.If(isTrial, 1, 2), //1试用 2正式
@@ -428,6 +137,87 @@ func (this *vipSubscribeStruct) StartSubVip(userId string, area *map[string]inte
 	return true
 	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 {
 func (this *vipSubscribeStruct) CanTrial(userId string) bool {
 	m, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1}`)
 	m, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1}`)
@@ -485,6 +275,20 @@ func (this *vipSubscribeStruct) SubEditCheckArea(area *map[string]interface{}, b
 	return true
 	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 {
 func (this *vipSubscribeStruct) GetSubVipPrice(area *map[string]interface{}, industry []string, count, unit int) int {
 	if len(*area) == 0 { //全国
 	if len(*area) == 0 { //全国
@@ -606,7 +410,7 @@ func PayCancel(userId string) bool {
 				flag = true
 				flag = true
 			}
 			}
 			if flag {
 			if flag {
-				//更改未支付订单状态 -2
+				//更改未支付订单状态 -2  逐个取消订单
 				bl := util.Mysql.Update("dataexport_order", bson.M{
 				bl := util.Mysql.Update("dataexport_order", bson.M{
 					"user_id":      userId,
 					"user_id":      userId,
 					"product_type": "VIP订阅",
 					"product_type": "VIP订阅",
@@ -621,5 +425,8 @@ func PayCancel(userId string) bool {
 			}
 			}
 		}
 		}
 	}
 	}
+	if i != order_len {
+		log.Printf("%s取消其他订单状态失败\n", userId)
+	}
 	return i == order_len //更改成功次数是否等于需要更改次数
 	return i == order_len //更改成功次数是否等于需要更改次数
 }
 }

+ 1 - 1
src/jfw/modules/subscribepay/src/service/orderListDetails.go

@@ -382,7 +382,7 @@ func (o *OrderListDetails) SetRes(res []map[string]interface{}, queryM map[strin
 			v["lastbuy_code"] = lastbuy_code
 			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")))})
 			data, err := util.MQFW.FindOne("user", bson.M{"_id": bson.ObjectIdHex(qutil.ObjToString(o.GetSession("userId")))})
 			if len(*data) > 0 && err {
 			if len(*data) > 0 && err {
 				v["i_vip_status"] = qutil.Int64All((*data)["i_vip_status"])
 				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() {
 func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
 	area := qutil.ObjToMap(this.GetString("area"))
 	area := qutil.ObjToMap(this.GetString("area"))
 	industry := strings.Split(this.GetString("industry"), ",")
 	industry := strings.Split(this.GetString("industry"), ",")
-	date := this.GetString("time")
+	date := this.GetString("time") //
 	payWay := this.GetString("payWay")
 	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"))
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
 	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
 	endtime := this.GetString("endtime")
 	endtime := this.GetString("endtime")
@@ -136,74 +136,74 @@ func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
 		if len(industry) == 1 { //去掉[""]
 		if len(industry) == 1 { //去掉[""]
 			industry = []string{}
 			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") {
 		if !(payWay == "wx_js" || payWay == "wx_app" || payWay == "ali_app") {
 			return &entity.FuncResult{false, errors.New("未知支付"), nil}
 			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}
 				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 == "" {
 		if mog_id == "" {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
 		}
 		//计算价格
 		//计算价格
-		var totalfee int
+		/*var totalfee int
 		if effect != "" {
 		if effect != "" {
 			totalfee = qutil.IntAll(this.GetString("price")) * 100
 			totalfee = qutil.IntAll(this.GetString("price")) * 100
 		} else {
 		} else {
 			totalfee = entity.JyVipSubStruct.GetSubVipPrice(area, industry, date_count, date_unit)
 			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 := "", "", ""
 		tradeno, prepayid, payStr := "", "", ""
-
 		if payWay == "wx_js" { //微信js支付
 		if payWay == "wx_js" { //微信js支付
 			var ret *map[string]string
 			var ret *map[string]string
 			tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_JSAPI, this.IP(), openId, "", totalfee)
 			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"])
 			prepayid = qutil.ObjToString((*ret)["prepayid"])
 			payStr = pay.WxStruct.GetAppWxPayStr(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)
 		filterStr, _ := json.Marshal(filter)
 		ordercode := pay.GetOrderCode(userId)
 		ordercode := pay.GetOrderCode(userId)
-		orderid := util.Mysql.Insert("dataexport_order", map[string]interface{}{
+		insertMap := map[string]interface{}{
 			"order_money":    totalfee,
 			"order_money":    totalfee,
 			"order_status":   0,
 			"order_status":   0,
 			"user_nickname":  qutil.ObjToString(this.GetSession("s_nickname")),
 			"user_nickname":  qutil.ObjToString(this.GetSession("s_nickname")),
@@ -277,7 +253,11 @@ func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
 			"pay_way":        payWay,
 			"pay_way":        payWay,
 			"user_id":        userId,
 			"user_id":        userId,
 			"filter":         string(filterStr), //筛选
 			"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 {
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
 			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 {
 		if err != nil {
 			return &entity.FuncResult{false, err, nil}
 			return &entity.FuncResult{false, err, nil}
 		}
 		}
+		filter := entity.VipSimpleMsg{
+			area,
+			industry,
+			date_count,
+			date_unit,
+			1,
+		}
 		log.Println(area, industry, date, payWay)
 		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 == "" {
 		if mog_id == "" {
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 			return &entity.FuncResult{false, errors.New("创建订单出错"), nil}
 		}
 		}
@@ -68,7 +67,6 @@ func (this *SubVipPayOrder) CreateOrder() {
 		totalfee := 1
 		totalfee := 1
 		//创建订单
 		//创建订单
 		tradeno, prepayid, payStr := "", "", ""
 		tradeno, prepayid, payStr := "", "", ""
-
 		if payWay == "wx_js" { //微信js支付
 		if payWay == "wx_js" { //微信js支付
 			var ret *map[string]string
 			var ret *map[string]string
 			tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_JSAPI, this.IP(), openId, "", totalfee)
 			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"])
 			prepayid = qutil.ObjToString((*ret)["prepayid"])
 			payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
 			payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
 		}
 		}
-		filter := entity.VipSimpleMsg{
-			mog_id,
-			area,
-			industry,
-			date_count,
-			date_unit,
-			"open",
-			"",
-			"",
-		}
 		filterStr, _ := json.Marshal(filter)
 		filterStr, _ := json.Marshal(filter)
 		ordercode := pay.GetOrderCode(userId)
 		ordercode := pay.GetOrderCode(userId)
 		orderid := util.Mysql.Insert("dataexport_order", map[string]interface{}{
 		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
 		totalfee := 0
 		ordercode := pay.GetOrderCode(userId)
 		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)
 		filterStr, _ := json.Marshal(filter)
 		endTime := now.AddDate(0, 0, 7)
 		endTime := now.AddDate(0, 0, 7)
@@ -310,7 +310,7 @@ func (this *TrialOrder) TrialPay() {
 		if orderid == -1 {
 		if orderid == -1 {
 			return &entity.FuncResult{false, errors.New("数据保存异常"), nil}
 			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{false, errors.New("开通试用异常"), nil}
 		}
 		}
 		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode}}
 		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-left: 0;
   margin-top: -0.47rem;
   margin-top: -0.47rem;
   transform: translateX(-50%) translateY(-50%);
   transform: translateX(-50%) translateY(-50%);
+  z-index: 99999;
 }
 }
 
 
 .custom-toast .weui-icon_toast {
 .custom-toast .weui-icon_toast {

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

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

+ 32 - 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/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" 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/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>
 </head>
 <style type="text/css">
 <style type="text/css">
 	body,html {
 	body,html {
@@ -357,15 +357,7 @@
 		}
 		}
     </script>
     </script>
     <script>
     <script>
-        // 当续费时间 + 当前已经买的时间超过36个月,给出提醒
-//      var overtimeWarning = `最长订阅周期不可超过3年<br />当前订阅周期:16个月`
-//      weui.toast(overtimeWarning, {
-//          duration: 3000,
-//          className: 'custom-toast',
-//          callback: function() {
-//              console.log('close') 
-//          }
-//      })
+        
 		var monthPrice = "";
 		var monthPrice = "";
         var yearPrice = "";
         var yearPrice = "";
 
 
@@ -403,8 +395,11 @@
 			}
 			}
 			var bs = nowYears+"/"+as+"/1";
 			var bs = nowYears+"/"+as+"/1";
 			var effects = new Date(bs).getTime() /1000;
 			var effects = new Date(bs).getTime() /1000;
+			var a = nowYears+"."+as+".01";
+			$(".notnownow").text(a + " - " + endTime)
 			if(ends < effects){
 			if(ends < effects){
-				$(".effect_next").attr("disabled", false);
+				$(".effect_next").hide();
+//				$(".box").css("height", "2.7rem");
 			}
 			}
         })
         })
         //
         //
@@ -504,6 +499,18 @@
                 currentNum = currentNum <= data.numboxMin ? data.numboxMin : currentNum - data
                 currentNum = currentNum <= data.numboxMin ? data.numboxMin : currentNum - data
                     .numboxStep;
                     .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)
             $number.text(currentNum)
             if(currentNum >= 10){
             if(currentNum >= 10){
             	currentNum = 10;
             	currentNum = 10;
@@ -535,6 +542,17 @@
         $('#number_box_year').on('click', 'span', function (e) {
         $('#number_box_year').on('click', 'span', function (e) {
             console.log(e.target.dataset.id)
             console.log(e.target.dataset.id)
             let id = 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()
             $('.profit_tips').hide()
             $('#number_box_month').removeClass('active');
             $('#number_box_month').removeClass('active');
             $(this).addClass('active').siblings().removeClass('active')
             $(this).addClass('active').siblings().removeClass('active')
@@ -810,8 +828,7 @@
 			    }
 			    }
 			    //
 			    //
 			    var nowDate = data.now.replace(/-/g, ".");
 			    var nowDate = data.now.replace(/-/g, ".");
-			    var a = nowDate+ " - " +endTime
-			    console.log(a)
+			    var a = nowDate+ " - " +endTime;
 			    $(".nownow").text(nowDate+ " - " +endTime)
 			    $(".nownow").text(nowDate+ " - " +endTime)
 			    
 			    
 			}
 			}
@@ -823,6 +840,7 @@
         var oldMonthPrice = 0;
         var oldMonthPrice = 0;
         var areasArr = {};
         var areasArr = {};
 	    var industrysArr = [];
 	    var industrysArr = [];
+	    var nowRenew = "";
         function FinallyPrice(){
         function FinallyPrice(){
 	    	var nowUpgrade = "";
 	    	var nowUpgrade = "";
 			//
 			//
@@ -949,6 +967,7 @@
 					}
 					}
 				}
 				}
 			}
 			}
+			nowRenew = nowUpgrade;
 			console.log("monthold",nowUpgrade)
 			console.log("monthold",nowUpgrade)
 			//
 			//
 			if(effect === "notnow"){
 			if(effect === "notnow"){