From c89673d4ea077b832f3432a2be50bd7b6d34cc92 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Wed, 22 Oct 2025 10:37:01 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E6=97=B6=E6=8A=98=E6=89=A3=E5=95=86?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/czg/order/dto/LimitRateDTO.java | 18 +++++ .../com/czg/order/dto/OrderInfoAddDTO.java | 2 + .../com/czg/order/entity/CashierCart.java | 4 + .../com/czg/order/entity/OrderDetail.java | 4 + .../czg/order/service/OrderInfoService.java | 2 +- .../com/czg/product/vo/ShopProductVo.java | 1 + .../service/impl/OrderInfoServiceImpl.java | 79 +++++++++++++------ .../resources/mapper/CashierCartMapper.xml | 1 + .../main/resources/mapper/ProductMapper.xml | 1 + 9 files changed, 88 insertions(+), 24 deletions(-) diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/LimitRateDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/LimitRateDTO.java index 46f7605a..e64662a8 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/LimitRateDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/LimitRateDTO.java @@ -1,10 +1,16 @@ package com.czg.order.dto; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import lombok.Data; +import java.util.Set; +import java.util.stream.Collectors; + /** * 限时折扣dto * order专用 对应mk_limit_time_discount + * * @author ww * @description */ @@ -31,4 +37,16 @@ public class LimitRateDTO { * 参与商品 */ private String foods; + + private Set foodIds; + + public Set getFoodIds() { + if (CollUtil.isEmpty(foodIds)) { + foodIds = CollUtil.newHashSet(StrUtil.split(foods, ",")) + .stream() + .map(Long::parseLong) + .collect(Collectors.toSet()); + } + return foodIds; + } } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/OrderInfoAddDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/OrderInfoAddDTO.java index 7e58022d..56db70d3 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/OrderInfoAddDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/OrderInfoAddDTO.java @@ -21,6 +21,8 @@ import java.math.BigDecimal; @NoArgsConstructor @AllArgsConstructor public class OrderInfoAddDTO implements Serializable { + //限时折扣部分 + private LimitRateDTO limitRate; private Long orderId; /** diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/CashierCart.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/CashierCart.java index 5cca6558..7d369447 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/CashierCart.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/CashierCart.java @@ -84,6 +84,10 @@ public class CashierCart implements Serializable { * 是否赠送 */ private Integer isGift; + /** + * 是否参加限时折扣 + */ + private Integer isTimeDiscount; /** * 是否是临时菜 diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java index 8cfcea43..4723fee1 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java @@ -136,6 +136,10 @@ public class OrderDetail implements Serializable { * 当前下单次数 */ private Integer placeNum; + /** + * 是否参加限时折扣 + */ + private Integer isTimeDiscount; /** * 是否是临时菜品 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java index f41d068d..4359f5f2 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java @@ -50,7 +50,7 @@ public interface OrderInfoService extends IService { OrderInfo createPayOrder(Long shopId, BigDecimal amount, String remark); void getOrderAmount(List orderDetails, BigDecimalDTO totalAmount, BigDecimalDTO packAmount, - BigDecimalDTO tempAmount, boolean isAllPack, Integer userAllPack, boolean isVipPrice); + BigDecimalDTO tempAmount, LimitRateDTO limitRate, boolean isAllPack, Integer userAllPack, boolean isVipPrice); Boolean printOrder(Long shopId, OrderInfoPrintDTO orderInfoPrintDTO); diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java index 15ef4e9d..6328d8bb 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopProductVo.java @@ -25,6 +25,7 @@ public class ShopProductVo implements Serializable { * 商品id */ private Long id; + private Long syncId; /** * 商品名称 */ diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index 8cbc6b69..46faa976 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -268,23 +268,28 @@ public class OrderInfoServiceImpl extends ServiceImpl orderDetails = cartService.getCartByTableCode(shopInfo.getId(), param.getTableCode(), param.getPlaceNum()); AssertUtil.isListEmpty(orderDetails, "下单失败 购物车为空"); - processOrderDetails(orderDetails); + processOrderDetails(orderDetails, param.getLimitRate()); //生成订单 OrderInfo orderInfo = initOrderInfo(param, shopInfo, table); orderDetailService.createOrderDetails(orderInfo.getId(), orderDetails); @@ -394,7 +399,7 @@ public class OrderInfoServiceImpl extends ServiceImpl orderDetails, BigDecimalDTO totalAmount, BigDecimalDTO packAmount, - BigDecimalDTO tempAmount, boolean isAllPack, Integer userAllPack, boolean isVipPrice) { + BigDecimalDTO tempAmount, LimitRateDTO limitRate, boolean isAllPack, Integer userAllPack, boolean isVipPrice) { for (OrderDetail orderDetail : orderDetails) { if (orderDetail.getDiscountSaleAmount() != null && orderDetail.getDiscountSaleAmount().compareTo(BigDecimal.ZERO) > 0) { orderDetail.setUnitPrice(orderDetail.getDiscountSaleAmount()); } else { - if (isVipPrice) { - orderDetail.setUnitPrice( - (orderDetail.getMemberPrice() == null || orderDetail.getMemberPrice().compareTo(BigDecimal.ZERO) <= 0) - ? orderDetail.getPrice() : orderDetail.getMemberPrice()); + if (orderDetail.getIsTimeDiscount() == 1) { + if (limitRate == null || (limitRate.getFoodType() == 2 && CollUtil.isEmpty(limitRate.getFoodIds()))) { + throw new CzgException("限时折扣使用失败,商品范围不正确"); + } + if (limitRate.getFoodType() == 2 && !limitRate.getFoodIds().contains(orderDetail.getProductId())) { + throw new CzgException("限时折扣使用失败,商品" + orderDetail.getProductName() + "不享受限时折扣"); + } + if (!isVipPrice || "limit-time".equals(limitRate.getDiscountPriority())) { + if (orderDetail.getPrice().compareTo(BigDecimal.ZERO) == 0) { + orderDetail.setUnitPrice(orderDetail.getPrice()); + } else { + // 确保最终结果保留两位小数并向上取整 + orderDetail.setUnitPrice( + orderDetail.getPrice() + .multiply(new BigDecimal(limitRate.getDiscountRate()).divide(new BigDecimal("100"), 2, RoundingMode.CEILING)) + .setScale(2, RoundingMode.CEILING) + ); + } + } else { + orderDetail.setUnitPrice( + (orderDetail.getMemberPrice() == null || orderDetail.getMemberPrice().compareTo(BigDecimal.ZERO) <= 0) + ? orderDetail.getPrice() : orderDetail.getMemberPrice()); + } } else { - orderDetail.setUnitPrice(orderDetail.getPrice()); + if (isVipPrice) { + orderDetail.setUnitPrice( + (orderDetail.getMemberPrice() == null || orderDetail.getMemberPrice().compareTo(BigDecimal.ZERO) <= 0) + ? orderDetail.getPrice() : orderDetail.getMemberPrice()); + } else { + orderDetail.setUnitPrice(orderDetail.getPrice()); + } } } if (userAllPack != null) { @@ -854,7 +884,7 @@ public class OrderInfoServiceImpl extends ServiceImpl orderDetails) { + private void processOrderDetails(List orderDetails, LimitRateDTO limitRate) { for (OrderDetail detail : orderDetails) { if (!detail.getIsTemporary().equals(1) && detail.getProductId() > 0) { Product product = productService.getOne(QueryWrapper.create() @@ -869,12 +899,15 @@ public class OrderInfoServiceImpl extends ServiceImpl 0) { detail.setUnitPrice(detail.getDiscountSaleAmount()); } else { - if (detail.getDiscountSaleAmount() != null && detail.getDiscountSaleAmount().compareTo(BigDecimal.ZERO) > 0) { - detail.setUnitPrice(detail.getDiscountSaleAmount()); - } else { - detail.setUnitPrice(detail.getPrice()); - + if (detail.getIsTimeDiscount() == 1) { + if (limitRate == null || (limitRate.getFoodType() == 2 && CollUtil.isEmpty(limitRate.getFoodIds()))) { + throw new CzgException("限时折扣使用失败,商品范围不正确"); + } + if (limitRate.getFoodType() == 2 && !limitRate.getFoodIds().contains(detail.getProductId())) { + throw new CzgException("限时折扣使用失败,商品" + detail.getProductName() + "不享受限时折扣"); + } } + detail.setUnitPrice(detail.getPrice()); } detail.setPayAmount(detail.getNum().multiply(detail.getUnitPrice())); } diff --git a/cash-service/order-service/src/main/resources/mapper/CashierCartMapper.xml b/cash-service/order-service/src/main/resources/mapper/CashierCartMapper.xml index 325a88fa..424086d4 100644 --- a/cash-service/order-service/src/main/resources/mapper/CashierCartMapper.xml +++ b/cash-service/order-service/src/main/resources/mapper/CashierCartMapper.xml @@ -19,6 +19,7 @@ pros.cover_img as productImg, pros.type as productType, cart.sku_id as skuId, + cart.is_time_discount as isTimeDiscount, skus.spec_info as skuName, case cart.is_gift when 1 then 0 diff --git a/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml b/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml index df12b590..c5999dd7 100644 --- a/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml +++ b/cash-service/product-service/src/main/resources/mapper/ProductMapper.xml @@ -81,6 +81,7 @@ t1.images, t3.name as unit_name, t1.is_sold_stock, + t1.sync_id as syncId, t1.stock_number, t1.type, t1.group_type,