|
|
@@ -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);
|