|
@@ -7,9 +7,12 @@ import com.yc.ship.module.product.api.dto.ReduceStockReqDTO;
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewDetailReqVO;
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewDetailReqVO;
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewRespVO;
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewRespVO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
|
|
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.voyagestockdetail.VoyageStockDetailDO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;
|
|
|
|
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
|
|
|
|
+import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockRoomUsedMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
|
|
@@ -26,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -55,10 +59,13 @@ public class VoyageApiImpl implements VoyageApi{
|
|
@Resource
|
|
@Resource
|
|
private RedissonClient redissonClient;
|
|
private RedissonClient redissonClient;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private VoyageStockRoomUsedMapper voyageStockRoomUsedMapper;
|
|
|
|
+
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Override
|
|
@Override
|
|
public void preReduceStock(ReduceStockReqDTO reqDTO) {
|
|
public void preReduceStock(ReduceStockReqDTO reqDTO) {
|
|
- //TODO: 当前阶段不考虑门店库存,此处应标记已使用的房间
|
|
|
|
|
|
+ //TODO: 当前阶段不考虑门店库存
|
|
|
|
|
|
Long voyageId = reqDTO.getVoyageId();
|
|
Long voyageId = reqDTO.getVoyageId();
|
|
//现在给整个航次的库存加锁
|
|
//现在给整个航次的库存加锁
|
|
@@ -93,6 +100,8 @@ public class VoyageApiImpl implements VoyageApi{
|
|
Long distributorId = reqDTO.getDistributorId(); //分销商ID
|
|
Long distributorId = reqDTO.getDistributorId(); //分销商ID
|
|
Long storeId = reqDTO.getStoreId(); //门店ID
|
|
Long storeId = reqDTO.getStoreId(); //门店ID
|
|
BigDecimal totalUseNum = reqDTO.getUseRoomNum(); //总共使用房间数量
|
|
BigDecimal totalUseNum = reqDTO.getUseRoomNum(); //总共使用房间数量
|
|
|
|
+ Long orderId = reqDTO.getOrderId();
|
|
|
|
+ Integer orderStatus = reqDTO.getOrderStatus();
|
|
|
|
|
|
// 获取航次总库存
|
|
// 获取航次总库存
|
|
VoyageStockDO stockDO = voyageStockMapper.selectById(voyageId);
|
|
VoyageStockDO stockDO = voyageStockMapper.selectById(voyageId);
|
|
@@ -111,19 +120,19 @@ public class VoyageApiImpl implements VoyageApi{
|
|
detailReqVO.setType(type);
|
|
detailReqVO.setType(type);
|
|
detailReqVO.setObjectId(distributorId);
|
|
detailReqVO.setObjectId(distributorId);
|
|
List<VoyageStockDistributeNewRespVO> distributeNewRespVOS = voyageStockDistributeNewService.getDetail(detailReqVO);
|
|
List<VoyageStockDistributeNewRespVO> distributeNewRespVOS = voyageStockDistributeNewService.getDetail(detailReqVO);
|
|
|
|
+ List<ReduceStockReqDTO.OrderRoomDTO> orderRoomList = reqDTO.getOrderRoomList();//订单使用房间详情
|
|
|
|
+ List<Long> roomIds = CollectionUtils.convertList(orderRoomList, ReduceStockReqDTO.OrderRoomDTO::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()));
|
|
if(distributeNewRespVOS.isEmpty()) {//分销商未分配库存,扣共享库存
|
|
if(distributeNewRespVOS.isEmpty()) {//分销商未分配库存,扣共享库存
|
|
//判断共享库存是否充足
|
|
//判断共享库存是否充足
|
|
if(shareNum.compareTo(totalUseNum) < 0) {
|
|
if(shareNum.compareTo(totalUseNum) < 0) {
|
|
throw exception(VOYAGE_SHARE_STOCK_NOT_ENOUGH);
|
|
throw exception(VOYAGE_SHARE_STOCK_NOT_ENOUGH);
|
|
}
|
|
}
|
|
//判断航次房型楼层库存是否充足
|
|
//判断航次房型楼层库存是否充足
|
|
- List<ReduceStockReqDTO.OrderRoomDTO> orderRoomList = reqDTO.getOrderRoomList();//订单使用房间详情
|
|
|
|
- Map<Long, BigDecimal> roomMap = CollectionUtils.convertMap(orderRoomList, item -> item.getRoomId(), item -> item.getNum());
|
|
|
|
- List<Long> roomIds = CollectionUtils.convertList(orderRoomList, ReduceStockReqDTO.OrderRoomDTO::getRoomId);
|
|
|
|
- List<RoomRespDTO> roomList = roomApi.getRoomListByIds(roomIds);
|
|
|
|
- Map<String, BigDecimal> roomModelFloorNumMap = CollectionUtils.convertMap(roomList,
|
|
|
|
- item -> item.getRoomModelId() + "_" + item.getFloors(),
|
|
|
|
- item -> roomMap.get(item.getId()) == null ? BigDecimal.ZERO : roomMap.get(item.getId()));
|
|
|
|
// 判断库存是否充足
|
|
// 判断库存是否充足
|
|
stockDetailList.stream().forEach(item -> {
|
|
stockDetailList.stream().forEach(item -> {
|
|
BigDecimal canSellNum = item.getCanSellNum();
|
|
BigDecimal canSellNum = item.getCanSellNum();
|
|
@@ -181,14 +190,6 @@ public class VoyageApiImpl implements VoyageApi{
|
|
//分销商已分配库存,扣自身库存
|
|
//分销商已分配库存,扣自身库存
|
|
|
|
|
|
//判断航次房型楼层库存是否充足
|
|
//判断航次房型楼层库存是否充足
|
|
- List<ReduceStockReqDTO.OrderRoomDTO> orderRoomList = reqDTO.getOrderRoomList();//订单使用房间详情
|
|
|
|
- Map<Long, BigDecimal> roomMap = CollectionUtils.convertMap(orderRoomList, item -> item.getRoomId(), item -> item.getNum());
|
|
|
|
- List<Long> roomIds = CollectionUtils.convertList(orderRoomList, ReduceStockReqDTO.OrderRoomDTO::getRoomId);
|
|
|
|
- List<RoomRespDTO> roomList = roomApi.getRoomListByIds(roomIds);
|
|
|
|
- Map<String, BigDecimal> roomModelFloorNumMap = CollectionUtils.convertMap(roomList,
|
|
|
|
- item -> item.getRoomModelId() + "_" + item.getFloors(),
|
|
|
|
- item -> roomMap.get(item.getId()) == null ? BigDecimal.ZERO : roomMap.get(item.getId()));
|
|
|
|
-
|
|
|
|
distributeNewRespVOS.stream().forEach(item -> {
|
|
distributeNewRespVOS.stream().forEach(item -> {
|
|
BigDecimal canSellNum = item.getNum();
|
|
BigDecimal canSellNum = item.getNum();
|
|
BigDecimal useNum = roomModelFloorNumMap.get(item.getRoomModelId() + "_" + item.getFloor());
|
|
BigDecimal useNum = roomModelFloorNumMap.get(item.getRoomModelId() + "_" + item.getFloor());
|
|
@@ -255,5 +256,29 @@ public class VoyageApiImpl implements VoyageApi{
|
|
stockDO.setShareNum(stockDO.getShareNum().subtract(totalUseNum));
|
|
stockDO.setShareNum(stockDO.getShareNum().subtract(totalUseNum));
|
|
voyageStockMapper.updateById(stockDO);
|
|
voyageStockMapper.updateById(stockDO);
|
|
}
|
|
}
|
|
|
|
+ // 添加房间使用记录
|
|
|
|
+ List<VoyageStockRoomUsedDO> roomUsedList = new ArrayList<>();
|
|
|
|
+ Map<Long, RoomRespDTO> roomIdMap = CollectionUtils.convertMap(roomList, RoomRespDTO::getId);
|
|
|
|
+ orderRoomList.forEach(item -> {
|
|
|
|
+ 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()));
|
|
|
|
+ }
|
|
|
|
+ roomUsedDO.setRoomModelId(roomRespDTO.getRoomModelId());
|
|
|
|
+ roomUsedDO.setFloor(roomRespDTO.getFloors());
|
|
|
|
+ roomUsedDO.setRoomId(item.getRoomId());
|
|
|
|
+ roomUsedDO.setNum(item.getNum());
|
|
|
|
+ roomUsedDO.setStatus(orderStatus);
|
|
|
|
+ roomUsedList.add(roomUsedDO);
|
|
|
|
+ });
|
|
|
|
+ //先删除当前订单已被使用的房间
|
|
|
|
+ voyageStockRoomUsedMapper.deleteByOrderId(orderId);
|
|
|
|
+ if(roomUsedList.size() > 0) {
|
|
|
|
+ voyageStockRoomUsedMapper.insertBatch(roomUsedList);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
}
|
|
}
|