|
|
@@ -8,6 +8,7 @@ import com.yc.ship.module.product.controller.admin.voyagestock.vo.VoyageStockRes
|
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.*;
|
|
|
import com.yc.ship.module.product.controller.app.voyage.vo.AppCanSelectRoomReqVO;
|
|
|
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.voyagestockdistribute.VoyageStockDistributeNewDO;
|
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
|
|
|
import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockRoomUsedMapper;
|
|
|
@@ -74,15 +75,13 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public void createVoyageStockDistributeNew(List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
|
|
|
+ public void createVoyageStockDistributeNew(Long voyageId, Integer type, List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
|
|
|
BigDecimal zero = BigDecimal.ZERO;
|
|
|
- Long voyageId = createReqVO.get(0).getVoyageId();
|
|
|
//现在给整个航次的库存加锁
|
|
|
String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
|
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
|
try {
|
|
|
lock.lock(60, TimeUnit.SECONDS);
|
|
|
- Integer type = createReqVO.get(0).getType();
|
|
|
//删除分配的房间
|
|
|
voyageStockDistributeRoomService.deleteByVoyageId(voyageId, type);
|
|
|
// 分配的房间列表
|
|
|
@@ -242,9 +241,71 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
|
|
|
|
|
|
@Override
|
|
|
public List<VoyageStockDistributeNewRespVO> getDetail(VoyageStockDistributeNewDetailReqVO reqVO) {
|
|
|
+ Integer enableShare = reqVO.getEnableShare();
|
|
|
+ if(enableShare.equals(YesOrNoEnum.YES.getType())) {
|
|
|
+ return getShareStockDetail(reqVO);
|
|
|
+ }else {
|
|
|
+ return getDistributorStockDetail(reqVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取共享库存详情
|
|
|
+ * @param reqVO
|
|
|
+ */
|
|
|
+ private List<VoyageStockDistributeNewRespVO> getShareStockDetail(VoyageStockDistributeNewDetailReqVO reqVO) {
|
|
|
+ List<VoyageStockDistributeNewRespVO> list = new ArrayList<>();
|
|
|
+ //该游轮所以的房间
|
|
|
+ List<RoomRespDTO> roomList = roomApi.getRoomList(reqVO.getShipId());
|
|
|
+ //1.排除已被分配的房间
|
|
|
+ List<VoyageStockDistributeRoomDO> distributeRoomList = voyageStockDistributeRoomService.getListByVoyageId(reqVO.getVoyageId(), reqVO.getType());
|
|
|
+ List<Long> roomIds = CollectionUtils.convertList(distributeRoomList, VoyageStockDistributeRoomDO::getRoomId);
|
|
|
+ List<RoomRespDTO> roomList1 = roomList.stream().filter(item -> !roomIds.contains(item.getId())).collect(Collectors.toList());
|
|
|
+ //2.排除已被售卖的房间
|
|
|
+ List<VoyageStockRoomUsedDO> usedRoomList = voyageStockRoomUsedMapper.selectListByVoyageId(reqVO.getVoyageId());
|
|
|
+ List<Long> usedRoomIds = CollectionUtils.convertList(usedRoomList, VoyageStockRoomUsedDO::getRoomId);
|
|
|
+ List<RoomRespDTO> roomList2 = roomList1.stream().filter(item -> !usedRoomIds.contains(item.getId())).collect(Collectors.toList());
|
|
|
+ List<VoyageStockDistributorRoomRespVO> voyageStockDistributorRoomRespVOS = new ArrayList<>();
|
|
|
+ roomList2.stream().forEach(item -> {
|
|
|
+ VoyageStockDistributorRoomRespVO respVO = new VoyageStockDistributorRoomRespVO();
|
|
|
+ respVO.setRoomNum(item.getRoomNum())
|
|
|
+ .setFloor(item.getFloors())
|
|
|
+ .setRoomModelId(item.getRoomModelId());
|
|
|
+ voyageStockDistributorRoomRespVOS.add(respVO);
|
|
|
+ });
|
|
|
+ Map<String, List<VoyageStockDistributorRoomRespVO>> map = CollectionUtils.convertMultiMap(voyageStockDistributorRoomRespVOS, (item) -> item.getRoomModelId() + "_" + item.getFloor());
|
|
|
+
|
|
|
+ // 获取所有库存
|
|
|
+ List<VoyageStockDetailDO> stockDetailDOList = voyageStockDetailService.getListByVoyageId(reqVO.getVoyageId());
|
|
|
+ List<VoyageStockDetailDO> stockDetailDOList1 = stockDetailDOList.stream().filter(item -> item.getCanSellNum().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //减去已分配的库存,剩下的就是共享库存
|
|
|
+ List<VoyageStockDistributeNewDO> distributeNewDOS = voyageStockDistributeNewMapper.selectListByVoyageId(reqVO.getVoyageId(), reqVO.getType());
|
|
|
+ Map<String, BigDecimal> distributeNewMap = CollectionUtils.convertMap(distributeNewDOS, item -> item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
|
|
|
+
|
|
|
+ stockDetailDOList1.stream().forEach(item -> {
|
|
|
+ BigDecimal bigDecimal = distributeNewMap.get(item.getRoomModelId() + "_" + item.getFloor());
|
|
|
+ if (bigDecimal == null) {
|
|
|
+ bigDecimal = BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ VoyageStockDistributeNewRespVO respVO = new VoyageStockDistributeNewRespVO();
|
|
|
+ respVO.setNum(item.getCanSellNum().subtract(bigDecimal))
|
|
|
+ .setFloor(item.getFloor())
|
|
|
+ .setRoomModelId(item.getRoomModelId())
|
|
|
+ .setRoomModelName(item.getRoomModelName());
|
|
|
+ respVO.setRoomList(map.get(item.getRoomModelId() + "_" + item.getFloor()));
|
|
|
+ list.add(respVO);
|
|
|
+ });
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取分销商库存详情
|
|
|
+ * @param reqVO
|
|
|
+ */
|
|
|
+ private List<VoyageStockDistributeNewRespVO> getDistributorStockDetail(VoyageStockDistributeNewDetailReqVO reqVO) {
|
|
|
List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageIdAndObjectId(reqVO);
|
|
|
List<VoyageStockDistributeNewRespVO> respVO = BeanUtils.toBean(list, VoyageStockDistributeNewRespVO.class);
|
|
|
-
|
|
|
List<VoyageStockDistributeRoomDO> roomList = voyageStockDistributeRoomService.getListByVoyageIdAndObjectId(reqVO);
|
|
|
List<VoyageStockDistributorRoomRespVO> roomRespList = BeanUtils.toBean(roomList, VoyageStockDistributorRoomRespVO.class);
|
|
|
List<Long> roomIds = CollectionUtils.convertList(roomRespList, VoyageStockDistributorRoomRespVO::getRoomId);
|