lishiqiang 2 недель назад
Родитель
Сommit
541233357a

+ 13 - 11
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -102,11 +102,11 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 //先返还初定扣的库存,使用修改前一步订单的 ID
-                preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 log.info("先还该订单的库存-orderId: {}", reqDTO.getOrderId());
                 if (reqDTO.getOldOrderId() != null && !reqDTO.getOldOrderId().equals(reqDTO.getOrderId())) {
                     log.info("如果是修改就还修改前的订单的库存-oldOrderId: {}", reqDTO.getOldOrderId());
-                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 }
                 //再去扣初定的库存
                 preReduceStockDistributor(reqDTO);
@@ -135,9 +135,9 @@ public class VoyageApiImpl implements VoyageApi {
             if (Objects.equals(type, DistributorOrStoreEnum.DISTRIBUTOR.getValue())) {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
-                preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 if (reqDTO.getOldOrderId() != null && !reqDTO.getOldOrderId().equals(reqDTO.getOrderId())) {
-                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 }
             }
         } finally {
@@ -165,12 +165,12 @@ public class VoyageApiImpl implements VoyageApi {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
                 //先返还初定扣的库存
-                preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 if (reqDTO.getOldOrderStatus() != null && reqDTO.getOldOrderStatus().equals(TradeOrderStatusEnum.YD.getStatus()) &&reqDTO.getOldOrderId() != null && !reqDTO.getOldOrderId().equals(reqDTO.getOrderId())) {
-                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                    preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 }
                 if(reqDTO.getOldOrderStatus() != null && (Objects.equals(reqDTO.getOldOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus())||Objects.equals(reqDTO.getOldOrderStatus(), TradeOrderStatusEnum.YD.getStatus()))){
-                    cancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                    cancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 }
                 //再去扣确定的库存
                 reduceStockDistributor(reqDTO);
@@ -202,9 +202,9 @@ public class VoyageApiImpl implements VoyageApi {
             if (Objects.equals(type, DistributorOrStoreEnum.DISTRIBUTOR.getValue())) {
                 //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
                 //初定扣分销商库存
-                cancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
+                cancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 if (reqDTO.getOldOrderId() != null && !reqDTO.getOldOrderId().equals(reqDTO.getOrderId())) {
-                    cancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
+                    cancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType(),reqDTO.getOrderRoomList());
                 }
             }
         } finally {
@@ -216,11 +216,13 @@ public class VoyageApiImpl implements VoyageApi {
 
     /**
      * 确定状态时取消订单还库存
+     * roomUseDTOList 需要退的房间
      */
-    private void cancelReduceStockDistributor(Long orderId, Integer type) {
+    private void cancelReduceStockDistributor(Long orderId, Integer type,List<OrderRoomUseDTO> roomUseDTOList) {
         if (orderId == null) {
             return;
         }
+
         //退还航次总库存
         //找到确定时扣库存的记录
         VoyageStockLogDO voyageStockLogDO = voyageStockLogMapper.selectByOrder(orderId);
@@ -606,7 +608,7 @@ public class VoyageApiImpl implements VoyageApi {
     /**
      * 初定取消还分销商库存
      */
-    private void preCancelReduceStockDistributor(Long orderId, Integer type) {
+    private void preCancelReduceStockDistributor(Long orderId, Integer type,List<OrderRoomUseDTO> orderRoomUseDTOList) {
         if (orderId == null) {
             return;
         }

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeVisitorMapper.java

@@ -43,6 +43,7 @@ public interface TradeVisitorMapper extends BaseMapperX<TradeVisitorDO> {
 
     List<TradeVisitorDO> selectShipVisitor(@Param("orderId") Long orderId);
     List<OrderRoomUseDTO> selectRoomShipVisitor(@Param("orderId") Long orderId);
+    List<OrderRoomUseDTO> selectRefundRoomShipVisitor(@Param("refundId") Long refundId);
 
     @TenantIgnore
     List<OrderRoomUseDTO> selectRoomShipVisitor2(@Param("orderId") Long orderId);

+ 1 - 12
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java

@@ -251,18 +251,7 @@ public class TradeRefundServiceImpl implements TradeRefundService {
 
                 TradeOrderTotalDO tradeOrderTotal = tradeOrderTotalMapper.selectOne(new LambdaQueryWrapper<TradeOrderTotalDO>().eq(TradeOrderTotalDO::getOldOrderId, tradeOrderDO.getId()));
                 reqDTO.setUseRoomNum(BigDecimal.valueOf(tradeOrderTotal.getUseRoomTotalNum()));
-
-                List<TradeVisitorDO> tradeDetailDOList = tradeVisitorMapper.selectShipVisitor(tradeOrderDO.getId());
-                List<OrderRoomUseDTO> orderRoomUseDTOList = new ArrayList<>();
-                Map<String, Long> collect = tradeDetailDOList.stream().filter(tradeVisitorDO -> tradeVisitorDO.getRoomId() != null).collect(Collectors.groupingBy(TradeVisitorDO::getRoomId, Collectors.counting()));
-                collect.keySet().forEach(roomId -> {
-                    if (StringUtils.isNotBlank(roomId)) {
-                        OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
-                        orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
-                        orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
-                        orderRoomUseDTOList.add(orderRoomUseDTO);
-                    }
-                });
+                List<OrderRoomUseDTO> orderRoomUseDTOList = tradeVisitorMapper.selectRefundRoomShipVisitor(tradeOrderDO.getId());
                 reqDTO.setOrderRoomList(orderRoomUseDTOList);
                 voyageApi.cancelReduceStock(reqDTO);
             } catch (Exception e) {

+ 10 - 2
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

@@ -103,11 +103,19 @@
         where order_id = #{orderId} and deleted =0
         group by room_model_id,floor,room_id
     </select>
+    <select id="selectRefundRoomShipVisitor"
+            resultType="com.yc.ship.module.product.api.dto.OrderRoomUseDTO">
+        select t1.room_model_id,t1.floor,t1.room_id,count(distinct t1.id) num from  trade_visitor t1
+        inner join trade_detail t2 on t1.detail_id = t2.id
+        inner join trade_refund_detail t3 on t2.id = t3.trade_detail_id
+        where t3.refund_id = #{refundId} and deleted =0
+        group by t1.room_model_id,t1.floor,t1.room_id
+    </select>
     <select id="selectRoomShipVisitor2"
             resultType="com.yc.ship.module.product.api.dto.OrderRoomUseDTO">
-        select room_model_id,floor,room_id,count(1) num from  trade_visitor
+        select room_model_id,floor,'' room_id,count(1) num from  trade_order_room_model
         where order_id = #{orderId}
-        group by room_model_id,floor,room_id
+        group by room_model_id,floor
     </select>
     <select id="queryRelatedVisitor"
             resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">