ソースを参照

Merge branch 'main' of http://git.wisesoft.net.cn/lishiqiang/ship-ota-server

lishiqiang 1 ヶ月 前
コミット
2b24417a2d

+ 10 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/api/dto/OrderRoomUseDTO.java

@@ -15,4 +15,14 @@ public class OrderRoomUseDTO {
     // 因为这个可能为0.5,为1则完全被使用,为0.5则使用一半
     @Schema(description = "房间使用数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private BigDecimal num;
+
+    @Schema(description = "房型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long roomModelId;
+
+    @Schema(description = "楼层", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Integer floor;
+
+    public String getKey() {
+        return roomModelId + "_" + floor;
+    }
 }

+ 2 - 2
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ErrorCodeConstants.java

@@ -45,9 +45,9 @@ public interface ErrorCodeConstants {
 
     ErrorCode VOYAGE_SHARE_STOCK_NOT_ENOUGH = new ErrorCode(10_029, "该航次共享库存不足");
 
-    ErrorCode VOYAGE_SHARE_ROOM_NOT_ENOUGH = new ErrorCode(10_030, "共享库存-%s-%s可售房间不足");
+    ErrorCode VOYAGE_SHARE_ROOM_NOT_ENOUGH = new ErrorCode(10_030, "共享库存-%s-%sF可售房间不足");
 
-    ErrorCode VOYAGE_DISTRIBUTOR_ROOM_NOT_ENOUGH = new ErrorCode(10_031, "分销商库存-%s-%s可售房间不足");
+    ErrorCode VOYAGE_DISTRIBUTOR_ROOM_NOT_ENOUGH = new ErrorCode(10_031, "分销商库存-%s-%sF可售房间不足");
 
     ErrorCode VOYAGE_ROOM_NOT_EXIST = new ErrorCode(10_032, "订单所选房间%s不存在");
 

+ 27 - 25
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -20,6 +20,7 @@ import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailM
 import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
 import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
 import com.yc.ship.module.product.enums.VoyageStockLogTypeEnum;
+import com.yc.ship.module.product.enums.YesOrNoEnum;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
 import com.yc.ship.module.product.service.voyagestockdistribute.VoyageStockDistributeNewService;
 import com.yc.ship.module.resource.api.room.RoomApi;
@@ -38,6 +39,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.yc.ship.module.product.enums.ErrorCodeConstants.*;
@@ -289,14 +291,14 @@ public class VoyageApiImpl implements VoyageApi {
         detailReqVO.setVoyageId(voyageId);
         detailReqVO.setType(type);
         detailReqVO.setObjectId(distributorId);
+        detailReqVO.setEnableShare(YesOrNoEnum.NO.getType());//先获取非共享库存(分销商库存)
         List<VoyageStockDistributeNewRespVO> distributeNewRespVOS = voyageStockDistributeNewService.getDetail(detailReqVO);
         List<OrderRoomUseDTO> orderRoomList = reqDTO.getOrderRoomList();//订单使用房间详情
-        List<Long> roomIds = CollectionUtils.convertList(orderRoomList, OrderRoomUseDTO::getRoomId);
-        List<RoomRespDTO> roomList = roomApi.getRoomListByIds(roomIds);
-        Map<Long, BigDecimal> roomMap = CollectionUtils.convertMap(orderRoomList, item -> item.getRoomId(), item -> item.getNum());
-        Map<String, BigDecimal> roomModelFloorNumMap = CollectionUtils.convertMap(roomList,
-                item -> item.getRoomModelId() + "_" + item.getFloors(),
-                item -> roomMap.get(item.getId()) == null ? BigDecimal.ZERO : roomMap.get(item.getId()));
+        Map<String, BigDecimal> roomModelFloorNumMap = orderRoomList.stream()
+                .collect(Collectors.groupingBy(
+                        OrderRoomUseDTO::getKey,
+                        Collectors.mapping(OrderRoomUseDTO::getNum, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)) // 直接使用BigDecimal的reduce操作进行求和
+                ));
         if (distributeNewRespVOS.isEmpty()) {//分销商未分配库存,扣共享库存
 
             voyageStockLogDO.setStockType(1); //1共享库存
@@ -480,17 +482,17 @@ public class VoyageApiImpl implements VoyageApi {
         }
         // 添加房间使用记录
         List<VoyageStockRoomUsedDO> roomUsedList = new ArrayList<>();
-        Map<Long, RoomRespDTO> roomIdMap = CollectionUtils.convertMap(roomList, RoomRespDTO::getId);
+        Map<Long, OrderRoomUseDTO> roomIdMap = CollectionUtils.convertMap(orderRoomList, OrderRoomUseDTO::getRoomId);
         orderRoomList.forEach(item -> {
+            if(item.getRoomId() == null) {
+                return;
+            }
             VoyageStockRoomUsedDO roomUsedDO = new VoyageStockRoomUsedDO();
             roomUsedDO.setOrderId(orderId);
             roomUsedDO.setVoyageId(voyageId);
-            RoomRespDTO roomRespDTO = roomIdMap.get(item.getRoomId());
-            if (roomRespDTO == null) {
-                throw exception(VOYAGE_ROOM_NOT_EXIST.getCode(), String.format(VOYAGE_ROOM_NOT_EXIST.getMsg(), item.getRoomId()));
-            }
+            OrderRoomUseDTO roomRespDTO = roomIdMap.get(item.getRoomId());
             roomUsedDO.setRoomModelId(roomRespDTO.getRoomModelId());
-            roomUsedDO.setFloor(roomRespDTO.getFloors());
+            roomUsedDO.setFloor(roomRespDTO.getFloor());
             roomUsedDO.setRoomId(item.getRoomId());
             roomUsedDO.setNum(item.getNum());
             roomUsedDO.setStatus(orderStatus);
@@ -627,16 +629,15 @@ public class VoyageApiImpl implements VoyageApi {
         detailReqVO.setVoyageId(voyageId);
         detailReqVO.setType(type);
         detailReqVO.setObjectId(distributorId);
+        detailReqVO.setEnableShare(YesOrNoEnum.NO.getType());//先获取非共享库存(分销商库存)
         List<VoyageStockDistributeNewRespVO> distributeNewRespVOS = voyageStockDistributeNewService.getDetail(detailReqVO);
         List<OrderRoomUseDTO> orderRoomList = reqDTO.getOrderRoomList();//订单使用房间详情
-        List<Long> roomIds = CollectionUtils.convertList(orderRoomList, OrderRoomUseDTO::getRoomId);
-        List<RoomRespDTO> roomList = roomApi.getRoomListByIds(roomIds);
-        Map<Long, BigDecimal> roomMap = CollectionUtils.convertMap(orderRoomList, item -> item.getRoomId(), item -> item.getNum());
-        Map<String, BigDecimal> roomModelFloorNumMap = CollectionUtils.convertMap(roomList,
-                item -> item.getRoomModelId() + "_" + item.getFloors(),
-                item -> roomMap.get(item.getId()) == null ? BigDecimal.ZERO : roomMap.get(item.getId()));
+        Map<String, BigDecimal> roomModelFloorNumMap = orderRoomList.stream()
+                .collect(Collectors.groupingBy(
+                        OrderRoomUseDTO::getKey,
+                        Collectors.mapping(OrderRoomUseDTO::getNum, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)) // 直接使用BigDecimal的reduce操作进行求和
+                ));
         if (distributeNewRespVOS.isEmpty()) {//分销商未分配库存,扣共享库存
-
             voyageStockLogDO.setStockType(1); //1共享库存
             //判断共享库存是否充足
             if (shareNum.compareTo(totalUseNum) < 0) {
@@ -651,6 +652,7 @@ public class VoyageApiImpl implements VoyageApi {
                     useNum = BigDecimal.ZERO;
                 }
                 if (canSellNum.compareTo(useNum) < 0) {
+                    log.error(String.format(VOYAGE_SHARE_ROOM_NOT_ENOUGH.getMsg(), item.getRoomModelName(), item.getFloor()));
                     throw exception(VOYAGE_SHARE_ROOM_NOT_ENOUGH.getCode(), String.format(VOYAGE_SHARE_ROOM_NOT_ENOUGH.getMsg(), item.getRoomModelName(), item.getFloor()));
                 }
             });
@@ -822,17 +824,17 @@ public class VoyageApiImpl implements VoyageApi {
         }
         // 添加房间使用记录
         List<VoyageStockRoomUsedDO> roomUsedList = new ArrayList<>();
-        Map<Long, RoomRespDTO> roomIdMap = CollectionUtils.convertMap(roomList, RoomRespDTO::getId);
+        Map<Long, OrderRoomUseDTO> roomIdMap = CollectionUtils.convertMap(orderRoomList, OrderRoomUseDTO::getRoomId);
         orderRoomList.forEach(item -> {
+            if(item.getRoomId() == null) {
+                return;
+            }
             VoyageStockRoomUsedDO roomUsedDO = new VoyageStockRoomUsedDO();
             roomUsedDO.setOrderId(orderId);
             roomUsedDO.setVoyageId(voyageId);
-            RoomRespDTO roomRespDTO = roomIdMap.get(item.getRoomId());
-            if (roomRespDTO == null) {
-                throw exception(VOYAGE_ROOM_NOT_EXIST.getCode(), String.format(VOYAGE_ROOM_NOT_EXIST.getMsg(), item.getRoomId()));
-            }
+            OrderRoomUseDTO roomRespDTO = roomIdMap.get(item.getRoomId());
             roomUsedDO.setRoomModelId(roomRespDTO.getRoomModelId());
-            roomUsedDO.setFloor(roomRespDTO.getFloors());
+            roomUsedDO.setFloor(roomRespDTO.getFloor());
             roomUsedDO.setRoomId(item.getRoomId());
             roomUsedDO.setNum(item.getNum());
             roomUsedDO.setStatus(orderStatus);

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

@@ -169,6 +169,9 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "修改内容")
     private String changedFields1;
 
+    @Schema(description = "房型信息")
+    private List<TradeOrderRoomModelVO> roomModelList;
+
 
     @Schema(description = "订单项")
     @Data

+ 5 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRoomModelVO.java

@@ -134,4 +134,9 @@ public class TradeOrderRoomModelVO {
      */
     @Schema(description = "升楼层数", example = "")
     private Integer floorNum;
+
+    /**
+     * 房间ID
+     */
+    private Long roomId;
 }

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeVistorReqVO.java

@@ -74,6 +74,9 @@ public class TradeVistorReqVO {
     @Schema(description = "房型ID")
     private Long roomModelId;
 
+    @Schema(description = "房间价格")
+    private BigDecimal roomPrice;
+
     @Schema(description = "楼层")
     private Integer floor;
 

+ 3 - 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.TradeOrderRoomModelVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderTotalVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderBindDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
@@ -26,6 +27,8 @@ public class TradeOrderBO {
     private TradeOrderUserDO tradeOrderUserDO;
     private List<TradeOrderDetailBO> tradeOrderDetailBOList;
     private TradeOrderDeliveryDO tradeOrderDeliveryDO;
+    @Schema(description = "房型信息")
+    private List<TradeOrderRoomModelVO> roomModelList;
     private ExtraInfo extraInfo;
     private OrderJzDO orderJzDO;
     private TradeOrderBindDO tradeOrderBindDO;

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

@@ -604,6 +604,8 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
         //订单总计信息
         tradeOrderBO.setSummary(orderCreateReqDTO.getSummary());
+        // 订单房型信息
+        tradeOrderBO.setRoomModelList(orderCreateReqDTO.getRoomModelList());
         return tradeOrderBO;
     }