| 
					
				 | 
			
			
				@@ -6,12 +6,19 @@ import com.yc.ship.framework.common.pojo.PageResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.framework.common.util.collection.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.framework.common.util.object.BeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.framework.mybatis.core.util.MyBatisUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yc.ship.module.product.controller.admin.voyagestock.vo.VoyageStockPageReqVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yc.ship.module.product.controller.admin.voyagestock.vo.VoyageStockRespVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.voyagestockdistribute.VoyageStockDistributeNewDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockRoomUsedMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.YesOrNoEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.yc.ship.module.product.service.voyagestock.VoyageStockService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.module.product.service.voyagestockdetail.VoyageStockDetailService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.module.resource.api.room.RoomApi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.yc.ship.module.resource.api.room.dto.RoomRespDTO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -60,6 +67,13 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private RedissonClient redissonClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VoyageStockService voyageStockService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Resource 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private VoyageStockRoomUsedMapper voyageStockRoomUsedMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -149,10 +163,17 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 获取已被分配的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<VoyageStockDistributeRoomDO> distributeRoomList = voyageStockDistributeRoomService.getListByVoyageId(voyageId, DistributorOrStoreEnum.DISTRIBUTOR.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Long> selectedRoomIds = CollectionUtils.convertList(distributeRoomList, VoyageStockDistributeRoomDO::getRoomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取已被使用的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VoyageStockRoomUsedDO> roomUsedList = voyageStockRoomUsedMapper.selectListByVoyageId(voyageId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> usedRoomIds = CollectionUtils.convertList(roomUsedList, VoyageStockRoomUsedDO::getRoomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         roomList.stream().forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             item.setIsSelected(selectedRoomIds.contains(item.getId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //TODO 待完善,已被销售的房间不可操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             item.setDisabled(false);//当前全部都可操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(usedRoomIds.contains(item.getId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setDisabled(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setDisabled(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return roomList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -170,16 +191,58 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             roomList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Long> roomIds = CollectionUtils.convertList(roomList, VoyageStockDistributeRoomDO::getRoomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<RoomRespDTO> roomRespList = roomApi.getRoomListByIds(roomIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //TODO: 待完善,此处应该去掉已被选了的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取完全被使用的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VoyageStockRoomUsedDO> allUsedList = voyageStockRoomUsedMapper.selectAllUsedList(reqVO.getVoyageId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> allUserRoomId = CollectionUtils.convertList(allUsedList, VoyageStockRoomUsedDO::getRoomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //过滤掉完全被使用的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> canSelectRoomIds = roomIds.stream().filter(item -> !allUserRoomId.contains(item)).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<RoomRespDTO> roomRespList = roomApi.getRoomListByIds(canSelectRoomIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 获取使用一半的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VoyageStockRoomUsedDO> halfUsedList = voyageStockRoomUsedMapper.selectHalfUsedRoom(reqVO.getVoyageId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> halfUsedRoomIds = CollectionUtils.convertList(halfUsedList, VoyageStockRoomUsedDO::getRoomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        roomRespList.stream().forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           if(halfUsedRoomIds.contains(item.getId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               item.setNum(BigDecimal.valueOf(0.5)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               item.setNum(BigDecimal.ONE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return roomRespList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public PageResult<VoyageStockDistributeNewPageRespVO> getPage(VoyageStockDistributeNewPageReqVO reqVO) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IPage<VoyageStockDistributeNewPageRespVO> page = MyBatisUtils.buildPage(reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IPage iPage = voyageStockDistributeNewMapper.selectPage(page, reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return new PageResult<>(iPage.getRecords(), iPage.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        VoyageStockPageReqVO pageParams = BeanUtils.toBean(reqVO, VoyageStockPageReqVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PageResult<VoyageStockRespVO> voyageStockPage = voyageStockService.getVoyageStockPage(pageParams); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VoyageStockRespVO> list = voyageStockPage.getList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> voyageIds = CollectionUtils.convertList(list, VoyageStockRespVO::getVoyageId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VoyageStockDistributeNewPageRespVO> distributeNewDOS = voyageStockDistributeNewMapper.selectList(voyageIds, reqVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, BigDecimal> idNumMap = CollectionUtils.convertMap(distributeNewDOS, VoyageStockDistributeNewPageRespVO::getVoyageId, VoyageStockDistributeNewPageRespVO::getNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Long, BigDecimal> idRoomModelNumMap = CollectionUtils.convertMap(distributeNewDOS, VoyageStockDistributeNewPageRespVO::getVoyageId, VoyageStockDistributeNewPageRespVO::getRoomModelNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VoyageStockDistributeNewPageRespVO> resultList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        list.stream().forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal num = idNumMap.get(item.getVoyageId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal roomModelNum = idRoomModelNumMap.get(item.getVoyageId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            VoyageStockDistributeNewPageRespVO respVO = new VoyageStockDistributeNewPageRespVO(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            respVO.setVoyageId(item.getVoyageId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            respVO.setVoyageName(item.getVoyageName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            respVO.setShipId(item.getShipId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            respVO.setShipName(item.getShipName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(num != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                respVO.setNum(num); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                respVO.setEnableShare(YesOrNoEnum.NO.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                respVO.setNum(item.getShareNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                respVO.setEnableShare(YesOrNoEnum.YES.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(roomModelNum != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                respVO.setRoomModelNum(roomModelNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                respVO.setRoomModelNum(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            resultList.add(respVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new PageResult<>(resultList, voyageStockPage.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -231,11 +294,16 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //获取已被门店选择的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<VoyageStockDistributeRoomDO> storeRoomList = voyageStockDistributeRoomService.getListByVoyageId(voyageId, DistributorOrStoreEnum.STORE.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Long> selectedStoreRoomIds = CollectionUtils.convertList(storeRoomList, VoyageStockDistributeRoomDO::getRoomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取已被使用的房间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<VoyageStockRoomUsedDO> roomUsedList = voyageStockRoomUsedMapper.selectListByVoyageId(voyageId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Long> usedRoomIds = CollectionUtils.convertList(roomUsedList, VoyageStockRoomUsedDO::getRoomId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         roomList.stream().forEach(item -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             item.setIsSelected(selectedStoreRoomIds.contains(item.getId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //TODO 待完善,已被销售的房间不可操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            item.setDisabled(false);//当前全部都可操作 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(usedRoomIds.contains(item.getId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setDisabled(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setDisabled(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return roomList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 |