Forráskód Böngészése

fix: 初定时添加扣库存操作

luofeiyun 2 hete
szülő
commit
91bf3a8f28
11 módosított fájl, 151 hozzáadás és 14 törlés
  1. 0 6
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java
  2. 4 1
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestock/VoyageStockRoomUsedMapper.java
  3. 1 1
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeNewMapper.java
  4. 3 4
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java
  5. 1 1
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/voyagestockdistribute/VoyageStockDistributeNewMapper.xml
  6. 1 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java
  7. 2 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/bo/TradeOrderBO.java
  8. 5 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeOrderHandler.java
  9. 128 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeStockOrderHandler.java
  10. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  11. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

+ 0 - 6
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -151,8 +151,6 @@ public class VoyageApiImpl implements VoyageApi{
                 }
                 // 减可售房间数
                 item.setCanSellNum(item.getCanSellNum().subtract(useNum));
-                // 减剩余房间数
-                item.setSurplusNum(item.getSurplusNum().subtract(useNum));
                 // 减虚拟房间数,此处初定,先扣虚拟库存,虚拟库存不足再扣实际库存
                 if(item.getVirtualNum().compareTo(useNum) >= 0) {
                     item.setVirtualNum(item.getVirtualNum().subtract(useNum));
@@ -170,8 +168,6 @@ public class VoyageApiImpl implements VoyageApi{
             // 扣总库存
             // 减可售房间数
             stockDO.setCanSellNum(stockDO.getCanSellNum().subtract(totalUseNum));
-            // 减剩余房间数
-            stockDO.setSurplusNum(stockDO.getSurplusNum().subtract(totalUseNum));
             // 减虚拟房间数,此处初定,先扣虚拟库存,虚拟库存不足再扣实际库存
             if(stockDO.getVirtualNum().compareTo(totalUseNum) >= 0) {
                 stockDO.setVirtualNum(stockDO.getVirtualNum().subtract(totalUseNum));
@@ -220,8 +216,6 @@ public class VoyageApiImpl implements VoyageApi{
                 }
                 // 减可售房间数
                 item.setCanSellNum(item.getCanSellNum().subtract(useNum));
-                // 减剩余房间数
-                item.setSurplusNum(item.getSurplusNum().subtract(useNum));
                 // 减虚拟房间数,此处初定,先扣虚拟库存,虚拟库存不足再扣实际库存
                 if(item.getVirtualNum().compareTo(useNum) >= 0) {
                     item.setVirtualNum(item.getVirtualNum().subtract(useNum));

+ 4 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestock/VoyageStockRoomUsedMapper.java

@@ -51,5 +51,8 @@ public interface VoyageStockRoomUsedMapper extends BaseMapperX<VoyageStockRoomUs
      * 删除当前订单使用的房间记录
      * @param orderId
      */
-    void deleteByOrderId(Long orderId);
+    default void deleteByOrderId(Long orderId) {
+        delete(new LambdaQueryWrapperX<VoyageStockRoomUsedDO>()
+                .eq(VoyageStockRoomUsedDO::getOrderId, orderId));
+    }
 }

+ 1 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeNewMapper.java

@@ -51,5 +51,5 @@ public interface VoyageStockDistributeNewMapper extends BaseMapperX<VoyageStockD
                 .eq(VoyageStockDistributeNewDO::getVoyageId, id));
     }
 
-    List<VoyageStockDistributeNewPageRespVO> selectList(@Param("voyageIds") List<Long> voyageIds, @Param("params") VoyageStockDistributeNewPageReqVO reqVO);
+    List<VoyageStockDistributeNewPageRespVO> selectGroupList(@Param("voyageIds") List<Long> voyageIds, @Param("params") VoyageStockDistributeNewPageReqVO reqVO);
 }

+ 3 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java

@@ -1,15 +1,12 @@
 package com.yc.ship.module.product.service.voyagestockdistribute;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
-import com.yc.ship.framework.mybatis.core.util.MyBatisUtils;
 import com.yc.ship.module.product.controller.admin.voyagestock.vo.VoyageStockPageReqVO;
 import com.yc.ship.module.product.controller.admin.voyagestock.vo.VoyageStockRespVO;
 import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.*;
-import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockRoomUsedDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
@@ -182,6 +179,8 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
     public List<RoomRespDTO> getCanSelectRoomList(QueryCanSelectRoomListNewReqVO reqVO) {
         //获取当前分销商选择的房型和楼层对象的房间列表
         Integer type = reqVO.getType();
+        //TODO:此处当前默认为1分销商,暂无门店
+        type = DistributorOrStoreEnum.DISTRIBUTOR.getValue();
         List<VoyageStockDistributeRoomDO> roomList;
         if(type == DistributorOrStoreEnum.DISTRIBUTOR.getValue()) {
             roomList = voyageStockDistributeRoomService.getRoomListByRoomModelIdAndFloor(reqVO.getDistributorId(), reqVO.getRoomModelIdFloorList());
@@ -216,7 +215,7 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
         PageResult<VoyageStockRespVO> voyageStockPage = voyageStockService.getVoyageStockPage(pageParams);
         List<VoyageStockRespVO> list = voyageStockPage.getList();
         List<Long> voyageIds = CollectionUtils.convertList(list, VoyageStockRespVO::getVoyageId);
-        List<VoyageStockDistributeNewPageRespVO> distributeNewDOS = voyageStockDistributeNewMapper.selectList(voyageIds, reqVO);
+        List<VoyageStockDistributeNewPageRespVO> distributeNewDOS = voyageStockDistributeNewMapper.selectGroupList(voyageIds, reqVO);
         Map<Long, BigDecimal> idNumMap = CollectionUtils.convertMap(distributeNewDOS, VoyageStockDistributeNewPageRespVO::getVoyageId, VoyageStockDistributeNewPageRespVO::getNum);
         Map<Long, BigDecimal> idRoomModelNumMap = CollectionUtils.convertMap(distributeNewDOS, VoyageStockDistributeNewPageRespVO::getVoyageId, VoyageStockDistributeNewPageRespVO::getRoomModelNum);
         List<VoyageStockDistributeNewPageRespVO> resultList = new ArrayList<>();

+ 1 - 1
ship-module-product/ship-module-product-biz/src/main/resources/mapper/voyagestockdistribute/VoyageStockDistributeNewMapper.xml

@@ -42,7 +42,7 @@
         select sum(num) from product_voyage_stock_distribute_new
         where deleted = 0 and voyage_id = #{voyageId} and type = 1
     </select>
-    <select id="selectList"
+    <select id="selectGroupList"
             resultType="com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewPageRespVO">
         SELECT
         t1.voyage_id,

+ 1 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java

@@ -123,7 +123,7 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     private List<TradeOrderCountryReqVO> countryData;
 
     @Schema(description = "订单汇总信息")
-    private TradeOrderTotalVO orderTotal;
+    private TradeOrderTotalVO summary;
 
 
     @Schema(description = "订单项")

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/bo/TradeOrderBO.java

@@ -1,5 +1,6 @@
 package com.yc.ship.module.trade.service.order.bo;
 
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderTotalVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDeliveryDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderUserDO;
@@ -24,6 +25,7 @@ public class TradeOrderBO {
     private TradeOrderDeliveryDO tradeOrderDeliveryDO;
     private ExtraInfo extraInfo;
     private OrderJzDO orderJzDO;
+    private TradeOrderTotalVO summary;
 
     @Data
     public static class ExtraInfo{

+ 5 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeOrderHandler.java

@@ -31,6 +31,11 @@ public interface TradeOrderHandler {
      * 定向库存
      */
     int DIRECT_STOCK = 5;
+
+    /**
+     * 初定扣库存
+     */
+    int PRE_ORDER_STOCK = 9;
     /**
      * 扣库存
      */

+ 128 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeStockOrderHandler.java

@@ -0,0 +1,128 @@
+package com.yc.ship.module.trade.service.order.handler;
+
+import com.alibaba.fastjson.JSONArray;
+import com.yc.ship.module.product.api.VoyageApi;
+import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
+import com.yc.ship.module.product.api.dto.ReduceStockReqDTO;
+import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailDO;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO;
+import com.yc.ship.module.trade.enums.TradeOrderStatusEnum;
+import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
+import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Component
+@Order(TradeOrderHandler.PRE_ORDER_STOCK)
+@Slf4j
+public class TradeStockOrderHandler implements TradeOrderHandler{
+
+    @Resource
+    private VoyageApi voyageApi;
+
+    @Override
+    public void beforeOrderCreate(TradeOrderBO order) {
+        Integer sellMethod = order.getTradeOrderDO().getSellMethod();
+
+        switch (sellMethod) {
+            case 1: //OTC
+                reduceStock(order);
+                break;
+        }
+
+    }
+
+    private void reduceStock(TradeOrderBO order){
+        ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
+        reqDTO.setOrderId(order.getTradeOrderDO().getId());
+        reqDTO.setOrderStatus(order.getTradeOrderDO().getOrderStatus());
+        reqDTO.setType(DistributorOrStoreEnum.DISTRIBUTOR.getValue());//TODO: 当前默认为分销商,扣分销商库存,门店的后续再完善
+        reqDTO.setVoyageId(order.getTradeOrderDO().getVoyageId());
+        reqDTO.setDistributorId(Long.valueOf(order.getTradeOrderDO().getSourceId()));
+        reqDTO.setStoreId(order.getTradeOrderDO().getStoreId());
+        reqDTO.setUseRoomNum(order.getSummary().getUseRoomTotalNum());
+        List<TradeOrderDetailBO> tradeOrderDetailBOList = order.getTradeOrderDetailBOList();
+        List<TradeVisitorDO> tradeDetailDOList = tradeOrderDetailBOList.stream().flatMap(list1 -> {
+            List<TradeVisitorDO> roomNums = list1.getTradeVisitorDOList();
+            if(roomNums != null) {
+                return roomNums.stream();
+            }
+            return new ArrayList<TradeVisitorDO>().stream();
+        }).collect(Collectors.toList());
+        List<OrderRoomUseDTO> orderRoomUseDTOList = new ArrayList<>();
+        Map<String, Long> collect = tradeDetailDOList.stream().collect(Collectors.groupingBy(TradeVisitorDO::getRoomId, Collectors.counting()));
+        collect.keySet().stream().forEach(roomId -> {
+            OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
+            orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
+            orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
+            orderRoomUseDTOList.add(orderRoomUseDTO);
+        });
+        reqDTO.setOrderRoomList(orderRoomUseDTOList);
+        Integer orderStatus = reqDTO.getOrderStatus();
+        if(orderStatus == TradeOrderStatusEnum.YD.getStatus()) {
+            voyageApi.preReduceStock(reqDTO);
+        }else {
+            //TODO:走定单扣库存
+        }
+    }
+
+    @Override
+    public void afterOrderCreate(TradeOrderBO order) {
+        TradeOrderHandler.super.afterOrderCreate(order);
+    }
+
+    @Override
+    public void afterCancelOrder(TradeOrderDO tradeOrderDO) {
+        TradeOrderHandler.super.afterCancelOrder(tradeOrderDO);
+    }
+
+    @Override
+    public void afterOrderCreateFail(TradeOrderBO order) {
+        TradeOrderHandler.super.afterOrderCreateFail(order);
+    }
+
+    @Override
+    public void afterSupplierOrderCreateFail(TradeOrderDO tradeOrderDO) {
+        TradeOrderHandler.super.afterSupplierOrderCreateFail(tradeOrderDO);
+    }
+
+    @Override
+    public void afterProcessSuccess(TradeOrderDO tradeOrderDO) {
+        TradeOrderHandler.super.afterProcessSuccess(tradeOrderDO);
+    }
+
+    @Override
+    public void afterProcessFail(TradeOrderDO tradeOrderDO) {
+        TradeOrderHandler.super.afterProcessFail(tradeOrderDO);
+    }
+
+    @Override
+    public void afterRefundOrder(Long refundId) {
+        TradeOrderHandler.super.afterRefundOrder(refundId);
+    }
+
+    @Override
+    public void afterRefundAmountSuccess(Long orderId, Long refundId, BigDecimal refundAmount) {
+        TradeOrderHandler.super.afterRefundAmountSuccess(orderId, refundId, refundAmount);
+    }
+
+    @Override
+    public void afterCheckSuccess(Long orderId) {
+        TradeOrderHandler.super.afterCheckSuccess(orderId);
+    }
+
+    @Override
+    public void processOrderCreateSuccess(TradeOrderDO tradeOrderDO) {
+        TradeOrderHandler.super.processOrderCreateSuccess(tradeOrderDO);
+    }
+}

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -796,6 +796,9 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         tradeOrderBO.setTradeOrderDO(tradeOrderDO);
         tradeOrderBO.setTradeOrderUserDO(tradeOrderUserDO);
         tradeOrderBO.setTradeOrderDetailBOList(tradeOrderDetailBOList);
+
+        //订单总计信息
+        tradeOrderBO.setSummary(orderCreateReqDTO.getSummary());
         return tradeOrderBO;
     }
 

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -2325,6 +2325,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 list.add(roomModelDO);
                 // 房型升楼层数据
                 List<TradeOrderFloorReqVO> floorReqVOList = roomModel.getFloorPlus();
+                if(floorReqVOList == null) {
+                    return;
+                }
                 floorReqVOList.stream().forEach(floor -> {
                     TradeOrderFloorDO floorDO = BeanUtils.toBean(floor, TradeOrderFloorDO.class);
                     floorDO.setOrderId(orderId);