wangkaiyue 5 years ago
parent
commit
6b3993e9b4

+ 1 - 3
src/jfw/front/vipsubscribe.go

@@ -175,10 +175,8 @@ func (s *Subscribepay) ToPurchasePage(flag string) {
 		s.T["orderType"] = -1
 	} else { //付费
 		s.T["signature"] = wx.SignJSSDK(s.Site() + s.Url()) //微信支付准备参数
-		if flag == "willExpire" {
+		if flag == "renew" {
 			s.T["orderType"] = 5
-			s.Render("/weixin/vipsubscribe/vip_purchase_willExpire.html")
-			return
 		} else {
 			s.T["orderType"] = 1
 		}

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

@@ -23,14 +23,14 @@ func init() {
 	xweb.RootApp().AppConfig.StaticDir = "web/staticres"
 	//
 	xweb.AddRouter("/subscribepay", &service.AfterPay{})
-	xweb.AddRouter("/subscribepay", &service.TrialOrder{})       //试用&订单
-	xweb.AddRouter("/subscribepay", &service.SubVipPayOrder{})   //付费&订单
-	xweb.AddRouter("/subscribepay", &service.EditSub{})          //购买内容修改
+	xweb.AddRouter("/subscribepay", &service.TrialOrder{})     //试用&订单
+	xweb.AddRouter("/subscribepay", &service.SubVipPayOrder{}) //付费&订单
+	//xweb.AddRouter("/subscribepay", &service.EditSub{})          //购买内容修改
 	xweb.AddRouter("/subscribepay", &service.OrderListDetails{}) //订单详情&列表
-	xweb.AddRouter("/subscribepay", &service.RenewUpgrade{})     //续费&升级
+	xweb.AddRouter("/subscribepay", &service.SubscribeChange{})  //续费&升级&订阅修改
 
 	//p1
-	xweb.AddRouter("/subscribepay", &service.IndexSearch{})     //续费&升级
+	xweb.AddRouter("/subscribepay", &service.IndexSearch{}) //续费&升级
 
 	//数据导出
 	xweb.AddRouter("/jypay", &service.DataExportPayMobile{})

+ 3 - 3
src/jfw/modules/subscribepay/src/entity/dataexport.go

@@ -410,9 +410,9 @@ func SendMailToBJFinance(order *map[string]interface{}, pay_time, transaction_id
 					vip_ind := vf.Industry //行业
 					nbs := JyVipSubStruct.NewBuySet(&vip_area, vip_ind)
 					if nbs != nil {
-						if nbs.Citys != nil {
-							for _, v := range nbs.Citys {
-								city_count += v.(int)
+						if nbs.NewCitys != nil {
+							for _, v := range nbs.NewCitys {
+								city_count += v
 							}
 						}
 						//订阅区域

+ 143 - 115
src/jfw/modules/subscribepay/src/entity/subscribeVip.go

@@ -6,7 +6,6 @@ import (
 	"errors"
 	"log"
 	"pay"
-	"sort"
 	"time"
 	"util"
 
@@ -54,22 +53,24 @@ type subVipPrice struct {
 
 //订单简单信息
 type VipSimpleMsg struct {
-	//Id         string                  `json:"_id"`        //mgo id
-	Area               *map[string]interface{} `json:"area"`               //地区
-	Industry           []string                `json:"industry"`           //行业
-	Addareacount       *map[string]interface{} `json:"addareacount"`       //新增购买区域数量
-	Addbuyerclasscount int                     `json:"addbuyerclasscount"` //新增行业数量
-	Buyset             *map[string]interface{} `json:"buyset"`             //原始信息
-	Cyclecount         int                     `json:"cyclecount"`         //日期数量
-	Cycleunit          int                     `json:"cycleunit"`          //日期单位
-	OrderType          int                     `json:"ordertype"`          //类型 1:订单 2:续费 3:立即升级 4:下月升级 5:即将到期(升降级)6:升级订单未生效再次升级
+	Area             *map[string]interface{}  `json:"area"`             //选择地区
+	Industry         []string                 `json:"industry"`         //选择行业
+	Cyclecount       int                      `json:"cyclecount"`       //日期数量(订单详情展示使用)
+	Cycleunit        int                      `json:"cycleunit"`        //日期单位(订单详情展示使用)
+	OldBuyset        *SubvipBuySet            `json:"buyset"`           //旧购买详情
+	NewBuyset        *SubvipBuySet            `json:"newBuyset"`        //新购买详情
+	UpgradeSubtotail []map[string]interface{} `json:"upgradeSubtotail"` //升级清单(订单详情计价清单展示使用)
+	OrderType        int                      `json:"ordertype"`        //1,3,5   类型 1:订单 2:续费 3:立即升级 4:下月升级 5:即将到期(可升降级续费)6:升级订单未生效再次升级
+	//Addareacount       []int                    `json:"addareacount"`       //购买区域数量(订单详情展示使用)
+	//Addbuyerclasscount int                      `json:"addbuyerclasscount"` //购买行业数量(订单详情展示使用)
 }
 
 //购买内容
 type SubvipBuySet struct {
-	AreaCount       int                    `json:"areaCount"`       //-1 全国  >0 省份数量
-	Citys           map[string]interface{} `json:"citys"`           //城市数量
-	BuyerclassCount int                    `json:"buyerclassCount"` //行业数
+	AreaCount       int   `json:"areacount"`       //-1 全国  >0 省份数量
+	NewCitys        []int `json:"newcitys"`        //城市数量(新)
+	BuyerclassCount int   `json:"buyerclasscount"` //行业数
+	//Citys           map[string]interface{} `json:"citys"`           //城市数量(旧)
 }
 
 //支付完成回调
@@ -128,13 +129,14 @@ func (this *vipSubscribeStruct) PayCallBack(param *CallBackParam) bool {
 	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, "no")
-	} else if vmsg.OrderType == 5 {
-		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), false, "exprie")
+		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), true)
+	} else if vmsg.OrderType == 5 { //续费
+		flag = JyVipSubStruct.UpgradeSubVip(userid, vmsg, qutil.ObjToString((*orderdata)["vip_starttime"]), qutil.ObjToString((*orderdata)["vip_endtime"]), false)
 	}
+	//else if vmsg.OrderType == 2 { //续费
+	//	flag = JyVipSubStruct.RenewSubVip(userid, qutil.ObjToString((*orderdata)["vip_endtime"]))
+	//}
 	//支付成功后
 	if flag {
 		//支付提醒
@@ -165,13 +167,12 @@ func (this *vipSubscribeStruct) GetUserLastOrderDetaul(userid string) (VipSimple
 
 //设置开始使用vip订阅
 func (this *vipSubscribeStruct) StartSubVip(userId string, vmsg VipSimpleMsg, startTime, endTime time.Time, isTrial bool) bool {
-	buyset := JyVipSubStruct.NewBuySet(vmsg.Area, vmsg.Industry)
 	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.o_buyset":     buyset,                  //购买内容 城市、省份、行业数量
+			"o_vipjy.o_buyset":     vmsg.NewBuyset,          //购买内容 城市、省份、行业数量
 			"l_vip_starttime":      startTime.Unix(),        //开始时间
 			"l_vip_endtime":        endTime.Unix(),          //结束时间
 			"i_vip_status":         qutil.If(isTrial, 1, 2), //1试用 2正式
@@ -194,40 +195,40 @@ func (this *vipSubscribeStruct) RenewSubVip(userId, endtime string) bool {
 }
 
 //升级
-func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg, start string, end string, isNow bool, isExprie string) 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, _ := time.ParseInLocation(qutil.Date_Full_Layout, end, time.Local)
-	startTime, err := time.ParseInLocation(qutil.Date_Full_Layout, start, time.Local)
+func (this *vipSubscribeStruct) UpgradeSubVip(userId string, vmsg VipSimpleMsg, start string, end string, isNow bool) bool {
+	endTime, err := time.ParseInLocation(qutil.Date_Full_Layout, end, time.Local)
 	if err != nil {
-		log.Println("%s格式化日期出错%s\n", userId, endTime)
+		log.Printf("%s格式化日期出错%s\n", userId, end)
 		return false
 	}
-	if isNow {
-		//		buyset := JyVipSubStruct.NewBuySet(vmsg.Area, vmsg.Industry)
-		buyset := SubvipBuySet{}
-		addBuyset := vmsg.Buyset
-		buyset.AreaCount = qutil.IntAll((*addBuyset)["areacount"])
-		buyset.BuyerclassCount = qutil.IntAll((*addBuyset)["buyerclasscount"])
-		cityArr := qutil.ObjToMap((*addBuyset)["citys"])
-		citys := map[string]interface{}{}
-		for cityMap, cityCount := range *cityArr {
-			citys[cityMap] = qutil.IntAll(cityCount)
+	if isNow { //升级
+
+		//失效未执行续费
+		if !util.MQFW.Update("vip_upgrade",
+			&map[string]interface{}{"s_userid": userId, "i_isvalid": 0},
+			&map[string]interface{}{
+				"$set": map[string]interface{}{
+					"i_isvalid": 1,
+				},
+			}, false, true) {
+			log.Printf("%s vip_upgrade 更新失败\n", userId)
+			return false
 		}
-		buyset.Citys = citys
+
 		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.o_buyset":     buyset,
+				"o_vipjy.o_buyset":     vmsg.NewBuyset,
 				"l_vip_endtime":        endTime.Unix(),
 				"i_vip_expire_tip":     0,
 			}})
-
-	} else {
+	} else { //续费
+		startTime, err := time.ParseInLocation(qutil.Date_Full_Layout, start, time.Local)
+		if err != nil {
+			log.Printf("%s格式化日期出错%s\n", userId, start)
+			return false
+		}
 		if !util.MQFW.UpdateById("user", userId,
 			bson.M{"$set": bson.M{
 				"l_vip_endtime":    endTime.Unix(),
@@ -257,22 +258,30 @@ func (this *vipSubscribeStruct) NewBuySet(area *map[string]interface{}, industry
 	buyset := SubvipBuySet{}
 	if len(*area) > 0 {
 		pCount := 0
-		citys := map[string]interface{}{}
-		for k, v := range *area {
+		citys := []int{}
+		for _, v := range *area {
 			tmp := v.([]interface{})
-			if len(tmp) == 0 { //省份
+			if len(tmp) == 0 || len(tmp) > SubVipPrice.CityMaxCount { //省份
 				pCount++
 			} else { //城市
-				citys[k] = len(tmp)
+				citys = append(citys, len(tmp))
 			}
 		}
-		buyset.Citys = citys      //城市
+		//省份数量自动转换全国
+		if pCount > SubVipPrice.ProvinceMaxCount {
+			pCount = -1
+			citys = []int{}
+		}
+		buyset.NewCitys = citys   //城市
 		buyset.AreaCount = pCount //地区
 	} else {
 		buyset.AreaCount = -1 //全国
 	}
-	//行业数量
-	buyset.BuyerclassCount = qutil.If(len(industry) > 0, len(industry), -1).(int)
+	//行业数量自动转换全行业
+	buyset.BuyerclassCount = len(industry)
+	if len(industry) > SubVipPrice.BuyerClassMaxCount || len(industry) == 0 {
+		buyset.BuyerclassCount = -1
+	}
 	return &buyset
 }
 
@@ -293,87 +302,106 @@ func (this *vipSubscribeStruct) CanTrial(userId string) bool {
 	return true
 }
 
+//订阅修改
+func (this *vipSubscribeStruct) SubChange(userId string, oldVip, areaNew *map[string]interface{}, industryNew []string) bool {
+	updateOk := util.MQFW.UpdateById("user", userId,
+		bson.M{"$set": bson.M{
+			"o_vipjy.o_area":       areaNew,     //设置地区
+			"o_vipjy.a_buyerclass": industryNew, //设置行业
+		}})
+	if !updateOk {
+		return false
+	} else {
+		//保存修改日志
+		go func() {
+			util.MQFW.Save("subvip_edit_log", map[string]interface{}{
+				"s_userid":         userId,
+				"o_area_old":       (*oldVip)["o_area"],
+				"a_buyerclass_old": (*oldVip)["a_buyerclass"],
+				"o_area":           areaNew,
+				"a_buyerclass":     industryNew,
+				"l_changeTime":     time.Now().Unix(),
+			})
+		}()
+	}
+	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}`)
+	res, ok := util.MQFW.FindById("user", userId, `{"l_vip_endtime":1,"i_vip_status":1,"o_vipjy":1}`)
 	if !ok || len(*res) == 0 {
 		return false, nil
 	}
+	vipStatus := qutil.IntAll((*res)["i_vip_status"])
 	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
+	case 5: //续费 用户需要处于vip状态
+		return vipStatus == 2, res
 	}
 	return false, nil
 }
 
 //获取省份,城市,行业购买内容
 //[省份,城市,行业]
-func (this *vipSubscribeStruct) GetBuySet(userId string) (*SubvipBuySet, bool, error) {
-	mData, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1}`)
+func (this *vipSubscribeStruct) GetVipDetail(userId string) (*map[string]interface{}, *SubvipBuySet, bool) {
+	mData, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1,"l_vip_endtime":1}`)
 	if !ok || len(*mData) == 0 || mData == nil {
-		return nil, false, errors.New("查询出错")
+		return nil, nil, false
 	}
 	//是否处于vip状态
 	vipStatus := qutil.IntAll((*mData)["i_vip_status"])
 	tmp := qutil.ObjToMap((*qutil.ObjToMap((*mData)["o_vipjy"]))["o_buyset"])
-	return &SubvipBuySet{
+
+	//转换
+	areacount := qutil.IntAll((*tmp)["areacount"])
+	buyerclasscount := qutil.IntAll((*tmp)["buyerclasscount"])
+	newCity, ok := (*tmp)["newcitys"].([]interface{})
+	if !ok && (*tmp)["citys"] != nil {
+		return mData, subvipBuySetFulsh(userId, areacount, buyerclasscount, qutil.ObjToMap((*tmp)["citys"])), vipStatus == 1 || vipStatus == 2
+	}
+	return mData, &SubvipBuySet{
 		qutil.IntAll((*tmp)["areacount"]),
-		(*qutil.ObjToMap((*tmp)["citys"])),
+		util.ConfirmIntArr(newCity),
 		qutil.IntAll((*tmp)["buyerclasscount"]),
-	}, vipStatus == 1 || vipStatus == 2, nil
+	}, vipStatus == 1 || vipStatus == 2
 }
 
-//订阅修改校验
-func (this *vipSubscribeStruct) SubEditCheckArea(area *map[string]interface{}, buySet *SubvipBuySet) bool {
-	if buySet.AreaCount == -1 { //购买全国
-		return true
-	}
-	if len(*area) == 0 { //选择全国
-		return false
-	}
-	//获取购买城市数量数组
-	buyedCityNumArr := []int{}
-	for _, cityNum := range buySet.Citys {
-		if qutil.IntAll(cityNum) > 0 {
-			buyedCityNumArr = append(buyedCityNumArr, qutil.IntAll(cityNum))
-		}
-	}
-	//获取修改城市数量数组
-	pCount := 0 //选择全省的数量
-	selectedCityNumArr := []int{}
-	for _, v := range *area {
-		citys := qutil.ObjArrToStringArr(v.([]interface{}))
-		if len(citys) > 0 {
-			selectedCityNumArr = append(selectedCityNumArr, len(citys))
+//旧SubvipBuySet转新SubvipBuySet
+func subvipBuySetFulsh(userId string, areaCount, buyerclasscount int, oldCitys *map[string]interface{}) *SubvipBuySet {
+	logAreaCount := areaCount
+	logBuyerclasscount := buyerclasscount
+	newCitys := []int{}
+	for _, v := range *oldCitys {
+		thisNum := qutil.IntAll(v)
+		if thisNum > SubVipPrice.CityMaxCount {
+			areaCount++
 		} else {
-			pCount++
+			newCitys = append(newCitys, thisNum)
 		}
 	}
-	//排序
-	sort.Ints(selectedCityNumArr)
-	sort.Ints(buyedCityNumArr)
-	//校验
-	flagNum := 0 //城市数量选择过多的省份数量
-	for index, thisSelectCityNum := range selectedCityNumArr {
-		if index >= len(buyedCityNumArr) {
-			flagNum++
-		} else {
-			if thisSelectCityNum > buyedCityNumArr[index] {
-				flagNum++
-			}
-		}
-	}
-	if pCount+flagNum > buySet.AreaCount {
-		return false
+	//省份数量自动转换全国
+	if areaCount > SubVipPrice.ProvinceMaxCount {
+		areaCount = -1
+		newCitys = []int{}
+	}
+	//行业数量自动转换全行业
+	if buyerclasscount > SubVipPrice.BuyerClassMaxCount {
+		buyerclasscount = -1
+	}
+	go func() { //更新o_buyset字段
+		ok := util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"o_vipjy.o_buyset":
+		bson.M{"areacount": areaCount, "buyerclasscount": buyerclasscount, "newCitys": newCitys}}})
+		log.Printf("用户%s SubvipBuySet 自动转换 %v \n 旧:【省:%d 行业:%d 城市:%+v】\n 新:【省:%d 行业:%d 城市:%v】",
+			userId, ok, logAreaCount, logBuyerclasscount, oldCitys,
+			areaCount, buyerclasscount, newCitys)
+	}()
+	return &SubvipBuySet{
+		areaCount,
+		newCitys,
+		buyerclasscount,
 	}
-	return true
 }
 
 //保存筛选日志
@@ -395,21 +423,21 @@ func (this *vipSubscribeStruct) SaveSelectLog(userId, openId string, msg *VipSim
 //industry 具体行业
 //count 时间长度  unit 时间单位
 func (this *vipSubscribeStruct) GetSubVipPrice(area *map[string]interface{}, industry []string, count, unit int) int {
-	industryNum := len(industry)     //行业数量
-	pCount := -1                     //省份数量
-	cityCountMap := map[string]int{} //购买省份中城市数量
+	industryNum := len(industry) //行业数量
+	pCount := -1                 //省份数量
+	cityCountArr := []int{}      //购买省份中城市数量
 	if len(*area) > 0 {
 		pCount = 0
-		for k, v := range *area {
+		for _, v := range *area {
 			tmp := v.([]interface{})
 			if len(tmp) == 0 { //省份
 				pCount++
 			} else { //城市
-				cityCountMap[k] = len(tmp)
+				cityCountArr = append(cityCountArr, len(tmp))
 			}
 		}
 	}
-	return this.GetSubVipPriceByBuySet(cityCountMap, pCount, industryNum, count, unit, true)
+	return this.GetSubVipPriceByBuySet(cityCountArr, pCount, industryNum, count, unit, true)
 }
 
 //cityCountMap 选择城市数量
@@ -417,15 +445,15 @@ func (this *vipSubscribeStruct) GetSubVipPrice(area *map[string]interface{}, ind
 //industryNum 选择行业数量
 //count 时间长度  unit 时间单位
 //isDiscount 测试环境是否打折
-func (this *vipSubscribeStruct) GetSubVipPriceByBuySet(cityCountMap map[string]int, pCount, industryNum, count, unit int, isDiscount bool) int {
+func (this *vipSubscribeStruct) GetSubVipPriceByBuySet(cityCountArr []int, pCount, industryNum, count, unit int, isDiscount bool) int {
 	payMoney := func() int {
 		//城市选择过多时,转为省份
-		newCityMap := map[string]int{} //防止操作cityCountMap 影响原数据
-		for cityName, cityCount := range cityCountMap {
+		newCityArr := []int{} //防止操作cityCountArr 影响原数据
+		for _, cityCount := range cityCountArr {
 			if cityCount > SubVipPrice.CityMaxCount {
 				pCount++
 			} else {
-				newCityMap[cityName] = cityCount
+				newCityArr = append(newCityArr, cityCount)
 			}
 		}
 		//
@@ -455,7 +483,7 @@ func (this *vipSubscribeStruct) GetSubVipPriceByBuySet(cityCountMap map[string]i
 		}
 		//计算非全国套餐
 		finalPrice := 0
-		for _, cityCount := range newCityMap {
+		for _, cityCount := range newCityArr {
 			thisPrice := 0
 			if cityCount == 1 { //单城市
 				thisPrice = getSetMealPrice(2, industryNum, unit) * count

+ 4 - 2
src/jfw/modules/subscribepay/src/pay_config.json

@@ -15,7 +15,8 @@
         "openidSwitch": {
             "oIMvJvrVXG89597EFmYiSiznbyyY": "oHwE_wEQlEBvjZJOyZeNnQcgKQMo",
             "ouCYjw4BJMbpdMRYrTTLb9nFi2RE": "oHwE_wNA1V0DURDO0h7wAriz0qIY",
-            "oIMvJvhl7CntkeLe3jEukHWhuKRc":"oHwE_wPk1VERbfcK2GRYtFWaStpk"
+            "oIMvJvhl7CntkeLe3jEukHWhuKRc":"oHwE_wPk1VERbfcK2GRYtFWaStpk",
+            "oRvqm1JFuhAbiWOYr_WgQI4rR9as":"oHwE_wPk1VERbfcK2GRYtFWaStpk"
         }
     },
     "aliPay": {
@@ -26,5 +27,6 @@
         "Subject_subvip": "剑鱼VIP订阅",
         "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEAtO7CU4hpdcMmV43MEA8bqQJYYx+f6yvYkP0nFc/oCvU24bU6zAdK/H2H56quEwD8Dh5YtVTfUCcKqpcG9HXY11TXWKCEUQiK1tkb0o7oSSURwk6h1DdDbg8m1+H8s+k+mvMvcqVCYKYi03PIPQyJCuHmzx/vcaALXRr2HOrEFaFFA8WYST1rywiKeyrC9PCNX1aJjGADhCs3cGrdZEJc4k+2tIHTYJccx+mJ96QiEkzFhJTqEmSFPcNqNUX9uCPgeVhfHW2pRNyffvrhoEyeSr1QoOpaYyn0I5JD2axnypBFCbk6P69LY3eGNKtOe81lp9hiZbMYpXPqb6KwPXTVQQIDAQABAoIBAEbJQm276MaR2uZWK4f84S12JW5iaQZw2QGgiTIXbQkcdqRHawF3uPafhhQ0ynXU5MgBR2NqGRQasimbfLUXhgZ4wueBpUKuvOLhfekaz/YN8qy6ZsXH+TGN6/x6BYu9rSiiC+YmkZmOZgGkQqrfxJ3lU4+lRuCFZOzAJ5mYn652CHRJXy6eDgZfyFLP2ol4/ioJEhwnGFXV345DlsVgmXTEe+IfjTyuvzxBtjod4lfu3dj/f2PhPrcgvN0ZQf1ldZbS+6FkMWInMOQt/WsJ/ANfiKgQ4sPzlxIhmVjrvDlnYTc1lbFekyInzZumV0pDyId+1Y6LAjxJTAhnjFAlBSECgYEAwsQdxOiZNLtxZ8J8JCQHKERYIo7euArW0iAurF+3Q9VNeGj0voFrmfHPju5OF5BHtuc7D3lkwZG4Ac+pyQtxF5dsEMl4vBoNc6onRQFsSDVEEIpl7OBghGlg1as23tvPSMh7DKnILM9OzVfFQ9WLvwHJwLRGsM7LOtmNovq4UFsCgYEA7dE/9Avr5YtCUjij8Y2zkAxN6qb8+ggqFoPiCr91JNGaKNKV9D2K7D3Zk49TXFJm7SX2zgYFuqR2Pa9vAWh9jtmwsc8L0qpIym4J1MM5ud/Xiu9c8O/prQOr7JlICNdk8WfqGbUC83BYfWa5SDonlXFYi6x3LlXdZnvEfZF645MCgYAC2ZnR6tFrGx8StJ7abIiKR02+27ZYnRf9pSjprtDgtjtW+royG3S2oPo3jjcoUx0piQKtPEqEJpy5sg86+ObjwHx9VmVk40C1I5VFhjrOZ7EiSNQq/jGLXntjRQkdg7vpxb0/NzDNrw7pJFKnpnVQCzenkTvDlJMWvl47N04BJwKBgHnpVtuIcPlPFkSH/KMLfQ1PAXJVAEI8hTbdjLbtxuOE/34F1hFKqzjHzA2034roQxM27vpWZAF15Zdho4oZQqREPCwqc2kfGgmLt0Z2fdUnRptWcVKh6ixjQXMccKz3niuSlZNwE38wDGzciAbaqQgW/sk7NC1wnvq2X9fvCAw5AoGANG2usqWYF4x+LvbhcdrKpJsjtvkLa2u9g2/wNXdoj+tBrv310O22/YM5LOcq9MrKPlx1S1C1KLoQO9TWFZiYuQ9C/sk7/ZTNmKQxCxVV0FVPaBYp+meD6sjgoRVJvaqY0UxnJwlHWMrusPTFua7Mtogqx9cvzlQolWh5VX7N1DM=\n-----END RSA PRIVATE KEY-----",
         "callbackPublicKey":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFZfev75+sa7O0f29qwuWeqWRQ+p59c8hz2s4aeh5Ohc08P1ls5e8UmPhaN9ZTkGwabOKN658pOhmVoa16ldKFZQ5j1hLTDS6yfKcvVs/hf1mQvsbUjtZgCfMQx5NNf1R4MsTvAqbl2l6DXMu7gHjAhKNR0QQBELv7HmYuWPE35ELQqBH0eVcvWSNV3/3zOansftY5NIT749B+Bv1uirE8PNMp20sWWqx8fMNi2EZksnWNUmnVldBqUwMJIxcXolBH/RGX5ZjBlBenoIB3PVQ8/+SPz9Hip7+QNH8utSnUlrh2AsJVtdNKIQk74Eevkn+Q+WyUVGoY0ca9DzGwh4hQIDAQAB"
-    }
+    },
+    "payDebug":"1"
 }

+ 57 - 0
src/jfw/modules/subscribepay/src/service/payCallback.go

@@ -10,6 +10,7 @@ import (
 	qutil "qfw/util"
 	"qfw/util/redis"
 	"strings"
+	"util"
 
 	"github.com/go-xweb/xweb"
 )
@@ -18,6 +19,62 @@ type PayCallBackAction struct {
 	*xweb.Action
 	aliPayCallback xweb.Mapper `xweb:"/callback/aliPay"` //支付宝支付完成回调
 	wxPayCallback  xweb.Mapper `xweb:"/callback/wxPay"`  //微信支付回调
+	testPay        xweb.Mapper `xweb:"/testPay"`         //模拟支付回调
+}
+
+func (this *PayCallBackAction) TestPay() {
+	if qutil.ObjToString(config.PayConf["payDebug"]) == "" {
+		this.Write("未开启")
+		return
+	}
+	userid := this.GetSession("userId")
+	query := map[string]interface{}{
+		"user_id": userid,
+	}
+	ordercode := this.GetString("ordercode")
+	typeFlag := this.GetString("type")
+	if !(typeFlag == "dataexport" || typeFlag == "datareport" || typeFlag == "vip") {
+		this.Write("未知操作")
+		return
+	}
+	if ordercode != "" {
+		query["order_code"] = ordercode
+	}
+
+	rDate := util.Mysql.FindOne("dataexport_order", query, "", "create_time desc")
+	if rDate == nil || len(*rDate) == 0 {
+		this.Write("未找到此订单")
+		return
+	}
+	thisParam := &entity.CallBackParam{
+		qutil.IntAll((*rDate)["order_money"]),
+		0,
+		qutil.ObjToString((*rDate)["out_trade_no"]),
+		"",
+		"",
+		"",
+	}
+	if typeFlag == "dataexport" { //数据导出
+		if !entity.JyDataExportStruct.PayCallBack(thisParam) {
+			log.Printf("数据导出更新执行出错 %+v\n", thisParam)
+			this.Write("数据导出更新执行出错")
+			return
+		}
+	} else if typeFlag == "datareport" { //数据报告
+		if !entity.JyDataReportStruct.PayCallBack(thisParam) {
+			log.Printf("数据报告更新执行出错 %+v\n", thisParam)
+			this.Write("数据报告更新执行出错")
+			return
+		}
+	} else if typeFlag == "vip" { //vip订阅
+		if !entity.JyVipSubStruct.PayCallBack(thisParam) {
+			log.Printf("vip订阅更新执行出错 %+v\n", thisParam)
+			this.Write("vip订阅更新执行出错")
+			return
+		}
+	}
+	log.Printf("%s模拟支付成功\n", ordercode)
+	this.Write("模拟支付成功")
 }
 
 //支付宝支付成功后回调

+ 0 - 563
src/jfw/modules/subscribepay/src/service/vipRenewUpgrade.go

@@ -1,563 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"entity"
-	"errors"
-	"log"
-	"math"
-	qutil "qfw/util"
-	//	"strings"
-	"fmt"
-	"pay"
-	"strconv"
-	"strings"
-	"time"
-	"util"
-
-	"github.com/go-xweb/xweb"
-	"gopkg.in/mgo.v2/bson"
-)
-
-//订阅升级修改相关接口
-type RenewUpgrade struct {
-	*xweb.Action
-	getBuyMsg               xweb.Mapper `xweb:"/renewUpgrade/getBuyMsg"`               //获取购买相关信息
-	renewUpgradeCreateOrder xweb.Mapper `xweb:"/renewUpgrade/renewUpgradeCreateOrder"` //续费升级支付
-	getExprie               xweb.Mapper `xweb:"/renewUpgrade/getExprie"`               //获取到期页面购买信息
-	zeroPay                 xweb.Mapper `xweb:"/renewUpgrade/zeroPay"`                 //升级0元支付
-}
-
-//获取购买订阅相关信息
-func (this *RenewUpgrade) GetBuyMsg() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	r := func() *entity.FuncResult {
-		if userId == "" {
-			return &entity.FuncResult{false, errors.New("未登录"), nil}
-		}
-		data, ok := util.MQFW.FindById("user", userId, nil)
-		if ok && len(*data) > 0 && *data != nil {
-			vipjy := (*data)["o_vipjy"].(map[string]interface{})
-			area := vipjy["o_area"]
-			buyerclass := vipjy["a_buyerclass"]
-			starttime := qutil.Int64All((*data)["l_vip_starttime"])
-			start := time.Unix(starttime, 0).Format("2006-01-02")
-			endtime := qutil.Int64All((*data)["l_vip_endtime"])
-			end := time.Unix(endtime, 0).Format("2006-01-02")
-			now := time.Unix(time.Now().Unix(), 0).Format("2006-01-02")
-			vipStatus := (*data)["i_vip_status"]
-			buyset := vipjy["o_buyset"]
-			//
-			var orderCode interface{}
-			orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
-				"user_id":      userId,
-				"order_status": 1,
-				"product_type": "VIP订阅",
-			}, "order_code", "create_time desc")
-			if len(*orderdata) > 0 && *orderdata != nil {
-				orderCode = (*orderdata)["order_code"]
-			}
-			dataArr := map[string]interface{}{
-				"area":       area,
-				"buyerclass": buyerclass,
-				"starttime":  starttime,
-				"endtime":    endtime,
-				"start":      start,
-				"end":        end,
-				"now":        now,
-				"vipStatus":  vipStatus,
-				"buyset":     buyset,
-				"orderCode":  orderCode,
-			}
-			return &entity.FuncResult{true, nil, dataArr}
-		} else {
-			return &entity.FuncResult{false, errors.New("非法请求"), nil}
-		}
-	}()
-	if r.Err != nil {
-		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
-	}
-	this.ServeJson(r.Format())
-}
-
-//升级续费
-//创建订单返回支付串
-func (this *RenewUpgrade) RenewUpgradeCreateOrder() {
-	allBuyArea := qutil.ObjToMap(this.GetString("allBuyArea"))       //已购+新增区域
-	allIndustry := strings.Split(this.GetString("allIndustry"), ",") //已购+新增行业
-	date := this.GetString("time")                                   //不延长时为空,正常为 年或月
-	payWay := this.GetString("payWay")                               //支付方式
-	pay_source := this.GetString("pay_source")                       //类型  续费-Renew or 升级-Upgrade
-	addCount := this.GetString("addCount")
-	buyset := qutil.ObjToMap(this.GetString("buyset"))
-	log.Println("111", buyset)
-	var vipBuyCount *map[string]interface{}
-	if addCount != "" {
-		vipBuyCount = qutil.ObjToMap(addCount) //新增购买区域数量
-	} else {
-		vipBuyCount = &map[string]interface{}{}
-	}
-	industryCount, _ := this.GetInteger("addIndustryCount") //新增购买行业数量
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
-	r := func() *entity.FuncResult {
-		if userId == "" {
-			return &entity.FuncResult{false, errors.New("未登录"), nil}
-		}
-		now := time.Now()
-		//数据校验
-		if len(allIndustry) == 1 && allIndustry[0] == "" { //去掉[""]
-			allIndustry = []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}
-		}
-
-		date_count, date_unit, err := checkReqDates(date)
-		if err != nil {
-			if pay_source == "Renew" { //续费 日期不能为空
-				return &entity.FuncResult{false, err, nil}
-			}
-		}
-
-		res, ok := util.MQFW.FindById("user", userId, `{"l_vip_endtime":1,"l_vip_starttime":1,"o_vipjy":1,i_vip_status:1}`)
-		if res == nil || len(*res) == 0 || !ok {
-			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
-		}
-
-		vipStatus := qutil.IntAll((*res)["i_vip_status"])
-		if vipStatus == 1 {
-			return &entity.FuncResult{false, errors.New("试用用户不可升级或续费"), nil}
-		}
-		start := qutil.Int64All((*res)["l_vip_starttime"])
-		end := qutil.Int64All((*res)["l_vip_endtime"])
-		vipjy := (*res)["o_vipjy"].(map[string]interface{})
-		oldBuy := vipjy["o_buyset"]
-		oldBuyset := oldBuy.(map[string]interface{})
-		log.Println("old", oldBuyset)
-		if start == 0 || end == 0 {
-			return &entity.FuncResult{false, errors.New("数据异常"), nil}
-		}
-		startTime := time.Unix(start, 0)
-		endTime := time.Unix(end, 0)
-		orderType := 0
-		isRenew := true
-		if pay_source == "Upgrade" { //计算升级时间
-			isRenew = false
-			orderType = 3
-			startTime = time.Now()
-		} else { //续费时间
-			orderType = 2 //续费操作
-			startTime = endTime
-		}
-		if date_unit >= 1 {
-			endTime = util.GetDATE(date_unit, date_count, end)
-		}
-		filter := entity.VipSimpleMsg{}
-		if pay_source == "Renew" {
-			areaMap := qutil.ObjToMap(vipjy["o_area"])
-			industryMap := qutil.ObjArrToStringArr(vipjy["a_buyerclass"].([]interface{}))
-			filter = entity.VipSimpleMsg{
-				areaMap,
-				industryMap,
-				nil,
-				0,
-				&oldBuyset,
-				date_count,
-				date_unit,
-				orderType,
-			}
-		} else if pay_source == "Upgrade" {
-			filter = entity.VipSimpleMsg{
-				allBuyArea,
-				allIndustry,
-				vipBuyCount,
-				industryCount,
-				buyset,
-				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
-		if pay_source == "Renew" {
-			cityArr := qutil.ObjToMap(oldBuyset["citys"])
-			citysArr := map[string]int{}
-			for k, v := range *cityArr {
-				citysArr[k] = qutil.IntAll(v)
-			}
-			pCount := qutil.IntAll(oldBuyset["areacount"])
-			iCount := qutil.IntAll(oldBuyset["buyerclasscount"])
-			//
-			totalfee = entity.JyVipSubStruct.GetSubVipPriceByBuySet(citysArr, pCount, iCount, date_count, date_unit, true)
-		} else if pay_source == "Upgrade" {
-			upgradeYear, upgradeMonth := MaxUpgradeMonth(end) //获取最大升级月数
-			//
-			cityArr := qutil.ObjToMap(oldBuyset["citys"])
-			citysArr := map[string]int{}
-			for k, v := range *cityArr {
-				citysArr[k] = qutil.IntAll(v)
-			}
-			pCount := qutil.IntAll(oldBuyset["areacount"])
-			iCount := qutil.IntAll(oldBuyset["buyerclasscount"])
-			//
-			newCityArr := qutil.ObjToMap((*buyset)["citys"])
-			newCitysArr := map[string]int{}
-			newPCount := qutil.IntAll((*buyset)["areacount"])
-			newICount := qutil.IntAll((*buyset)["buyerclasscount"])
-			for c, y := range *newCityArr {
-				newCitysArr[c] = qutil.IntAll(y)
-			}
-			//------校验buyset、区域、行业是否异常
-			upgradeBuyset := entity.JyVipSubStruct.NewBuySet(allBuyArea, allIndustry)
-			log.Println("upgradeBuyset", upgradeBuyset)
-			if newICount != -1 {
-				if newICount < iCount {
-					return &entity.FuncResult{false, errors.New("非法请求"), nil}
-				}
-				//行业是否异常
-				if upgradeBuyset.BuyerclassCount > newICount || upgradeBuyset.BuyerclassCount == -1 {
-					return &entity.FuncResult{false, errors.New("非法请求"), nil}
-				}
-			}
-			if newPCount != -1 {
-				if newPCount < pCount {
-					return &entity.FuncResult{false, errors.New("非法请求"), nil}
-				}
-				//区域是否异常
-				if upgradeBuyset.AreaCount == -1 {
-					return &entity.FuncResult{false, errors.New("非法请求"), nil}
-				}
-			}
-			//------校验buyset、区域、行业是否异常
-
-			//
-			oldPriceY := entity.JyVipSubStruct.GetSubVipPriceByBuySet(citysArr, pCount, iCount, upgradeYear, 1, false)
-			oldPriceM := entity.JyVipSubStruct.GetSubVipPriceByBuySet(citysArr, pCount, iCount, upgradeMonth, 2, false)
-			oldPrice := oldPriceY + oldPriceM
-			//
-			newPriceY := entity.JyVipSubStruct.GetSubVipPriceByBuySet(newCitysArr, newPCount, newICount, upgradeYear, 1, false)
-			newPriceM := entity.JyVipSubStruct.GetSubVipPriceByBuySet(newCitysArr, newPCount, newICount, upgradeMonth, 2, false)
-			newPrice := newPriceY + newPriceM
-			//
-			totalfee = newPrice - oldPrice
-			// --------升级价格差价计算--------
-			if date_unit == 1 { //升级中的延长时间
-				lengPrice := entity.JyVipSubStruct.GetSubVipPriceByBuySet(newCitysArr, newPCount, newICount, date_count, 1, true) //单位为年的已购+新增延长时间价格
-				totalfee = totalfee + lengPrice                                                                                   //已购+新增延长时间价格 + 升级差价 = 最终价格
-			} else if date_unit == 2 {
-				lengPrice := entity.JyVipSubStruct.GetSubVipPriceByBuySet(newCitysArr, newPCount, newICount, date_count, 2, true) //单位为月的已购+新增延长时间价格
-				totalfee = totalfee + lengPrice                                                                                   //已购+新增延长时间价格 + 升级差价 = 最终价格
-			}
-		}
-		//log.Println("price", totalfee)
-		//tmp := float64(totalfee) * 0.000001
-		//if tmp < 1 {
-		//	if tmp != 0 {
-		//		totalfee = 1
-		//	}
-		//}
-		log.Println("price", totalfee)
-
-		//创建订单
-		tradeno, prepayid, payStr := "", "", ""
-		if totalfee != 0 {
-			if payWay == "wx_js" { //微信js支付
-				var ret *map[string]string
-				tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_JSAPI, this.IP(), openId, "", totalfee)
-				if ret == nil || (*ret)["status"] != "1" {
-					errMsg := "创建微信订单出错"
-					if (*ret)["errcodedes"] != "" {
-						errMsg = (*ret)["errcodedes"]
-					} else if (*ret)["errcode"] != "" {
-						errMsg = (*ret)["errcode"]
-					}
-					return &entity.FuncResult{false, errors.New(errMsg), nil}
-				}
-				prepayid = qutil.ObjToString((*ret)["prepayid"])
-				payStr = pay.GetWxJsPayStr(prepayid)
-			} else if payWay == "wx_app" {
-				var ret *map[string]string
-				tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_APP, this.IP(), openId, "", totalfee)
-				if ret == nil || (*ret)["status"] != "1" {
-					errMsg := "创建微信订单出错"
-					if (*ret)["errcodedes"] != "" {
-						errMsg = (*ret)["errcodedes"]
-					} else if (*ret)["errcode"] != "" {
-						errMsg = (*ret)["errcode"]
-					}
-					return &entity.FuncResult{false, errors.New(errMsg), nil}
-				}
-				prepayid = qutil.ObjToString((*ret)["prepayid"])
-				payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
-			} else { //支付宝支付
-				var err error
-				payStr, tradeno, err = pay.Alipay.GetOrderPayParam((qutil.Float64All(totalfee)), "", pay.ALI_SUBVIP_APP)
-				if err != nil {
-					return &entity.FuncResult{false, errors.New("创建支付宝订单出错"), nil}
-				}
-			}
-		}
-
-		filterStr, _ := json.Marshal(filter)
-		ordercode := pay.GetOrderCode(userId)
-		insertMap := map[string]interface{}{
-			"order_money":    totalfee,
-			"order_status":   0,
-			"user_nickname":  qutil.ObjToString(this.GetSession("s_nickname")),
-			"user_openid":    openId,
-			"prepay_id":      prepayid,
-			"code_url":       payStr,
-			"out_trade_no":   tradeno,
-			"order_code":     ordercode,
-			"product_type":   "VIP订阅",
-			"create_time":    qutil.FormatDate(&now, qutil.Date_Full_Layout),
-			"prepay_time":    qutil.FormatDate(&now, qutil.Date_Full_Layout),
-			"original_price": totalfee,
-			"filter_id":      mog_id,
-			"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),
-			"vip_type":       qutil.If(isRenew, 1, 2),
-		}
-
-		orderid := util.Mysql.Insert("dataexport_order", insertMap)
-		if orderid == -1 {
-			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
-		}
-		if totalfee != 0 {
-			if isRenew {
-				util.MsgRemind.Add(qutil.IntAll(orderid), totalfee, 1, 0, ordercode, userId, now.Unix())
-			} else {
-				util.MsgRemind.Add(qutil.IntAll(orderid), totalfee, 2, 0, ordercode, userId, now.Unix())
-			}
-		}
-		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode, "res": payStr}}
-	}()
-	if r.Err != nil {
-		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
-	}
-	this.ServeJson(r.Format())
-}
-
-//获取到期页面购买信息
-func (this *RenewUpgrade) GetExprie() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	data, ok := util.MQFW.FindById("user", userId, nil)
-	vipStatus := 0
-	if ok && len(*data) > 0 && *data != nil {
-		vipStatus = qutil.IntAll((*data)["i_vip_status"])
-	}
-	orderId := this.GetString("orderId")
-	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
-		"id":      orderId,
-		"user_id": userId,
-	}, "filter,order_code", "")
-	vmsg := entity.VipSimpleMsg{}
-	if orderdata != nil && len(*orderdata) > 0 {
-		filterStr := qutil.ObjToString((*orderdata)["filter"])
-		if err := json.Unmarshal([]byte(filterStr), &vmsg); err != nil {
-			log.Printf("%s vipSubscribeStruct PayCallBack Unmarshal 出错 [%s]\n", filterStr)
-			return
-		}
-		dataArr := map[string]interface{}{
-			"area":       vmsg.Area,
-			"buyerclass": vmsg.Industry,
-			"orderCode":  (*orderdata)["order_code"],
-			"vipStatus":  vipStatus,
-		}
-		log.Println(dataArr)
-		this.ServeJson(dataArr)
-	}
-}
-
-//升级0元支付
-func (this *RenewUpgrade) ZeroPay() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	orderCode := this.GetString("order_code")
-	now := time.Now()
-	orderdata := util.Mysql.FindOne("dataexport_order", map[string]interface{}{
-		"user_id":     userId,
-		"order_code":  orderCode,
-		"order_money": 0,
-	}, "id,filter,order_code,order_status,user_id,vip_starttime,vip_endtime,vip_type,prepay_time", "")
-	pay_time := qutil.FormatDate(&now, qutil.Date_Full_Layout)
-	if orderdata == nil {
-		log.Println("未找到订单")
-		this.ServeJson(map[string]interface{}{
-			"success": false,
-		})
-		return //未找到订单
-	}
-	order_status := qutil.IntAll((*orderdata)["order_status"])
-	if order_status == 1 {
-		this.ServeJson(map[string]interface{}{
-			"success": true,
-		})
-		return // 或已支付
-	}
-	if order_status != 0 {
-		log.Printf("%s订单状态异常%d\n", userId, order_status)
-		this.ServeJson(map[string]interface{}{
-			"success": false,
-		})
-		return
-	}
-	//计算时长
-	vmsg := entity.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)
-		this.ServeJson(map[string]interface{}{
-			"success": false,
-		})
-		return
-	}
-	updateMap := map[string]interface{}{
-		"pay_money":    0,
-		"pay_time":     pay_time,
-		"order_status": 1,
-	}
-
-	update := util.Mysql.Update("dataexport_order", map[string]interface{}{
-		"order_status": 0,
-		"order_code":   orderCode,
-		"order_money":  0,
-	}, updateMap)
-
-	if !update {
-		log.Printf("%s更新订单状态出错%+v\n", userId, updateMap)
-		this.ServeJson(map[string]interface{}{
-			"success": false,
-		})
-		return
-	}
-
-	//	start := qutil.ObjToString((*orderdata)["vip_starttime"])
-	end := qutil.ObjToString((*orderdata)["vip_endtime"])
-	endTime, err := time.ParseInLocation(qutil.Date_Full_Layout, end, time.Local)
-	//	startTime, err := time.ParseInLocation(qutil.Date_Full_Layout, start, time.Local)
-	if err != nil {
-		log.Println("%s格式化日期出错%s\n", userId, endTime)
-		this.ServeJson(map[string]interface{}{
-			"success": false,
-		})
-		return
-	}
-
-	buyset := entity.SubvipBuySet{}
-	addBuyset := vmsg.Buyset
-	buyset.AreaCount = qutil.IntAll((*addBuyset)["areacount"])
-	buyset.BuyerclassCount = qutil.IntAll((*addBuyset)["buyerclasscount"])
-	cityArr := qutil.ObjToMap((*addBuyset)["citys"])
-	citys := map[string]interface{}{}
-	for cityMap, cityCount := range *cityArr {
-		citys[cityMap] = qutil.IntAll(cityCount)
-	}
-	buyset.Citys = citys
-	isok := util.MQFW.UpdateById("user", userId,
-		bson.M{"$set": bson.M{
-			"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,
-			"i_vip_expire_tip":     0,
-		}})
-	this.ServeJson(map[string]interface{}{
-		"success": isok,
-	})
-	return
-}
-
-//cycleunit(1:年 2:月)
-//cyclecount 数字长度
-func checkReqDates(dateStr string) (cyclecount, cycleunit int, err error) {
-	if strings.HasSuffix(dateStr, "年") {
-		cycleunit = 1
-		dateStr = strings.Replace(dateStr, "年", "", -1)
-		cyclecount, err = strconv.Atoi(dateStr)
-		if cyclecount > 3 && err == nil {
-			err = errors.New(fmt.Sprintf("日期%s返回超出最大值", dateStr))
-		}
-		return
-	} else if strings.HasSuffix(dateStr, "月") {
-		cycleunit = 2
-		dateStr = strings.Replace(dateStr, "个月", "", -1)
-		cyclecount, err = strconv.Atoi(dateStr)
-		if cyclecount > 12 && err == nil {
-			err = errors.New(fmt.Sprintf("日期%s范围超出最大值", dateStr))
-		}
-		return
-	}
-	return -1, -1, errors.New(fmt.Sprintf("日期%s格式化出错", dateStr))
-}
-
-//获取最大升级月数
-func MaxUpgradeMonth(endTime int64) (int, int) {
-	endYear := time.Unix(endTime, 0).Year()
-	endMonth := int(time.Unix(endTime, 0).Month())
-	endDay := time.Unix(endTime, 0).Day()
-	nowYear := time.Now().Year()
-	nowMonth := int(time.Now().Month())
-	nowDay := time.Now().Day()
-	nowUpgrade := 0
-	if endYear == nowYear {
-		if endMonth == nowMonth {
-			nowUpgrade = 1
-		} else {
-			if endDay > nowDay {
-				nowUpgrade = endMonth - nowMonth + 1
-			} else {
-				nowUpgrade = endMonth - nowMonth
-			}
-		}
-	} else {
-		if endMonth == nowMonth {
-			if endDay <= nowDay {
-				nowUpgrade = (endYear - nowYear) * 12
-			} else {
-				nowUpgrade = (endYear-nowYear)*12 + 1
-			}
-		} else if endMonth > nowMonth {
-			if endDay <= nowDay {
-				nowUpgrade = (endYear-nowYear)*12 + (endMonth - nowMonth)
-			} else {
-				nowUpgrade = (endYear-nowYear)*12 + (endMonth - nowMonth) + 1
-			}
-		} else {
-			if endDay <= nowDay {
-				nowUpgrade = (endYear-nowYear-1)*12 + (12 - nowMonth + endMonth)
-			} else {
-				nowUpgrade = (endYear-nowYear-1)*12 + (12 - nowMonth + endMonth) + 1
-			}
-		}
-	}
-
-	//
-	var nowUpgradeYear = 0
-	if nowUpgrade >= 12 {
-		nowUpgradeYear = int(math.Floor(float64(nowUpgrade) / float64(12)))
-		nowUpgrade = nowUpgrade - 12
-	} else if nowUpgrade >= 24 {
-		nowUpgradeYear = int(math.Floor(float64(nowUpgrade) / float64(12)))
-		nowUpgrade = nowUpgrade - 24
-	}
-	if nowUpgrade >= 10 {
-		nowUpgradeYear = nowUpgradeYear + 1
-		nowUpgrade = 0
-	}
-	return nowUpgradeYear, nowUpgrade
-}

+ 533 - 0
src/jfw/modules/subscribepay/src/service/vipSubscribeChange.go

@@ -0,0 +1,533 @@
+package service
+
+import (
+	"encoding/json"
+	"entity"
+	"errors"
+	"github.com/go-xweb/xweb"
+	"gopkg.in/mgo.v2/bson"
+	"log"
+	"math"
+	"pay"
+	qutil "qfw/util"
+	"strings"
+	"time"
+	"util"
+)
+
+//订阅修改 or 升级
+type SubscribeChange struct {
+	*xweb.Action
+	getSubBuyMsg xweb.Mapper `xweb:"/vipsubscribe/getSubBuyMsg"` //获取vip订阅详情
+	saveChange   xweb.Mapper `xweb:"/vipsubscribe/saveChange"`   //订阅修改 or 升级
+}
+
+func init() {
+	xweb.AddAction(&SubscribeChange{})
+}
+
+//获取购买订阅相关信息
+func (this *SubscribeChange) GetSubBuyMsg() {
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	r := func() *entity.FuncResult {
+		rData, buyset, _ := entity.JyVipSubStruct.GetVipDetail(userId)
+		if rData == nil || len(*rData) == 0 {
+			return &entity.FuncResult{false, errors.New("获取信息失败"), nil}
+		}
+		o_vipjy := qutil.ObjToMap((*rData)["o_vipjy"])
+		vipStatus := qutil.IntAll((*rData)["i_vip_status"])
+		if vipStatus == 2 { //查询是否有未执行的续费订单
+
+		}
+		return &entity.FuncResult{true, nil, map[string]interface{}{
+			"isTrial":  vipStatus == 1,
+			"area":     (*o_vipjy)["o_area"],
+			"industry": (*o_vipjy)["a_buyerclass"],
+			"buyset":   buyset,
+		}}
+	}()
+	if r.Err != nil {
+		log.Printf("%s GetSubBuyMsg err:%v\n", userId, r.Err.Error())
+	}
+	this.ServeJson(r.Format())
+}
+
+//修改 or 升级
+func (this *SubscribeChange) SaveChange() {
+	area := qutil.ObjToMap(this.GetString("area"))
+	industry := strings.Split(this.GetString("industry"), ",")
+	userId := qutil.ObjToString(this.GetSession("userId"))
+	timeRenew := this.GetString("time")
+	payWay := this.GetString("payWay")
+	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
+	r := func() *entity.FuncResult {
+		if len(industry) == 1 && industry[0] == "" { //去掉[""]
+			industry = []string{}
+		}
+		rData, oldBuyset, isVip := entity.JyVipSubStruct.GetVipDetail(userId)
+		if !isVip {
+			return &entity.FuncResult{false, errors.New("请求异常,非vip状态"), nil}
+		}
+		if rData == nil || len(*rData) == 0 {
+			return &entity.FuncResult{false, errors.New("获取信息失败"), nil}
+		}
+		newBuyset := entity.JyVipSubStruct.NewBuySet(area, industry)
+		needUpgrade, upgradeBuyset := needUpgrade(newBuyset, oldBuyset)
+		log.Println(oldBuyset, newBuyset, upgradeBuyset)
+		needRenew := false
+		date_count, date_unit := 0, 0
+		endUnix := qutil.Int64All((*rData)["l_vip_endtime"])
+		if timeRenew != "" {
+			var err error
+			date_count, date_unit, err = checkReqDate(timeRenew)
+			if err != nil {
+				return &entity.FuncResult{false, errors.New("格式化日期出错"), nil}
+			}
+			//校验是否超过三年
+			if time.Now().AddDate(3, 0, 0).Before(util.GetDATE(date_unit, date_count, endUnix)) {
+				return &entity.FuncResult{false, errors.New("订阅周期超过三年"), nil}
+			}
+			needRenew = true
+		}
+		//订阅修改(不需要升级,不需要续费)
+		if !needUpgrade && !needRenew {
+			if !entity.JyVipSubStruct.SubChange(userId, qutil.ObjToMap((*rData)["o_vipjy"]), area, industry) {
+				return &entity.FuncResult{false, errors.New("保存修改出错"), nil}
+			}
+			return &entity.FuncResult{true, nil, map[string]interface{}{
+				"doSuccess": true,
+				"needPay":   false,
+			}}
+		}
+
+		//升级or续费
+		filter := entity.VipSimpleMsg{
+			area,
+			industry,
+			date_count,
+			date_unit,
+			oldBuyset,
+			nil,
+			nil,
+			0,
+		}
+		final_price := 0
+
+		var startTime, endTime time.Time
+		now := time.Now()
+
+		if !needUpgrade && needRenew { //只续费,不升级
+			final_price = entity.JyVipSubStruct.GetSubVipPriceByBuySet(oldBuyset.NewCitys, oldBuyset.AreaCount, oldBuyset.BuyerclassCount, date_count, date_unit, true)
+			filter.OrderType = 5
+			log.Println("续费", final_price)
+
+			//生效时间
+			startTime = time.Unix(endUnix, 0)
+			endTime = util.GetDATE(filter.Cycleunit, filter.Cyclecount, endUnix)
+		} else { //升级
+			//升级(若存在续费,升级单子必须高于每个续费单子;否则不能升级)
+			totalPrice, subtotail := getUpgradeDetail(userId, upgradeBuyset, oldBuyset, endUnix, date_count, date_unit)
+			if totalPrice < 0 {
+				if totalPrice == -1 {
+					return &entity.FuncResult{false, errors.New("不能升级此状态"), nil}
+				} else {
+					return &entity.FuncResult{false, errors.New("查询续费订单出错"), nil}
+				}
+			}
+			final_price = totalPrice
+			filter.OrderType = 3
+			filter.NewBuyset = upgradeBuyset
+			filter.UpgradeSubtotail = subtotail
+
+			//生效时间
+			startTime = now
+			if needRenew {
+				endTime = util.GetDATE(filter.Cycleunit, filter.Cyclecount, endUnix)
+			} else {
+				endTime = time.Unix(endUnix, 0)
+			}
+		}
+		log.Printf("是否需要升级%v,是否需要续费%v\n", needUpgrade, needRenew)
+		log.Printf("price: %d \n filter:%+v\n", final_price, filter)
+		//创建订单
+		filterStr, err := json.Marshal(filter)
+		if err != nil {
+			return &entity.FuncResult{false, errors.New("订单数据生成异常"), nil}
+		}
+
+		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, "", final_price)
+			if ret == nil || (*ret)["status"] != "1" {
+				errMsg := "创建微信订单出错"
+				if (*ret)["errcodedes"] != "" {
+					errMsg = (*ret)["errcodedes"]
+				} else if (*ret)["errcode"] != "" {
+					errMsg = (*ret)["errcode"]
+				}
+				return &entity.FuncResult{false, errors.New(errMsg), nil}
+			}
+			prepayid = qutil.ObjToString((*ret)["prepayid"])
+			payStr = pay.GetWxJsPayStr(prepayid)
+		} else if payWay == "wx_app" { //微信app
+			var ret *map[string]string
+			tradeno, ret = pay.WxStruct.CreatePrepayOrder(pay.WX_SUBVIP_APP, this.IP(), openId, "", final_price)
+			if ret == nil || (*ret)["status"] != "1" {
+				errMsg := "创建微信订单出错"
+				if (*ret)["errcodedes"] != "" {
+					errMsg = (*ret)["errcodedes"]
+				} else if (*ret)["errcode"] != "" {
+					errMsg = (*ret)["errcode"]
+				}
+				return &entity.FuncResult{false, errors.New(errMsg), nil}
+			}
+			prepayid = qutil.ObjToString((*ret)["prepayid"])
+			payStr = pay.WxStruct.GetAppWxPayStr(prepayid)
+		} else if payWay == "ali_app" { //支付宝app支付
+			var err error
+			payStr, tradeno, err = pay.Alipay.GetOrderPayParam((qutil.Float64All(final_price)), "", pay.ALI_SUBVIP_APP)
+			if err != nil {
+				return &entity.FuncResult{false, errors.New("创建支付宝订单出错"), nil}
+			}
+		} else {
+			return &entity.FuncResult{false, errors.New("未知支付方式"), nil}
+		}
+
+		ordercode := pay.GetOrderCode(userId)
+		insertMap := map[string]interface{}{
+			"order_money":    final_price,
+			"order_status":   0,
+			"user_openid":    openId,
+			"prepay_id":      prepayid,
+			"code_url":       payStr,
+			"out_trade_no":   tradeno,
+			"order_code":     ordercode,
+			"product_type":   "VIP订阅",
+			"create_time":    qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"prepay_time":    qutil.FormatDate(&now, qutil.Date_Full_Layout),
+			"original_price": final_price,
+			"filter_id":      "",
+			"pay_way":        payWay,
+			"user_id":        userId,
+			"filter":         string(filterStr), //筛选
+			"vip_endtime":    qutil.FormatDate(&endTime, qutil.Date_Full_Layout),
+			"vip_starttime":  qutil.FormatDate(&startTime, qutil.Date_Full_Layout),
+			"vip_type":       qutil.If(filter.OrderType == 5, 1, 2), //1:续费 2:升级
+		}
+		orderid := util.Mysql.Insert("dataexport_order", insertMap)
+		if orderid == -1 {
+			return &entity.FuncResult{false, errors.New("数据库操作异常"), nil}
+		}
+		//支付提醒
+		util.MsgRemind.Add(qutil.IntAll(orderid), final_price, qutil.If(filter.OrderType == 5, 1, -1).(int), 0, ordercode, userId, now.Unix())
+		return &entity.FuncResult{true, nil, map[string]interface{}{"code": ordercode, "res": payStr}}
+	}()
+	if r.Err != nil {
+		log.Printf("%s CreateOrder err:%v\n", userId, r.Err.Error())
+	}
+	this.ServeJson(r.Format())
+}
+
+//是否需要升级
+func needUpgrade(newBuySet, oldBuySet *entity.SubvipBuySet) (bool, *entity.SubvipBuySet) {
+	BuyerclassUpgrade, AreaNeedUpgrade := false, false
+	UpgradeBuyset := &entity.SubvipBuySet{
+		oldBuySet.AreaCount,
+		oldBuySet.NewCitys,
+		oldBuySet.BuyerclassCount,
+	}
+	UpgradeBuyset.BuyerclassCount = newBuySet.BuyerclassCount
+	//比较行业
+	if oldBuySet.BuyerclassCount != -1 {
+		//若当前买的不是全行业,并且当前行业数量小于新行业数量时
+		if oldBuySet.BuyerclassCount < newBuySet.BuyerclassCount || newBuySet.BuyerclassCount == -1 {
+			BuyerclassUpgrade = true
+			//计算升级后的buySet
+			UpgradeBuyset.BuyerclassCount = newBuySet.BuyerclassCount
+		}
+	}
+	//比较地区
+	if oldBuySet.AreaCount != -1 {
+		if newBuySet.AreaCount == -1 { //升级为全国
+			UpgradeBuyset.AreaCount = newBuySet.AreaCount
+			UpgradeBuyset.NewCitys = newBuySet.NewCitys
+			AreaNeedUpgrade = true
+		} else {
+			oldCitysBuyOne, oldCitysBuyTwo := 0, 0
+			newCitysBuyOne, newCitysBuyTwo := 0, 0
+			oldCopy := []int{} //复制(防止影响原数组)
+			for _, v := range oldBuySet.NewCitys {
+				if v == 1 {
+					oldCitysBuyOne++
+				} else {
+					oldCitysBuyTwo++
+				}
+				oldCopy = append(oldCopy, v)
+			}
+			oldBuySet.NewCitys = oldCopy
+			for _, v := range newBuySet.NewCitys {
+				if v == 1 {
+					newCitysBuyOne++
+				} else {
+					newCitysBuyTwo++
+				}
+			}
+
+			p_Diff := newBuySet.AreaCount - oldBuySet.AreaCount
+			c_1_diff := newCitysBuyOne - oldCitysBuyOne
+			c_2_diff := newCitysBuyTwo - oldCitysBuyTwo
+
+			log.Println(p_Diff, c_2_diff, c_1_diff)
+
+			if p_Diff > 0 {
+				UpgradeBuyset.AreaCount = newBuySet.AreaCount
+			}
+
+			if p_Diff > 0 || p_Diff+c_2_diff > 0 || p_Diff+c_2_diff+c_1_diff > 0 {
+				//需要升级
+				AreaNeedUpgrade = true
+				//计算升级后的buySet
+				if p_Diff < 0 { //有剩余省份未使用
+					if c_2_diff > 0 {
+						c_2_diff += p_Diff //转移给两个市使用
+					} else {
+						c_1_diff += p_Diff //转移给一个市使用
+					}
+				} else { //省份数量增加
+					UpgradeBuyset.AreaCount = newBuySet.AreaCount
+				}
+				del_2_flag, del_1_flag := 0, 0 //被占用
+				if c_2_diff < 0 { //有两个城市的名额未使用完
+					if p_Diff > 0 {
+						//转移给一个省使用
+						if c_2_diff+p_Diff > 0 {
+							del_2_flag += -c_2_diff
+							c_2_diff = 0
+						} else {
+							c_2_diff += p_Diff
+							del_2_flag += p_Diff
+						}
+					}
+					if c_1_diff > 0 && c_2_diff < 0 { //转移给一个市使用
+						c_1_diff += c_2_diff
+					}
+				}
+				if c_1_diff < 0 { //有一个城市的名额未使用完
+					if p_Diff > 0 {
+						if c_1_diff+p_Diff > 0 {
+							del_1_flag += -c_1_diff
+							c_1_diff = 0
+						} else {
+							c_1_diff += p_Diff
+							del_1_flag += p_Diff
+						}
+					}
+					if c_2_diff > 0 && c_1_diff < 0 {
+						if c_1_diff+c_2_diff > 0 {
+							del_1_flag += -c_1_diff
+							c_1_diff = 0
+						} else {
+							c_1_diff += c_2_diff
+							del_1_flag += c_2_diff
+						}
+					}
+				}
+				//删除顶替
+				log.Println("start", UpgradeBuyset.NewCitys, del_2_flag, del_1_flag)
+				index_flag := 0
+				for del_2_flag > 0 || del_1_flag > 0 {
+					valueFlag := UpgradeBuyset.NewCitys[index_flag]
+					if del_2_flag > 0 && valueFlag == 2 {
+						UpgradeBuyset.NewCitys = append(UpgradeBuyset.NewCitys[:index_flag], UpgradeBuyset.NewCitys[index_flag+1:]...)
+						del_2_flag--
+						continue
+					} else if del_1_flag > 0 && valueFlag == 1 {
+						UpgradeBuyset.NewCitys = append(UpgradeBuyset.NewCitys[:index_flag], UpgradeBuyset.NewCitys[index_flag+1:]...)
+						del_1_flag--
+						continue
+					}
+					index_flag++
+				}
+				log.Println("end", UpgradeBuyset.NewCitys)
+				//增加新增
+				for i := c_2_diff; i > 0; i-- { //添加购买两个市数量
+					UpgradeBuyset.NewCitys = append(UpgradeBuyset.NewCitys, 2)
+				}
+
+				for i := c_1_diff; i > 0; i-- { //添加购买一个市数量
+					UpgradeBuyset.NewCitys = append(UpgradeBuyset.NewCitys, 1)
+				}
+			} else {
+				//不需要升级
+				AreaNeedUpgrade = false
+			}
+		}
+	}
+	if BuyerclassUpgrade || AreaNeedUpgrade {
+		return true, UpgradeBuyset
+	} else {
+		return false, nil
+	}
+}
+
+//升级详情单
+func getUpgradeDetail(userId string, newBuySet, oldBuySet *entity.SubvipBuySet, oldEndtime int64, count, unit int) (totalPrice int, subtotals []map[string]interface{}) {
+	rResult, ok := util.MQFW.Find("vip_upgrade", &bson.M{"s_userid": userId, "i_isvalid": 0}, `{"l_validtime":"1"}`, `{"o_buyset":1,"l_validtime":1}`, false, -1, -1)
+	if !ok {
+		return -2, nil
+	}
+	nowEndTime := oldEndtime
+	//已经续费升级价格详单
+	if len(*rResult) != 0 {
+		for i := len(*rResult) - 1; i >= 0; i-- {
+			thisObj := qutil.ObjToMap((*rResult)[i])
+			thisStartTime := qutil.Int64All((*thisObj)["l_validtime"])
+			buySetMap := qutil.ObjToMap((*thisObj)["o_buyset"])
+			thisBuyset := &entity.SubvipBuySet{
+				qutil.IntAll((*buySetMap)["areacount"]),
+				util.ConfirmIntArr((*buySetMap)["newcitys"].([]interface{})),
+				qutil.IntAll((*buySetMap)["buyerclasscount"]),
+			}
+			this_price := getSubtotalPrice(thisBuyset, newBuySet, qutil.Int64All((*thisObj)["l_validtime"]), nowEndTime)
+			if this_price < 0 {
+				return -1, nil
+			}
+			totalPrice += this_price
+			subtotals = append(subtotals, map[string]interface{}{
+				"type":      1,
+				"startTime": thisStartTime,
+				"endTime":   nowEndTime,
+				"price":     this_price,
+				"oldBuyset": thisBuyset,
+			})
+			nowEndTime = thisStartTime
+		}
+	}
+	//当前升级
+	now := time.Now()
+	price_now := getSubtotalPrice(oldBuySet, newBuySet, now.Unix(), nowEndTime)
+	if price_now < 0 {
+		return -1, nil
+	}
+	totalPrice += price_now
+	subtotals = append(subtotals, map[string]interface{}{
+		"type":      0,
+		"startTime": now.Unix(),
+		"endTime":   nowEndTime,
+		"price":     price_now,
+		"oldBuyset": oldBuySet,
+	})
+	//此次新增续费价格计算
+	if count > 0 {
+		renew_price := entity.JyVipSubStruct.GetSubVipPriceByBuySet(newBuySet.NewCitys, newBuySet.AreaCount, newBuySet.BuyerclassCount, count, unit, true)
+		log.Println("升级额外续费:", renew_price)
+		if renew_price < 0 {
+			return -1, nil
+		}
+		totalPrice += renew_price
+		subtotals = append(subtotals, map[string]interface{}{
+			"type":      2,
+			"startTime": oldEndtime,
+			"endTime":   util.GetDATE(unit, count, oldEndtime).Unix(),
+			"price":     renew_price,
+		})
+	}
+	return totalPrice, subtotals
+}
+
+//获取升级小计价格
+func getSubtotalPrice(oldBuyset, newBuyset *entity.SubvipBuySet, startTime, endtime int64) int {
+	yearNum, monthNum := getDateSub(startTime, endtime)
+	//不能降级
+	if (oldBuyset.AreaCount != -1 && newBuyset.AreaCount != -1 && oldBuyset.AreaCount > newBuyset.AreaCount) || (oldBuyset.AreaCount == -1 && newBuyset.AreaCount != -1) ||
+		(oldBuyset.BuyerclassCount != -1 && newBuyset.BuyerclassCount != -1 && oldBuyset.BuyerclassCount > newBuyset.BuyerclassCount) || oldBuyset.BuyerclassCount == -1 && newBuyset.BuyerclassCount != -1 {
+		return -1
+	}
+	//计价方式为计算差额
+	beforePrice, newPrice := 0, 0
+	if monthNum != 0 {
+		beforePrice += entity.JyVipSubStruct.GetSubVipPriceByBuySet(oldBuyset.NewCitys, oldBuyset.AreaCount, oldBuyset.BuyerclassCount, monthNum, 2, false)
+		newPrice += entity.JyVipSubStruct.GetSubVipPriceByBuySet(newBuyset.NewCitys, newBuyset.AreaCount, newBuyset.BuyerclassCount, monthNum, 2, false)
+	}
+	if yearNum != 0 {
+		beforePrice += entity.JyVipSubStruct.GetSubVipPriceByBuySet(oldBuyset.NewCitys, oldBuyset.AreaCount, oldBuyset.BuyerclassCount, yearNum, 1, false)
+		newPrice += entity.JyVipSubStruct.GetSubVipPriceByBuySet(newBuyset.NewCitys, newBuyset.AreaCount, newBuyset.BuyerclassCount, yearNum, 1, false)
+	}
+	log.Printf("old %+v \n new %+v \n %d-%d 相差%d年 %d个月\n price: %d-%d=%d  \n", oldBuyset, newBuyset, startTime, endtime, yearNum, monthNum, newPrice, beforePrice, newPrice-beforePrice)
+	return newPrice - beforePrice
+}
+
+//时间差
+func getDateSub(start, end int64) (monthNum, yearNum int) {
+	startTime := time.Unix(start, 0)
+	endTime := time.Unix(end, 0)
+
+	endYear := endTime.Year()
+	endMonth := int(endTime.Month())
+	endDay := endTime.Day()
+
+	nowYear := startTime.Year()
+	nowMonth := int(startTime.Month())
+	nowDay := startTime.Day()
+
+	if endYear == nowYear {
+		if endMonth == nowMonth {
+			monthNum = 1
+		} else {
+			if endDay > nowDay {
+				monthNum = endMonth - nowMonth + 1
+			} else {
+				monthNum = endMonth - nowMonth
+			}
+		}
+	} else {
+		if endMonth == nowMonth {
+			if endDay <= nowDay {
+				monthNum = (endYear - nowYear) * 12
+			} else {
+				monthNum = (endYear-nowYear)*12 + 1
+			}
+		} else if endMonth > nowMonth {
+			if endDay <= nowDay {
+				monthNum = (endYear-nowYear)*12 + (endMonth - nowMonth)
+			} else {
+				monthNum = (endYear-nowYear)*12 + (endMonth - nowMonth) + 1
+			}
+		} else {
+			if endDay <= nowDay {
+				monthNum = (endYear-nowYear-1)*12 + (12 - nowMonth + endMonth)
+			} else {
+				monthNum = (endYear-nowYear-1)*12 + (12 - nowMonth + endMonth) + 1
+			}
+		}
+	}
+
+	if monthNum >= 12 {
+		yearNum = int(math.Floor(float64(monthNum) / float64(12)))
+		monthNum = monthNum - 12
+	} else if monthNum >= 24 {
+		yearNum = int(math.Floor(float64(monthNum) / float64(12)))
+		monthNum = monthNum - 24
+	}
+	if monthNum >= 10 {
+		yearNum = yearNum + 1
+		monthNum = 0
+	}
+	//upgradeYear, upgradeMonth
+	return yearNum, monthNum
+}
+
+//func getDateSub(startTime, endTime int64) (monthNum, yearNum int) {
+//	count := qutil.IntAll((endTime - startTime) / (60 * 60 * 24 * 30))
+//	if (endTime-startTime)%(60*60*24*30) > 0 { //不足一月按照一个月计算
+//		count++
+//	}
+//	if count < 12 {
+//		monthNum = count
+//		return
+//	}
+//	yearNum = count / 12
+//	monthNum = count % 12
+//	return
+//}

+ 0 - 112
src/jfw/modules/subscribepay/src/service/vipSubscribeEdit.go

@@ -1,112 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"entity"
-	"errors"
-	"log"
-	qutil "qfw/util"
-	"util"
-
-	"gopkg.in/mgo.v2/bson"
-
-	"github.com/go-xweb/xweb"
-)
-
-//订阅修改相关接口
-type EditSub struct {
-	*xweb.Action
-	getSubBuyMsg xweb.Mapper `xweb:"/editSub/getSubBuyMsg"` //获取购买订阅相关信息
-	saveSubEdit  xweb.Mapper `xweb:"/editSub/submit"`       //保存修改
-}
-
-type editSubResult struct {
-	Success bool  //是否成功
-	Err     error //错误
-	Data    map[string]interface{}
-}
-
-func (o *editSubResult) Format() *map[string]interface{} {
-	errStr := ""
-	if o.Err != nil {
-		errStr = o.Err.Error()
-	}
-	return &map[string]interface{}{
-		"success": o.Success,
-		"errMsg":  errStr,
-		"data":    o.Data,
-	}
-}
-
-//获取购买订阅相关信息
-func (this *EditSub) GetSubBuyMsg() {
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	r := func() *editSubResult {
-		mData, ok := util.MQFW.FindById("user", userId, `{"o_vipjy":1,"i_vip_status":1}`)
-		if !ok || len(*mData) == 0 || mData == nil {
-			return &editSubResult{false, errors.New("获取信息失败"), nil}
-		}
-		o_vipjy := qutil.ObjToMap((*mData)["o_vipjy"])
-		//地区 城市 数量 修改次数
-		//editNum := qutil.IntAll(redis.Get("other", userId+"_SubEdit_"+time.Now().Month().String()))
-		return &editSubResult{true, nil, map[string]interface{}{
-			"isTrial":  qutil.IntAll((*mData)["i_vip_status"]) == 1,
-			"area":     (*o_vipjy)["o_area"],
-			"industry": (*o_vipjy)["a_buyerclass"],
-			"buyset":   (*o_vipjy)["o_buyset"],
-		}}
-	}()
-	if r.Err != nil {
-		log.Printf("%s GetSubBuyMsg err:%v\n", userId, r.Err.Error())
-	}
-	this.ServeJson(r.Format())
-}
-
-func (this *EditSub) SaveSubEdit() {
-	doType := qutil.ObjToString(this.GetString("type")) //area 或 industry
-	doValue := qutil.ObjToString(this.GetString("value"))
-	userId := qutil.ObjToString(this.GetSession("userId"))
-	r := func() *editSubResult {
-		//获取购买数量
-		buyset, isVip, err := entity.JyVipSubStruct.GetBuySet(userId)
-		if err != nil {
-			return &editSubResult{false, errors.New("查询出错"), nil}
-		}
-		if !isVip {
-			return &editSubResult{false, errors.New("非vip状态"), nil}
-		}
-		switch doType {
-		case "area":
-			areaNew := map[string]interface{}{}
-			err := json.Unmarshal([]byte(doValue), &areaNew)
-			if err != nil {
-				return &editSubResult{false, errors.New("数据格式错误"), nil}
-			}
-			if !entity.JyVipSubStruct.SubEditCheckArea(&areaNew, buyset) {
-				return &editSubResult{false, errors.New("非法操作"), nil}
-			}
-			if ok := util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"o_vipjy.o_area": areaNew}}); !ok {
-				return &editSubResult{false, errors.New("操作异常"), nil}
-			}
-			return &editSubResult{true, nil, nil}
-		case "industry":
-			industryNew := []string{}
-			err := json.Unmarshal([]byte(doValue), &industryNew)
-			if err != nil {
-				return &editSubResult{false, errors.New("数据格式错误"), nil}
-			}
-			if buyset.BuyerclassCount != -1 && (len(industryNew) == 0 || len(industryNew) > buyset.BuyerclassCount) {
-				return &editSubResult{false, errors.New("非法操作"), nil}
-			}
-			if ok := util.MQFW.UpdateById("user", userId, bson.M{"$set": bson.M{"o_vipjy.a_buyerclass": industryNew}}); !ok {
-				return &editSubResult{false, errors.New("操作异常"), nil}
-			}
-			return &editSubResult{true, nil, nil}
-		}
-		return &editSubResult{false, errors.New("未知操作"), nil}
-	}()
-	if r.Err != nil {
-		log.Printf("%s SaveSubEdit err:%v\n", userId, r.Err.Error())
-	}
-	this.ServeJson(r.Format())
-}

+ 22 - 41
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -40,7 +40,7 @@ func (this *SubVipPayOrder) CreateOrder() {
 	industry := strings.Split(this.GetString("industry"), ",")
 	date := this.GetString("time")
 	payWay := this.GetString("payWay")
-	orderType, _ := this.GetInteger("orderType") //1 简单付费,5 剩余三天 升降级付
+	orderType, _ := this.GetInteger("orderType") //1 简单付费,5 升降级续
 	userId := qutil.ObjToString(this.GetSession("userId"))
 	openId := qutil.ObjToString(this.GetSession("s_m_openid"))
 	r := func() *entity.FuncResult {
@@ -60,51 +60,32 @@ func (this *SubVipPayOrder) CreateOrder() {
 		if err != nil {
 			return &entity.FuncResult{false, err, nil}
 		}
-
-		if orderType == 5 {
-			//即将到期续费 若未选择 则取上次订单设置
-			selectedStr := this.GetString("selected")
-			selected := []bool{}
-			if json.Unmarshal([]byte(selectedStr), &selected) != nil {
-				return &entity.FuncResult{false, errors.New("数据异常"), nil}
-			}
-			if !selected[0] || !selected[0] {
-				//查询最后一笔订单
-				vipMsg, err := entity.JyVipSubStruct.GetUserLastOrderDetaul(userId)
-				if err != nil {
-					return &entity.FuncResult{false, errors.New("创建订单失败"), nil}
-				}
-				if !selected[0] {
-					area = vipMsg.Area
-				}
-				if !selected[1] {
-					industry = vipMsg.Industry
-				}
-			}
-		}
-		//即将到期续费区域展示buyset
-		exprieBuyset := entity.JyVipSubStruct.NewBuySet(area, industry)
-		buyset := &map[string]interface{}{}
-		(*buyset)["areacount"] = exprieBuyset.AreaCount
-		(*buyset)["buyerclasscount"] = exprieBuyset.BuyerclassCount
-		cityArr := exprieBuyset.Citys
-		citys := map[string]interface{}{}
-		for cityMap, cityCount := range cityArr {
-			citys[cityMap] = qutil.IntAll(cityCount)
-		}
-		(*buyset)["citys"] = citys
-		//
+		buyset := entity.JyVipSubStruct.NewBuySet(area, industry)
 		filter := entity.VipSimpleMsg{
 			area,
 			industry,
-			nil,
-			0,
-			buyset,
 			date_count,
 			date_unit,
+			nil,
+			buyset,
+			nil,
 			orderType,
 		}
-
+		//续费单子
+		if orderType == 5 {
+			log.Println(userData)
+			o_vipjy := qutil.ObjToMap((*userData)["o_vipjy"])
+			thisBuySet := qutil.ObjToMap((*o_vipjy)["o_buyset"])
+			log.Println(thisBuySet)
+			if len(*thisBuySet) == 0 {
+				return &entity.FuncResult{false, errors.New("创建续费订单出错"), nil}
+			}
+			filter.OldBuyset = &entity.SubvipBuySet{
+				qutil.IntAll((*thisBuySet)["areacount"]),
+				util.ConfirmIntArr((*thisBuySet)["newcitys"].([]interface{})),
+				qutil.IntAll((*thisBuySet)["buyerclasscount"]),
+			}
+		}
 		//插入订单表
 		mog_id := entity.JyVipSubStruct.SaveSelectLog(userId, openId, &filter)
 		if mog_id == "" {
@@ -296,7 +277,7 @@ func checkReqDate(dateStr string) (cyclecount, cycleunit int, err error) {
 	if strings.HasSuffix(dateStr, "年") {
 		cycleunit = 1
 		dateStr = strings.Replace(dateStr, "年", "", -1)
-		cyclecount, err = strconv.Atoi(dateStr)
+		cyclecount, err = strconv.Atoi(strings.Trim(dateStr, " "))
 		if cyclecount > 3 && err == nil {
 			err = errors.New(fmt.Sprintf("日期%s返回超出最大值", dateStr))
 		}
@@ -304,7 +285,7 @@ func checkReqDate(dateStr string) (cyclecount, cycleunit int, err error) {
 	} else if strings.HasSuffix(dateStr, "月") {
 		cycleunit = 2
 		dateStr = strings.Replace(dateStr, "个月", "", -1)
-		cyclecount, err = strconv.Atoi(dateStr)
+		cyclecount, err = strconv.Atoi(strings.Trim(dateStr, " "))
 		if cyclecount > 12 && err == nil {
 			err = errors.New(fmt.Sprintf("日期%s范围超出最大值", dateStr))
 		}

+ 4 - 3
src/jfw/modules/subscribepay/src/service/vipSubscribeTrial.go

@@ -280,14 +280,15 @@ func (this *TrialOrder) TrialPay() {
 		totalfee := 0
 		ordercode := pay.GetOrderCode(userId)
 		//存入订单表
+		buyset := entity.JyVipSubStruct.NewBuySet(area, industry)
 		filter := entity.VipSimpleMsg{
 			area,
 			industry,
-			nil,
-			0,
-			nil,
 			date_count,
 			date_unit,
+			nil,
+			buyset,
+			nil,
 			0,
 		}
 		filterStr, _ := json.Marshal(filter)

+ 9 - 0
src/jfw/modules/subscribepay/src/util/util.go

@@ -0,0 +1,9 @@
+package util
+
+func ConfirmIntArr(arr []interface{}) []int {
+	tmp := make([]int, 0)
+	for _, v := range arr {
+		tmp = append(tmp, int(v.(int)))
+	}
+	return tmp
+}

+ 35 - 60
src/web/templates/weixin/vipsubscribe/choose_area.html

@@ -384,7 +384,6 @@
 <script src="/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
 <script src="/vipsubscribe/js/mapJSON.js?v={{Msg "seo" "version"}}"></script>
 <script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
-{{include "/common/weixinNotShare.html"}}
 <script>
     var AreaChoose = {
         selectObj: {},//已选择,未购买城市;
@@ -394,7 +393,7 @@
         inintData: function () {
             //已选择
             try {
-                var select = sessionStorage.getItem("vipSubSelectArea");
+                let select = sessionStorage.getItem("vipSubSelectArea");
                 if (select) {
                     this.selectObj = JSON.parse(select);
                 }
@@ -431,9 +430,9 @@
             return tempHtml
         },
         showSelected: function (canClick) { //回显已选择
-            var ran = this.selectObj;
+            let ran = this.selectObj;
             for (var province in ran) {
-                var citys = ran[province]
+                let citys = ran[province]
                 if (citys.length > 0) {//地市
                     this.selectCity(citys, canClick)
                 } else {//省份
@@ -453,7 +452,7 @@
             })
         },
         selectCity: function (citys, canClick) { //设置选中城市
-            citys.forEach(function(v) {
+            citys.forEach(v => {
                 $($('.tab_content .city')).each(function (index, dom) {
                     if (v == $(dom).text()) {
                         $(".checkbox.other").attr("checked", false); //取消全国选中
@@ -484,21 +483,21 @@
             $(".tab_content").find(".city.active:not('[disabled]')").each(function () {
                 var length = $(this).parent('.tab_content').find('.city').length; //省份下城市的length
                 var activeLeng = $(this).parent('.tab_content').find('.city.active').length; //省份下选中城市的length
-                var arr = [];
+                let arr = [];
                 // 判断省份下的城市是否等于选中的城市长度,相等就是全部选中
                 if (length == activeLeng) {
                     // data.push($(this).parent('.tab_content').siblings('.tab:not(.whole)').children('.province').text().trim())
-                    var province = $(this).parent('.tab_content').siblings('.tab:not(.whole)').children('.province').text().trim();
+                    let province = $(this).parent('.tab_content').siblings('.tab:not(.whole)').children('.province').text().trim();
                     data.push({
                         name: province,
                         children: []
                     })
                 } else {
-                    var province = $(this).parent('.tab_content').siblings('.tab:not(.whole)').children('.province').text().trim();
-                    var city = $(this).html()
+                    let province = $(this).parent('.tab_content').siblings('.tab:not(.whole)').children('.province').text().trim();
+                    let city = $(this).html()
                     arr.push({name: city, parent: province})
-                    for (var i = 0; i < arr.length; i++) {
-                        var obj = {};
+                    for (let i = 0; i < arr.length; i++) {
+                        let obj = {};
                         obj.name = arr[i].name;
                         obj.parent = arr[i].parent;
                         cityArr.push(obj)
@@ -510,14 +509,14 @@
                 }
             })
             //数组对象去重
-            var obj = {};
-            data = data.reduce(function(cur, next) {
+            let obj = {};
+            data = data.reduce((cur, next) => {
                 obj[next.name] ? "" : obj[next.name] = true && cur.push(next);
                 return cur
             }, [])
             // 数组筛选
-            var result = data.map(function(v) {
-                var filterArr = v.children.filter(function (s) {
+            let result = data.map(v => {
+                let filterArr = v.children.filter(s => {
                     return s.parent === v.name
                 })
                 return {
@@ -530,45 +529,38 @@
             var selectCityMax = 0;
 
             for (var i = 0; i < result.length; i++) {
-                var children = result[i].children;
-
+                let children = result[i].children;
                 if (children.length > 0) {
                     // 判断每个省份下选中的城市长度,当大于等于4的时候 弹出"选择全省更划算的弹窗"
-                    var childrenArr = []; //判断操作城市省份下城市的数量
-
+                    let childrenArr = [];
+                    //判断操作城市省份下城市的数量
                     if (result[i].name === $.trim(changeCity)) {
                         selectCityMax = children.length;
                     }
-
-                    html += "".concat(result[i].name, "(");
-
+                    html += `${result[i].name}(`
                     for (var j = 0; j < children.length; j++) {
-                        childrenArr.push(children[j].name);
-
+                        childrenArr.push(children[j].name)
                         if (j != children.length - 1) {
-                            html += "".concat(children[j].name, "、");
+                            html += `${children[j].name}、`
                         } else {
-                            html += "".concat(children[j].name);
+                            html += `${children[j].name}`
                         }
                     }
-
                     if (i != result.length - 1) {
-                        html += ")、";
+                        html += `)、`
                     } else {
-                        html += ")";
+                        html += `)`
                     }
-
-                    tmpSelect[result[i].name] = childrenArr; //
+                    tmpSelect[result[i].name] = childrenArr;//
                 } else {
-                    selectProvince++;
+                    selectProvince++
 
                     if (i != result.length - 1) {
-                        html += "".concat(result[i].name, "、");
+                        html += `${result[i].name}、`
                     } else {
-                        html += "".concat(result[i].name);
+                        html += `${result[i].name}`
                     }
-
-                    tmpSelect[result[i].name] = []; //
+                    tmpSelect[result[i].name] = [];//
                 }
             }
 
@@ -599,14 +591,8 @@
             }
         },
         submitArea: function () {
-            var addCity = $('.result_name').text(); //新增的城市
+            let addCity = $('.result_name').text(); //新增的城市
             sessionStorage.setItem("vipSubSelectArea", JSON.stringify(AreaChoose.selectObj));
-            if (sessionStorage.getItem("vipSubSelectArea_buyed")) {
-                sessionStorage.removeItem("vipSubSelectArea_buyed");
-            }
-            if (sessionStorage.getItem("areaSelectNotFlushed")) {
-                sessionStorage.removeItem("areaSelectNotFlushed");
-            }
             history.go(-1);
         },
         isAllSelected: function () {
@@ -623,16 +609,16 @@
             }
         },
         isOpen: function () {
-            var pHeight = $('.result_text').height()
-            var minHeight = $('.result_text').css('min-height')
-            var rows = Math.round(Math.round(pHeight) / parseFloat(minHeight));
+            let pHeight = $('.result_text').height()
+            let minHeight = $('.result_text').css('min-height')
+            let rows = Math.round(Math.round(pHeight) / parseFloat(minHeight));
             console.log("高度:" + pHeight, "最小高度" + minHeight, "行数:" + rows)
             if (rows == 1) {
                 $('.packup').hide()
                 $('.detail').hide()
             } else if (rows == 2) {
                 console.log($('.result_name').html().trim().length)
-                var length = $('.result_name').html().trim().length;
+                let length = $('.result_name').html().trim().length;
                 if (length >= 50) {
                     $('.detail').show()
                     $('.packup').hide()
@@ -758,28 +744,17 @@
                 'input').prop({
                 'checked': false,
                 "disabled": false
-            }).removeClass('half');
+            });
             $('.tab_content').find('.city').removeClass('active').attr({
                 "disabled": false,
                 "checked": false
             })
             AreaChoose.getResult()
         },
-        buyset: undefined,
         flushPrice: function (flag) {
             if (!this.vipSubisTrial) {
-                if (!this.buyset && sessionStorage.getItem("vipSubBuySet")) {
-                    this.buyset = JSON.parse(sessionStorage.getItem("vipSubBuySet"))
-                }
                 $('.tips_d_money').css("display", "block");
-                var price;
-                if (sessionStorage.getItem("industrySelectNotFlushed")) {
-                    var mBuyset = getBuySet(this.selectObj, []);
-                    mBuyset.buyerclasscount = this.buyset.buyerclasscount;
-                    price = getsubVipOrderPriceBybuyset(mBuyset, this.timeSelect);
-                } else {
-                    price = getsubVipOrderPrice(this.selectObj, this.selectedIndustryArr, this.timeSelect);
-                }
+                var price = getsubVipOrderPrice(this.selectObj, this.selectedIndustryArr, this.timeSelect);
                 $('.tips_d_money').text('¥' + price);
             }
             if (flag === -1) {

+ 10 - 34
src/web/templates/weixin/vipsubscribe/choose_industry.html

@@ -244,7 +244,6 @@
 <script src="/vipsubscribe/js/jquery-2.1.4.js?v={{Msg "seo" "version"}}"></script>
 <script src="/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}"></script>
 <script src="/vipsubscribe/js/common.js?v={{Msg "seo" "version"}}"></script>
-{{include "/common/weixinNotShare.html"}}
 <script>
 
     // 点击导航跳转
@@ -256,18 +255,16 @@
         document.querySelector('#' + s).scrollIntoView({block: 'center'});
     })
 
-    function insertIndustryItem(letter) {
-        var industryArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
-        if (!letter) return;
-        var query = "#".concat(letter[0].toUpperCase(), " .item_industry_list");
-        var industryItemContainer = $(query);
-        var buttonArr = [];
+    function insertIndustryItem(letter, industryArr = []) {
+        if (!letter) return
+        var query = `#${letter[0].toUpperCase()} .item_industry_list`
+        var industryItemContainer = $(query)
+        var buttonArr = []
 
         for (var i = 0; i < industryArr.length; i++) {
-            buttonArr.push("<button class=\"industry_item\" ".concat(industryArr[i].disabled ? 'disabled' : '', ">").concat(industryArr[i].name, "</button>"));
+            buttonArr.push(`<button class="industry_item" ${industryArr[i].disabled ? 'disabled' : ''}>${industryArr[i].name}</button>`)
         }
-
-        industryItemContainer.html(buttonArr.join(''));
+        industryItemContainer.html(buttonArr.join(''))
     }
 
     function findSelectedIndustry(notShowTip) {
@@ -296,7 +293,7 @@
             $(".save-btn").removeAttr("disabled");
             flushPrice()//刷新价格
         } else {
-            $(".save-btn").attr("disabled", "disabled");
+            $(".save-btn").attr("disabled","disabled");
             flushPrice(-1)//刷新价格
         }
 
@@ -321,7 +318,7 @@
 
     function showSelect(arr, canclick) {
         if (!arr) return
-        arr.forEach(function(v) {
+        arr.forEach(v => {
             $($('.industry_item')).each(function (index, dom) {
                 if (canclick && v != "全部行业") {
                     $('#all').children().children('button').removeClass('active');
@@ -333,24 +330,9 @@
         })
     }
 
-    var buyset = undefined;
-
     function flushPrice(flag) {
         if (!vipSubisTrial) {
-            if (!buyset && sessionStorage.getItem("vipSubBuySet")) {
-                buyset = JSON.parse(sessionStorage.getItem("vipSubBuySet"))
-            }
-            var price;
-
-            if (sessionStorage.getItem("areaSelectNotFlushed")) {
-                mBuyset = getBuySet({}, selectedIndustryArr);
-                mBuyset.citys = buyset.citys;
-                mBuyset.areacount = buyset.areacount;
-                price = getsubVipOrderPriceBybuyset(mBuyset, timeSelect);
-            } else {
-                price = getsubVipOrderPrice(selectedAreaObj, selectedIndustryArr, timeSelect);
-            }
-
+            var price = getsubVipOrderPrice(selectedAreaObj, selectedIndustryArr, timeSelect);
             $('.tips_d_money').css("display", "block").text('¥' + price);
         }
         if (flag == -1) {
@@ -388,12 +370,6 @@
     $('.save-btn').on('click', function () {
         console.log(selectedIndustryArr)
         sessionStorage.setItem("vipSubSelectIndustry", JSON.stringify(selectedIndustryArr));
-        if (sessionStorage.getItem("vipSubSelectIndustry_buyed")) {
-            sessionStorage.removeItem("vipSubSelectIndustry_buyed");
-        }
-        if (sessionStorage.getItem("industrySelectNotFlushed")) {
-            sessionStorage.removeItem("industrySelectNotFlushed")
-        }
         history.go(-1);
     })
 

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

@@ -369,7 +369,7 @@
 		//
 		function rebuy(){
 			if(!checkOrder()){
-				window.location.href="/weixin/pay/renewPayPage"
+                window.location.href="/weixin/pay/vipsubscribe_renew"
 			}
 		}
     </script>

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

@@ -347,7 +347,28 @@
                     if (sessionStorage.getItem("vipSubSelectIndustry")) {
                         this.industrySelect = JSON.parse(sessionStorage.getItem("vipSubSelectIndustry"));
                     }
-                  
+                    {{if eq .T.orderType 5 }}
+                    $('#payHandle').text("立即续费");
+                    //即将到期 回显已购买
+                    if (!sessionStorage.getItem("vipSubSelectArea") || !sessionStorage.getItem("vipSubSelectIndustry")) {
+                        $DoPost("/subscribepay/vipsubscribe/getSubBuyMsg", {}, function (r) {
+                            if (r.success) {
+                                if (!$.isEmptyObject(r.data.area)) {
+                                    purchase.areaSelect = r.data.area
+                                } else {
+                                    purchase.areaSelect = {"全国": []}
+                                }
+                                if (r.data.industry.length != 0) {
+                                    purchase.industrySelect = r.data.industry
+                                } else {
+                                    purchase.industrySelect = ["全部行业"]
+                                }
+                                sessionStorage.setItem("vipSubSelectArea", JSON.stringify(purchase.areaSelect));
+                                sessionStorage.setItem("vipSubSelectIndustry", JSON.stringify(purchase.industrySelect));
+                            }
+                        }, false)
+                    }
+                    {{end}}
                     {{if .T.again}}    //再次购买回显
                     {{if eq .T.again 1 }}
                     var orderCode = getParam("orderCode")