Browse Source

update: 修改订单预览、提交订单相关

Ben 1 year ago
parent
commit
191edc953c

+ 2 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/vo/AppTradeOrderCreateReqVO.java

@@ -16,8 +16,8 @@ public class AppTradeOrderCreateReqVO extends AppTradeOrderSettlementReqVO {
     private Map<Long,String> shopRemarks;
     private Map<Long,String> shopRemarks;
 
 
     //add by Ben
     //add by Ben
-    @Schema(description = "本订单使用积分,允许两位小数", example = "36.58")
-    private Double payPoints;
+    @Schema(description = "本订单使用积分,为一整数", example = "36")
+    private Integer payPoints;
 
 
     @Schema(description = "【本属性已不作页面与后台传值使用,被shopRemarks替代。本属性只作java内部使用】备注", example = "这个是我的订单哟")
     @Schema(description = "【本属性已不作页面与后台传值使用,被shopRemarks替代。本属性只作java内部使用】备注", example = "这个是我的订单哟")
     private String remark;
     private String remark;

+ 6 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -32,6 +32,12 @@ import java.time.LocalDateTime;
 @AllArgsConstructor
 @AllArgsConstructor
 public class TradeOrderDO extends BaseDO {
 public class TradeOrderDO extends BaseDO {
 
 
+    //本商品使用积分 add by Ben
+    private Integer payPoints;
+
+    //本商品实付的人民币金额 add by Ben
+    private Integer payRMB;
+
     /**
     /**
      * 发货物流公司编号 - 空(无需发货)
      * 发货物流公司编号 - 空(无需发货)
      */
      */

+ 12 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/dataobject/order/TradeOrderItemDO.java

@@ -26,6 +26,18 @@ import java.util.List;
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 public class TradeOrderItemDO extends BaseDO {
 public class TradeOrderItemDO extends BaseDO {
 
 
+    //本商品使用积分 add by Ben
+    private Integer payPoints;
+
+    //本商品实付的人民币金额 add by Ben
+    private Integer payRMB;
+
+    //退还的使用的积分 add by Ben
+    private Integer refundPoints;
+
+    //用户获得积分 add by Ben
+    private Integer increasePoints;
+
     // ========== 订单项基本信息 ==========
     // ========== 订单项基本信息 ==========
     /**
     /**
      * 编号
      * 编号

+ 80 - 3
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -285,6 +285,31 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         return tradePriceService.calculatePrice(calculateReqBO);
         return tradePriceService.calculatePrice(calculateReqBO);
     }
     }
 
 
+
+
+    /**
+     * add by Ben
+     * 计算订单含积分的各项商品价格
+     *
+     * @param userId          用户编号
+     * @param settlementReqVO 结算信息
+     * @return 订单价格
+     */
+    private TradePriceCalculateRespBO calculatePriceWithPoints(Long userId, AppTradeOrderSettlementReqVO settlementReqVO) {
+        // 1. 如果来自购物车,则获得购物车的商品
+        List<CartDO> cartList = cartService.getCartList(userId,
+                convertSet(settlementReqVO.getItems(), AppTradeOrderSettlementReqVO.Item::getCartId));
+
+        // 2. 计算价格
+        TradePriceCalculateReqBO calculateReqBO = TradeOrderConvert.INSTANCE.convert(userId, settlementReqVO, cartList);
+        calculateReqBO.getItems().forEach(item -> Assert.isTrue(item.getSelected(), // 防御性编程,保证都是选中的
+                "商品({}) 未设置为选中", item.getSkuId()));
+
+        calculateReqBO.setShopId(settlementReqVO.getShopId());
+        return tradePriceService.calculatePrice(calculateReqBO);
+    }
+
+
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CREATE)
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CREATE)
@@ -335,6 +360,28 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         //为键值对,键为店铺ID,值为备注文本
         //为键值对,键为店铺ID,值为备注文本
         Map<Long,String> shopRemarks = createReqVO.getShopRemarks();
         Map<Long,String> shopRemarks = createReqVO.getShopRemarks();
 
 
+
+        //消费者在页面录入的,要使用的积分
+        Integer payPoints = createReqVO.getPayPoints();
+
+        //计算订单含积分的各项商品价格
+        TradePriceCalculateRespBO tradePriceCalculateRespBO = calculatePriceWithPoints(userId, createReqVO);
+        //计算分摊的积分金额
+        List<Integer> dividePoints = TradePriceCalculatorHelper.dividePrice(tradePriceCalculateRespBO.getItems(), payPoints);
+        //键为skuId,value为单个商品项信息
+        Map<Long, TradePriceCalculateRespBO.OrderItem> itemPayPointsMap = new HashMap<Long, TradePriceCalculateRespBO.OrderItem>();
+
+        //订单项数组
+        List<TradePriceCalculateRespBO.OrderItem> priceOrderItems = tradePriceCalculateRespBO.getItems();
+        for (int i = 0; i < priceOrderItems.size(); i++) {
+            TradePriceCalculateRespBO.OrderItem orderItem = priceOrderItems.get(i);
+            Integer itemPoint = dividePoints.get(i);//每项商品使用的积分
+            orderItem.setPayPoints(itemPoint);
+            itemPayPointsMap.put(orderItem.getSkuId(),orderItem);
+        }
+
+        Integer allShopPainRMB = 0;//所有店铺订单实际支付的金额
+
         //循环调用原来的计算订单价格方法,计算价格
         //循环调用原来的计算订单价格方法,计算价格
         //循环一次生成一间店的订单
         //循环一次生成一间店的订单
         for(Long shopId:shopSkuItemMap.keySet()){
         for(Long shopId:shopSkuItemMap.keySet()){
@@ -358,12 +405,39 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
             // 2. 订单创建前的逻辑
             // 2. 订单创建前的逻辑
             //修改sku库存
             //修改sku库存
             tradeProductSkuOrderHandler.beforeOrderCreate(order, orderItems);
             tradeProductSkuOrderHandler.beforeOrderCreate(order, orderItems);
-            //下面是旧的“订单创建前的逻辑”,因为里面的修改积分、营销与我们的业务不符,所以注释掉,只保留处理sku库存的代码
+            //下面的要注释掉:下面是旧的“订单创建前的逻辑”,因为里面的修改积分、营销与我们的业务不符,所以注释掉,只保留处理sku库存的代码
 //            tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
 //            tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
 
 
-            // 3. 保存订单
+
+
+
+            // 3. 保存一间店铺的订单
+            Integer shopPayPoints = 0;//一间店铺订单总支付积分
+            Integer shopPayPrice = 0;//一间店铺订单总支付价格
+//            orderItems.forEach(orderItem -> orderItem.setOrderId(order.getId()));
+            for(TradeOrderItemDO orderItem:orderItems){//一间店铺订单的所有商品项
+                orderItem.setOrderId(order.getId());
+
+                //3.5 add by Ben
+                //计算抵扣积分后的价格
+                Long skuId = orderItem.getSkuId();
+                TradePriceCalculateRespBO.OrderItem orderItemTmp = itemPayPointsMap.get(skuId);
+                orderItem.setPayPoints(orderItemTmp.getPayPoints()); //本商品使用积分
+                Integer payRmb = orderItem.getPrice()-orderItemTmp.getPayPoints();//本商品实付人民币
+                orderItem.setPayRMB(payRmb);//本商品实付人民币
+                orderItem.setPayPrice(payRmb);//本商品实付人民币
+
+                shopPayPoints += orderItemTmp.getPayPoints();//一间店铺订单总支付积分
+                shopPayPrice += payRmb;//一间店铺订单总支付价格
+            }
+
+            allShopPainRMB+=shopPayPrice;
+
+            order.setPayPrice(shopPayPrice);
+            order.setPayRMB(shopPayPrice);
+            order.setPayPoints(shopPayPoints);
+
             tradeOrderMapper.insert(order);
             tradeOrderMapper.insert(order);
-            orderItems.forEach(orderItem -> orderItem.setOrderId(order.getId()));
             tradeOrderItemMapper.insertBatch(orderItems);
             tradeOrderItemMapper.insertBatch(orderItems);
 
 
             // 4. 订单创建后的逻辑
             // 4. 订单创建后的逻辑
@@ -371,6 +445,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
         }
         }
 
 
         TradeOrderDO order = new TradeOrderDO();
         TradeOrderDO order = new TradeOrderDO();
+        order.setPayPrice(allShopPainRMB);
+        order.setPayRMB(allShopPainRMB);
+
         return order;
         return order;
     }
     }
 
 

+ 8 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/price/TradePriceService.java

@@ -12,6 +12,14 @@ import javax.validation.Valid;
  */
  */
 public interface TradePriceService {
 public interface TradePriceService {
 
 
+    /**
+     * add by Ben
+     * 计算订单含积分的各项商品价格
+     *
+     * @return 订单价格
+     */
+    public TradePriceCalculateRespBO calculatePriceWithPoints(TradePriceCalculateReqBO calculateReqBO);
+
     /**
     /**
      * 价格计算
      * 价格计算
      *
      *

+ 20 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/price/TradePriceServiceImpl.java

@@ -42,6 +42,26 @@ public class TradePriceServiceImpl implements TradePriceService {
     @Resource
     @Resource
     private List<TradePriceCalculator> priceCalculators;
     private List<TradePriceCalculator> priceCalculators;
 
 
+    /**
+     * add by Ben
+     * 计算订单含积分的各项商品价格
+     *
+     * @return 订单价格
+     */
+    @Override
+    public TradePriceCalculateRespBO calculatePriceWithPoints(TradePriceCalculateReqBO calculateReqBO) {
+        // 1.1 获得商品 SKU 数组
+        List<ProductSkuRespDTO> skuList = checkSkuList(calculateReqBO);
+        // 1.2 获得商品 SPU 数组
+        List<ProductSpuRespDTO> spuList = checkSpuList(skuList);
+
+        // 2.1 计算价格
+        TradePriceCalculateRespBO calculateRespBO = TradePriceCalculatorHelper
+                .buildCalculateResp(calculateReqBO, spuList, skuList);
+        return calculateRespBO;
+    }
+
+
     @Override
     @Override
     public TradePriceCalculateRespBO calculatePrice(TradePriceCalculateReqBO calculateReqBO) {
     public TradePriceCalculateRespBO calculatePrice(TradePriceCalculateReqBO calculateReqBO) {
         // 1.1 获得商品 SKU 数组
         // 1.1 获得商品 SKU 数组

+ 6 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/price/bo/TradePriceCalculateRespBO.java

@@ -126,6 +126,12 @@ public class TradePriceCalculateRespBO {
     @Data
     @Data
     public static class OrderItem {
     public static class OrderItem {
 
 
+        /**
+         * add by Ben
+         * 本项商品使用的积分
+         */
+        private Integer payPoints;
+
         /**
         /**
          * SPU 编号
          * SPU 编号
          */
          */

+ 5 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/price/calculator/TradePriceCalculatorHelper.java

@@ -4,6 +4,7 @@ import cn.hutool.core.lang.Assert;
 import cn.newfeifan.mall.framework.common.util.collection.CollectionUtils;
 import cn.newfeifan.mall.framework.common.util.collection.CollectionUtils;
 import cn.newfeifan.mall.module.product.api.sku.dto.ProductSkuRespDTO;
 import cn.newfeifan.mall.module.product.api.sku.dto.ProductSkuRespDTO;
 import cn.newfeifan.mall.module.product.api.spu.dto.ProductSpuRespDTO;
 import cn.newfeifan.mall.module.product.api.spu.dto.ProductSpuRespDTO;
+import cn.newfeifan.mall.module.trade.controller.app.order.vo.AppTradeOrderSettlementReqVO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderItemDO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderItemDO;
 import cn.newfeifan.mall.module.trade.enums.order.TradeOrderTypeEnum;
 import cn.newfeifan.mall.module.trade.enums.order.TradeOrderTypeEnum;
 import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateReqBO;
 import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateReqBO;
@@ -60,7 +61,8 @@ public class TradePriceCalculatorHelper {
             // spu 信息
             // spu 信息
             orderItem.setSpuName(spu.getName()).setCategoryId(spu.getCategoryId())
             orderItem.setSpuName(spu.getName()).setCategoryId(spu.getCategoryId())
                     .setDeliveryTemplateId(spu.getDeliveryTemplateId())
                     .setDeliveryTemplateId(spu.getDeliveryTemplateId())
-                    .setGivePoint(spu.getGiveIntegral()).setUsePoint(0);
+//                    .setGivePoint(spu.getGiveIntegral()).setUsePoint(0)
+            ;
             if (orderItem.getPicUrl() == null) {
             if (orderItem.getPicUrl() == null) {
                 orderItem.setPicUrl(spu.getPicUrl());
                 orderItem.setPicUrl(spu.getPicUrl());
             }
             }
@@ -69,7 +71,7 @@ public class TradePriceCalculatorHelper {
         // 创建它的 Price 属性
         // 创建它的 Price 属性
         result.setPrice(new TradePriceCalculateRespBO.Price());
         result.setPrice(new TradePriceCalculateRespBO.Price());
         recountAllPrice(result);
         recountAllPrice(result);
-        recountAllGivePoint(result);
+//        recountAllGivePoint(result);
         return result;
         return result;
     }
     }
 
 
@@ -199,6 +201,7 @@ public class TradePriceCalculatorHelper {
                 Integer::sum);
                 Integer::sum);
     }
     }
 
 
+
     /**
     /**
      * 按照支付金额,返回每个订单项的分摊金额数组
      * 按照支付金额,返回每个订单项的分摊金额数组
      *
      *