|
|
@@ -22,6 +22,7 @@ import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
|
|
|
import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
|
|
|
import com.yc.ship.module.product.dal.mysql.pricevoyage.PriceVoyageMapper;
|
|
|
import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
|
|
|
+import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockLogMapper;
|
|
|
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.voyagestockdistribute.VoyageStockDistributeNewMapper;
|
|
|
@@ -53,6 +54,7 @@ import java.util.Map;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception0;
|
|
|
import static com.yc.ship.module.product.enums.ErrorCodeConstants.VOYAGE_NOT_EXISTS;
|
|
|
|
|
|
/**
|
|
|
@@ -92,18 +94,81 @@ public class VoyageServiceImpl implements VoyageService {
|
|
|
@Resource
|
|
|
private PriceVoyageService priceVoyageService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private VoyageStockLogMapper voyageStockLogMapper;
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Long createVoyage(VoyageSaveReqVO createReqVO) {
|
|
|
// 插入
|
|
|
VoyageDO voyage = BeanUtils.toBean(createReqVO, VoyageDO.class);
|
|
|
Long shipId = voyage.getShipId();
|
|
|
+ Long routeId = voyage.getRouteId();
|
|
|
ShipRespDTO shipRespDTO = shipApi.queryShip(shipId);
|
|
|
voyage.setCode(VoyageUUCodeUtils.generateVoyageNo(shipRespDTO.getCode(), voyage.getStartTime(), voyage.getBoardingAddress(), voyage.getLeaveAddress()));
|
|
|
voyageMapper.insert(voyage);
|
|
|
Long id = voyage.getId();
|
|
|
|
|
|
saveOrUpdateVoyageStock(createReqVO, id);
|
|
|
+ Long templateId = createReqVO.getTemplateId();
|
|
|
+ PriceTemplateRespVO priceTemplate = null;
|
|
|
+ if(templateId != null) {
|
|
|
+ //有价格模板就生成航次价格
|
|
|
+ priceTemplate = priceTemplateService.getPriceTemplate(templateId);
|
|
|
+ }
|
|
|
+ if(priceTemplate != null) {
|
|
|
+ PriceVoyageSaveReqVO priceVoyageSaveReqVO = new PriceVoyageSaveReqVO();
|
|
|
+ Long priceVoyageId = IdUtil.getSnowflakeNextId();
|
|
|
+ priceVoyageSaveReqVO.setId(priceVoyageId);
|
|
|
+ priceVoyageSaveReqVO.setShipId(shipId);
|
|
|
+ priceVoyageSaveReqVO.setRouteId(routeId);
|
|
|
+ priceVoyageSaveReqVO.setTemplateId(templateId);
|
|
|
+ priceVoyageSaveReqVO.setVoyageId(id);
|
|
|
+ priceVoyageSaveReqVO.setPriceMode(priceTemplate.getPriceMode());
|
|
|
+ priceVoyageSaveReqVO.setValidateTime(priceTemplate.getValidateTime());
|
|
|
+ priceVoyageSaveReqVO.setStatus(UseStatusEnum.ENABLE.getStatus());
|
|
|
+ // 房型价格系数
|
|
|
+ List<PriceRoomModelRespVO> roomModelList = priceTemplate.getRoomModelList();
|
|
|
+ List<PriceRoomModelDO> priceRoomModelList = BeanUtils.toBean(roomModelList, PriceRoomModelDO.class);
|
|
|
+ priceRoomModelList.forEach(priceRoomModelDO -> {
|
|
|
+ priceRoomModelDO.setObjectId(priceVoyageId);
|
|
|
+ List<PriceRoomModelTypeDO> roomModelTypeList = priceRoomModelDO.getRoomModelTypeList();
|
|
|
+ if (CollectionUtils.isAnyEmpty(roomModelTypeList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ roomModelTypeList.forEach(roomModelType -> {
|
|
|
+ roomModelType.setObjectId(priceVoyageId);
|
|
|
+ PriceSingleSettingDO singleSetting = roomModelType.getSingleSetting();
|
|
|
+ if (singleSetting == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ singleSetting.setObjectId(priceVoyageId);
|
|
|
+
|
|
|
+ });
|
|
|
+ });
|
|
|
+ priceVoyageSaveReqVO.setRoomModelList(priceRoomModelList);
|
|
|
+ // 楼层加价
|
|
|
+ List<PriceFloorRespVO> floorList = priceTemplate.getFloorList();
|
|
|
+ List<PriceFloorDO> priceFloorList = BeanUtils.toBean(floorList, PriceFloorDO.class);
|
|
|
+ priceFloorList.forEach(priceFloorDO -> priceFloorDO.setObjectId(priceVoyageId));
|
|
|
+ priceVoyageSaveReqVO.setFloorList(priceFloorList);
|
|
|
+ //区域加价
|
|
|
+ List<PriceAreaRespVO> areaList = priceTemplate.getAreaList();
|
|
|
+ List<PriceAreaDO> priceAreaList = BeanUtils.toBean(areaList, PriceAreaDO.class);
|
|
|
+ priceAreaList.forEach(priceAreaDO -> priceAreaDO.setObjectId(priceVoyageId));
|
|
|
+ priceVoyageSaveReqVO.setAreaList(priceAreaList);
|
|
|
+ //区域基准价
|
|
|
+ List<BasicPriceAreaRespVO> basicAreaList = priceTemplate.getBasicAreaList();
|
|
|
+ List<BasicPriceAreaDO> basicPriceAreaList = BeanUtils.toBean(basicAreaList, BasicPriceAreaDO.class);
|
|
|
+ basicPriceAreaList.forEach(basicPriceAreaDO -> basicPriceAreaDO.setObjectId(priceVoyageId));
|
|
|
+ priceVoyageSaveReqVO.setBasicAreaList(basicPriceAreaList);
|
|
|
+ // 附加产品
|
|
|
+ List<PriceSpuRespVO> spuList = priceTemplate.getSpuList();
|
|
|
+ List<PriceSpuDO> priceSpuList = BeanUtils.toBean(spuList, PriceSpuDO.class);
|
|
|
+ priceSpuList.forEach(priceSpuDO -> priceSpuDO.setObjectId(priceVoyageId));
|
|
|
+ priceVoyageSaveReqVO.setSpuList(priceSpuList);
|
|
|
+ priceVoyageService.createPriceVoyage(priceVoyageSaveReqVO);
|
|
|
+ }
|
|
|
// 返回
|
|
|
return id;
|
|
|
}
|
|
|
@@ -111,11 +176,17 @@ public class VoyageServiceImpl implements VoyageService {
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void updateVoyage(VoyageSaveReqVO updateReqVO) {
|
|
|
+
|
|
|
// 校验存在
|
|
|
validateVoyageExists(updateReqVO.getId());
|
|
|
+ Long count = voyageStockLogMapper.countByVoyageId(updateReqVO.getId());
|
|
|
+ if(count > 0) {
|
|
|
+ throw exception0(500, "该航次已有订单,不允许修改");
|
|
|
+ }
|
|
|
// 更新
|
|
|
VoyageDO updateObj = BeanUtils.toBean(updateReqVO, VoyageDO.class);
|
|
|
voyageMapper.updateById(updateObj);
|
|
|
+
|
|
|
saveOrUpdateVoyageStock(updateReqVO, updateReqVO.getId());
|
|
|
|
|
|
}
|