|
@@ -1,10 +1,15 @@
|
|
package com.yc.ship.module.product.service.voyage;
|
|
package com.yc.ship.module.product.service.voyage;
|
|
|
|
|
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
import com.yc.ship.framework.common.pojo.PageResult;
|
|
import com.yc.ship.framework.common.pojo.PageResult;
|
|
import com.yc.ship.framework.common.util.collection.CollectionUtils;
|
|
import com.yc.ship.framework.common.util.collection.CollectionUtils;
|
|
import com.yc.ship.framework.common.util.object.BeanUtils;
|
|
import com.yc.ship.framework.common.util.object.BeanUtils;
|
|
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyagePageReqVO;
|
|
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyagePageReqVO;
|
|
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageReqVO;
|
|
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageReqVO;
|
|
|
|
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageSaveBatchReqVO;
|
|
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageSaveReqVO;
|
|
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageSaveReqVO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
|
|
@@ -12,6 +17,7 @@ import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDe
|
|
import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
|
|
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.voyagestockdetail.VoyageStockDetailMapper;
|
|
import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
|
|
|
|
+import com.yc.ship.module.product.enums.YesOrNoEnum;
|
|
import com.yc.ship.module.product.utils.VoyageUUCodeUtils;
|
|
import com.yc.ship.module.product.utils.VoyageUUCodeUtils;
|
|
import com.yc.ship.module.resource.api.ship.ShipApi;
|
|
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.api.ship.dto.RoomModelFloorNumDTO;
|
|
@@ -22,6 +28,7 @@ import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
|
|
+import java.time.LocalDate;
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -127,6 +134,53 @@ public class VoyageServiceImpl implements VoyageService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private void saveOrUpdateVoyageStockBatch(List<VoyageDO> voyageDOList, Long shipId) {
|
|
|
|
+ // 批量插入库存统计数据
|
|
|
|
+ List<VoyageStockDO> voyageStockDOList = new ArrayList<>();
|
|
|
|
+ //添加库存详情
|
|
|
|
+ List<VoyageStockDetailDO> stockDetailDOS = new ArrayList<>();
|
|
|
|
+ //新增时添加统计数据
|
|
|
|
+ List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(shipId);
|
|
|
|
+ int sum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
|
|
|
|
+ voyageDOList.stream().forEach(item -> {
|
|
|
|
+ VoyageStockDO voyageStockDO = new VoyageStockDO();
|
|
|
|
+ voyageStockDO.setVoyageId(item.getId());
|
|
|
|
+ voyageStockDO.setVoyageName(item.getName());
|
|
|
|
+ voyageStockDO.setShipId(item.getShipId());
|
|
|
|
+ voyageStockDO.setType(item.getType());
|
|
|
|
+ voyageStockDO.setTotalNum(sum);
|
|
|
|
+ voyageStockDO.setRealTotalNum(sum);
|
|
|
|
+ voyageStockDO.setNotShelfNum(sum);
|
|
|
|
+ voyageStockDO.setShelfedNum(0);
|
|
|
|
+ voyageStockDO.setBookNum(0);
|
|
|
|
+ voyageStockDO.setCanSellNum(0);
|
|
|
|
+ voyageStockDO.setVirtualNum(0);
|
|
|
|
+ voyageStockDO.setOversoldNum(0);
|
|
|
|
+ voyageStockDO.setSurplusNum(sum);
|
|
|
|
+ voyageStockDOList.add(voyageStockDO);
|
|
|
|
+ list.stream().forEach(roomModelFloorNumDTO -> {
|
|
|
|
+ VoyageStockDetailDO stockDetailDO = new VoyageStockDetailDO();
|
|
|
|
+ stockDetailDO.setVoyageId(item.getId());
|
|
|
|
+ stockDetailDO.setRoomModelId(roomModelFloorNumDTO.getRoomModelId());
|
|
|
|
+ stockDetailDO.setRoomModelName(roomModelFloorNumDTO.getRoomModelName());
|
|
|
|
+ stockDetailDO.setFloor(roomModelFloorNumDTO.getFloor());
|
|
|
|
+ stockDetailDO.setTotalNum(roomModelFloorNumDTO.getNum());
|
|
|
|
+ stockDetailDO.setRealTotalNum(roomModelFloorNumDTO.getNum());
|
|
|
|
+ stockDetailDO.setShelfNum(0);
|
|
|
|
+ stockDetailDO.setNotShelfNum(roomModelFloorNumDTO.getNum());
|
|
|
|
+ stockDetailDO.setShelfedNum(0);
|
|
|
|
+ stockDetailDO.setBookNum(0);
|
|
|
|
+ stockDetailDO.setCanSellNum(0);
|
|
|
|
+ stockDetailDO.setOversoldNum(0);
|
|
|
|
+ stockDetailDO.setVirtualNum(0);
|
|
|
|
+ stockDetailDO.setSurplusNum(roomModelFloorNumDTO.getNum());
|
|
|
|
+ stockDetailDOS.add(stockDetailDO);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ voyageStockMapper.insertBatch(voyageStockDOList);
|
|
|
|
+ voyageStockDetailMapper.insertBatch(stockDetailDOS);
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public void deleteVoyage(Long id) {
|
|
public void deleteVoyage(Long id) {
|
|
// 校验存在
|
|
// 校验存在
|
|
@@ -175,4 +229,53 @@ public class VoyageServiceImpl implements VoyageService {
|
|
return voyageMapper.selectOnShelfListByShipId(shipId);
|
|
return voyageMapper.selectOnShelfListByShipId(shipId);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ @Override
|
|
|
|
+ public void createVoyageBatch(VoyageSaveBatchReqVO createReqVO) {
|
|
|
|
+ LocalDate startDate = createReqVO.getStartDate();
|
|
|
|
+ LocalDate endDate = createReqVO.getEndDate();
|
|
|
|
+ Integer voyageDays = createReqVO.getVoyageDays();
|
|
|
|
+ Integer intervalDays = createReqVO.getIntervalDays();
|
|
|
|
+ String startTime = createReqVO.getStartTime();
|
|
|
|
+ String leaveTime = createReqVO.getLeaveTime();
|
|
|
|
+ String boardingTime = createReqVO.getBoardingTime();
|
|
|
|
+ Long shipId = createReqVO.getShipId();
|
|
|
|
+
|
|
|
|
+ // 删除该日期内当前游轮当前航线的所有航次
|
|
|
|
+ voyageMapper.deleteByShipIdAndRouteId(startDate, endDate, shipId, createReqVO.getRouteId());
|
|
|
|
+
|
|
|
|
+ ShipRespDTO shipRespDTO = shipApi.queryShip(shipId);
|
|
|
|
+ List<VoyageDO> voyageDOList = new ArrayList<>();
|
|
|
|
+ while (startDate.isBefore(endDate)) {
|
|
|
|
+ VoyageDO voyageDO = new VoyageDO();
|
|
|
|
+ Long id = IdUtil.getSnowflakeNextId();
|
|
|
|
+ voyageDO.setId(id);
|
|
|
|
+ LocalDate leaveDate = startDate.plusDays(voyageDays);// 离船日期
|
|
|
|
+ String startDateStr = LocalDateTimeUtil.format(startDate, DatePattern.NORM_DATE_PATTERN);
|
|
|
|
+ voyageDO.setName(shipRespDTO.getName()+startDateStr);
|
|
|
|
+ voyageDO.setCode(VoyageUUCodeUtils.generateVoyageNo(shipRespDTO.getCode(), startDateStr, createReqVO.getBoardingAddress(), createReqVO.getLeaveAddress()));
|
|
|
|
+ voyageDO.setShipId(shipId);
|
|
|
|
+ voyageDO.setRouteId(createReqVO.getRouteId());
|
|
|
|
+ voyageDO.setStartTime(LocalDateTimeUtil.parse(startDateStr+"T"+startTime));
|
|
|
|
+ voyageDO.setLeaveTime(LocalDateTimeUtil.parse(leaveDate+"T"+leaveTime));
|
|
|
|
+ voyageDO.setBoardingTime(LocalDateTimeUtil.parse(startDateStr+"T"+boardingTime));
|
|
|
|
+ voyageDO.setType(createReqVO.getType());
|
|
|
|
+ voyageDO.setTransfer(YesOrNoEnum.NO.getType());
|
|
|
|
+ voyageDO.setTransferTime(null);
|
|
|
|
+ voyageDO.setBoardingDockId(createReqVO.getBoardingDockId());
|
|
|
|
+ voyageDO.setBoardingAddress(createReqVO.getBoardingAddress());
|
|
|
|
+ voyageDO.setLeaveAddress(createReqVO.getLeaveAddress());
|
|
|
|
+ voyageDO.setChannel(createReqVO.getChannel());
|
|
|
|
+ voyageDO.setStockVisible(createReqVO.getStockVisible());
|
|
|
|
+ voyageDO.setShelfStatus(createReqVO.getShelfStatus());
|
|
|
|
+ voyageDO.setVenue(createReqVO.getVenue());
|
|
|
|
+ voyageDO.setIntroduce(createReqVO.getIntroduce());
|
|
|
|
+ voyageDO.setNotice(createReqVO.getNotice());
|
|
|
|
+ voyageDOList.add(voyageDO);
|
|
|
|
+ startDate = leaveDate.plusDays(intervalDays);
|
|
|
|
+ }
|
|
|
|
+ voyageMapper.insertBatch(voyageDOList);
|
|
|
|
+ saveOrUpdateVoyageStockBatch(voyageDOList, shipId);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|