From fafb22929558fe1f2713d3a2e249ef512af7b9f1 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Wed, 11 Mar 2026 03:56:48 -0700 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BA=E6=8A=98=E6=89=A3=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E5=87=BD=E6=95=B0=20`getDiscount`=20=E5=BC=95?= =?UTF-8?q?=E5=85=A5=E6=96=B0=E7=94=A8=E6=88=B7=E5=88=A4=E6=96=AD=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BB=A5=E6=94=AF=E6=8C=81=E6=96=B0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=93=E5=B1=9E=E6=8A=98=E6=89=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/logic/public/order/getDiscount.go | 5 ++++- internal/logic/public/order/preCreateOrderLogic.go | 3 ++- internal/logic/public/order/purchaseLogic.go | 3 ++- internal/logic/public/order/renewalLogic.go | 2 +- internal/logic/public/portal/prePurchaseOrderLogic.go | 2 +- internal/logic/public/portal/purchaseLogic.go | 2 +- internal/logic/public/portal/tool.go | 5 ++++- 7 files changed, 15 insertions(+), 7 deletions(-) diff --git a/internal/logic/public/order/getDiscount.go b/internal/logic/public/order/getDiscount.go index df76128..af21ced 100644 --- a/internal/logic/public/order/getDiscount.go +++ b/internal/logic/public/order/getDiscount.go @@ -2,10 +2,13 @@ package order import "github.com/perfect-panel/server/internal/types" -func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64) float64 { +func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64, isNewUser bool) float64 { var finalDiscount float64 = 100 for _, discount := range discounts { + if discount.NewUserOnly && !isNewUser { + continue + } if inputMonths >= discount.Quantity && discount.Discount < finalDiscount { finalDiscount = discount.Discount } diff --git a/internal/logic/public/order/preCreateOrderLogic.go b/internal/logic/public/order/preCreateOrderLogic.go index 711306b..3202c6d 100644 --- a/internal/logic/public/order/preCreateOrderLogic.go +++ b/internal/logic/public/order/preCreateOrderLogic.go @@ -133,10 +133,11 @@ func (l *PreCreateOrderLogic) PreCreateOrder(req *types.PurchaseOrderRequest) (r } var discount float64 = 1 + isNewUserForDiscount := time.Since(u.CreatedAt) <= 24*time.Hour if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, isNewUserForDiscount) } price := sub.UnitPrice * req.Quantity diff --git a/internal/logic/public/order/purchaseLogic.go b/internal/logic/public/order/purchaseLogic.go index a8cb010..0f21651 100644 --- a/internal/logic/public/order/purchaseLogic.go +++ b/internal/logic/public/order/purchaseLogic.go @@ -129,10 +129,11 @@ func (l *PurchaseLogic) Purchase(req *types.PurchaseOrderRequest) (resp *types.P } var discount float64 = 1 + isNewUserForDiscount := time.Since(u.CreatedAt) <= 24*time.Hour if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, isNewUserForDiscount) } price := sub.UnitPrice * req.Quantity // discount amount diff --git a/internal/logic/public/order/renewalLogic.go b/internal/logic/public/order/renewalLogic.go index 8f1c6d3..ddda14b 100644 --- a/internal/logic/public/order/renewalLogic.go +++ b/internal/logic/public/order/renewalLogic.go @@ -83,7 +83,7 @@ func (l *RenewalLogic) Renewal(req *types.RenewalOrderRequest) (resp *types.Rene if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, false) } price := sub.UnitPrice * req.Quantity amount := int64(math.Round(float64(price) * discount)) diff --git a/internal/logic/public/portal/prePurchaseOrderLogic.go b/internal/logic/public/portal/prePurchaseOrderLogic.go index 87eeced..b6101c6 100644 --- a/internal/logic/public/portal/prePurchaseOrderLogic.go +++ b/internal/logic/public/portal/prePurchaseOrderLogic.go @@ -41,7 +41,7 @@ func (l *PrePurchaseOrderLogic) PrePurchaseOrder(req *types.PrePurchaseOrderRequ if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, true) } price := sub.UnitPrice * req.Quantity amount := int64(math.Round(float64(price) * discount)) diff --git a/internal/logic/public/portal/purchaseLogic.go b/internal/logic/public/portal/purchaseLogic.go index a7bfd42..3431599 100644 --- a/internal/logic/public/portal/purchaseLogic.go +++ b/internal/logic/public/portal/purchaseLogic.go @@ -73,7 +73,7 @@ func (l *PurchaseLogic) Purchase(req *types.PortalPurchaseRequest) (resp *types. if sub.Discount != "" { var dis []types.SubscribeDiscount _ = json.Unmarshal([]byte(sub.Discount), &dis) - discount = getDiscount(dis, req.Quantity) + discount = getDiscount(dis, req.Quantity, true) } price := sub.UnitPrice * req.Quantity // discount amount diff --git a/internal/logic/public/portal/tool.go b/internal/logic/public/portal/tool.go index f687e2a..2fa92b6 100644 --- a/internal/logic/public/portal/tool.go +++ b/internal/logic/public/portal/tool.go @@ -6,10 +6,13 @@ import ( "github.com/perfect-panel/server/internal/types" ) -func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64) float64 { +func getDiscount(discounts []types.SubscribeDiscount, inputMonths int64, isNewUser bool) float64 { var finalDiscount float64 = 100 for _, discount := range discounts { + if discount.NewUserOnly && !isNewUser { + continue + } if inputMonths >= discount.Quantity && discount.Discount < finalDiscount { finalDiscount = discount.Discount }