瀏覽代碼

fix: 航次查询时返回价格模板字段

luofeiyun 1 周之前
父節點
當前提交
0ccb9dafba

+ 11 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java

@@ -8,8 +8,10 @@ import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.collection.MapUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.framework.excel.core.util.ExcelUtils;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageRespVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.*;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
+import com.yc.ship.module.product.service.pricevoyage.PriceVoyageService;
 import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.api.route.RouteApi;
 import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
@@ -57,6 +59,9 @@ public class VoyageController {
     @Resource
     private RouteApi routeApi;
 
+    @Resource
+    private PriceVoyageService priceVoyageService;
+
     @PostMapping("/create")
     @Operation(summary = "创建航次管理")
     @PreAuthorize("@ss.hasPermission('product:voyage:create')")
@@ -95,7 +100,12 @@ public class VoyageController {
     @PreAuthorize("@ss.hasPermission('product:voyage:query')")
     public CommonResult<VoyageRespVO> getVoyage(@RequestParam("id") Long id) {
         VoyageDO voyage = voyageService.getVoyage(id);
-        return success(BeanUtils.toBean(voyage, VoyageRespVO.class));
+        VoyageRespVO voyageRespVO = BeanUtils.toBean(voyage, VoyageRespVO.class);
+        PriceVoyageRespVO priceVoyageRespVO = priceVoyageService.getByVoyageId(voyageRespVO.getId());
+        if(priceVoyageRespVO != null) {
+            voyageRespVO.setTemplateId(priceVoyageRespVO.getTemplateId());
+        }
+        return success(voyageRespVO);
     }
 
     @GetMapping("/page")

+ 3 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageRespVO.java

@@ -25,6 +25,9 @@ public class VoyageRespVO {
     @ExcelProperty("航次名称")
     private String name;
 
+    @Schema(description = "价格模板ID", example = "13031")
+    private Long templateId;
+
     @Schema(description = "基础价格")
     private BigDecimal basicPrice;
 

+ 3 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageSaveReqVO.java

@@ -67,6 +67,9 @@ public class VoyageSaveReqVO {
     @Schema(description = "产品介绍")
     private String introduce;
 
+    @Schema(description = "价格模板ID")
+    private Long templateId;
+
     @Deprecated
     @Schema(description = "登船须知(弃用)")
     private String notice;

+ 4 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestock/VoyageStockLogMapper.java

@@ -20,4 +20,8 @@ public interface VoyageStockLogMapper extends BaseMapperX<VoyageStockLogDO> {
                 .last("limit 1"));
 
     }
+
+    default Long countByVoyageId(Long voyageId) {
+        return selectCount(new LambdaQueryWrapperX<VoyageStockLogDO>().eq(VoyageStockLogDO::getVoyageId, voyageId));
+    }
 }

+ 71 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java

@@ -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());
 
     }