Prechádzať zdrojové kódy

feat: 新增价格模板管理,新增航次价格管理

luofeiyun 1 mesiac pred
rodič
commit
4bd3e635b9
50 zmenil súbory, kde vykonal 2157 pridanie a 0 odobranie
  1. 4 0
      ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ErrorCodeConstants.java
  2. 23 0
      ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/VoyageShelfStatusEnum.java
  3. 134 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/PriceTemplateController.java
  4. 28 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceFloorRespVO.java
  5. 40 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceRoomModelRespVO.java
  6. 96 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceSingleSettingRespVO.java
  7. 43 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplatePageReqVO.java
  8. 18 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateReqVO.java
  9. 67 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateRespVO.java
  10. 48 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateSaveReqVO.java
  11. 153 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/PriceVoyageController.java
  12. 47 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyagePageReqVO.java
  13. 83 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyageRespVO.java
  14. 54 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricevoyage/vo/PriceVoyageSaveReqVO.java
  15. 8 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java
  16. 18 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageReqVO.java
  17. 45 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricefloor/PriceFloorDO.java
  18. 61 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/priceroommodel/PriceRoomModelDO.java
  19. 117 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricesinglesetting/PriceSingleSettingDO.java
  20. 62 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricetemplate/PriceTemplateDO.java
  21. 68 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricevoyage/PriceVoyageDO.java
  22. 27 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricefloor/PriceFloorMapper.java
  23. 28 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/priceroommodel/PriceRoomModelMapper.java
  24. 25 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricesinglesetting/PriceSingleSettingMapper.java
  25. 39 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricetemplate/PriceTemplateMapper.java
  26. 34 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricevoyage/PriceVoyageMapper.java
  27. 11 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyage/VoyageMapper.java
  28. 36 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricefloor/PriceFloorService.java
  29. 41 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricefloor/PriceFloorServiceImpl.java
  30. 36 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodel/PriceRoomModelService.java
  31. 41 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodel/PriceRoomModelServiceImpl.java
  32. 37 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingService.java
  33. 42 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingServiceImpl.java
  34. 58 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateService.java
  35. 129 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateServiceImpl.java
  36. 55 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageService.java
  37. 122 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageServiceImpl.java
  38. 8 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageService.java
  39. 25 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java
  40. 12 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricefloor/PriceFloorMapper.xml
  41. 12 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/priceroommodel/PriceRoomModelMapper.xml
  42. 12 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricesinglesetting/PriceSingleSettingMapper.xml
  43. 12 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricetemplate/PriceTemplateMapper.xml
  44. 12 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricevoyage/PriceVoyageMapper.xml
  45. 11 0
      ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/route/RouteApi.java
  46. 50 0
      ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/route/dto/RouteRespDTO.java
  47. 25 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/api/route/RouteApiImpl.java
  48. 0 0
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/invoice/InvoiceDetailMapper.xml
  49. 0 0
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/invoice/InvoiceInventoryMapper.xml
  50. 0 0
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/invoice/InvoiceMapper.xml

+ 4 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ErrorCodeConstants.java

@@ -34,5 +34,9 @@ public interface ErrorCodeConstants {
 
     ErrorCode VOYAGE_NOT_EXISTS = new ErrorCode(10_024, "航次不存在");
 
+    ErrorCode PRICE_TEMPLATE_NOT_EXISTS = new ErrorCode(10_025, "价格模板不存在");
+
+    ErrorCode PRICE_VOYAGE_NOT_EXISTS = new ErrorCode(10_026, "航次价格不存在");
+
 
 }

+ 23 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/VoyageShelfStatusEnum.java

@@ -0,0 +1,23 @@
+package com.yc.ship.module.product.enums;
+
+import com.yc.ship.framework.common.core.IntArrayValuable;
+import lombok.Getter;
+
+import java.util.Arrays;
+
+@Getter
+public enum VoyageShelfStatusEnum implements IntArrayValuable {
+    ON_SHELF(1,"上架"),
+    OFF_SHELF(2,"下架");
+    private final String name;
+    private final Integer value;
+    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(VoyageShelfStatusEnum::getValue).toArray();
+    @Override
+    public int[] array() {
+        return ARRAYS;
+    }
+    VoyageShelfStatusEnum(Integer value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+}

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

@@ -0,0 +1,134 @@
+package com.yc.ship.module.product.controller.admin.pricetemplate;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+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.framework.excel.core.util.ExcelUtils;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.*;
+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.pricetemplate.PriceTemplateDO;
+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.pricetemplate.PriceTemplateService;
+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;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 价格模板")
+@RestController
+@RequestMapping("/product/price-template")
+@Validated
+public class PriceTemplateController {
+
+    @Resource
+    private PriceTemplateService priceTemplateService;
+
+    @Resource
+    private PriceRoomModelService priceRoomModelService;
+
+    @Resource
+    private PriceFloorService priceFloorService;
+
+    @Resource
+    private PriceSingleSettingService priceSingleSettingService;
+
+    @Resource
+    private ShipApi shipApi;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建价格模板")
+    @PreAuthorize("@ss.hasPermission('product:price-template:create')")
+    public CommonResult<Long> createPriceTemplate(@Valid @RequestBody PriceTemplateSaveReqVO createReqVO) {
+        return success(priceTemplateService.createPriceTemplate(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新价格模板")
+    @PreAuthorize("@ss.hasPermission('product:price-template:update')")
+    public CommonResult<Boolean> updatePriceTemplate(@Valid @RequestBody PriceTemplateSaveReqVO updateReqVO) {
+        priceTemplateService.updatePriceTemplate(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除价格模板")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('product:price-template:delete')")
+    public CommonResult<Boolean> deletePriceTemplate(@RequestParam("id") Long id) {
+        priceTemplateService.deletePriceTemplate(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得价格模板")
+    @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));
+        return success(respVO);
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得价格模板分页")
+    @PreAuthorize("@ss.hasPermission('product:price-template:query')")
+    public CommonResult<PageResult<PriceTemplateRespVO>> getPriceTemplatePage(@Valid PriceTemplatePageReqVO pageReqVO) {
+        PageResult<PriceTemplateDO> pageResult = priceTemplateService.getPriceTemplatePage(pageReqVO);
+        PageResult<PriceTemplateRespVO> page = BeanUtils.toBean(pageResult, PriceTemplateRespVO.class);
+        List<PriceTemplateRespVO> list = page.getList();
+        List<Long> shipIds = CollectionUtils.convertList(list, PriceTemplateRespVO::getShipId);
+        Map<Long, ShipRespDTO> shipMap = shipApi.queryShip(shipIds);
+        list.stream().forEach(item -> {
+            item.setShipName(shipMap.get(item.getShipId()).getName());
+        });
+        return success(page);
+    }
+
+    @GetMapping("/list-simple")
+    @Operation(summary = "获得资源管理-价格模板列表")
+    public CommonResult<List<PriceTemplateRespVO>> getPriceTemplateListSimple(PriceTemplateReqVO reqVO) {
+        List<PriceTemplateDO> list = priceTemplateService.getListSimple(reqVO);
+        return success(BeanUtils.toBean(list, PriceTemplateRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出价格模板 Excel")
+    @PreAuthorize("@ss.hasPermission('product:price-template:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportPriceTemplateExcel(@Valid PriceTemplatePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<PriceTemplateDO> list = priceTemplateService.getPriceTemplatePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "价格模板.xls", "数据", PriceTemplateRespVO.class,
+                        BeanUtils.toBean(list, PriceTemplateRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,28 @@
+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;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 楼层加价设置 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PriceFloorRespVO {
+
+    @Schema(description = "楼层")
+    @ExcelProperty("楼层")
+    private Integer floor;
+
+    @Schema(description = "价格", example = "11710")
+    @ExcelProperty("价格")
+    private BigDecimal price;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

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

@@ -0,0 +1,40 @@
+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 PriceRoomModelRespVO {
+    
+
+    @Schema(description = "房型ID", example = "1743")
+    @ExcelProperty("房型ID")
+    private Long roomModelId;
+
+    @Schema(description = "房型名称(暂不使用)", example = "王五")
+    @ExcelProperty("房型名称(暂不使用)")
+    private String roomModelName;
+
+    @Schema(description = "价格", example = "31837")
+    @ExcelProperty("价格")
+    private BigDecimal price;
+
+    @Schema(description = "基准系数")
+    @ExcelProperty("基准系数")
+    private BigDecimal basicRate;
+
+    @Schema(description = "独住系数")
+    @ExcelProperty("独住系数")
+    private BigDecimal aloneRate;
+
+    @Schema(description = "拼房系数")
+    @ExcelProperty("拼房系数")
+    private BigDecimal shareRate;
+
+}

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

@@ -0,0 +1,96 @@
+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 PriceSingleSettingRespVO {
+
+    @Schema(description = "成人占床")
+    @ExcelProperty("成人占床")
+    private BigDecimal adultTake;
+
+    @Schema(description = "成人加床(套房)")
+    @ExcelProperty("成人加床(套房)")
+    private BigDecimal adultPlusSuite;
+
+    @Schema(description = "成人加床(非套房)")
+    @ExcelProperty("成人加床(非套房)")
+    private BigDecimal adultPlusNonSuite;
+
+    @Schema(description = "成人加床固定费用", example = "29706")
+    @ExcelProperty("成人加床固定费用")
+    private BigDecimal adultPlusPrice;
+
+    @Schema(description = "儿童不占床(非套房)")
+    @ExcelProperty("儿童不占床(非套房)")
+    private BigDecimal childNonTakeNonSuite;
+
+    @Schema(description = "儿童占床(非套房)")
+    @ExcelProperty("儿童占床(非套房)")
+    private BigDecimal childTakeNonSuite;
+
+    @Schema(description = "儿童加床(非套房)")
+    @ExcelProperty("儿童加床(非套房)")
+    private BigDecimal childPlusNonSuite;
+
+    @Schema(description = "儿童加床固定费用(非套房)", example = "14198")
+    @ExcelProperty("儿童加床固定费用(非套房)")
+    private BigDecimal childPlusNonSuitePrice;
+
+    @Schema(description = "儿童不占床(套房)")
+    @ExcelProperty("儿童不占床(套房)")
+    private BigDecimal childNonTakeSuite;
+
+    @Schema(description = "儿童占床(套房)")
+    @ExcelProperty("儿童占床(套房)")
+    private BigDecimal childTakeSuite;
+
+    @Schema(description = "儿童加床(套房)")
+    @ExcelProperty("儿童加床(套房)")
+    private BigDecimal childPlusSuite;
+
+    @Schema(description = "儿童加床固定费用(套房)", example = "50")
+    @ExcelProperty("儿童加床固定费用(套房)")
+    private BigDecimal childPlusSuitePrice;
+
+    @Schema(description = "婴儿不占床(非套房)")
+    @ExcelProperty("婴儿不占床(非套房)")
+    private BigDecimal babyNonTakeNonSuite;
+
+    @Schema(description = "婴儿占床(非套房)")
+    @ExcelProperty("婴儿占床(非套房)")
+    private BigDecimal babyTakeNonSuite;
+
+    @Schema(description = "婴儿加床(非套房)")
+    @ExcelProperty("婴儿加床(非套房)")
+    private BigDecimal babyPlusNonSuite;
+
+    @Schema(description = "婴儿加床固定费用(非套房)", example = "24173")
+    @ExcelProperty("婴儿加床固定费用(非套房)")
+    private BigDecimal babyPlusNonSuitePrice;
+
+    @Schema(description = "婴儿不占床(套房)")
+    @ExcelProperty("婴儿不占床(套房)")
+    private BigDecimal babyNonTakeSuite;
+
+    @Schema(description = "婴儿占床(套房)")
+    @ExcelProperty("婴儿占床(套房)")
+    private BigDecimal babyTakeSuite;
+
+    @Schema(description = "婴儿加床(套房)")
+    @ExcelProperty("婴儿加床(套房)")
+    private BigDecimal babyPlusSuite;
+
+    @Schema(description = "婴儿加床固定费用(套房)", example = "8147")
+    @ExcelProperty("婴儿加床固定费用(套房)")
+    private BigDecimal babyPlusSuitePrice;
+
+
+}

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

@@ -0,0 +1,43 @@
+package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 价格模板分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PriceTemplatePageReqVO extends PageParam {
+
+    @Schema(description = "模板名称", example = "王五")
+    private String name;
+
+    @Schema(description = "游轮ID", example = "21683")
+    private Long shipId;
+
+    @Schema(description = "航线ID", example = "4674")
+    private Long routeId;
+
+    @Schema(description = "价格模式")
+    private Integer priceMode;
+
+    @Schema(description = "有效期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] validateTime;
+
+    @Schema(description = "状态", example = "1")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

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

@@ -0,0 +1,18 @@
+package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 价格模板管理 Request VO")
+@Data
+@ToString(callSuper = true)
+public class PriceTemplateReqVO {
+
+    @Schema(description = "游轮", example = "6699")
+    private Long shipId;
+
+    @Schema(description = "航线", example = "4445")
+    private Long routeId;
+
+}

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

@@ -0,0 +1,67 @@
+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.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+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 io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 价格模板 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PriceTemplateRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18233")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "模板名称", example = "王五")
+    @ExcelProperty("模板名称")
+    private String name;
+
+    @Schema(description = "游轮ID", example = "21683")
+    @ExcelProperty("游轮ID")
+    private Long shipId;
+
+    @Schema(description = "游轮名称", example = "王五")
+    @ExcelProperty("游轮名称")
+    private String shipName;
+    @Schema(description = "航线ID", example = "4674")
+    @ExcelProperty("航线ID")
+    private Long routeId;
+
+    @Schema(description = "价格模式")
+    @ExcelProperty(value = "价格模式", converter = DictConvert.class)
+    @DictFormat("product_price_model") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer priceMode;
+
+    @Schema(description = "有效期")
+    @ExcelProperty("有效期")
+    private LocalDateTime validateTime;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "房型价格系数")
+    private List<PriceRoomModelRespVO> roomModelList;
+
+    @Schema(description = "楼层价格系数")
+    private List<PriceFloorRespVO> floorList;
+
+    @Schema(description = "单房型价格系数")
+    private PriceSingleSettingRespVO singleSetting;
+
+}

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

@@ -0,0 +1,48 @@
+package com.yc.ship.module.product.controller.admin.pricetemplate.vo;
+
+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 io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 价格模板新增/修改 Request VO")
+@Data
+public class PriceTemplateSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18233")
+    private Long id;
+
+    @Schema(description = "模板名称", example = "王五")
+    private String name;
+
+    @Schema(description = "游轮ID", example = "21683")
+    private Long shipId;
+
+    @Schema(description = "航线ID", example = "4674")
+    private Long routeId;
+
+    @Schema(description = "价格模式")
+    private Integer priceMode;
+
+    @Schema(description = "有效期")
+    private LocalDateTime validateTime;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @Schema(description = "房型价格系数")
+    private List<PriceRoomModelDO> roomModelList;
+
+    @Schema(description = "楼层价格系数")
+    private List<PriceFloorDO> floorList;
+
+    @Schema(description = "单房型价格系数")
+    private PriceSingleSettingDO singleSetting;
+
+}

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

@@ -0,0 +1,153 @@
+package com.yc.ship.module.product.controller.admin.pricevoyage;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+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.framework.excel.core.util.ExcelUtils;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceFloorRespVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceRoomModelRespVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceSingleSettingRespVO;
+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.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.pricevoyage.PriceVoyageDO;
+import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
+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.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;
+import com.yc.ship.module.resource.api.ship.ShipApi;
+import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
+import com.yc.ship.module.resource.dal.dataobject.ship.ResourceShipDO;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 航次价格")
+@RestController
+@RequestMapping("/product/price-voyage")
+@Validated
+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 ShipApi shipApi;
+
+    @Resource
+    private RouteApi routeApi;
+
+
+    @PostMapping("/create")
+    @Operation(summary = "创建航次价格")
+    @PreAuthorize("@ss.hasPermission('product:price-voyage:create')")
+    public CommonResult<Long> createPriceVoyage(@Valid @RequestBody PriceVoyageSaveReqVO createReqVO) {
+        return success(priceVoyageService.createPriceVoyage(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新航次价格")
+    @PreAuthorize("@ss.hasPermission('product:price-voyage:update')")
+    public CommonResult<Boolean> updatePriceVoyage(@Valid @RequestBody PriceVoyageSaveReqVO updateReqVO) {
+        priceVoyageService.updatePriceVoyage(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除航次价格")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('product:price-voyage:delete')")
+    public CommonResult<Boolean> deletePriceVoyage(@RequestParam("id") Long id) {
+        priceVoyageService.deletePriceVoyage(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得航次价格")
+    @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);
+        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));
+        return success(respVO);
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得航次价格分页")
+    @PreAuthorize("@ss.hasPermission('product:price-voyage:query')")
+    public CommonResult<PageResult<PriceVoyageRespVO>> getPriceVoyagePage(@Valid PriceVoyagePageReqVO pageReqVO) {
+        PageResult<PriceVoyageDO> pageResult = priceVoyageService.getPriceVoyagePage(pageReqVO);
+        PageResult<PriceVoyageRespVO> page = BeanUtils.toBean(pageResult, PriceVoyageRespVO.class);
+        List<PriceVoyageRespVO> list = page.getList();
+        List<Long> shipIds = CollectionUtils.convertList(list, PriceVoyageRespVO::getShipId);
+        Map<Long, ShipRespDTO> shipMap = shipApi.queryShip(shipIds);
+
+        List<Long> voyageIds = CollectionUtils.convertList(list, PriceVoyageRespVO::getVoyageId);
+        Map<Long, VoyageDO> voyageMap = voyageService.getListMap(voyageIds);
+
+        List<Long> routeIds = CollectionUtils.convertList(list, PriceVoyageRespVO::getRouteId);
+        Map<Long, RouteRespDTO> routeMap = routeApi.queryRoute(routeIds);
+
+        list.stream().forEach(item -> {
+            item.setShipName(shipMap.get(item.getShipId()).getName());
+            item.setVoyageName(voyageMap.get(item.getVoyageId()).getName());
+            item.setRouteName(routeMap.get(item.getRouteId()).getName());
+        });
+        return success(page);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出航次价格 Excel")
+    @PreAuthorize("@ss.hasPermission('product:price-voyage:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportPriceVoyageExcel(@Valid PriceVoyagePageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<PriceVoyageDO> list = priceVoyageService.getPriceVoyagePage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "航次价格.xls", "数据", PriceVoyageRespVO.class,
+                        BeanUtils.toBean(list, PriceVoyageRespVO.class));
+    }
+
+}

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

@@ -0,0 +1,47 @@
+package com.yc.ship.module.product.controller.admin.pricevoyage.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.yc.ship.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 航次价格分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PriceVoyagePageReqVO extends PageParam {
+
+    @Schema(description = "模板名称", example = "王五")
+    private String name;
+
+    @Schema(description = "游轮ID", example = "11190")
+    private Long shipId;
+
+    @Schema(description = "航线ID", example = "18479")
+    private Long routeId;
+
+    @Schema(description = "价格模板ID", example = "27165")
+    private Long templateId;
+
+    @Schema(description = "航次ID", example = "1860")
+    private Long voyageId;
+
+    @Schema(description = "价格模式(字典)")
+    private Integer priceMode;
+
+    @Schema(description = "有效期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] validateTime;
+
+    @Schema(description = "状态", example = "1")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

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

@@ -0,0 +1,83 @@
+package com.yc.ship.module.product.controller.admin.pricevoyage.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceFloorRespVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceRoomModelRespVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceSingleSettingRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 航次价格 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class PriceVoyageRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15671")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "模板名称", example = "王五")
+    @ExcelProperty("模板名称")
+    private String name;
+
+    @Schema(description = "游轮ID", example = "11190")
+    @ExcelProperty("游轮ID")
+    private Long shipId;
+
+    @Schema(description = "游轮名称", example = "王五")
+    @ExcelProperty("游轮名称")
+    private String shipName;
+
+    @Schema(description = "航线ID", example = "18479")
+    @ExcelProperty("航线ID")
+    private Long routeId;
+
+    @Schema(description = "航线名称", example = "王五")
+    @ExcelProperty("航线名称")
+    private String routeName;
+
+    @Schema(description = "价格模板ID", example = "27165")
+    @ExcelProperty("价格模板ID")
+    private Long templateId;
+
+    @Schema(description = "航次ID", example = "1860")
+    @ExcelProperty("航次ID")
+    private Long voyageId;
+
+    @Schema(description = "航次名称", example = "王五")
+    @ExcelProperty("航次名称")
+    private String voyageName;
+
+    @Schema(description = "价格模式(字典)")
+    @ExcelProperty(value = "价格模式(字典)", converter = DictConvert.class)
+    @DictFormat("product_price_model") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer priceMode;
+
+    @Schema(description = "有效期")
+    @ExcelProperty("有效期")
+    private LocalDateTime validateTime;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("状态")
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "房型价格系数")
+    private List<PriceRoomModelRespVO> roomModelList;
+
+    @Schema(description = "楼层价格系数")
+    private List<PriceFloorRespVO> floorList;
+
+    @Schema(description = "单房型价格系数")
+    private PriceSingleSettingRespVO singleSetting;
+
+}

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

@@ -0,0 +1,54 @@
+package com.yc.ship.module.product.controller.admin.pricevoyage.vo;
+
+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 io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 航次价格新增/修改 Request VO")
+@Data
+public class PriceVoyageSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15671")
+    private Long id;
+
+    @Schema(description = "模板名称", example = "王五")
+    private String name;
+
+    @Schema(description = "游轮ID", example = "11190")
+    private Long shipId;
+
+    @Schema(description = "航线ID", example = "18479")
+    private Long routeId;
+
+    @Schema(description = "价格模板ID", example = "27165")
+    private Long templateId;
+
+    @Schema(description = "航次ID", example = "1860")
+    private Long voyageId;
+
+    @Schema(description = "价格模式(字典)")
+    private Integer priceMode;
+
+    @Schema(description = "有效期")
+    private LocalDateTime validateTime;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @Schema(description = "房型价格系数")
+    private List<PriceRoomModelDO> roomModelList;
+
+    @Schema(description = "楼层价格系数")
+    private List<PriceFloorDO> floorList;
+
+    @Schema(description = "单房型价格系数")
+    private PriceSingleSettingDO singleSetting;
+
+}

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

@@ -8,6 +8,7 @@ import com.yc.ship.framework.common.util.collection.CollectionUtils;
 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.voyage.vo.VoyagePageReqVO;
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageReqVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
@@ -102,6 +103,13 @@ public class VoyageController {
         return success(page);
     }
 
+    @GetMapping("/list-simple")
+    @Operation(summary = "获得资源管理-航次列表")
+    public CommonResult<List<VoyageRespVO>> getVoyageListSimple(VoyageReqVO reqVO) {
+        List<VoyageDO> list = voyageService.getListSimple(reqVO);
+        return success(BeanUtils.toBean(list, VoyageRespVO.class));
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出航次管理 Excel")
     @PreAuthorize("@ss.hasPermission('product:voyage:export')")

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

@@ -0,0 +1,18 @@
+package com.yc.ship.module.product.controller.admin.voyage.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 航次管理 Request VO")
+@Data
+@ToString(callSuper = true)
+public class VoyageReqVO {
+
+    @Schema(description = "游轮", example = "6699")
+    private Long shipId;
+
+    @Schema(description = "航线", example = "4445")
+    private Long routeId;
+
+}

+ 45 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricefloor/PriceFloorDO.java

@@ -0,0 +1,45 @@
+package com.yc.ship.module.product.dal.dataobject.pricefloor;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 楼层加价设置 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_price_floor")
+@KeySequence("product_price_floor_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PriceFloorDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 价格模板ID或者船票价格ID
+     */
+    private Long objectId;
+    /**
+     * 楼层
+     */
+    private Integer floor;
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+}

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

@@ -0,0 +1,61 @@
+package com.yc.ship.module.product.dal.dataobject.priceroommodel;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 价格模板中房型加价设置 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_price_room_model")
+@KeySequence("product_price_room_model_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PriceRoomModelDO 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 price;
+    /**
+     * 基准系数
+     */
+    private BigDecimal basicRate;
+    /**
+     * 独住系数
+     */
+    private BigDecimal aloneRate;
+    /**
+     * 拼房系数
+     */
+    private BigDecimal shareRate;
+
+}

+ 117 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricesinglesetting/PriceSingleSettingDO.java

@@ -0,0 +1,117 @@
+package com.yc.ship.module.product.dal.dataobject.pricesinglesetting;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 价格单人票设置 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_price_single_setting")
+@KeySequence("product_price_single_setting_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PriceSingleSettingDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 价格模板ID或者船票价格ID
+     */
+    private Long objectId;
+    /**
+     * 成人占床
+     */
+    private BigDecimal adultTake;
+    /**
+     * 成人加床(套房)
+     */
+    private BigDecimal adultPlusSuite;
+    /**
+     * 成人加床(非套房)
+     */
+    private BigDecimal adultPlusNonSuite;
+    /**
+     * 成人加床固定费用
+     */
+    private BigDecimal adultPlusPrice;
+    /**
+     * 儿童不占床(非套房)
+     */
+    private BigDecimal childNonTakeNonSuite;
+    /**
+     * 儿童占床(非套房)
+     */
+    private BigDecimal childTakeNonSuite;
+    /**
+     * 儿童加床(非套房)
+     */
+    private BigDecimal childPlusNonSuite;
+    /**
+     * 儿童加床固定费用(非套房)
+     */
+    private BigDecimal childPlusNonSuitePrice;
+    /**
+     * 儿童不占床(套房)
+     */
+    private BigDecimal childNonTakeSuite;
+    /**
+     * 儿童占床(套房)
+     */
+    private BigDecimal childTakeSuite;
+    /**
+     * 儿童加床(套房)
+     */
+    private BigDecimal childPlusSuite;
+    /**
+     * 儿童加床固定费用(套房)
+     */
+    private BigDecimal childPlusSuitePrice;
+    /**
+     * 婴儿不占床(非套房)
+     */
+    private BigDecimal babyNonTakeNonSuite;
+    /**
+     * 婴儿占床(非套房)
+     */
+    private BigDecimal babyTakeNonSuite;
+    /**
+     * 婴儿加床(非套房)
+     */
+    private BigDecimal babyPlusNonSuite;
+    /**
+     * 婴儿加床固定费用(非套房)
+     */
+    private BigDecimal babyPlusNonSuitePrice;
+    /**
+     * 婴儿不占床(套房)
+     */
+    private BigDecimal babyNonTakeSuite;
+    /**
+     * 婴儿占床(套房)
+     */
+    private BigDecimal babyTakeSuite;
+    /**
+     * 婴儿加床(套房)
+     */
+    private BigDecimal babyPlusSuite;
+    /**
+     * 婴儿加床固定费用(套房)
+     */
+    private BigDecimal babyPlusSuitePrice;
+
+}

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

@@ -0,0 +1,62 @@
+package com.yc.ship.module.product.dal.dataobject.pricetemplate;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.sun.xml.bind.v2.TODO;
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 价格模板 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_price_template")
+@KeySequence("product_price_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PriceTemplateDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 模板名称
+     */
+    private String name;
+    /**
+     * 游轮ID
+     */
+    private Long shipId;
+    /**
+     * 航线ID
+     */
+    private Long routeId;
+    /**
+     * 价格模式
+     *
+     * 枚举 {@link TODO product_price_model 对应的类}
+     */
+    private Integer priceMode;
+    /**
+     * 有效期
+     */
+    private LocalDateTime validateTime;
+    /**
+     * 状态
+     *
+     * 枚举 {@link TODO common_status 对应的类}
+     */
+    private Integer status;
+
+}

+ 68 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricevoyage/PriceVoyageDO.java

@@ -0,0 +1,68 @@
+package com.yc.ship.module.product.dal.dataobject.pricevoyage;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.sun.xml.bind.v2.TODO;
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+/**
+ * 航次价格 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_price_voyage")
+@KeySequence("product_price_voyage_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class PriceVoyageDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 模板名称
+     */
+    private String name;
+    /**
+     * 游轮ID
+     */
+    private Long shipId;
+    /**
+     * 航线ID
+     */
+    private Long routeId;
+    /**
+     * 价格模板ID
+     */
+    private Long templateId;
+    /**
+     * 航次ID
+     */
+    private Long voyageId;
+    /**
+     * 价格模式(字典)
+     *
+     * 枚举 {@link TODO product_price_model 对应的类}
+     */
+    private Integer priceMode;
+    /**
+     * 有效期
+     */
+    private LocalDateTime validateTime;
+    /**
+     * 状态
+     */
+    private Integer status;
+
+}

+ 27 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricefloor/PriceFloorMapper.java

@@ -0,0 +1,27 @@
+package com.yc.ship.module.product.dal.mysql.pricefloor;
+
+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.pricefloor.PriceFloorDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 楼层加价设置 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface PriceFloorMapper extends BaseMapperX<PriceFloorDO> {
+
+    default List<PriceFloorDO> selectListByObjectId(Long objectId) {
+        return selectList(new LambdaQueryWrapperX<PriceFloorDO>()
+                .eq(PriceFloorDO::getObjectId, objectId));
+    }
+
+    default void deleteByObjectId(Long objectId) {
+        delete(new LambdaQueryWrapperX<PriceFloorDO>()
+                .eqIfPresent(PriceFloorDO::getObjectId, objectId));
+    }
+}

+ 28 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/priceroommodel/PriceRoomModelMapper.java

@@ -0,0 +1,28 @@
+package com.yc.ship.module.product.dal.mysql.priceroommodel;
+
+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.priceroommodel.PriceRoomModelDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 价格模板中房型加价设置 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface PriceRoomModelMapper extends BaseMapperX<PriceRoomModelDO> {
+
+    default List<PriceRoomModelDO> selectListByObjectId(Long objectId) {
+        return selectList(new LambdaQueryWrapperX<PriceRoomModelDO>()
+                .eqIfPresent(PriceRoomModelDO::getObjectId, objectId));
+    }
+
+    default void deleteByObjectId(Long objectId) {
+        delete(new LambdaQueryWrapperX<PriceRoomModelDO>()
+                .eqIfPresent(PriceRoomModelDO::getObjectId, objectId));
+    }
+
+}

+ 25 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricesinglesetting/PriceSingleSettingMapper.java

@@ -0,0 +1,25 @@
+package com.yc.ship.module.product.dal.mysql.pricesinglesetting;
+
+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.pricesinglesetting.PriceSingleSettingDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 价格单人票设置 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface PriceSingleSettingMapper extends BaseMapperX<PriceSingleSettingDO> {
+
+    default PriceSingleSettingDO selectByObjectId(Long objectId) {
+        return selectOne(PriceSingleSettingDO::getObjectId, objectId);
+    }
+
+    default void deleteByObjectId(Long objectId) {
+        delete(new LambdaQueryWrapperX<PriceSingleSettingDO>()
+                .eqIfPresent(PriceSingleSettingDO::getObjectId, objectId));
+    }
+
+}

+ 39 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricetemplate/PriceTemplateMapper.java

@@ -0,0 +1,39 @@
+package com.yc.ship.module.product.dal.mysql.pricetemplate;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+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.dal.dataobject.pricetemplate.PriceTemplateDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 价格模板 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface PriceTemplateMapper extends BaseMapperX<PriceTemplateDO> {
+
+    default PageResult<PriceTemplateDO> selectPage(PriceTemplatePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<PriceTemplateDO>()
+                .likeIfPresent(PriceTemplateDO::getName, reqVO.getName())
+                .eqIfPresent(PriceTemplateDO::getShipId, reqVO.getShipId())
+                .eqIfPresent(PriceTemplateDO::getRouteId, reqVO.getRouteId())
+                .eqIfPresent(PriceTemplateDO::getPriceMode, reqVO.getPriceMode())
+                .betweenIfPresent(PriceTemplateDO::getValidateTime, reqVO.getValidateTime())
+                .eqIfPresent(PriceTemplateDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(PriceTemplateDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(PriceTemplateDO::getId));
+    }
+
+    default List<PriceTemplateDO> selectList(PriceTemplateReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<PriceTemplateDO>()
+                .eqIfPresent(PriceTemplateDO::getShipId, reqVO.getShipId())
+                .eqIfPresent(PriceTemplateDO::getRouteId, reqVO.getRouteId())
+                .orderByAsc(PriceTemplateDO::getCreateTime));
+    }
+}

+ 34 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricevoyage/PriceVoyageMapper.java

@@ -0,0 +1,34 @@
+package com.yc.ship.module.product.dal.mysql.pricevoyage;
+
+import java.util.*;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.product.dal.dataobject.pricevoyage.PriceVoyageDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.*;
+
+/**
+ * 航次价格 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface PriceVoyageMapper extends BaseMapperX<PriceVoyageDO> {
+
+    default PageResult<PriceVoyageDO> selectPage(PriceVoyagePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<PriceVoyageDO>()
+                .likeIfPresent(PriceVoyageDO::getName, reqVO.getName())
+                .eqIfPresent(PriceVoyageDO::getShipId, reqVO.getShipId())
+                .eqIfPresent(PriceVoyageDO::getRouteId, reqVO.getRouteId())
+                .eqIfPresent(PriceVoyageDO::getTemplateId, reqVO.getTemplateId())
+                .eqIfPresent(PriceVoyageDO::getVoyageId, reqVO.getVoyageId())
+                .eqIfPresent(PriceVoyageDO::getPriceMode, reqVO.getPriceMode())
+                .betweenIfPresent(PriceVoyageDO::getValidateTime, reqVO.getValidateTime())
+                .eqIfPresent(PriceVoyageDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(PriceVoyageDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(PriceVoyageDO::getId));
+    }
+
+}

+ 11 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyage/VoyageMapper.java

@@ -4,9 +4,13 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
 import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyagePageReqVO;
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
+import com.yc.ship.module.product.enums.VoyageShelfStatusEnum;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * 航次管理 Mapper
  *
@@ -31,4 +35,11 @@ public interface VoyageMapper extends BaseMapperX<VoyageDO> {
                 .orderByDesc(VoyageDO::getId));
     }
 
+    default List<VoyageDO> selectListSimple(VoyageReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<VoyageDO>()
+                .eqIfPresent(VoyageDO::getShipId, reqVO.getShipId())
+                .eqIfPresent(VoyageDO::getRouteId, reqVO.getRouteId())
+                .eq(VoyageDO::getShelfStatus, VoyageShelfStatusEnum.ON_SHELF.getValue())
+                .orderByAsc(VoyageDO::getCreateTime));
+    }
 }

+ 36 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricefloor/PriceFloorService.java

@@ -0,0 +1,36 @@
+package com.yc.ship.module.product.service.pricefloor;
+
+import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
+
+import java.util.List;
+
+/**
+ * 楼层加价设置 Service 接口
+ *
+ * @author 管理员
+ */
+public interface PriceFloorService {
+
+    /**
+     * 删除楼层加价设置
+     *
+     * @param id 编号
+     */
+    void deletePriceFloor(Long id);
+
+    /**
+     * 获得楼层加价设置
+     *
+     * @param id 编号
+     * @return 楼层加价设置
+     */
+    PriceFloorDO getPriceFloor(Long id);
+
+    /**
+     * 获取列表
+     * @param objectId
+     * @return
+     */
+    List<PriceFloorDO> getListByObjectId(Long objectId);
+
+}

+ 41 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricefloor/PriceFloorServiceImpl.java

@@ -0,0 +1,41 @@
+package com.yc.ship.module.product.service.pricefloor;
+
+import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
+import com.yc.ship.module.product.dal.mysql.pricefloor.PriceFloorMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 楼层加价设置 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class PriceFloorServiceImpl implements PriceFloorService {
+
+    @Resource
+    private PriceFloorMapper priceFloorMapper;
+
+    @Override
+    public void deletePriceFloor(Long id) {
+        // 删除
+        priceFloorMapper.deleteById(id);
+    }
+
+
+    @Override
+    public PriceFloorDO getPriceFloor(Long id) {
+        return priceFloorMapper.selectById(id);
+    }
+
+    @Override
+    public List<PriceFloorDO> getListByObjectId(Long objectId) {
+        return priceFloorMapper.selectListByObjectId(objectId);
+    }
+
+
+}

+ 36 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodel/PriceRoomModelService.java

@@ -0,0 +1,36 @@
+package com.yc.ship.module.product.service.priceroommodel;
+
+import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
+
+import java.util.List;
+
+/**
+ * 价格模板中房型加价设置 Service 接口
+ *
+ * @author 管理员
+ */
+public interface PriceRoomModelService {
+
+    /**
+     * 删除价格模板中房型加价设置
+     *
+     * @param id 编号
+     */
+    void deletePriceRoomModel(Long id);
+
+    /**
+     * 获得价格模板中房型加价设置
+     *
+     * @param id 编号
+     * @return 价格模板中房型加价设置
+     */
+    PriceRoomModelDO getPriceRoomModel(Long id);
+
+    /**
+     * 获取列表
+     * @param objectId
+     * @return
+     */
+    List<PriceRoomModelDO> getListByObjectId(Long objectId);
+
+}

+ 41 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/priceroommodel/PriceRoomModelServiceImpl.java

@@ -0,0 +1,41 @@
+package com.yc.ship.module.product.service.priceroommodel;
+
+import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
+import com.yc.ship.module.product.dal.mysql.priceroommodel.PriceRoomModelMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 价格模板中房型加价设置 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class PriceRoomModelServiceImpl implements PriceRoomModelService {
+
+    @Resource
+    private PriceRoomModelMapper priceRoomModelMapper;
+
+
+    @Override
+    public void deletePriceRoomModel(Long id) {
+        // 删除
+        priceRoomModelMapper.deleteById(id);
+    }
+
+    @Override
+    public PriceRoomModelDO getPriceRoomModel(Long id) {
+        return priceRoomModelMapper.selectById(id);
+    }
+
+    @Override
+    public List<PriceRoomModelDO> getListByObjectId(Long objectId) {
+        return priceRoomModelMapper.selectListByObjectId(objectId);
+    }
+
+
+}

+ 37 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingService.java

@@ -0,0 +1,37 @@
+package com.yc.ship.module.product.service.pricesinglesetting;
+
+import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleSettingDO;
+
+/**
+ * 价格单人票设置 Service 接口
+ *
+ * @author 管理员
+ */
+public interface PriceSingleSettingService {
+
+
+
+    /**
+     * 删除价格单人票设置
+     *
+     * @param id 编号
+     */
+    void deletePriceSingleSetting(Long id);
+
+    /**
+     * 获得价格单人票设置
+     *
+     * @param id 编号
+     * @return 价格单人票设置
+     */
+    PriceSingleSettingDO getPriceSingleSetting(Long id);
+
+    /**
+     * 获得价格单人票设置
+     *
+     * @param objectId 对象编号
+     * @return 价格单人票设置
+     */
+    PriceSingleSettingDO getByObjectId(Long objectId);
+
+}

+ 42 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingServiceImpl.java

@@ -0,0 +1,42 @@
+package com.yc.ship.module.product.service.pricesinglesetting;
+
+import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleSettingDO;
+import com.yc.ship.module.product.dal.mysql.pricesinglesetting.PriceSingleSettingMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+/**
+ * 价格单人票设置 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class PriceSingleSettingServiceImpl implements PriceSingleSettingService {
+
+    @Resource
+    private PriceSingleSettingMapper priceSingleSettingMapper;
+
+
+
+    @Override
+    public void deletePriceSingleSetting(Long id) {
+        // 删除
+        priceSingleSettingMapper.deleteById(id);
+    }
+
+
+    @Override
+    public PriceSingleSettingDO getPriceSingleSetting(Long id) {
+        return priceSingleSettingMapper.selectById(id);
+    }
+
+    @Override
+    public PriceSingleSettingDO getByObjectId(Long objectId) {
+        return priceSingleSettingMapper.selectByObjectId(objectId);
+    }
+
+
+}

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

@@ -0,0 +1,58 @@
+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.PriceTemplateSaveReqVO;
+import com.yc.ship.module.product.dal.dataobject.pricetemplate.PriceTemplateDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 价格模板 Service 接口
+ *
+ * @author 管理员
+ */
+public interface PriceTemplateService {
+
+    /**
+     * 创建价格模板
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createPriceTemplate(@Valid PriceTemplateSaveReqVO createReqVO);
+
+    /**
+     * 更新价格模板
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePriceTemplate(@Valid PriceTemplateSaveReqVO updateReqVO);
+
+    /**
+     * 删除价格模板
+     *
+     * @param id 编号
+     */
+    void deletePriceTemplate(Long id);
+
+    /**
+     * 获得价格模板
+     *
+     * @param id 编号
+     * @return 价格模板
+     */
+    PriceTemplateDO getPriceTemplate(Long id);
+
+    /**
+     * 获得价格模板分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 价格模板分页
+     */
+    PageResult<PriceTemplateDO> getPriceTemplatePage(PriceTemplatePageReqVO pageReqVO);
+
+    List<PriceTemplateDO> getListSimple(PriceTemplateReqVO reqVO);
+}

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

@@ -0,0 +1,129 @@
+package com.yc.ship.module.product.service.pricetemplate;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+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.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.pricetemplate.PriceTemplateDO;
+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.pricesinglesetting.PriceSingleSettingMapper;
+import com.yc.ship.module.product.dal.mysql.pricetemplate.PriceTemplateMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.yc.ship.module.product.enums.ErrorCodeConstants.PRICE_TEMPLATE_NOT_EXISTS;
+
+/**
+ * 价格模板 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class PriceTemplateServiceImpl implements PriceTemplateService {
+
+    @Resource
+    private PriceTemplateMapper priceTemplateMapper;
+
+    @Resource
+    private PriceRoomModelMapper priceRoomModelMapper;
+
+    @Resource
+    private PriceFloorMapper priceFloorMapper;
+
+    @Resource
+    private PriceSingleSettingMapper priceSingleSettingMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createPriceTemplate(PriceTemplateSaveReqVO createReqVO) {
+        // 插入
+        PriceTemplateDO priceTemplate = BeanUtils.toBean(createReqVO, PriceTemplateDO.class);
+        priceTemplateMapper.insert(priceTemplate);
+        Long id = priceTemplate.getId();
+        saveRelation(id, createReqVO);
+        // 返回
+        return id;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updatePriceTemplate(PriceTemplateSaveReqVO updateReqVO) {
+        Long id = updateReqVO.getId();
+        // 校验存在
+        validatePriceTemplateExists(id);
+        // 更新
+        PriceTemplateDO updateObj = BeanUtils.toBean(updateReqVO, PriceTemplateDO.class);
+        priceTemplateMapper.updateById(updateObj);
+        deleteRelation(id);
+        saveRelation(id, updateReqVO);
+
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deletePriceTemplate(Long id) {
+        // 校验存在
+        validatePriceTemplateExists(id);
+        // 删除
+        priceTemplateMapper.deleteById(id);
+        deleteRelation(id);
+    }
+
+    private void validatePriceTemplateExists(Long id) {
+        if (priceTemplateMapper.selectById(id) == null) {
+            throw exception(PRICE_TEMPLATE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public PriceTemplateDO getPriceTemplate(Long id) {
+        return priceTemplateMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<PriceTemplateDO> getPriceTemplatePage(PriceTemplatePageReqVO pageReqVO) {
+        return priceTemplateMapper.selectPage(pageReqVO);
+    }
+
+    @Override
+    public List<PriceTemplateDO> getListSimple(PriceTemplateReqVO reqVO) {
+        return priceTemplateMapper.selectList(reqVO);
+    }
+
+    private void saveRelation(Long objectId, PriceTemplateSaveReqVO vo) {
+        //插入房型价格系数
+        List<PriceRoomModelDO> roomModelList = vo.getRoomModelList();
+        roomModelList.stream().forEach(roomModel -> {
+            roomModel.setObjectId(objectId);
+        });
+        priceRoomModelMapper.insertBatch(roomModelList);
+        //插入楼层价格系数
+        List<PriceFloorDO> floorList = vo.getFloorList();
+        floorList.stream().forEach(floor -> {
+            floor.setObjectId(objectId);
+        });
+        priceFloorMapper.insertBatch(floorList);
+        //插入单人票设置
+        PriceSingleSettingDO singleSetting = vo.getSingleSetting();
+        singleSetting.setObjectId(objectId);
+        priceSingleSettingMapper.insert(singleSetting);
+    }
+
+    private void deleteRelation(Long objectId) {
+        priceRoomModelMapper.deleteByObjectId(objectId);
+        priceFloorMapper.deleteByObjectId(objectId);
+        priceSingleSettingMapper.deleteByObjectId(objectId);
+    }
+
+}

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

@@ -0,0 +1,55 @@
+package com.yc.ship.module.product.service.pricevoyage;
+
+import java.util.*;
+import javax.validation.*;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.*;
+import com.yc.ship.module.product.dal.dataobject.pricevoyage.PriceVoyageDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+
+/**
+ * 航次价格 Service 接口
+ *
+ * @author 管理员
+ */
+public interface PriceVoyageService {
+
+    /**
+     * 创建航次价格
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createPriceVoyage(@Valid PriceVoyageSaveReqVO createReqVO);
+
+    /**
+     * 更新航次价格
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updatePriceVoyage(@Valid PriceVoyageSaveReqVO updateReqVO);
+
+    /**
+     * 删除航次价格
+     *
+     * @param id 编号
+     */
+    void deletePriceVoyage(Long id);
+
+    /**
+     * 获得航次价格
+     *
+     * @param id 编号
+     * @return 航次价格
+     */
+    PriceVoyageDO getPriceVoyage(Long id);
+
+    /**
+     * 获得航次价格分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 航次价格分页
+     */
+    PageResult<PriceVoyageDO> getPriceVoyagePage(PriceVoyagePageReqVO pageReqVO);
+
+}

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

@@ -0,0 +1,122 @@
+package com.yc.ship.module.product.service.pricevoyage;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyagePageReqVO;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageSaveReqVO;
+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.pricevoyage.PriceVoyageDO;
+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.pricesinglesetting.PriceSingleSettingMapper;
+import com.yc.ship.module.product.dal.mysql.pricevoyage.PriceVoyageMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.yc.ship.module.product.enums.ErrorCodeConstants.PRICE_VOYAGE_NOT_EXISTS;
+
+/**
+ * 航次价格 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class PriceVoyageServiceImpl implements PriceVoyageService {
+
+    @Resource
+    private PriceVoyageMapper priceVoyageMapper;
+
+    @Resource
+    private PriceRoomModelMapper priceRoomModelMapper;
+
+    @Resource
+    private PriceFloorMapper priceFloorMapper;
+
+    @Resource
+    private PriceSingleSettingMapper priceSingleSettingMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createPriceVoyage(PriceVoyageSaveReqVO createReqVO) {
+        // 插入
+        PriceVoyageDO priceVoyage = BeanUtils.toBean(createReqVO, PriceVoyageDO.class);
+        priceVoyageMapper.insert(priceVoyage);
+        Long id = priceVoyage.getId();
+        saveRelation(id, createReqVO);
+        // 返回
+        return id;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updatePriceVoyage(PriceVoyageSaveReqVO updateReqVO) {
+        Long id = updateReqVO.getId();
+        // 校验存在
+        validatePriceVoyageExists(id);
+        // 更新
+        PriceVoyageDO updateObj = BeanUtils.toBean(updateReqVO, PriceVoyageDO.class);
+        priceVoyageMapper.updateById(updateObj);
+        deleteRelation(id);
+        saveRelation(id, updateReqVO);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deletePriceVoyage(Long id) {
+        // 校验存在
+        validatePriceVoyageExists(id);
+        // 删除
+        priceVoyageMapper.deleteById(id);
+        deleteRelation(id);
+    }
+
+    private void validatePriceVoyageExists(Long id) {
+        if (priceVoyageMapper.selectById(id) == null) {
+            throw exception(PRICE_VOYAGE_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public PriceVoyageDO getPriceVoyage(Long id) {
+        return priceVoyageMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<PriceVoyageDO> getPriceVoyagePage(PriceVoyagePageReqVO pageReqVO) {
+        return priceVoyageMapper.selectPage(pageReqVO);
+    }
+
+    private void saveRelation(Long objectId, PriceVoyageSaveReqVO vo) {
+        //插入房型价格系数
+        List<PriceRoomModelDO> roomModelList = vo.getRoomModelList();
+        roomModelList.stream().forEach(roomModel -> {
+            roomModel.setObjectId(objectId);
+        });
+        priceRoomModelMapper.insertBatch(roomModelList);
+        //插入楼层价格系数
+        List<PriceFloorDO> floorList = vo.getFloorList();
+        floorList.stream().forEach(floor -> {
+            floor.setObjectId(objectId);
+        });
+        priceFloorMapper.insertBatch(floorList);
+        //插入单人票设置
+        PriceSingleSettingDO singleSetting = vo.getSingleSetting();
+        singleSetting.setObjectId(objectId);
+        priceSingleSettingMapper.insert(singleSetting);
+    }
+
+    private void deleteRelation(Long objectId) {
+        priceRoomModelMapper.deleteByObjectId(objectId);
+        priceFloorMapper.deleteByObjectId(objectId);
+        priceSingleSettingMapper.deleteByObjectId(objectId);
+    }
+
+}

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

@@ -2,10 +2,13 @@ package com.yc.ship.module.product.service.voyage;
 
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyagePageReqVO;
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageReqVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 
 import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 航次管理 Service 接口
@@ -52,4 +55,9 @@ public interface VoyageService {
      */
     PageResult<VoyageDO> getVoyagePage(VoyagePageReqVO pageReqVO);
 
+    List<VoyageDO> getListSimple(VoyageReqVO reqVO);
+
+    List<VoyageDO> getList(List<Long> ids);
+
+    Map<Long, VoyageDO> getListMap(List<Long> ids);
 }

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

@@ -1,8 +1,10 @@
 package com.yc.ship.module.product.service.voyage;
 
 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.voyage.vo.VoyagePageReqVO;
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageReqVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
@@ -11,6 +13,10 @@ import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 
+import java.util.Collections;
+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.VOYAGE_NOT_EXISTS;
 
@@ -68,4 +74,23 @@ public class VoyageServiceImpl implements VoyageService {
         return voyageMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public List<VoyageDO> getListSimple(VoyageReqVO reqVO) {
+        return voyageMapper.selectListSimple(reqVO);
+    }
+
+    @Override
+    public List<VoyageDO> getList(List<Long> ids) {
+        if(ids.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return voyageMapper.selectByIds(ids);
+    }
+
+    @Override
+    public Map<Long, VoyageDO> getListMap(List<Long> ids) {
+        List<VoyageDO> list = getList(ids);
+        return CollectionUtils.convertMap(list, VoyageDO::getId);
+    }
+
 }

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricefloor/PriceFloorMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yc.ship.module.product.dal.mysql.pricefloor.PriceFloorMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/priceroommodel/PriceRoomModelMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yc.ship.module.product.dal.mysql.priceroommodel.PriceRoomModelMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricesinglesetting/PriceSingleSettingMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yc.ship.module.product.dal.mysql.pricesinglesetting.PriceSingleSettingMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricetemplate/PriceTemplateMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yc.ship.module.product.dal.mysql.pricetemplate.PriceTemplateMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricevoyage/PriceVoyageMapper.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yc.ship.module.product.dal.mysql.pricevoyage.PriceVoyageMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 11 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/route/RouteApi.java

@@ -0,0 +1,11 @@
+package com.yc.ship.module.resource.api.route;
+
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface RouteApi {
+
+    Map<Long, RouteRespDTO> queryRoute(List<Long> ids);
+}

+ 50 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/route/dto/RouteRespDTO.java

@@ -0,0 +1,50 @@
+package com.yc.ship.module.resource.api.route.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class RouteRespDTO {
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13031")
+    private Long id;
+
+    @Schema(description = "航线名称", example = "王五")
+    private String name;
+
+    @Schema(description = "航线编码")
+    private String code;
+
+    @Schema(description = "航向(字典)")
+    private Integer direction;
+
+    @Schema(description = "登船码头", example = "28643")
+    private Long onDockId;
+
+    @Schema(description = "登船码头")
+    private String onDockName;
+
+    @Schema(description = "离船码头", example = "1161")
+    private Long leaveDockId;
+
+    @Schema(description = "离船码头")
+    private String leaveDockName;
+
+    @Schema(description = "途经停靠码头")
+    private String midwayDockIds;
+    @Schema(description = "途经停靠码头")
+    private String midwayDockNames;
+
+    @Schema(description = "航线关联景区")
+    private String relationScenicIds;
+
+    @Schema(description = "航线关联景区")
+    private String relationScenicNames;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer status;
+}

+ 25 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/api/route/RouteApiImpl.java

@@ -0,0 +1,25 @@
+package com.yc.ship.module.resource.api.route;
+
+import com.yc.ship.framework.common.util.collection.CollectionUtils;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
+import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
+import com.yc.ship.module.resource.service.route.ResourceRouteService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class RouteApiImpl implements RouteApi{
+
+    @Resource
+    private ResourceRouteService routeService;
+    @Override
+    public Map<Long, RouteRespDTO> queryRoute(List<Long> ids) {
+        List<ResourceRouteDO> list = routeService.getList(ids);
+        List<RouteRespDTO> routeRespDTOS = BeanUtils.toBean(list, RouteRespDTO.class);
+        return CollectionUtils.convertMap(routeRespDTOS,RouteRespDTO::getId);
+    }
+}

ship-server-web/src/main/resources/mapper/invoice/InvoiceDetailMapper.xml → ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/invoice/InvoiceDetailMapper.xml


ship-server-web/src/main/resources/mapper/invoice/InvoiceInventoryMapper.xml → ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/invoice/InvoiceInventoryMapper.xml


ship-server-web/src/main/resources/mapper/invoice/InvoiceMapper.xml → ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/invoice/InvoiceMapper.xml