Bläddra i källkod

fix: 修改价格体系

luofeiyun 3 dagar sedan
förälder
incheckning
38ac3ec363
24 ändrade filer med 724 tillägg och 111 borttagningar
  1. 0 2
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/PriceTemplateController.java
  2. 38 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/BasicPriceAreaRespVO.java
  3. 19 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/BasicPriceCountryRespVO.java
  4. 5 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceRoomModelRespVO.java
  5. 77 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceRoomModelTypeRespVO.java
  6. 3 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateRespVO.java
  7. 4 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateSaveReqVO.java
  8. 5 67
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/PriceVoyageController.java
  9. 6 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyageRespVO.java
  10. 4 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyageSaveReqVO.java
  11. 21 30
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/AppVoyageController.java
  12. 6 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppPriceVoyageRespVO.java
  13. 62 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/basicpricearea/BasicPriceAreaDO.java
  14. 9 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/priceroommodel/PriceRoomModelDO.java
  15. 97 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/priceroommodeltype/PriceRoomModelTypeDO.java
  16. 40 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/basicpricearea/BasicPriceAreaMapper.java
  17. 31 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/priceroommodeltype/PriceRoomModelTypeMapper.java
  18. 17 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/basicpricearea/BasicPriceAreaService.java
  19. 35 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/basicpricearea/BasicPriceAreaServiceImpl.java
  20. 15 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodeltype/PriceRoomModelTypeService.java
  21. 31 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodeltype/PriceRoomModelTypeServiceImpl.java
  22. 59 6
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateServiceImpl.java
  23. 2 2
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageService.java
  24. 138 4
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageServiceImpl.java

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

@@ -51,8 +51,6 @@ public class PriceTemplateController {
     @Resource
     private PriceTemplateService priceTemplateService;
 
-
-
     @Resource
     private ShipApi shipApi;
 

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

@@ -0,0 +1,38 @@
+package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 区域基准价设置 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class BasicPriceAreaRespVO {
+
+    @Schema(description = "价格模板ID或者船票价格ID", example = "8423")
+    @ExcelProperty("价格模板ID或者船票价格ID")
+    private Long objectId;
+
+    @Schema(description = "区域ID", example = "7278")
+    @ExcelProperty("区域ID")
+    private Long areaId;
+
+    @Schema(description = "区域名称", example = "芋艿")
+    @ExcelProperty("区域名称")
+    private String areaName;
+
+    @Schema(description = "价格", example = "12553")
+    @ExcelProperty("价格")
+    private BigDecimal price;
+
+    @Schema(description = "父级区域ID", example = "25276")
+    @ExcelProperty("父级区域ID")
+    private Long parentAreaId;
+
+    @Schema(description = "父级区域名称", example = "张三")
+    private String parentAreaName;
+
+}

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

@@ -0,0 +1,19 @@
+package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BasicPriceCountryRespVO {
+
+    @Schema(description = "国家ID", example = "1")
+    private Integer countryId;
+
+
+    @Schema(description = "价格", example = "100")
+    private BigDecimal price;
+
+
+}

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

@@ -2,11 +2,13 @@ package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.yc.ship.module.product.dal.dataobject.priceroommodeltype.PriceRoomModelTypeDO;
 import com.yc.ship.module.resource.controller.admin.roommodel.vo.ResourceRoomModelRespVO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 @Schema(description = "管理后台 - 价格模板中房型加价设置 Response VO")
 @Data
@@ -52,4 +54,7 @@ public class PriceRoomModelRespVO {
     @Schema(description = "房型信息")
     private ResourceRoomModelRespVO roomModel;
 
+    @Schema(description = "房型入住模式")
+    private List<PriceRoomModelTypeRespVO> roomModelTypeList;
+
 }

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

@@ -0,0 +1,77 @@
+package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 价格模板中房型入住模式 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PriceRoomModelTypeRespVO {
+
+    @Schema(description = "价格模板ID或者船票价格ID", example = "13095")
+    @ExcelProperty("价格模板ID或者船票价格ID")
+    private Long objectId;
+
+    @Schema(description = "房型ID", example = "110")
+    @ExcelProperty("房型ID")
+    private Long roomModelId;
+
+    @Schema(description = "房型名称(暂不使用)", example = "赵六")
+    @ExcelProperty("房型名称(暂不使用)")
+    private String roomModelName;
+
+    @Schema(description = "系数")
+    @ExcelProperty("系数")
+    private BigDecimal rate;
+
+    @Schema(description = "价格名称", example = "芋艿")
+    @ExcelProperty("价格名称")
+    private String typeName;
+
+    @Schema(description = "可入住人数")
+    @ExcelProperty("可入住人数")
+    private Integer totalNum;
+
+    @Schema(description = "成人占床数")
+    @ExcelProperty("成人占床数")
+    private Integer adultTakeNum;
+
+    @Schema(description = "成人加床数")
+    @ExcelProperty("成人加床数")
+    private Integer adultPlusNum;
+
+    @Schema(description = "儿童不占床数")
+    @ExcelProperty("儿童不占床数")
+    private Integer childNonTakeNum;
+
+    @Schema(description = "儿童占床数")
+    @ExcelProperty("儿童占床数")
+    private Integer childTakeNum;
+
+    @Schema(description = "儿童加床数")
+    @ExcelProperty("儿童加床数")
+    private Integer childPlusNum;
+
+    @Schema(description = "婴儿不占床数")
+    @ExcelProperty("婴儿不占床数")
+    private Integer babyNonTakeNum;
+
+    @Schema(description = "婴儿占床数")
+    @ExcelProperty("婴儿占床数")
+    private Integer babyTakeNum;
+
+    @Schema(description = "婴儿加床数")
+    @ExcelProperty("婴儿加床数")
+    private Integer babyPlusNum;
+
+    @Schema(description = "固定加床费")
+    private BigDecimal addBedPrice;
+
+    @Schema(description = "是否拼房", example = "true")
+    private Integer enableShare;
+
+}

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

@@ -71,4 +71,7 @@ public class PriceTemplateRespVO {
     @Schema(description = "附加产品设置")
     private List<PriceSpuRespVO> spuList;
 
+    @Schema(description = "区域基准价设置")
+    private List<BasicPriceAreaRespVO> basicAreaList;
+
 }

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

@@ -1,5 +1,6 @@
 package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
 
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
 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;
@@ -54,4 +55,7 @@ public class PriceTemplateSaveReqVO {
     @Schema(description = "附加产品设置")
     private List<PriceSpuDO> spuList;
 
+    @Schema(description = "基础区域价格")
+    private List<BasicPriceAreaDO> basicAreaList;
+
 }

+ 5 - 67
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/PriceVoyageController.java

@@ -12,6 +12,7 @@ import com.yc.ship.module.product.controller.admin.pricetemplate.vo.*;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyagePageReqVO;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageRespVO;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageSaveReqVO;
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
 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;
@@ -19,9 +20,11 @@ import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleS
 import com.yc.ship.module.product.dal.dataobject.pricevoyage.PriceVoyageDO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.enums.ErrorCodeConstants;
+import com.yc.ship.module.product.service.basicpricearea.BasicPriceAreaService;
 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.priceroommodeltype.PriceRoomModelTypeService;
 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.pricevoyage.PriceVoyageService;
@@ -60,34 +63,16 @@ public class PriceVoyageController {
     @Resource
     private PriceVoyageService priceVoyageService;
 
-    @Resource
-    private PriceRoomModelService priceRoomModelService;
-
-    @Resource
-    private PriceFloorService priceFloorService;
 
-    @Resource
-    private PriceSingleSettingService priceSingleSettingService;
-    
     @Resource
     private VoyageService voyageService;
 
-    @Resource
-    private PriceAreaService priceAreaService;
-
-    @Resource
-    private PriceSpuService priceSpuService;
-
     @Resource
     private ShipApi shipApi;
 
     @Resource
     private RouteApi routeApi;
 
-    @Resource
-    private ResourceRoomModelService roomModelService;
-
-
     @PostMapping("/create")
     @Operation(summary = "创建航次价格")
     @PreAuthorize("@ss.hasPermission('product:price-voyage:create')")
@@ -117,61 +102,14 @@ public class PriceVoyageController {
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('product:price-voyage:query')")
     public CommonResult<PriceVoyageRespVO> getPriceVoyage(@RequestParam("id") Long id) {
-        PriceVoyageDO priceVoyage = priceVoyageService.getPriceVoyage(id);
-        PriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyage, PriceVoyageRespVO.class);
-        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
-        List<PriceRoomModelRespVO> priceRoomModelRespVOS = BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class);
-        List<PriceSingleSettingDO> singleSettingDO = priceSingleSettingService.getByObjectId(id);
-        List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class);
-        Map<Long, PriceSingleSettingRespVO> settingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelId);
-        priceRoomModelRespVOS.stream().forEach(item -> {
-            item.setSingleSetting(settingRespVOMap.get(item.getRoomModelId()));
-        });
-        respVO.setRoomModelList(priceRoomModelRespVOS);
-        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);
+        PriceVoyageRespVO respVO = priceVoyageService.getPriceVoyage(id);
         return success(respVO);
     }
 
     @GetMapping("/get-by-voyage-id")
     @Operation(summary = "通过航次ID获得航次价格")
     public CommonResult<PriceVoyageRespVO> getByVoyageId(@RequestParam("voyageId") Long voyageId) {
-        PriceVoyageDO priceVoyage = priceVoyageService.getByVoyageId(voyageId);
-        if(priceVoyage == null) {
-            throw exception(ErrorCodeConstants.PRICE_VOYAGE_NOT_EXISTS);
-        }
-        Long id = priceVoyage.getId();
-        PriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyage, PriceVoyageRespVO.class);
-        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
-        List<PriceRoomModelRespVO> priceRoomModelRespVOS = BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class);
-        List<PriceSingleSettingDO> singleSettingDO = priceSingleSettingService.getByObjectId(id);
-        List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class);
-        Map<Long, PriceSingleSettingRespVO> settingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelId);
-
-        List<Long> roomModelIds = CollectionUtils.convertList(priceRoomModelRespVOS, item -> item.getRoomModelId());
-        List<ResourceRoomModelDO> roomModelDOS = roomModelService.getList(roomModelIds);
-        Map<Long, ResourceRoomModelDO> resourceRoomModelDOMap = CollectionUtils.convertMap(roomModelDOS, item -> item.getId());
-        priceRoomModelRespVOS.stream().forEach(item -> {
-            item.setSingleSetting(settingRespVOMap.get(item.getRoomModelId()));
-            if(resourceRoomModelDOMap.get(item.getRoomModelId()) != null) {
-                item.setRoomModel(BeanUtils.toBean(resourceRoomModelDOMap.get(item.getRoomModelId()), ResourceRoomModelRespVO.class));
-            }
-        });
-        respVO.setRoomModelList(priceRoomModelRespVOS);
-        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<PriceCountryRespVO> countryList = priceAreaService.getCountryPriceByObjectId(id);
-        respVO.setCountryList(countryList);
-        //附加产品
-        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
-        respVO.setSpuList(spuList);
+        PriceVoyageRespVO respVO = priceVoyageService.getByVoyageId(voyageId);
         return success(respVO);
     }
 

+ 6 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyageRespVO.java

@@ -89,4 +89,10 @@ public class PriceVoyageRespVO {
     @Schema(description = "附加产品设置")
     private List<PriceSpuRespVO> spuList;
 
+    @Schema(description = "区域基准价设置")
+    private List<BasicPriceAreaRespVO> basicAreaList;
+
+    @Schema(description = "国家基准价设置")
+    private List<BasicPriceCountryRespVO> basicCountryList;
+
 }

+ 4 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyageSaveReqVO.java

@@ -1,6 +1,7 @@
 package com.yc.ship.module.product.controller.admin.pricevoyage.vo;
 
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
 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;
@@ -62,4 +63,7 @@ public class PriceVoyageSaveReqVO {
     @Schema(description = "附加产品设置")
     private List<PriceSpuDO> spuList;
 
+    @Schema(description = "基础区域价格")
+    private List<BasicPriceAreaDO> basicAreaList;
+
 }

+ 21 - 30
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/AppVoyageController.java

@@ -10,16 +10,20 @@ import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageCalendarReqVO
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
 import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.QueryCanSelectRoomListNewReqVO;
 import com.yc.ship.module.product.controller.app.voyage.vo.*;
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
 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.priceroommodeltype.PriceRoomModelTypeDO;
 import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleSettingDO;
 import com.yc.ship.module.product.dal.dataobject.pricevoyage.PriceVoyageDO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.enums.ErrorCodeConstants;
+import com.yc.ship.module.product.service.basicpricearea.BasicPriceAreaService;
 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.priceroommodeltype.PriceRoomModelTypeService;
 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.pricevoyage.PriceVoyageService;
@@ -91,6 +95,12 @@ public class AppVoyageController {
     @Resource
     private VoyageStockDistributeNewService voyageStockDistributeNewService;
 
+    @Resource
+    private PriceRoomModelTypeService priceRoomModelTypeService;
+
+    @Resource
+    private BasicPriceAreaService basicPriceAreaService;
+
 
 
     @GetMapping("/list-calendar")
@@ -145,47 +155,23 @@ public class AppVoyageController {
     @GetMapping("/get-by-voyage-id")
     @Operation(summary = "通过航次ID获得航次价格")
     public CommonResult<PriceVoyageRespVO> getByVoyageId(@RequestParam("voyageId") Long voyageId) {
-        PriceVoyageDO priceVoyage = priceVoyageService.getByVoyageId(voyageId);
-        if(priceVoyage == null) {
-            throw exception(ErrorCodeConstants.PRICE_VOYAGE_NOT_EXISTS);
-        }
-        Long id = priceVoyage.getId();
-        PriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyage, PriceVoyageRespVO.class);
-        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
-        List<PriceRoomModelRespVO> priceRoomModelRespVOS = BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class);
-        List<PriceSingleSettingDO> singleSettingDO = priceSingleSettingService.getByObjectId(id);
-        List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class);
-        Map<Long, PriceSingleSettingRespVO> settingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelId);
-        priceRoomModelRespVOS.stream().forEach(item -> {
-            item.setSingleSetting(settingRespVOMap.get(item.getRoomModelId()));
-        });
-        respVO.setRoomModelList(priceRoomModelRespVOS);
-        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<PriceCountryRespVO> countryList = priceAreaService.getCountryPriceByObjectId(id);
-        respVO.setCountryList(countryList);
-        //附加产品
-        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
-        respVO.setSpuList(spuList);
+        PriceVoyageRespVO respVO = priceVoyageService.getByVoyageId(voyageId);
         return success(respVO);
     }
 
     @GetMapping("/get-by-voyage-id-new")
     @Operation(summary = "通过航次ID获得航次价格")
     public CommonResult<AppPriceVoyageRespVO> getByVoyageIdNew(@RequestParam("voyageId") Long voyageId, @RequestParam("roomModelId") Long roomModelId) {
-        PriceVoyageDO priceVoyage = priceVoyageService.getByVoyageId(voyageId);
-        if(priceVoyage == null) {
-            throw exception(ErrorCodeConstants.PRICE_VOYAGE_NOT_EXISTS);
-        }
-        Long id = priceVoyage.getId();
-        AppPriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyage, AppPriceVoyageRespVO.class);
+        PriceVoyageRespVO priceVoyageRespVO = priceVoyageService.getByVoyageId(voyageId);
+        AppPriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyageRespVO, AppPriceVoyageRespVO.class);
+        Long id = priceVoyageRespVO.getId();
         PriceRoomModelDO roomModelDO = priceRoomModelService.getListByObjectIdAndRoomModelId(id, roomModelId);
         if(roomModelDO != null) {
             PriceRoomModelRespVO priceRoomModelRespVO = BeanUtils.toBean(roomModelDO, PriceRoomModelRespVO.class);
             PriceSingleSettingDO singleSettingDO = priceSingleSettingService.getByObjectIdAndRoomModelId(id, roomModelId);
             priceRoomModelRespVO.setSingleSetting(BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class));
+            List<PriceRoomModelTypeDO> roomModelTypeDOList = priceRoomModelTypeService.getByObjectIdAndRoomModelId(id,roomModelId);
+            priceRoomModelRespVO.setRoomModelTypeList(BeanUtils.toBean(roomModelTypeDOList, PriceRoomModelTypeRespVO.class));
             respVO.setPriceRoomModel(priceRoomModelRespVO);
         }
         ResourceRoomModelDO roomModel = roomModelService.getRoomModel(roomModelId);
@@ -196,6 +182,11 @@ public class AppVoyageController {
         respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
         List<PriceCountryRespVO> countryList = priceAreaService.getCountryPriceByObjectId(id);
         respVO.setCountryList(countryList);
+        // 区域基准价格
+        List<BasicPriceAreaDO> basicPriceAreaDOS = basicPriceAreaService.getListByObjectId(id);
+        respVO.setBasicAreaList(BeanUtils.toBean(basicPriceAreaDOS, BasicPriceAreaRespVO.class));
+        List<BasicPriceCountryRespVO> basicCountryList = basicPriceAreaService.getCountryPriceByObjectId(id);
+        respVO.setBasicCountryList(basicCountryList);
         //附加产品
         List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
         respVO.setSpuList(spuList);

+ 6 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppPriceVoyageRespVO.java

@@ -96,4 +96,10 @@ public class AppPriceVoyageRespVO {
     @Schema(description = "附加产品设置")
     private List<PriceSpuRespVO> spuList;
 
+    @Schema(description = "基础区域价格")
+    private List<BasicPriceAreaRespVO> basicAreaList;
+
+    @Schema(description = "基础国家价格")
+    private List<BasicPriceCountryRespVO> basicCountryList;
+
 }

+ 62 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/basicpricearea/BasicPriceAreaDO.java

@@ -0,0 +1,62 @@
+package com.yc.ship.module.product.dal.dataobject.basicpricearea;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+/**
+ * 区域基准价设置 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_basic_price_area")
+@KeySequence("product_basic_price_area_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class BasicPriceAreaDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 价格模板ID或者船票价格ID
+     */
+    private Long objectId;
+    /**
+     * 区域ID
+     */
+    private Long areaId;
+    /**
+     * 区域名称
+     */
+    private String areaName;
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+    /**
+     * 父区域名称
+     */
+    private String parentAreaName;
+    /**
+     * 父区域ID
+     */
+    private Long parentAreaId;
+
+    /**
+     * 子级区域
+     */
+    @TableField(exist = false)
+    private List<BasicPriceAreaDO> children;
+
+}

+ 9 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/priceroommodel/PriceRoomModelDO.java

@@ -2,10 +2,12 @@ package com.yc.ship.module.product.dal.dataobject.priceroommodel;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import com.yc.ship.module.product.dal.dataobject.priceroommodeltype.PriceRoomModelTypeDO;
 import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleSettingDO;
 import lombok.*;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 价格模板中房型加价设置 DO
@@ -70,4 +72,11 @@ public class PriceRoomModelDO extends TenantBaseDO {
     @TableField(exist = false)
     private PriceSingleSettingDO singleSetting;
 
+     /**
+     * 房型票价设置
+     */
+     @TableField(exist = false)
+    private List<PriceRoomModelTypeDO> roomModelTypeList;
+
+
 }

+ 97 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/priceroommodeltype/PriceRoomModelTypeDO.java

@@ -0,0 +1,97 @@
+package com.yc.ship.module.product.dal.dataobject.priceroommodeltype;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+/**
+ * 价格模板中房型入住模式 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_price_room_model_type")
+@KeySequence("product_price_room_model_type_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PriceRoomModelTypeDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 价格模板ID或者船票价格ID
+     */
+    private Long objectId;
+    /**
+     * 房型ID
+     */
+    private Long roomModelId;
+    /**
+     * 房型名称(暂不使用)
+     */
+    private String roomModelName;
+    /**
+     * 系数
+     */
+    private BigDecimal rate;
+    /**
+     * 价格名称
+     */
+    private String typeName;
+    /**
+     * 可入住人数
+     */
+    private Integer totalNum;
+    /**
+     * 成人占床数
+     */
+    private Integer adultTakeNum;
+    /**
+     * 成人加床数
+     */
+    private Integer adultPlusNum;
+    /**
+     * 儿童不占床数
+     */
+    private Integer childNonTakeNum;
+    /**
+     * 儿童占床数
+     */
+    private Integer childTakeNum;
+    /**
+     * 儿童加床数
+     */
+    private Integer childPlusNum;
+    /**
+     * 婴儿不占床数
+     */
+    private Integer babyNonTakeNum;
+    /**
+     * 婴儿占床数
+     */
+    private Integer babyTakeNum;
+    /**
+     * 婴儿加床数
+     */
+    private Integer babyPlusNum;
+
+    /**
+     * 固定加床费
+     */
+    private BigDecimal addBedPrice;
+
+    /**
+     * 是否拼房
+     */
+    private Integer enableShare;
+
+}

+ 40 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/basicpricearea/BasicPriceAreaMapper.java

@@ -0,0 +1,40 @@
+package com.yc.ship.module.product.dal.mysql.basicpricearea;
+
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.BasicPriceCountryRespVO;
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 区域基准价设置 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface BasicPriceAreaMapper extends BaseMapperX<BasicPriceAreaDO> {
+
+    default void deleteByObjectId(Long objectId) {
+        delete(new LambdaQueryWrapperX<BasicPriceAreaDO>().eq(BasicPriceAreaDO::getObjectId, objectId));
+    }
+
+    default List<BasicPriceAreaDO> selectListByObjectId(Long id) {
+        return selectList(new LambdaQueryWrapperX<BasicPriceAreaDO>().eq(BasicPriceAreaDO::getObjectId, id));
+    }
+
+    default List<BasicPriceCountryRespVO> selectCountryPriceByObjectId(Long id) {
+        List<BasicPriceCountryRespVO> list = new ArrayList<>();
+        List<BasicPriceAreaDO> priceAreaDOS = selectList(new LambdaQueryWrapperX<BasicPriceAreaDO>().eq(BasicPriceAreaDO::getObjectId, id).isNotNull(BasicPriceAreaDO::getParentAreaId));
+        priceAreaDOS.stream().forEach(priceAreaDO -> {
+            BasicPriceCountryRespVO priceCountryRespVO = new BasicPriceCountryRespVO();
+            priceCountryRespVO.setPrice(priceAreaDO.getPrice());
+            priceCountryRespVO.setCountryId(priceAreaDO.getAreaId().intValue());
+            list.add(priceCountryRespVO);
+        });
+        return list;
+    }
+
+}

+ 31 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/priceroommodeltype/PriceRoomModelTypeMapper.java

@@ -0,0 +1,31 @@
+package com.yc.ship.module.product.dal.mysql.priceroommodeltype;
+
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.module.product.dal.dataobject.priceroommodeltype.PriceRoomModelTypeDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 价格模板中房型入住模式 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface PriceRoomModelTypeMapper extends BaseMapperX<PriceRoomModelTypeDO> {
+
+
+
+    default void deleteByObjectId(Long objectId) {
+        delete(new LambdaQueryWrapperX<PriceRoomModelTypeDO>().eq(PriceRoomModelTypeDO::getObjectId, objectId));
+    }
+
+    default List<PriceRoomModelTypeDO> selectByObjectId(Long objectId) {
+        return selectList(new LambdaQueryWrapperX<PriceRoomModelTypeDO>().eq(PriceRoomModelTypeDO::getObjectId, objectId));
+    }
+
+    default List<PriceRoomModelTypeDO> selectByObjectIdAndRoomModelId(Long objectId, Long roomModelId) {
+        return selectList(new LambdaQueryWrapperX<PriceRoomModelTypeDO>().eq(PriceRoomModelTypeDO::getObjectId, objectId).eq(PriceRoomModelTypeDO::getRoomModelId, roomModelId));
+    }
+}

+ 17 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/basicpricearea/BasicPriceAreaService.java

@@ -0,0 +1,17 @@
+package com.yc.ship.module.product.service.basicpricearea;
+
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.BasicPriceCountryRespVO;
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
+
+import java.util.List;
+
+/**
+ * 区域基准价设置 Service 接口
+ *
+ * @author 管理员
+ */
+public interface BasicPriceAreaService {
+    List<BasicPriceAreaDO> getListByObjectId(Long id);
+    List<BasicPriceCountryRespVO> getCountryPriceByObjectId(Long id);
+
+}

+ 35 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/basicpricearea/BasicPriceAreaServiceImpl.java

@@ -0,0 +1,35 @@
+package com.yc.ship.module.product.service.basicpricearea;
+
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.BasicPriceCountryRespVO;
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import com.yc.ship.module.product.dal.mysql.basicpricearea.BasicPriceAreaMapper;
+
+import java.util.List;
+
+/**
+ * 区域基准价设置 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class BasicPriceAreaServiceImpl implements BasicPriceAreaService {
+
+    @Resource
+    private BasicPriceAreaMapper basicPriceAreaMapper;
+
+
+    @Override
+    public List<BasicPriceAreaDO> getListByObjectId(Long id) {
+        return basicPriceAreaMapper.selectListByObjectId(id);
+    }
+
+    @Override
+    public List<BasicPriceCountryRespVO> getCountryPriceByObjectId(Long id) {
+        return basicPriceAreaMapper.selectCountryPriceByObjectId(id);
+    }
+}

+ 15 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodeltype/PriceRoomModelTypeService.java

@@ -0,0 +1,15 @@
+package com.yc.ship.module.product.service.priceroommodeltype;
+
+import com.yc.ship.module.product.dal.dataobject.priceroommodeltype.PriceRoomModelTypeDO;
+
+import java.util.List;
+
+/**
+ * 价格模板中房型入住模式 Service 接口
+ *
+ * @author 管理员
+ */
+public interface PriceRoomModelTypeService {
+
+    List<PriceRoomModelTypeDO> getByObjectIdAndRoomModelId(Long id, Long roomModelId);
+}

+ 31 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodeltype/PriceRoomModelTypeServiceImpl.java

@@ -0,0 +1,31 @@
+package com.yc.ship.module.product.service.priceroommodeltype;
+
+import com.yc.ship.module.product.dal.dataobject.priceroommodeltype.PriceRoomModelTypeDO;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+
+import com.yc.ship.module.product.dal.mysql.priceroommodeltype.PriceRoomModelTypeMapper;
+
+import java.util.List;
+
+
+/**
+ * 价格模板中房型入住模式 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class PriceRoomModelTypeServiceImpl implements PriceRoomModelTypeService {
+
+    @Resource
+    private PriceRoomModelTypeMapper priceRoomModelTypeMapper;
+
+
+    @Override
+    public List<PriceRoomModelTypeDO> getByObjectIdAndRoomModelId(Long id, Long roomModelId) {
+        return priceRoomModelTypeMapper.selectByObjectIdAndRoomModelId(id, roomModelId);
+    }
+}

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

@@ -2,17 +2,22 @@ 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.collection.MapUtils;
 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.dal.dataobject.basicpricearea.BasicPriceAreaDO;
 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.priceroommodeltype.PriceRoomModelTypeDO;
 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.pricetemplate.PriceTemplateDO;
+import com.yc.ship.module.product.dal.mysql.basicpricearea.BasicPriceAreaMapper;
 import com.yc.ship.module.product.dal.mysql.pricearea.PriceAreaMapper;
 import com.yc.ship.module.product.dal.mysql.pricefloor.PriceFloorMapper;
 import com.yc.ship.module.product.dal.mysql.priceroommodel.PriceRoomModelMapper;
+import com.yc.ship.module.product.dal.mysql.priceroommodeltype.PriceRoomModelTypeMapper;
 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;
@@ -75,6 +80,12 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
     @Resource
     private PriceSpuService priceSpuService;
 
+    @Resource
+    private BasicPriceAreaMapper basicPriceAreaMapper;
+
+    @Resource
+    private PriceRoomModelTypeMapper priceRoomModelTypeMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createPriceTemplate(PriceTemplateSaveReqVO createReqVO) {
@@ -126,14 +137,20 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
         List<PriceSingleSettingDO> singleSettingList = priceSingleSettingService.getByObjectId(id);
         List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingList, PriceSingleSettingRespVO.class);
         Map<Long, PriceSingleSettingRespVO> singleSettingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelId);
+        List<PriceRoomModelTypeDO> roomModelTypeList = priceRoomModelTypeMapper.selectByObjectId(id);
+        Map<Long, List<PriceRoomModelTypeDO>> roomModelTypeMap = CollectionUtils.convertMultiMap(roomModelTypeList, PriceRoomModelTypeDO::getRoomModelId);
         priceRoomModelRespVOS.stream().forEach(item -> {
-            item.setSingleSetting(singleSettingRespVOMap.get(item.getRoomModelId()));
+            MapUtils.findAndThen(singleSettingRespVOMap, item.getRoomModelId(), item::setSingleSetting);
+            MapUtils.findAndThen(roomModelTypeMap, item.getRoomModelId(), itemTypeList -> item.setRoomModelTypeList(BeanUtils.toBean(itemTypeList, PriceRoomModelTypeRespVO.class)));
         });
         respVO.setRoomModelList(priceRoomModelRespVOS);
         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<BasicPriceAreaDO> basicPriceAreaList = basicPriceAreaMapper.selectListByObjectId(id);
+        respVO.setBasicAreaList(BeanUtils.toBean(basicPriceAreaList, BasicPriceAreaRespVO.class));
         //附加产品
         List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
         respVO.setSpuList(spuList);
@@ -160,6 +177,8 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
 
         //插入单人票设置
         List<PriceSingleSettingDO> singleSettingList = new ArrayList<>();
+        //插入房型入住价格模式
+        List<PriceRoomModelTypeDO> roomModelTypeDOList = new ArrayList<>();
         roomModelList.stream().forEach(roomModel -> {
             PriceSingleSettingDO singleSetting = roomModel.getSingleSetting();
             if(singleSetting != null) {
@@ -167,18 +186,30 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
                 singleSetting.setObjectId(objectId);
                 singleSettingList.add(singleSetting);
             }
+            List<PriceRoomModelTypeDO> roomModelTypeList = roomModel.getRoomModelTypeList();
+            if(!CollectionUtils.isAnyEmpty(roomModelTypeList)) {
+                roomModelTypeList.stream().forEach(roomModelType -> {
+                    roomModelType.setRoomModelId(roomModel.getRoomModelId());
+                    roomModelType.setRoomModelName(roomModel.getRoomModelName());
+                    roomModelType.setObjectId(objectId);
+                    roomModelTypeDOList.add(roomModelType);
+                });
+            }
         });
         if(singleSettingList.size() > 0) {
             priceSingleSettingMapper.insertBatch(singleSettingList);
         }
+        if(roomModelTypeDOList.size() > 0) {
+            priceRoomModelTypeMapper.insertBatch(roomModelTypeDOList);
+        }
         //插入楼层价格系数
         List<PriceFloorDO> floorList = vo.getFloorList();
         floorList.stream().forEach(floor -> {
             floor.setObjectId(objectId);
         });
-        priceFloorMapper.insertBatch(floorList);
-
-
+        if(floorList.size() > 0) {
+            priceFloorMapper.insertBatch(floorList);
+        }
         //插入区域加价
         List<PriceAreaDO> areaList = vo.getAreaList();
         List<PriceAreaDO> insertAreaList = new ArrayList<>();
@@ -195,8 +226,29 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
                 });
             }
         });
-        priceAreaMapper.insertBatch(insertAreaList);
+        if(insertAreaList.size() > 0) {
+            priceAreaMapper.insertBatch(insertAreaList);
+        }
 
+        // 插入区域基准价
+        List<BasicPriceAreaDO> basicAreaList = vo.getBasicAreaList();
+        List<BasicPriceAreaDO> insertBasicAreaList = new ArrayList<>();
+        basicAreaList.stream().forEach(area -> {
+            area.setObjectId(objectId);
+            insertBasicAreaList.add(area);
+            List<BasicPriceAreaDO> children = area.getChildren();
+            if (children != null) {
+                children.stream().forEach(child -> {
+                    child.setObjectId(objectId);
+                    child.setParentAreaId(area.getAreaId());
+                    child.setParentAreaName(area.getAreaName());
+                    insertBasicAreaList.add(child);
+                });
+            }
+        });
+        if(insertBasicAreaList.size() > 0) {
+            basicPriceAreaMapper.insertBatch(insertBasicAreaList);
+        }
         // 插入附加产品
         List<PriceSpuDO> spuList = vo.getSpuList();
         if(!CollectionUtils.isAnyEmpty(spuList)) {
@@ -205,7 +257,6 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
             });
             priceSpuMapper.insertBatch(spuList);
         }
-
     }
 
     private void deleteRelation(Long objectId) {
@@ -214,6 +265,8 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
         priceSingleSettingMapper.deleteByObjectId(objectId);
         priceAreaMapper.deleteByObjectId(objectId);
         priceSpuMapper.deleteByObjectId(objectId);
+        basicPriceAreaMapper.deleteByObjectId(objectId);
+        priceRoomModelTypeMapper.deleteByObjectId(objectId);
     }
 
 }

+ 2 - 2
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageService.java

@@ -46,7 +46,7 @@ public interface PriceVoyageService {
      * @param id 编号
      * @return 航次价格
      */
-    PriceVoyageDO getPriceVoyage(Long id);
+    PriceVoyageRespVO getPriceVoyage(Long id);
 
     /**
      * 获得航次价格分页
@@ -56,7 +56,7 @@ public interface PriceVoyageService {
      */
     PageResult<PriceVoyageDO> getPriceVoyagePage(PriceVoyagePageReqVO pageReqVO);
 
-    PriceVoyageDO getByVoyageId(Long voyageId);
+    PriceVoyageRespVO getByVoyageId(Long voyageId);
 
     /**
      * 获取航次的日历表价格

+ 138 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageServiceImpl.java

@@ -2,25 +2,39 @@ package com.yc.ship.module.product.service.pricevoyage;
 
 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.MapUtils;
 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.PriceVoyagePageReqVO;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageRespVO;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageSaveReqVO;
 import com.yc.ship.module.product.controller.app.voyage.vo.AppRoomModelPriceRespVO;
 import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageCalendarPriceReqVO;
 import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageCalendarPriceRespVO;
 import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageRespVO;
+import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
 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.priceroommodeltype.PriceRoomModelTypeDO;
 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.pricevoyage.PriceVoyageDO;
+import com.yc.ship.module.product.dal.mysql.basicpricearea.BasicPriceAreaMapper;
 import com.yc.ship.module.product.dal.mysql.pricearea.PriceAreaMapper;
 import com.yc.ship.module.product.dal.mysql.pricefloor.PriceFloorMapper;
 import com.yc.ship.module.product.dal.mysql.priceroommodel.PriceRoomModelMapper;
+import com.yc.ship.module.product.dal.mysql.priceroommodeltype.PriceRoomModelTypeMapper;
 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.pricevoyage.PriceVoyageMapper;
+import com.yc.ship.module.product.enums.ErrorCodeConstants;
+import com.yc.ship.module.product.service.pricearea.PriceAreaService;
+import com.yc.ship.module.product.service.priceroommodel.PriceRoomModelService;
+import com.yc.ship.module.product.service.pricespu.PriceSpuService;
+import com.yc.ship.module.resource.controller.admin.roommodel.vo.ResourceRoomModelRespVO;
+import com.yc.ship.module.resource.dal.dataobject.roommodel.ResourceRoomModelDO;
+import com.yc.ship.module.resource.service.roommodel.ResourceRoomModelService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -28,6 +42,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.yc.ship.module.product.enums.ErrorCodeConstants.*;
@@ -59,6 +74,25 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
     @Resource
     private PriceSpuMapper priceSpuMapper;
 
+    @Resource
+    private BasicPriceAreaMapper basicPriceAreaMapper;
+
+    @Resource
+    private PriceRoomModelTypeMapper priceRoomModelTypeMapper;
+
+    @Resource
+    private PriceRoomModelService priceRoomModelService;
+
+    @Resource
+    private PriceSpuService priceSpuService;
+
+    @Resource
+    private ResourceRoomModelService roomModelService;
+
+    @Resource
+    private PriceAreaService priceAreaService;
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createPriceVoyage(PriceVoyageSaveReqVO createReqVO) {
@@ -105,8 +139,32 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
     }
 
     @Override
-    public PriceVoyageDO getPriceVoyage(Long id) {
-        return priceVoyageMapper.selectById(id);
+    public PriceVoyageRespVO getPriceVoyage(Long id) {
+        PriceVoyageDO priceVoyageDO = priceVoyageMapper.selectById(id);
+        PriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyageDO, PriceVoyageRespVO.class);
+        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
+        List<PriceRoomModelRespVO> priceRoomModelRespVOS = BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class);
+        List<PriceSingleSettingDO> singleSettingList = priceSingleSettingMapper.selectByObjectId(id);
+        List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingList, PriceSingleSettingRespVO.class);
+        Map<Long, PriceSingleSettingRespVO> singleSettingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelId);
+        List<PriceRoomModelTypeDO> roomModelTypeList = priceRoomModelTypeMapper.selectByObjectId(id);
+        Map<Long, List<PriceRoomModelTypeDO>> roomModelTypeMap = CollectionUtils.convertMultiMap(roomModelTypeList, PriceRoomModelTypeDO::getRoomModelId);
+        priceRoomModelRespVOS.stream().forEach(item -> {
+            MapUtils.findAndThen(singleSettingRespVOMap, item.getRoomModelId(), item::setSingleSetting);
+            MapUtils.findAndThen(roomModelTypeMap, item.getRoomModelId(), itemTypeList -> item.setRoomModelTypeList(BeanUtils.toBean(itemTypeList, PriceRoomModelTypeRespVO.class)));
+        });
+        respVO.setRoomModelList(priceRoomModelRespVOS);
+        List<PriceFloorDO> floorDOList = priceFloorMapper.selectListByObjectId(id);
+        respVO.setFloorList(BeanUtils.toBean(floorDOList, PriceFloorRespVO.class));
+        List<PriceAreaDO> areaList = priceAreaMapper.selectListByObjectId(id);
+        respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
+        //区域基准价
+        List<BasicPriceAreaDO> basicPriceAreaList = basicPriceAreaMapper.selectListByObjectId(id);
+        respVO.setBasicAreaList(BeanUtils.toBean(basicPriceAreaList, BasicPriceAreaRespVO.class));
+        //附加产品
+        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
+        respVO.setSpuList(spuList);
+        return respVO;
     }
 
     @Override
@@ -115,8 +173,48 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
     }
 
     @Override
-    public PriceVoyageDO getByVoyageId(Long voyageId) {
-        return priceVoyageMapper.selectByVoyageId(voyageId);
+    public PriceVoyageRespVO getByVoyageId(Long voyageId) {
+        PriceVoyageDO priceVoyage = priceVoyageMapper.selectByVoyageId(voyageId);
+        if(priceVoyage == null) {
+            throw exception(ErrorCodeConstants.PRICE_VOYAGE_NOT_EXISTS);
+        }
+        Long id = priceVoyage.getId();
+        PriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyage, PriceVoyageRespVO.class);
+        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
+        List<PriceRoomModelRespVO> priceRoomModelRespVOS = BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class);
+        List<PriceSingleSettingDO> singleSettingDO = priceSingleSettingMapper.selectByObjectId(id);
+        List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class);
+        Map<Long, PriceSingleSettingRespVO> settingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelId);
+
+        List<Long> roomModelIds = CollectionUtils.convertList(priceRoomModelRespVOS, item -> item.getRoomModelId());
+        List<ResourceRoomModelDO> roomModelDOS = roomModelService.getList(roomModelIds);
+        Map<Long, ResourceRoomModelDO> resourceRoomModelDOMap = CollectionUtils.convertMap(roomModelDOS, item -> item.getId());
+        List<PriceRoomModelTypeDO> roomModelTypeList = priceRoomModelTypeMapper.selectByObjectId(id);
+        Map<Long, List<PriceRoomModelTypeDO>> roomModelTypeMap = CollectionUtils.convertMultiMap(roomModelTypeList, PriceRoomModelTypeDO::getRoomModelId);
+        priceRoomModelRespVOS.stream().forEach(item -> {
+            MapUtils.findAndThen(roomModelTypeMap, item.getRoomModelId(), itemTypeList -> item.setRoomModelTypeList(BeanUtils.toBean(itemTypeList, PriceRoomModelTypeRespVO.class)));
+            MapUtils.findAndThen(settingRespVOMap, item.getRoomModelId(), item::setSingleSetting);
+            item.setSingleSetting(settingRespVOMap.get(item.getRoomModelId()));
+            if(resourceRoomModelDOMap.get(item.getRoomModelId()) != null) {
+                item.setRoomModel(BeanUtils.toBean(resourceRoomModelDOMap.get(item.getRoomModelId()), ResourceRoomModelRespVO.class));
+            }
+        });
+        respVO.setRoomModelList(priceRoomModelRespVOS);
+        List<PriceFloorDO> floorDOList = priceFloorMapper.selectListByObjectId(id);
+        respVO.setFloorList(BeanUtils.toBean(floorDOList, PriceFloorRespVO.class));
+        List<PriceAreaDO> areaList = priceAreaMapper.selectListByObjectId(id);
+        respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
+        List<PriceCountryRespVO> countryList = priceAreaService.getCountryPriceByObjectId(id);
+        respVO.setCountryList(countryList);
+        //区域基准价
+        List<BasicPriceAreaDO> basicPriceAreaList = basicPriceAreaMapper.selectListByObjectId(id);
+        respVO.setBasicAreaList(BeanUtils.toBean(basicPriceAreaList, BasicPriceAreaRespVO.class));
+        List<BasicPriceCountryRespVO> basicPriceCountryRespVOS = basicPriceAreaMapper.selectCountryPriceByObjectId(id);
+        respVO.setBasicCountryList(basicPriceCountryRespVOS);
+        //附加产品
+        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
+        respVO.setSpuList(spuList);
+        return respVO;
     }
 
     @Override
@@ -145,6 +243,8 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
 
         //插入单人票设置
         List<PriceSingleSettingDO> singleSettingList = new ArrayList<>();
+        //插入房型入住价格模式
+        List<PriceRoomModelTypeDO> roomModelTypeDOList = new ArrayList<>();
         roomModelList.stream().forEach(roomModel -> {
             PriceSingleSettingDO singleSetting = roomModel.getSingleSetting();
             if(singleSetting != null) {
@@ -152,10 +252,22 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
                 singleSetting.setObjectId(objectId);
                 singleSettingList.add(singleSetting);
             }
+            List<PriceRoomModelTypeDO> roomModelTypeList = roomModel.getRoomModelTypeList();
+            if(!CollectionUtils.isAnyEmpty(roomModelTypeList)) {
+                roomModelTypeList.stream().forEach(roomModelType -> {
+                    roomModelType.setRoomModelId(roomModel.getRoomModelId());
+                    roomModelType.setRoomModelName(roomModel.getRoomModelName());
+                    roomModelType.setObjectId(objectId);
+                    roomModelTypeDOList.add(roomModelType);
+                });
+            }
         });
         if(singleSettingList.size() > 0) {
             priceSingleSettingMapper.insertBatch(singleSettingList);
         }
+        if(roomModelTypeDOList.size() > 0) {
+            priceRoomModelTypeMapper.insertBatch(roomModelTypeDOList);
+        }
         //插入区域加价
         List<PriceAreaDO> areaList = vo.getAreaList();
         List<PriceAreaDO> insertAreaList = new ArrayList<>();
@@ -174,6 +286,26 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
         });
         priceAreaMapper.insertBatch(insertAreaList);
 
+        // 插入区域基准价
+        List<BasicPriceAreaDO> basicAreaList = vo.getBasicAreaList();
+        List<BasicPriceAreaDO> insertBasicAreaList = new ArrayList<>();
+        basicAreaList.stream().forEach(area -> {
+            area.setObjectId(objectId);
+            insertBasicAreaList.add(area);
+            List<BasicPriceAreaDO> children = area.getChildren();
+            if (children != null) {
+                children.stream().forEach(child -> {
+                    child.setObjectId(objectId);
+                    child.setParentAreaId(area.getAreaId());
+                    child.setParentAreaName(area.getAreaName());
+                    insertBasicAreaList.add(child);
+                });
+            }
+        });
+        if(insertBasicAreaList.size() > 0) {
+            basicPriceAreaMapper.insertBatch(insertBasicAreaList);
+        }
+
         // 插入附加产品
         List<PriceSpuDO> spuList = vo.getSpuList();
         if(!CollectionUtils.isAnyEmpty(spuList)) {
@@ -190,6 +322,8 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
         priceSingleSettingMapper.deleteByObjectId(objectId);
         priceAreaMapper.deleteByObjectId(objectId);
         priceSpuMapper.deleteByObjectId(objectId);
+        basicPriceAreaMapper.deleteByObjectId(objectId);
+        priceRoomModelTypeMapper.deleteByObjectId(objectId);
     }
 
 }