فهرست منبع

fix: 批量生成航次时根据选择的价格模板生成航次价格

luofeiyun 2 هفته پیش
والد
کامیت
feddeef13c

+ 21 - 26
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/PriceTemplateController.java

@@ -20,6 +20,8 @@ import com.yc.ship.module.product.service.priceroommodel.PriceRoomModelService;
 import com.yc.ship.module.product.service.pricesinglesetting.PriceSingleSettingService;
 import com.yc.ship.module.product.service.pricespu.PriceSpuService;
 import com.yc.ship.module.product.service.pricetemplate.PriceTemplateService;
+import com.yc.ship.module.resource.api.route.RouteApi;
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
 import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
@@ -48,23 +50,13 @@ public class PriceTemplateController {
     @Resource
     private PriceTemplateService priceTemplateService;
 
-    @Resource
-    private PriceRoomModelService priceRoomModelService;
-
-    @Resource
-    private PriceFloorService priceFloorService;
-
-    @Resource
-    private PriceSingleSettingService priceSingleSettingService;
 
-    @Resource
-    private PriceAreaService priceAreaService;
 
     @Resource
-    private PriceSpuService priceSpuService;
+    private ShipApi shipApi;
 
     @Resource
-    private ShipApi shipApi;
+    private RouteApi routeApi;
 
     @PostMapping("/create")
     @Operation(summary = "创建价格模板")
@@ -95,19 +87,7 @@ public class PriceTemplateController {
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('product:price-template:query')")
     public CommonResult<PriceTemplateRespVO> getPriceTemplate(@RequestParam("id") Long id) {
-        PriceTemplateDO priceTemplate = priceTemplateService.getPriceTemplate(id);
-        PriceTemplateRespVO respVO = BeanUtils.toBean(priceTemplate, PriceTemplateRespVO.class);
-        PriceSingleSettingDO singleSettingDO = priceSingleSettingService.getByObjectId(id);
-        respVO.setSingleSetting(BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class));
-        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
-        respVO.setRoomModelList(BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class));
-        List<PriceFloorDO> floorDOList = priceFloorService.getListByObjectId(id);
-        respVO.setFloorList(BeanUtils.toBean(floorDOList, PriceFloorRespVO.class));
-        List<PriceAreaDO> areaList = priceAreaService.getListByObjectId(id);
-        respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
-        //附加产品
-        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
-        respVO.setSpuList(spuList);
+        PriceTemplateRespVO respVO = priceTemplateService.getPriceTemplate(id);
         return success(respVO);
     }
 
@@ -120,8 +100,23 @@ public class PriceTemplateController {
         List<PriceTemplateRespVO> list = page.getList();
         List<Long> shipIds = CollectionUtils.convertList(list, PriceTemplateRespVO::getShipId);
         Map<Long, ShipRespDTO> shipMap = shipApi.queryShip(shipIds);
+
+        List<Long> routeIds = CollectionUtils.convertList(list, PriceTemplateRespVO::getRouteId);
+        Map<Long, RouteRespDTO> routeMap = routeApi.queryRoute(routeIds);
+
         list.stream().forEach(item -> {
-            item.setShipName(shipMap.get(item.getShipId()).getName());
+            ShipRespDTO shipRespDTO = shipMap.get(item.getShipId());
+            if(shipRespDTO != null) {
+                item.setShipName(shipRespDTO.getName());
+            }else {
+                item.setShipName("已删除");
+            }
+            RouteRespDTO routeRespDTO = routeMap.get(item.getRouteId());
+            if(routeRespDTO != null) {
+                item.setRouteName(routeRespDTO.getName());
+            }else {
+                item.setRouteName("已删除");
+            }
         });
         return success(page);
     }

+ 8 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateRespVO.java

@@ -34,6 +34,9 @@ public class PriceTemplateRespVO {
     @ExcelProperty("航线ID")
     private Long routeId;
 
+    @Schema(description = "航线名称", example = "王五")
+    private String routeName;
+
     @Schema(description = "价格模式")
     @ExcelProperty(value = "价格模式", converter = DictConvert.class)
     @DictFormat("product_price_model") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
@@ -48,6 +51,11 @@ public class PriceTemplateRespVO {
     @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
     private Integer status;
 
+    /***
+     * 加床类型 0:固定金额 1:百分比
+     */
+    private Integer jctype;
+
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;

+ 5 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateSaveReqVO.java

@@ -38,6 +38,11 @@ public class PriceTemplateSaveReqVO {
     @NotNull(message = "状态不能为空")
     private Integer status;
 
+    /***
+     * 加床类型 0:固定金额 1:百分比
+     */
+    private Integer jctype;
+
     @Schema(description = "房型价格系数")
     private List<PriceRoomModelDO> roomModelList;
 

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

@@ -59,4 +59,7 @@ public class VoyageSaveBatchReqVO {
 
     @Schema(description = "登船须知")
     private String notice;
+
+    @Schema(description = "价格模板ID", example = "1")
+    private Long templateId;
 }

+ 5 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricetemplate/PriceTemplateDO.java

@@ -59,4 +59,9 @@ public class PriceTemplateDO extends TenantBaseDO {
      */
     private Integer status;
 
+    /***
+     * 加床类型 0:固定金额 1:百分比
+     */
+    private Integer jctype;
+
 }

+ 2 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateService.java

@@ -3,6 +3,7 @@ package com.yc.ship.module.product.service.pricetemplate;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplatePageReqVO;
 import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateReqVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateRespVO;
 import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.pricetemplate.PriceTemplateDO;
 
@@ -44,7 +45,7 @@ public interface PriceTemplateService {
      * @param id 编号
      * @return 价格模板
      */
-    PriceTemplateDO getPriceTemplate(Long id);
+    PriceTemplateRespVO getPriceTemplate(Long id);
 
     /**
      * 获得价格模板分页

+ 36 - 5
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateServiceImpl.java

@@ -3,9 +3,7 @@ package com.yc.ship.module.product.service.pricetemplate;
 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.module.product.controller.admin.pricetemplate.vo.PriceTemplatePageReqVO;
-import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateReqVO;
-import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateSaveReqVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.*;
 import com.yc.ship.module.product.dal.dataobject.pricearea.PriceAreaDO;
 import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
 import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
@@ -18,6 +16,11 @@ import com.yc.ship.module.product.dal.mysql.priceroommodel.PriceRoomModelMapper;
 import com.yc.ship.module.product.dal.mysql.pricesinglesetting.PriceSingleSettingMapper;
 import com.yc.ship.module.product.dal.mysql.pricespu.PriceSpuMapper;
 import com.yc.ship.module.product.dal.mysql.pricetemplate.PriceTemplateMapper;
+import com.yc.ship.module.product.service.pricearea.PriceAreaService;
+import com.yc.ship.module.product.service.pricefloor.PriceFloorService;
+import com.yc.ship.module.product.service.priceroommodel.PriceRoomModelService;
+import com.yc.ship.module.product.service.pricesinglesetting.PriceSingleSettingService;
+import com.yc.ship.module.product.service.pricespu.PriceSpuService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -56,6 +59,21 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
     @Resource
     private PriceSpuMapper priceSpuMapper;
 
+    @Resource
+    private PriceRoomModelService priceRoomModelService;
+
+    @Resource
+    private PriceFloorService priceFloorService;
+
+    @Resource
+    private PriceSingleSettingService priceSingleSettingService;
+
+    @Resource
+    private PriceAreaService priceAreaService;
+
+    @Resource
+    private PriceSpuService priceSpuService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createPriceTemplate(PriceTemplateSaveReqVO createReqVO) {
@@ -99,8 +117,21 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
     }
 
     @Override
-    public PriceTemplateDO getPriceTemplate(Long id) {
-        return priceTemplateMapper.selectById(id);
+    public PriceTemplateRespVO getPriceTemplate(Long id) {
+        PriceTemplateDO priceTemplate = priceTemplateMapper.selectById(id);
+        PriceTemplateRespVO respVO = BeanUtils.toBean(priceTemplate, PriceTemplateRespVO.class);
+        PriceSingleSettingDO singleSettingDO = priceSingleSettingService.getByObjectId(id);
+        respVO.setSingleSetting(BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class));
+        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
+        respVO.setRoomModelList(BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class));
+        List<PriceFloorDO> floorDOList = priceFloorService.getListByObjectId(id);
+        respVO.setFloorList(BeanUtils.toBean(floorDOList, PriceFloorRespVO.class));
+        List<PriceAreaDO> areaList = priceAreaService.getListByObjectId(id);
+        respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
+        //附加产品
+        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
+        respVO.setSpuList(spuList);
+        return respVO;
     }
 
     @Override

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

@@ -6,7 +6,14 @@ import cn.hutool.core.util.IdUtil;
 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.module.product.controller.admin.pricetemplate.vo.*;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageSaveReqVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.*;
+import com.yc.ship.module.product.dal.dataobject.pricearea.PriceAreaDO;
+import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
+import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
+import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleSettingDO;
+import com.yc.ship.module.product.dal.dataobject.pricespu.PriceSpuDO;
 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.voyagestockdetail.VoyageStockDetailDO;
@@ -15,8 +22,11 @@ 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.voyagestockdetail.VoyageStockDetailMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
+import com.yc.ship.module.product.enums.UseStatusEnum;
 import com.yc.ship.module.product.enums.YesOrNoEnum;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
+import com.yc.ship.module.product.service.pricetemplate.PriceTemplateService;
+import com.yc.ship.module.product.service.pricevoyage.PriceVoyageService;
 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.dto.RoomModelFloorNumDTO;
@@ -72,6 +82,12 @@ public class VoyageServiceImpl implements VoyageService {
     @Resource
     private RedissonClient redissonClient;
 
+    @Resource
+    private PriceTemplateService priceTemplateService;
+
+    @Resource
+    private PriceVoyageService priceVoyageService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createVoyage(VoyageSaveReqVO createReqVO) {
@@ -283,9 +299,14 @@ public class VoyageServiceImpl implements VoyageService {
         String leaveTime = createReqVO.getLeaveTime();
         String boardingTime = createReqVO.getBoardingTime();
         Long shipId = createReqVO.getShipId();
-
+        Long routeId = createReqVO.getRouteId();
+        Long templateId = createReqVO.getTemplateId();
+        PriceTemplateRespVO priceTemplate = null;
+        if(templateId != null) { //有价格模板就生成航次价格
+            priceTemplate = priceTemplateService.getPriceTemplate(templateId);
+        }
         // 删除该日期内当前游轮当前航线的所有航次
-        voyageMapper.deleteByShipIdAndRouteId(startDate, endDate, shipId, createReqVO.getRouteId());
+        voyageMapper.deleteByShipIdAndRouteId(startDate, endDate, shipId, routeId);
 
         ShipRespDTO shipRespDTO = shipApi.queryShip(shipId);
         List<VoyageDO> voyageDOList = new ArrayList<>();
@@ -298,7 +319,7 @@ public class VoyageServiceImpl implements VoyageService {
             voyageDO.setName(shipRespDTO.getName()+startDateStr);
             voyageDO.setCode(VoyageUUCodeUtils.generateVoyageNo(shipRespDTO.getCode(), startDateStr, createReqVO.getBoardingAddress(), createReqVO.getLeaveAddress()));
             voyageDO.setShipId(shipId);
-            voyageDO.setRouteId(createReqVO.getRouteId());
+            voyageDO.setRouteId(routeId);
             voyageDO.setStartTime(LocalDateTimeUtil.parse(startDateStr+"T"+startTime));
             voyageDO.setLeaveTime(LocalDateTimeUtil.parse(leaveDate+"T"+leaveTime));
             voyageDO.setBoardingTime(LocalDateTimeUtil.parse(startDateStr+"T"+boardingTime));
@@ -315,6 +336,41 @@ public class VoyageServiceImpl implements VoyageService {
             voyageDO.setIntroduce(createReqVO.getIntroduce());
             voyageDO.setNotice(createReqVO.getNotice());
             voyageDOList.add(voyageDO);
+            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());
+                priceVoyageSaveReqVO.setJctype(priceTemplate.getJctype());
+                List<PriceRoomModelRespVO> roomModelList = priceTemplate.getRoomModelList();
+                List<PriceRoomModelDO> priceRoomModelDOS = BeanUtils.toBean(roomModelList, PriceRoomModelDO.class);
+                priceRoomModelDOS.stream().forEach(priceRoomModelDO -> priceRoomModelDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setRoomModelList(priceRoomModelDOS);
+                List<PriceFloorRespVO> floorList = priceTemplate.getFloorList();
+                List<PriceFloorDO> priceFloorDOS = BeanUtils.toBean(floorList, PriceFloorDO.class);
+                priceFloorDOS.stream().forEach(priceFloorDO -> priceFloorDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setFloorList(priceFloorDOS);
+                PriceSingleSettingRespVO singleSetting = priceTemplate.getSingleSetting();
+                PriceSingleSettingDO singleSettingDO = BeanUtils.toBean(singleSetting, PriceSingleSettingDO.class);
+                singleSettingDO.setObjectId(priceVoyageId);
+                priceVoyageSaveReqVO.setSingleSetting(singleSettingDO);
+                List<PriceAreaRespVO> areaList = priceTemplate.getAreaList();
+                List<PriceAreaDO> priceAreaDOS = BeanUtils.toBean(areaList, PriceAreaDO.class);
+                priceAreaDOS.stream().forEach(priceAreaDO -> priceAreaDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setAreaList(priceAreaDOS);
+                List<PriceSpuRespVO> spuList = priceTemplate.getSpuList();
+                List<PriceSpuDO> priceSpuDOS = BeanUtils.toBean(spuList, PriceSpuDO.class);
+                priceSpuDOS.stream().forEach(priceSpuDO -> priceSpuDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setSpuList(priceSpuDOS);
+                priceVoyageService.createPriceVoyage(priceVoyageSaveReqVO);
+            }
+
             startDate = leaveDate.plusDays(intervalDays);
         }
         voyageMapper.insertBatch(voyageDOList);