Pārlūkot izejas kodu

fix:升级计费修改

duxin 2 mēneši atpakaļ
vecāks
revīzija
bf4cb19542

+ 3 - 3
internal/logic/product/bigmember/price.go

@@ -52,7 +52,7 @@ func (p jyBigProduct) GetPrice() (price int64, err error) {
 		}
 
 		if p.param.Filter.ComboId != 0 { //套餐
-			price = thisPriceSetting.UnityPrice(p.param.Filter.BuyCycle+p.param.Filter.GiftCycle, cycleType, gconv.Int(finalAccountCount), 0, p.param.ReqSubject == 2)
+			price = thisPriceSetting.UnityPrice(gconv.Float64(p.param.Filter.BuyCycle+p.param.Filter.GiftCycle), cycleType, gconv.Int(finalAccountCount), 0, p.param.ReqSubject == 2)
 		} else if len(p.param.Filter.ServiceIds) > 0 { //自定义
 			price = DiyBigMember(context.Background(), 1, gconv.Int(finalAccountCount+1), utility.GetMonthNum(p.param.Filter.BuyCycle+p.param.Filter.GiftCycle, cycleType), p.param.UserId, p.param.Filter.ServiceIds, p.param.ReqSubject == 2)
 			//获取各个服务
@@ -143,7 +143,7 @@ func (p jyBigProduct) GetPrice() (price int64, err error) {
 					}
 				}
 			}*/
-			price += thisPriceSetting.UnityPrice(p.param.Filter.BuyCycle+p.param.Filter.GiftCycle, cycleType, gconv.Int(finalAccountCount), 0, p.param.ReqSubject == 2)
+			price += thisPriceSetting.UnityPrice(gconv.Float64(p.param.Filter.BuyCycle+p.param.Filter.GiftCycle), cycleType, gconv.Int(finalAccountCount), 0, p.param.ReqSubject == 2)
 		} else { //自定义
 			//获取各个服务
 			/*var (
@@ -188,7 +188,7 @@ func (p jyBigProduct) GetPrice() (price int64, err error) {
 			return 0, fmt.Errorf("会员状态即将到期")
 		}
 		if p.param.ProductCode != "dyh001" { //升级子账号
-			price = thisPriceSetting.UnityPrice(utility.GetMonthNumTime(time.Now(), entTime), 2, gconv.Int(finalAccountCount), 0, p.param.ReqSubject == 2, "1")
+			price = thisPriceSetting.UnityPrice(gconv.Float64(utility.GetMonthDayNum(time.Now(), entTime)), 2, gconv.Int(finalAccountCount), 0, p.param.ReqSubject == 2, "1")
 		} else { //补充服务和升级子账号
 			price = DiyBigMember(context.Background(), 2, gconv.Int(finalAccountCount), utility.GetMonthNumTime(time.Now(), entTime), p.param.UserId, p.param.Filter.SupServiceIds, p.param.ReqSubject == 2)
 		}

+ 203 - 23
internal/logic/product/common.go

@@ -1,14 +1,18 @@
 package product
 
 import (
+	"app.yhyue.com/moapp/jybase/common"
 	"context"
 	"fmt"
 	"github.com/gogf/gf/v2/database/gdb"
+	"github.com/gogf/gf/v2/errors/gcode"
+	"github.com/gogf/gf/v2/errors/gerror"
 	"github.com/gogf/gf/v2/frame/g"
 	"github.com/gogf/gf/v2/util/gconv"
 	"github.com/pkg/errors"
 	"jyOrderManager/internal/jyutil"
 	"jyOrderManager/internal/model"
+	"jyOrderManager/internal/service"
 	"math"
 	"time"
 )
@@ -117,8 +121,8 @@ type ProductPricing struct {
 	EntAccount int64 `json:"entAccount"` //企业账号费用
 }
 
-// UnityPrice 计费
-func (ps NewPriceSetting) UnityPrice(num, cycleType, subAccount, price int, isEnt bool, sType ...string) int64 {
+// UnityPrice 计费 ((主账号+子账号价格)/折合成月 - 升级差价)*月份
+func (ps NewPriceSetting) UnityPrice(num float64, cycleType, subAccount int, diffPrice float64, isEnt bool, sType ...string) int64 {
 	switch cycleType { // 类型 1天 2月 3年 4季度
 	case 1:
 		//查找在哪个分类中
@@ -130,22 +134,30 @@ func (ps NewPriceSetting) UnityPrice(num, cycleType, subAccount, price int, isEn
 				subPrice = gconv.Float64(pricing.Account)
 			}
 			var newPrice float64
-			if price != 0 {
-				newPrice = gconv.Float64(price)
-			} else {
+			if len(sType) == 0 { //升级服务 只升级账号费用
 				newPrice = gconv.Float64(pricing.Price)
 			}
 			switch pricing.TimeType { // 类型 1月 2年 3季度
 			case 1: //
 				if float64(num)/30 >= gconv.Float64(pricing.Min) && float64(num)/30 < float64(pricing.Max) {
+					//((主账号+子账号价格)/折合成月 - 升级差价)*月份
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * (float64(num) / 30)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / (float64(num) / 30))))
 				}
 			case 2:
 				if float64(num)/360 >= gconv.Float64(pricing.Min) && float64(num)/360 < float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * (float64(num) / 30)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / (float64(num) / 30))))
 				}
 			case 3:
 				if float64(num)/90 >= gconv.Float64(pricing.Min) && float64(num)/90 < float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * (float64(num) / 30)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / (float64(num) / 30))))
 				}
 			}
@@ -161,23 +173,28 @@ func (ps NewPriceSetting) UnityPrice(num, cycleType, subAccount, price int, isEn
 			}
 			var newPrice float64
 			if len(sType) == 0 { //升级服务 只升级账号费用
-				if price != 0 {
-					newPrice = gconv.Float64(price)
-				} else {
-					newPrice = gconv.Float64(pricing.Price)
-				}
+				newPrice = gconv.Float64(pricing.Price)
 			}
 			switch pricing.TimeType { // 类型 1月 2年
 			case 1: //
-				if num >= pricing.Min && num < pricing.Max {
+				if num >= gconv.Float64(pricing.Min) && num < gconv.Float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num))))
 				}
 			case 2:
-				if float64(num/12) >= gconv.Float64(pricing.Min) && float64(num/12) < float64(pricing.Max) {
+				if num/12 >= gconv.Float64(pricing.Min) && num/12 < float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num))))
 				}
 			case 3:
 				if float64(num)/3 >= gconv.Float64(pricing.Min) && float64(num)/3 < float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num))))
 				}
 			}
@@ -192,18 +209,22 @@ func (ps NewPriceSetting) UnityPrice(num, cycleType, subAccount, price int, isEn
 				subPrice = gconv.Float64(pricing.Account)
 			}
 			var newPrice float64
-			if price != 0 {
-				newPrice = gconv.Float64(price)
-			} else {
+			if len(sType) == 0 { //升级服务 只升级账号费用
 				newPrice = gconv.Float64(pricing.Price)
 			}
 			switch pricing.TimeType { // 类型 1月 2年
 			case 1: //
-				if num*12 >= pricing.Min && num*12 < pricing.Max {
+				if num*12 >= gconv.Float64(pricing.Min) && num*12 < gconv.Float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num*12)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num*12))))
 				}
 			case 2:
-				if float64(num) >= gconv.Float64(pricing.Min) && float64(num) < float64(pricing.Max) {
+				if num >= gconv.Float64(pricing.Min) && num < float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num*12)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num*12))))
 				}
 			}
@@ -218,22 +239,29 @@ func (ps NewPriceSetting) UnityPrice(num, cycleType, subAccount, price int, isEn
 				subPrice = gconv.Float64(pricing.Account)
 			}
 			var newPrice float64
-			if price != 0 {
-				newPrice = gconv.Float64(price)
-			} else {
+			if len(sType) == 0 { //升级服务 只升级账号费用
 				newPrice = gconv.Float64(pricing.Price)
 			}
 			switch pricing.TimeType { // 类型 1月 2年
 			case 1:
-				if num*3 >= pricing.Min && num*3 < pricing.Max {
+				if num*3 >= gconv.Float64(pricing.Min) && num*3 < gconv.Float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num*3)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num*3))))
 				}
 			case 2: //
-				if gconv.Float64(num) >= gconv.Float64(pricing.Min) && gconv.Float64(num) < gconv.Float64(pricing.Max) {
+				if gconv.Float64(num/4) >= gconv.Float64(pricing.Min) && gconv.Float64(num/4) < gconv.Float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num*3)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num*3))))
 				}
 			case 3:
-				if float64(num) >= gconv.Float64(pricing.Min) && float64(num) < float64(pricing.Max) {
+				if num >= gconv.Float64(pricing.Min) && num < float64(pricing.Max) {
+					if diffPrice != 0 {
+						return gconv.Int64(math.Floor(((newPrice+subPrice*gconv.Float64(subAccount))/float64(pricing.Unit) - diffPrice) * float64(num*3)))
+					}
 					return gconv.Int64(math.Floor((newPrice + subPrice*gconv.Float64(subAccount)) / (float64(pricing.Unit) / float64(num*3))))
 				}
 			}
@@ -242,3 +270,155 @@ func (ps NewPriceSetting) UnityPrice(num, cycleType, subAccount, price int, isEn
 
 	return 0
 }
+
+func (ps NewPriceSetting) MonthlyUnitPrice(num float64, cycleType int, isEnt bool) (month, mPrice, sPrice float64) {
+	switch cycleType { // 类型 1天 2月 3年 4季度
+	case 1:
+		//查找在哪个分类中
+		for _, pricing := range ps.PrPi {
+			var subPrice float64
+			if isEnt {
+				subPrice = gconv.Float64(pricing.EntAccount)
+			} else {
+				subPrice = gconv.Float64(pricing.Account)
+			}
+			newPrice := gconv.Float64(pricing.Price)
+			switch pricing.TimeType { // 类型 1月 2年 3季度
+			case 1: //
+				if float64(num)/30 >= gconv.Float64(pricing.Min) && float64(num)/30 < float64(pricing.Max) {
+					return float64(num) / 30, newPrice, subPrice
+				}
+			case 2:
+				if num/360 >= gconv.Float64(pricing.Min) && num/360 < float64(pricing.Max) {
+					return float64(num) / 30, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			case 3:
+				if float64(num)/90 >= gconv.Float64(pricing.Min) && float64(num)/90 < float64(pricing.Max) {
+					return float64(num) / 30, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			}
+		}
+	case 2:
+		//查找在哪个分类中
+		for _, pricing := range ps.PrPi {
+			var subPrice float64
+			if isEnt {
+				subPrice = gconv.Float64(pricing.EntAccount)
+			} else {
+				subPrice = gconv.Float64(pricing.Account)
+			}
+			newPrice := gconv.Float64(pricing.Price)
+			switch pricing.TimeType { // 类型 1月 2年
+			case 1: //
+				if num >= gconv.Float64(pricing.Min) && num < gconv.Float64(pricing.Max) {
+					return num, newPrice, subPrice
+				}
+			case 2:
+				if num/12 >= gconv.Float64(pricing.Min) && num/12 < float64(pricing.Max) {
+					return num, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			case 3:
+				if num/3 >= gconv.Float64(pricing.Min) && num/3 < float64(pricing.Max) {
+					return num, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			}
+		}
+	case 3:
+		//查找在哪个分类中
+		for _, pricing := range ps.PrPi {
+			var subPrice float64
+			if isEnt {
+				subPrice = gconv.Float64(pricing.EntAccount)
+			} else {
+				subPrice = gconv.Float64(pricing.Account)
+			}
+			newPrice := gconv.Float64(pricing.Price)
+			switch pricing.TimeType { // 类型 1月 2年
+			case 1: //
+				if num*12 >= gconv.Float64(pricing.Min) && num*12 < gconv.Float64(pricing.Max) {
+					return num * 12, newPrice, subPrice
+				}
+			case 2:
+				if num >= gconv.Float64(pricing.Min) && num < float64(pricing.Max) {
+					return num * 12, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			case 3:
+				if num*4 >= gconv.Float64(pricing.Min) && num*4 < float64(pricing.Max) {
+					return num * 12, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			}
+		}
+	case 4:
+		//查找在哪个分类中
+		for _, pricing := range ps.PrPi {
+			var subPrice float64
+			if isEnt {
+				subPrice = gconv.Float64(pricing.EntAccount)
+			} else {
+				subPrice = gconv.Float64(pricing.Account)
+			}
+			newPrice := gconv.Float64(pricing.Price)
+			switch pricing.TimeType { // 类型 1月 2年
+			case 1:
+				if num*3 >= gconv.Float64(pricing.Min) && num*3 < gconv.Float64(pricing.Max) {
+					return num * 3, newPrice, subPrice
+				}
+			case 2: //
+				if gconv.Float64(num/4) >= gconv.Float64(pricing.Min) && gconv.Float64(num/4) < gconv.Float64(pricing.Max) {
+					return num * 3, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			case 3:
+				if num >= gconv.Float64(pricing.Min) && num < float64(pricing.Max) {
+					return num * 3, newPrice / gconv.Float64(pricing.Unit), subPrice / gconv.Float64(pricing.Unit)
+				}
+			}
+		}
+	}
+	return
+}
+
+func isTimeFormat(str string) (time.Time, error) {
+	tm, err := time.Parse("2006-01-02 15:04:05", str)
+	return tm, err
+}
+func OrderUnitPrice(id int64) (float64, float64, float64, error) {
+	data, _ := g.DB().GetOne(context.Background(), `SELECT dor.create_time,jod.service_endtime,dor.buy_subject,jod.product_code,jod.service_type,jod.filter FROM jy_order_detail jod
+INNER JOIN dataexport_order dor on jod.order_code = dor.order_code
+WHERE jod.id = ?`, id)
+	if data.IsEmpty() {
+		return 0, 0, 0, errors.New("关联订单获取异常")
+	}
+	sVal, err := service.Product().GetProduct(gconv.String(data.Map()["product_code"]))
+	if err != nil {
+		return 0, 0, 0, err
+	}
+	//var thisPriceSetting priceSetting
+	var thisPriceSetting NewPriceSetting
+	if err := gconv.Struct(sVal.Price["rule"], &thisPriceSetting); err != nil {
+		return 0, 0, 0, gerror.NewCode(gcode.CodeValidationFailed, "价格格式配置异常")
+	}
+	filterMap := gconv.Map(data.Map()["filter"])
+
+	switch data.Map()["service_type"] {
+	case 1, 2, 4: //购买续费试用
+		cycleType := common.If(gconv.Int(filterMap["buy_cycle"]) != 0, gconv.Int(filterMap["buy_cycle"]), gconv.Int(filterMap["give_cycle"])).(int)
+
+		month, mPrice, sPrice := thisPriceSetting.MonthlyUnitPrice(gconv.Float64(filterMap["buy_cycle"])+gconv.Float64(filterMap["give_cycle"]), cycleType, gconv.Int(data.Map()["buy_subject"]) == 2)
+		return month, mPrice, sPrice, err
+	case 3:
+		create_time := gconv.String(data.Map()["create_time"])
+		service_endtime := gconv.String(data.Map()["service_endtime"])
+		tm1, err := isTimeFormat(create_time)
+		if err != nil {
+			return 0, 0, 0, errors.New("关联订单时间格式异常")
+		}
+		tm2, err := isTimeFormat(service_endtime)
+		if err != nil {
+			return 0, 0, 0, errors.New("关联订单时间格式异常")
+		}
+
+		month, mPrice, sPrice := thisPriceSetting.MonthlyUnitPrice(tm2.Sub(tm1).Hours()/24, 1, gconv.Int(data.Map()["buy_subject"]) == 2)
+		return month, mPrice, sPrice, err
+	}
+	return 0, 0, 0, err
+}

+ 56 - 36
internal/logic/product/subvip/price.go

@@ -10,6 +10,8 @@ import (
 	common2 "jyOrderManager/internal/logic/product"
 	"jyOrderManager/internal/service"
 	"jyOrderManager/utility"
+
+	//"jyOrderManager/utility"
 	"time"
 )
 
@@ -49,7 +51,7 @@ func (p jySubVipProduct) GetPrice() (price int64, err error) {
 			totalNum += p.OrderDetail.Filter.GiftAccountCount + p.OrderDetail.Filter.BuyAccountCount - productClass.CutAccount
 		}
 		//p, err := thisPriceSetting.GetPrice(p.OrderDetail.Filter.BuyCycle+p.OrderDetail.Filter.GiftCycle, cycleType)
-		price = thisPriceSetting.UnityPrice(p.OrderDetail.Filter.BuyCycle+p.OrderDetail.Filter.GiftCycle, cycleType, totalNum-1, 0, false)
+		price = thisPriceSetting.UnityPrice(gconv.Float64(p.OrderDetail.Filter.BuyCycle+p.OrderDetail.Filter.GiftCycle), cycleType, totalNum-1, 0, false)
 		//if err != nil {
 		//	return 0, err
 		//}
@@ -102,7 +104,7 @@ func (p jySubVipProduct) GetPrice() (price int64, err error) {
 		//if err != nil {
 		//	return 0, err
 		//}
-		price = thisPriceSetting.UnityPrice(p.OrderDetail.Filter.BuyCycle+p.OrderDetail.Filter.GiftCycle, cycleType, gconv.Int(filter.FinalAccountCount-1), 0, false)
+		price = thisPriceSetting.UnityPrice(gconv.Float64(p.OrderDetail.Filter.BuyCycle+p.OrderDetail.Filter.GiftCycle), cycleType, gconv.Int(filter.FinalAccountCount-1), 0, false)
 
 		//price = pr * gconv.Int64(filter.FinalAccountCount)
 
@@ -135,8 +137,8 @@ func (p jySubVipProduct) GetPrice() (price int64, err error) {
 		var (
 			areaTotalNum = oldFilter.FinalAreaCount //购买省份数量
 			now          = time.Now()
-			p1           int64 //现套餐价格
-			p2           int64 //原套餐价格
+			//p1           int64 //现套餐价格
+			//p2           int64 //原套餐价格
 		)
 		sVal1, err := service.Product().GetProduct(p.OrderDetail.ProductCode)
 		if err != nil {
@@ -150,38 +152,56 @@ func (p jySubVipProduct) GetPrice() (price int64, err error) {
 			return 0, fmt.Errorf("会员状态即将到期")
 		}
 
-		mNum, day := utility.GetMonthDayNum(time.Now(), entTime)
-		sVal2, err := service.Product().GetPriceConfig(fmt.Sprintf("cjdy%03d", gconv.Int(common.If(areaTotalNum > 15 || areaTotalNum == -1, 16, areaTotalNum))))
-		if err != nil {
-			return 0, err
-		}
-		/*var thisPriceSetting1, thisPriceSetting2 priceSetting
-		if err := gconv.Struct(sVal1.Price["rule"], &thisPriceSetting1); err != nil {
-			return 0, gerror.NewCode(gcode.CodeValidationFailed, "价格格式配置异常")
+		//mNum, day := utility.GetMonthDayNum(time.Now(), entTime)
+		/*
+			sVal2, err := service.Product().GetPriceConfig(fmt.Sprintf("cjdy%03d", gconv.Int(common.If(areaTotalNum > 15 || areaTotalNum == -1, 16, areaTotalNum))))
+					if err != nil {
+						return 0, err
+					}
+				var thisPriceSetting1, thisPriceSetting2 priceSetting
+				if err := gconv.Struct(sVal1.Price["rule"], &thisPriceSetting1); err != nil {
+					return 0, gerror.NewCode(gcode.CodeValidationFailed, "价格格式配置异常")
+				}
+
+				if err := gconv.Struct(sVal2.Rule, &thisPriceSetting2); err != nil {
+					return 0, gerror.NewCode(gcode.CodeValidationFailed, "价格格式配置异常")
+				}
+				p1, err = thisPriceSetting1.GetPrice(mNum, 2)
+				if err != nil {
+					return 0, err
+				}
+				p3, err3 := thisPriceSetting1.GetPrice(day, 1)
+				if err3 != nil {
+					return 0, err
+				}
+				p1 += p3 //天数费用
+				p2, err = thisPriceSetting2.GetPrice(mNum, 2)
+				if err != nil {
+					return 0, err
+				}
+				p4, err4 := thisPriceSetting2.GetPrice(day, 1)
+				if err4 != nil {
+					return 0, err
+				}*/
+		var (
+			month, mPrice float64
+		)
+		if sVal1.UnitNum > areaTotalNum { //升级服务
+			month, mPrice, _, err = common2.OrderUnitPrice(p.OrderDetail.LinkedOrderId)
+			if err != nil {
+				return 0, gerror.NewCode(gcode.CodeValidationFailed, "关联订单计费失败")
+			}
+		} else { //仅购买子账号
+			month = utility.GetMonthDayNum(time.Now(), entTime)
 		}
 
-		if err := gconv.Struct(sVal2.Rule, &thisPriceSetting2); err != nil {
+		var thisPriceSetting11 common2.NewPriceSetting
+		if err := gconv.Struct(sVal1.Price["rule"], &thisPriceSetting11); err != nil {
 			return 0, gerror.NewCode(gcode.CodeValidationFailed, "价格格式配置异常")
 		}
-		p1, err = thisPriceSetting1.GetPrice(mNum, 2)
-		if err != nil {
-			return 0, err
-		}
-		p3, err3 := thisPriceSetting1.GetPrice(day, 1)
-		if err3 != nil {
-			return 0, err
-		}
-		p1 += p3 //天数费用
-		p2, err = thisPriceSetting2.GetPrice(mNum, 2)
-		if err != nil {
-			return 0, err
-		}
-		p4, err4 := thisPriceSetting2.GetPrice(day, 1)
-		if err4 != nil {
-			return 0, err
-		}*/
+		price = thisPriceSetting11.UnityPrice(month, 2, p.OrderDetail.Filter.BuyAccountCount+p.OrderDetail.Filter.GiftAccountCount, mPrice, false, "1")
 
-		var thisPriceSetting11, thisPriceSetting22 common2.NewPriceSetting
+		/*var thisPriceSetting11, thisPriceSetting22 common2.NewPriceSetting
 		if err := gconv.Struct(sVal1.Price["rule"], &thisPriceSetting11); err != nil {
 			return 0, gerror.NewCode(gcode.CodeValidationFailed, "价格格式配置异常")
 		}
@@ -189,12 +209,12 @@ func (p jySubVipProduct) GetPrice() (price int64, err error) {
 		if err := gconv.Struct(sVal2.Rule, &thisPriceSetting22); err != nil {
 			return 0, gerror.NewCode(gcode.CodeValidationFailed, "价格格式配置异常")
 		}
-		p1 = thisPriceSetting11.UnityPrice(mNum, 2, 0, 0, false)
-		p3 := thisPriceSetting11.UnityPrice(day, 1, 8, 0, false)
+		p1 = thisPriceSetting11.UnityPrice(mNum, 2, 0, false)
+		p3 := thisPriceSetting11.UnityPrice(day, 1, 0, false)
 		p1 += p3 //天数费用
 
-		p2 = thisPriceSetting22.UnityPrice(mNum, 2, 0, 0, false)
-		p4 := thisPriceSetting22.UnityPrice(day, 1, 0, 0, false)
+		p2 = thisPriceSetting22.UnityPrice(mNum, 2, 0, false)
+		p4 := thisPriceSetting22.UnityPrice(day, 1, 0, false)
 		p2 += p4 //天数费用
 
 		var price1, price2 int64 //price1旧套餐升级  price2新增人数
@@ -203,7 +223,7 @@ func (p jySubVipProduct) GetPrice() (price int64, err error) {
 		if p.OrderDetail.Filter.BuyAccountCount+p.OrderDetail.Filter.GiftAccountCount > 0 {
 			price2 = p1 * gconv.Int64(p.OrderDetail.Filter.BuyAccountCount+p.OrderDetail.Filter.GiftAccountCount)
 		}
-		price = price1 + price2
+		price = price1 + price2*/
 	default:
 		err = fmt.Errorf("超级订阅未知订单类型")
 	}

+ 2 - 2
utility/dateUtil.go

@@ -39,7 +39,7 @@ func GetStartAndEndTime(s time.Time, d ...DateComp) (st, et time.Time) {
 	return
 }
 
-func GetMonthDayNum(startTime, endTime time.Time) (int, int) {
+func GetMonthDayNum(startTime, endTime time.Time) float64 {
 	// 定义开始时间和结束时间
 	//start := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
 	//end := time.Date(2024, time.March, 30, 0, 0, 0, 0, time.UTC)
@@ -57,7 +57,7 @@ func GetMonthDayNum(startTime, endTime time.Time) (int, int) {
 		day = gconv.Int(endTime.Sub(startTime.AddDate(0, months, 0)).Hours()) / 24
 	}
 	//fmt.Printf("月份差异为:%d\n", months)
-	return months, day
+	return gconv.Float64(months) + gconv.Float64(day)/30
 }
 
 func GetMonthNum(num, cycleType int) (monthCount int) {