From 0fe6f473dfb78a316ebff25a9c6e083126699c3b Mon Sep 17 00:00:00 2001 From: Agent Date: Fri, 27 Mar 2026 13:45:22 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=A2=E5=8D=95=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=98=E6=83=A0=E9=87=91=E9=A2=9D=E5=AD=97=E6=AE=B5=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=85=88=E4=BD=BF=E7=94=A8=E4=BC=98=E6=83=A0=E9=87=91?= =?UTF-8?q?=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../building/dto/CreateOrderRequest.java | 7 ++++- .../com/example/building/entity/Order.java | 7 ++++- .../service/impl/OrderServiceImpl.java | 31 ++++++++++++++++--- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/example/building/dto/CreateOrderRequest.java b/src/main/java/com/example/building/dto/CreateOrderRequest.java index 66f58e9..4db6a29 100644 --- a/src/main/java/com/example/building/dto/CreateOrderRequest.java +++ b/src/main/java/com/example/building/dto/CreateOrderRequest.java @@ -30,10 +30,15 @@ public class CreateOrderRequest { private List items; /** - * 折扣率(百分比), 默认100 + * 折扣率(百分比), 默认100(保留此逻辑) */ private BigDecimal discountRate; + /** + * 优惠金额(元) + */ + private BigDecimal discountMoney; + /** * 备注 */ diff --git a/src/main/java/com/example/building/entity/Order.java b/src/main/java/com/example/building/entity/Order.java index 97e9065..a66c405 100644 --- a/src/main/java/com/example/building/entity/Order.java +++ b/src/main/java/com/example/building/entity/Order.java @@ -57,6 +57,11 @@ public class Order { */ private BigDecimal discountAmount; + /** + * 优惠金额(元,用户输入) + */ + private BigDecimal discountMoney; + /** * 实收金额 * 计算公式: totalAmount - discountAmount @@ -64,7 +69,7 @@ public class Order { private BigDecimal actualAmount; /** - * 折扣率(百分比) + * 折扣率(百分比,保留此逻辑) */ private BigDecimal discountRate; diff --git a/src/main/java/com/example/building/service/impl/OrderServiceImpl.java b/src/main/java/com/example/building/service/impl/OrderServiceImpl.java index a917537..0fbd7fb 100644 --- a/src/main/java/com/example/building/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/example/building/service/impl/OrderServiceImpl.java @@ -117,9 +117,21 @@ public class OrderServiceImpl implements OrderService { order.setTotalAmount(totalAmount); // 5. 计算优惠金额和实付金额 + BigDecimal discountAmount; BigDecimal discountRate = order.getDiscountRate(); - BigDecimal discountAmount = totalAmount.multiply(new BigDecimal("100").subtract(discountRate)) - .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); + BigDecimal discountMoney = request.getDiscountMoney(); + + // 优先使用优惠金额,如果没有填则用折扣率计算 + if (discountMoney != null && discountMoney.compareTo(BigDecimal.ZERO) > 0) { + discountAmount = discountMoney; + } else { + // 折扣率默认100,即不打折 + if (discountRate == null) { + discountRate = new BigDecimal("100"); + } + discountAmount = totalAmount.multiply(new BigDecimal("100").subtract(discountRate)) + .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); + } BigDecimal actualAmount = totalAmount.subtract(discountAmount); order.setDiscountAmount(discountAmount); @@ -342,9 +354,20 @@ public class OrderServiceImpl implements OrderService { order.setTotalAmount(totalAmount); + BigDecimal discountAmount; BigDecimal discountRate = order.getDiscountRate(); - BigDecimal discountAmount = totalAmount.multiply(new BigDecimal("100").subtract(discountRate)) - .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); + BigDecimal discountMoney = order.getDiscountMoney(); + + // 优先使用优惠金额,如果没有填则用折扣率计算 + if (discountMoney != null && discountMoney.compareTo(BigDecimal.ZERO) > 0) { + discountAmount = discountMoney; + } else { + if (discountRate == null) { + discountRate = new BigDecimal("100"); + } + discountAmount = totalAmount.multiply(new BigDecimal("100").subtract(discountRate)) + .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP); + } BigDecimal actualAmount = totalAmount.subtract(discountAmount); order.setDiscountAmount(discountAmount);