|
|
@@ -3,6 +3,7 @@ package com.yc.ship.module.product.service.voyagestockdetail;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import com.yc.ship.framework.common.util.collection.CollectionUtils;
|
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailBatchSaveReqVO;
|
|
|
+import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailNewRespVO;
|
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailRespNewVO;
|
|
|
import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
|
|
|
import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
|
|
|
@@ -16,6 +17,7 @@ import com.yc.ship.module.product.enums.ProductStockStaticsName;
|
|
|
import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
|
|
|
import com.yc.ship.module.resource.api.ship.ShipApi;
|
|
|
import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
|
|
|
+import com.yc.ship.module.resource.dal.mysql.room.ResourceRoomMapper;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.redisson.api.RLock;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
@@ -53,6 +55,8 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
|
|
|
@Resource
|
|
|
private VoyageStockDistributeNewMapper voyageStockDistributeNewMapper;
|
|
|
@Resource
|
|
|
+ private ResourceRoomMapper resourceRoomMapper;
|
|
|
+ @Resource
|
|
|
private RedissonClient redissonClient;
|
|
|
|
|
|
@Resource
|
|
|
@@ -180,6 +184,75 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<VoyageStockDetailNewRespVO> getVoyageStockDetailByVoyageIdNew(Long voyageId,Long shipId) {
|
|
|
+ List<VoyageStockDetailDO> detailList = voyageStockDetailMapper.selectListByVoyageId(voyageId);
|
|
|
+ List<VoyageStockDetailNewRespVO> bean = BeanUtils.toBean(detailList, VoyageStockDetailNewRespVO.class);
|
|
|
+ //游轮固定房间数
|
|
|
+ List<RoomModelFloorNumDTO> roomNumList = resourceRoomMapper.selectRoomModelFloorToNum(shipId);
|
|
|
+ //获取留位数,锁定数,其他数
|
|
|
+ List<Map<String,Object>> listMap = voyageStockDetailMapper.selectLockedAndOtherNum(voyageId);
|
|
|
+ //获取指定房间数
|
|
|
+ List<Map<String,Object>> assignRoomMap = voyageStockDistributeNewMapper.selectAssignRoomNum(voyageId);
|
|
|
+ Map<String, Map<String, Object>> assignRoomNumMap = assignRoomMap.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ map -> map.get("roomModelId") + "_" + map.get("floor"),
|
|
|
+ map -> map,
|
|
|
+ (v1, v2) -> v1
|
|
|
+ ));
|
|
|
+ Map<String, Integer> roomNumMap = roomNumList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ dto -> dto.getRoomModelId() + "_" + dto.getFloor(),
|
|
|
+ RoomModelFloorNumDTO::getNum,
|
|
|
+ (v1, v2) -> v1
|
|
|
+ ));
|
|
|
+ Map<String, Map<String, Object>> lockLeaveMap = listMap.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ map -> map.get("roomModelId") + "_" + map.get("floor"),
|
|
|
+ map -> map,
|
|
|
+ (v1, v2) -> v1
|
|
|
+ ));
|
|
|
+
|
|
|
+ bean.forEach(item -> {
|
|
|
+ String key = item.getRoomModelId() + "_" + item.getFloor();
|
|
|
+ // 设置游轮固定房间数
|
|
|
+ Integer num = roomNumMap.get(key);
|
|
|
+ if (num != null) {
|
|
|
+ item.setRoomNum(BigDecimal.valueOf(num));
|
|
|
+ } else {
|
|
|
+ item.setRoomNum(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ // 获取指定房间数
|
|
|
+ Map<String, Object> assignRoomData = assignRoomNumMap.get(key);
|
|
|
+ if (assignRoomData != null) {
|
|
|
+ Object assignRoomNum = assignRoomData.get("totalNum");
|
|
|
+ if (assignRoomNum != null) {
|
|
|
+ item.setAssignRoomNum(new BigDecimal(assignRoomNum.toString()));
|
|
|
+ } else {
|
|
|
+ item.setAssignRoomNum(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ item.setAssignRoomNum(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ // 设置留位、锁位、其他数量
|
|
|
+ Map<String, Object> lockLeaveData = lockLeaveMap.get(key);
|
|
|
+ if (lockLeaveData != null) {
|
|
|
+ Object leaveNumObj = lockLeaveData.get("leaveNum");
|
|
|
+ Object lockNumObj = lockLeaveData.get("lockNum");
|
|
|
+ Object otherNumObj = lockLeaveData.get("otherNum");
|
|
|
+
|
|
|
+ item.setLeaveNum(leaveNumObj != null ? new BigDecimal(leaveNumObj.toString()) : BigDecimal.ZERO);
|
|
|
+ item.setLockNum(lockNumObj != null ? new BigDecimal(lockNumObj.toString()) : BigDecimal.ZERO);
|
|
|
+ item.setOtherNum(otherNumObj != null ? new BigDecimal(otherNumObj.toString()) : BigDecimal.ZERO);
|
|
|
+ } else {
|
|
|
+ item.setLeaveNum(BigDecimal.ZERO);
|
|
|
+ item.setLockNum(BigDecimal.ZERO);
|
|
|
+ item.setOtherNum(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return bean;
|
|
|
+ }
|
|
|
+
|
|
|
private Boolean handleBatchCreateVoyageStock(List<Long> voyageIds, VoyageStockDetailBatchSaveReqVO createReqVO) {
|
|
|
if(voyageIds.isEmpty()) {
|
|
|
return true;
|