lishiqiang 2 nedēļas atpakaļ
vecāks
revīzija
2f75acc1ea

+ 56 - 55
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -167,7 +167,7 @@ public class VoyageApiImpl implements VoyageApi {
                 //初定扣分销商库存
                 //先返还初定扣的库存
                 preCancelReduceStockDistributor(reqDTO.getOrderId(), reqDTO.getType());
-                if(reqDTO.getOldOrderId() != null && reqDTO.getOldOrderId() != reqDTO.getOrderId()) {
+                if(reqDTO.getOldOrderId() != null && !reqDTO.getOldOrderId().equals(reqDTO.getOrderId())) {
                     preCancelReduceStockDistributor(reqDTO.getOldOrderId(), reqDTO.getType());
                 }
                 //再去扣确定的库存
@@ -629,64 +629,65 @@ public class VoyageApiImpl implements VoyageApi {
         Long distributorId = voyageStockLogDO.getDistributorId();
         //找到初定时扣库存详情的记录
         List<VoyageStockDetailLogDO> detailLogList = voyageStockDetailLogMapper.selectListByOrder(orderId);
+        if(detailLogList.isEmpty()){
+            log.error("订单取消时,未找到对应的航次库存详情操作记录,订单ID:{}", orderId);
+            return;
+        }
         Integer stockType = detailLogList.get(0).getStockType();
-        if (detailLogList != null && !detailLogList.isEmpty()) {
-            log.info("进入初定还库存详情操作,使用库存的记录-detailLogList:"+ JSONArray.toJSONString(detailLogList));
-            //退还航次库存详情
-            List<VoyageStockDetailDO> stockDetailList = voyageStockDetailMapper.selectListByVoyageId(voyageId);
-            Map<String, BigDecimal> realNumMap = CollectionUtils.convertMap(detailLogList, item -> item.getRoomModelId() + "_" + item.getFloor(), VoyageStockDetailLogDO::getRealNum);
-            Map<String, BigDecimal> virtualNumMap = CollectionUtils.convertMap(detailLogList, item -> item.getRoomModelId() + "_" + item.getFloor(), VoyageStockDetailLogDO::getVirtualNum);
+        log.info("进入初定还库存详情操作,使用库存的记录-detailLogList:" + JSONArray.toJSONString(detailLogList));
+        //退还航次库存详情
+        List<VoyageStockDetailDO> stockDetailList = voyageStockDetailMapper.selectListByVoyageId(voyageId);
+        Map<String, BigDecimal> realNumMap = CollectionUtils.convertMap(detailLogList, item -> item.getRoomModelId() + "_" + item.getFloor(), VoyageStockDetailLogDO::getRealNum);
+        Map<String, BigDecimal> virtualNumMap = CollectionUtils.convertMap(detailLogList, item -> item.getRoomModelId() + "_" + item.getFloor(), VoyageStockDetailLogDO::getVirtualNum);
 //            Map<String, BigDecimal> shareNumMap = CollectionUtils.convertMap(detailLogList, item -> item.getRoomModelId() + "_" + item.getFloor(), VoyageStockDetailLogDO::getShareNum);
-            Map<String, BigDecimal> totalNumMap = CollectionUtils.convertMap(detailLogList, item -> item.getRoomModelId() + "_" + item.getFloor(), item -> item.getRealNum().add(item.getVirtualNum()));
-
-            stockDetailList.forEach(item -> {
-                String key = item.getRoomModelId() + "_" + item.getFloor();
-                item.setBookNum(item.getBookNum().subtract(totalNumMap.get(key)));
-                item.setCanSellNum(item.getCanSellNum().add(totalNumMap.get(key)));
-                item.setRealTotalNum(item.getRealTotalNum().add(realNumMap.get(key)));
-                item.setVirtualNum(item.getVirtualNum().add(virtualNumMap.get(key)));
-                if(stockType == 1) {//共享库存要还回库存详情
-                    item.setShareNum(item.getShareNum().add(totalNumMap.get(key)));
-                }
-            });
-            voyageStockDetailMapper.updateBatch(stockDetailList);
-            productRedisUtils.set(ProductRedisKeyConstants.STOCK_DETAIL_REDIS_KEY_PREFIX + voyageId, stockDetailList);
-
-
-            //2:还分销商库存
-            if (stockType == 2) {
-                //判断分销商库存是否存在
-                VoyageStockDistributeNewDetailReqVO detailReqVO = new VoyageStockDistributeNewDetailReqVO();
-                detailReqVO.setVoyageId(voyageId);
-                detailReqVO.setType(type);
-                detailReqVO.setObjectId(distributorId);
-                List<VoyageStockDistributeNewRespVO> distributeNewRespList = voyageStockDistributeNewService.getDetail(detailReqVO);
-                List<VoyageStockDistributeNewDO> list = BeanUtils.toBean(distributeNewRespList, VoyageStockDistributeNewDO.class);
-                log.info("进入初定还分销商库存详情操作,分销商库存还之前详情-distributeNewRespList:"+ JSONArray.toJSONString(distributeNewRespList));
-                if (list != null && !list.isEmpty()) {
-                    list.forEach(item -> {
-                        String key = item.getRoomModelId() + "_" + item.getFloor();
-                        if(item.getBookNum()==null){
-                            item.setBookNum(BigDecimal.ZERO);
-                        }
-                        if(item.getNum()==null){
-                            item.setNum(BigDecimal.ZERO);
-                        }
-                        item.setNum(item.getNum().add(totalNumMap.get(key)));
-                        item.setBookNum(item.getBookNum().subtract(totalNumMap.get(key)));
-                        if(item.getBookNum().compareTo(BigDecimal.ZERO)<0){
-                            item.setBookNum(BigDecimal.ZERO);
-                        }
-                    });
-                    log.info("进入初定还分销商库存详情操作,分销商库存还之后详情-distributeNewRespList:"+ JSONArray.toJSONString(distributeNewRespList));
-                    voyageStockDistributeNewMapper.updateBatch(list);
-                    productRedisUtils.set(ProductRedisKeyConstants.STOCK_DISTRIBUTOR_REDIS_KEY_PREFIX + voyageId + "_" +distributorId, list);
-                }
+        Map<String, BigDecimal> totalNumMap = CollectionUtils.convertMap(detailLogList, item -> item.getRoomModelId() + "_" + item.getFloor(), item -> item.getRealNum().add(item.getVirtualNum()));
+
+        stockDetailList.forEach(item -> {
+            String key = item.getRoomModelId() + "_" + item.getFloor();
+            item.setBookNum(item.getBookNum().subtract(totalNumMap.get(key)));
+            item.setCanSellNum(item.getCanSellNum().add(totalNumMap.get(key)));
+            item.setRealTotalNum(item.getRealTotalNum().add(realNumMap.get(key)));
+            item.setVirtualNum(item.getVirtualNum().add(virtualNumMap.get(key)));
+            if(stockType == 1) {//共享库存要还回库存详情
+                item.setShareNum(item.getShareNum().add(totalNumMap.get(key)));
+            }
+        });
+        voyageStockDetailMapper.updateBatch(stockDetailList);
+        productRedisUtils.set(ProductRedisKeyConstants.STOCK_DETAIL_REDIS_KEY_PREFIX + voyageId, stockDetailList);
+
+
+        //2:还分销商库存
+        if (stockType == 2) {
+            //判断分销商库存是否存在
+            VoyageStockDistributeNewDetailReqVO detailReqVO = new VoyageStockDistributeNewDetailReqVO();
+            detailReqVO.setVoyageId(voyageId);
+            detailReqVO.setType(type);
+            detailReqVO.setObjectId(distributorId);
+            List<VoyageStockDistributeNewRespVO> distributeNewRespList = voyageStockDistributeNewService.getDetail(detailReqVO);
+            List<VoyageStockDistributeNewDO> list = BeanUtils.toBean(distributeNewRespList, VoyageStockDistributeNewDO.class);
+            log.info("进入初定还分销商库存详情操作,分销商库存还之前详情-distributeNewRespList:{}", JSONArray.toJSONString(distributeNewRespList));
+            if (list != null && !list.isEmpty()) {
+                list.forEach(item -> {
+                    String key = item.getRoomModelId() + "_" + item.getFloor();
+                    if(item.getBookNum()==null){
+                        item.setBookNum(BigDecimal.ZERO);
+                    }
+                    if(item.getNum()==null){
+                        item.setNum(BigDecimal.ZERO);
+                    }
+                    item.setNum(item.getNum().add(totalNumMap.get(key)));
+                    item.setBookNum(item.getBookNum().subtract(totalNumMap.get(key)));
+                    if(item.getBookNum().compareTo(BigDecimal.ZERO)<0){
+                        item.setBookNum(BigDecimal.ZERO);
+                    }
+                });
+                log.info("进入初定还分销商库存详情操作,分销商库存还之后详情-distributeNewRespList:{}", JSONArray.toJSONString(distributeNewRespList));
+                voyageStockDistributeNewMapper.updateBatch(list);
+                productRedisUtils.set(ProductRedisKeyConstants.STOCK_DISTRIBUTOR_REDIS_KEY_PREFIX + voyageId + "_" +distributorId, list);
             }
-            // 删除库存详情初定记录
-            voyageStockDetailLogMapper.deleteByOrder(orderId);
-
         }
+        // 删除库存详情初定记录
+        voyageStockDetailLogMapper.deleteByOrder(orderId);
 
 
     }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
 import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
+import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeVisitorRespVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO;
 import com.yc.ship.module.trade.service.order.bo.TradeVisitorBO;
@@ -43,6 +44,7 @@ public interface TradeVisitorMapper extends BaseMapperX<TradeVisitorDO> {
 
 
     List<TradeVisitorDO> selectShipVisitor(@Param("orderId") Long orderId);
+    List<OrderRoomUseDTO> selectRoomShipVisitor(@Param("orderId") Long orderId);
 
     /**
      * 获取游轮的游客

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

@@ -512,17 +512,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 TradeOrderTotalDO tradeOrderTotal = tradeOrderTotalMapper.selectOne(new LambdaQueryWrapper<TradeOrderTotalDO>().eq(TradeOrderTotalDO::getOldOrderId, lastTradeOrder.getId()));
                 reqDTO.setUseRoomNum(BigDecimal.valueOf(tradeOrderTotal.getUseRoomTotalNum()));
 
-                List<TradeVisitorDO> tradeDetailDOList = tradeVisitorMapper.selectShipVisitor(lastTradeOrder.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.selectRoomShipVisitor(lastTradeOrder.getId());
+                reqDTO.setOrderRoomList(orderRoomUseDTOList);
                 reqDTO.setOrderRoomList(orderRoomUseDTOList);
                 Integer orderStatus = reqDTO.getOrderStatus();
                 if(Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
@@ -584,17 +575,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             TradeOrderTotalDO tradeOrderTotal = tradeOrderTotalMapper.selectOne(new LambdaQueryWrapper<TradeOrderTotalDO>().eq(TradeOrderTotalDO::getOldOrderId, lastTradeOrder.getId()));
             reqDTO.setUseRoomNum(BigDecimal.valueOf(tradeOrderTotal.getUseRoomTotalNum()));
 
-            List<TradeVisitorDO> tradeDetailDOList = tradeVisitorMapper.selectShipVisitor(lastTradeOrder.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.selectRoomShipVisitor(lastTradeOrder.getId());
             reqDTO.setOrderRoomList(orderRoomUseDTOList);
             Integer orderStatus = reqDTO.getOrderStatus();
             if(Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {

+ 6 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

@@ -97,6 +97,12 @@
         where t.order_id = #{orderId} and v.deleted =0 and t.product_type =0 and t.deleted =0
         group by v.id
     </select>
+    <select id="selectRoomShipVisitor"
+            resultType="com.yc.ship.module.product.api.dto.OrderRoomUseDTO">
+        select room_model_id,floor,room_id,count(1) num from  trade_visitor
+        where order_id = #{orderId} and deleted =0
+        group by room_model_id,floor,room_id
+    </select>
     <select id="queryRelatedVisitor"
             resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
         SELECT v1.*, v2.id associatedVisitorId