Browse Source

feat: 增加航次库存管理,待完善

luofeiyun 2 weeks ago
parent
commit
a58ffad949
26 changed files with 1097 additions and 6 deletions
  1. 12 0
      ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ProductStockStaticsName.java
  2. 1 5
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java
  3. 112 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/VoyageStockController.java
  4. 56 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockBaseVO.java
  5. 24 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockPageReqVO.java
  6. 17 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockRespVO.java
  7. 12 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockSaveReqVO.java
  8. 148 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/VoyageStockDetailController.java
  9. 15 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailHeaderRespVO.java
  10. 57 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailPageReqVO.java
  11. 13 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailRespNewVO.java
  12. 17 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailRespVO.java
  13. 46 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailSaveReqVO.java
  14. 65 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailTotalRespVO.java
  15. 80 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestock/VoyageStockDO.java
  16. 80 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestockdetail/VoyageStockDetailDO.java
  17. 27 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestock/VoyageStockMapper.java
  18. 30 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdetail/VoyageStockDetailMapper.java
  19. 29 1
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java
  20. 52 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestock/VoyageStockService.java
  21. 59 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestock/VoyageStockServiceImpl.java
  22. 49 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailService.java
  23. 69 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailServiceImpl.java
  24. 7 0
      ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/ship/ShipApi.java
  25. 15 0
      ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/ship/dto/RoomModelFloorNumDTO.java
  26. 5 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/api/ship/ShipApiImpl.java

+ 12 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ProductStockStaticsName.java

@@ -0,0 +1,12 @@
+package com.yc.ship.module.product.enums;
+
+public interface ProductStockStaticsName {
+    public static final String TOTAL_NUM = "房间总数";
+    public static final String SHELF_NUM = "本次上架房间数";
+    public static final String NOT_SHELF_NUM = "未上架房间数";
+    public static final String SHELFED_NUM = "已上架房间数";
+    public static final String BOOK_NUM = "预订房间数";
+    public static final String CAN_SELL_NUM = "可售房间数";
+    public static final String OVERSOLD_NUM = "超卖房间数";
+    public static final String SURPLUS_NUM = "剩余房间数";
+}

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

@@ -7,10 +7,7 @@ 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.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.controller.admin.voyage.vo.*;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
@@ -102,7 +99,6 @@ public class VoyageController {
         });
         return success(page);
     }
-
     @GetMapping("/list-simple")
     @Operation(summary = "获得资源管理-航次列表")
     public CommonResult<List<VoyageRespVO>> getVoyageListSimple(VoyageReqVO reqVO) {

+ 112 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/VoyageStockController.java

@@ -0,0 +1,112 @@
+package com.yc.ship.module.product.controller.admin.voyagestock;
+
+import com.yc.ship.framework.common.util.collection.CollectionUtils;
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
+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.route.ResourceRouteDO;
+import com.yc.ship.module.resource.dal.dataobject.ship.ResourceShipDO;
+import com.yc.ship.module.resource.service.ship.ResourceShipService;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.yc.ship.module.product.controller.admin.voyagestock.vo.*;
+import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
+import com.yc.ship.module.product.service.voyagestock.VoyageStockService;
+
+@Tag(name = "管理后台 - 航次库存")
+@RestController
+@RequestMapping("/product/voyage-stock")
+@Validated
+public class VoyageStockController {
+
+    @Resource
+    private VoyageStockService voyageStockService;
+
+    @Resource
+    private ShipApi shipApi;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建航次库存")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock:create')")
+    public CommonResult<Long> createVoyageStock(@Valid @RequestBody VoyageStockSaveReqVO createReqVO) {
+        return success(voyageStockService.createVoyageStock(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新航次库存")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock:update')")
+    public CommonResult<Boolean> updateVoyageStock(@Valid @RequestBody VoyageStockSaveReqVO updateReqVO) {
+        voyageStockService.updateVoyageStock(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除航次库存")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock:delete')")
+    public CommonResult<Boolean> deleteVoyageStock(@RequestParam("id") Long id) {
+        voyageStockService.deleteVoyageStock(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得航次库存")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock:query')")
+    public CommonResult<VoyageStockRespVO> getVoyageStock(@RequestParam("id") Long id) {
+        VoyageStockDO voyageStock = voyageStockService.getVoyageStock(id);
+        return success(BeanUtils.toBean(voyageStock, VoyageStockRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得航次库存分页")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock:query')")
+    public CommonResult<PageResult<VoyageStockRespVO>> getVoyageStockPage(@Valid VoyageStockPageReqVO pageReqVO) {
+        PageResult<VoyageStockDO> pageResult = voyageStockService.getVoyageStockPage(pageReqVO);
+        PageResult<VoyageStockRespVO> page = BeanUtils.toBean(pageResult, VoyageStockRespVO.class);
+        List<VoyageStockRespVO> list = page.getList();
+        List<Long> shipIds = CollectionUtils.convertList(list, VoyageStockRespVO::getShipId);
+        Map<Long, ShipRespDTO> shipMap = shipApi.queryShip(shipIds);
+        list.stream().forEach(item -> {
+            item.setShipName(shipMap.get(item.getShipId()).getName());
+        });
+        return success(page);
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出航次库存 Excel")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportVoyageStockExcel(@Valid VoyageStockPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<VoyageStockDO> list = voyageStockService.getVoyageStockPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "航次库存.xls", "数据", VoyageStockRespVO.class,
+                        BeanUtils.toBean(list, VoyageStockRespVO.class));
+    }
+
+}

+ 56 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockBaseVO.java

@@ -0,0 +1,56 @@
+package com.yc.ship.module.product.controller.admin.voyagestock.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class VoyageStockBaseVO {
+    @Schema(description = "航次ID", example = "3260")
+    @ExcelProperty("航次ID")
+    private Long voyageId;
+
+    @Schema(description = "航次名称", example = "张三")
+    @ExcelProperty("航次名称")
+    private String voyageName;
+
+    @Schema(description = "船ID", example = "6357")
+    @ExcelProperty("船ID")
+    private Long shipId;
+
+    @Schema(description = "船名称", example = "张三")
+    @ExcelProperty("船名称")
+    private String shipName;
+
+    @Schema(description = "类型")
+    @ExcelProperty("类型")
+    private Integer type;
+
+    @Schema(description = "房间总数")
+    @ExcelProperty("房间总数")
+    private Integer totalNum;
+
+    @Schema(description = "待上架房间数")
+    @ExcelProperty("待上架房间数")
+    private Integer notShelfNum;
+
+    @Schema(description = "已上架房间数")
+    @ExcelProperty("已上架房间数")
+    private Integer shelfedNum;
+
+    @Schema(description = "预定房间数")
+    @ExcelProperty("预定房间数")
+    private Integer bookNum;
+
+    @Schema(description = "可售房间数")
+    @ExcelProperty("可售房间数")
+    private Integer canSellNum;
+
+    @Schema(description = "超卖房间数")
+    @ExcelProperty("超卖房间数")
+    private Integer oversoldNum;
+
+    @Schema(description = "剩余房间数")
+    @ExcelProperty("剩余房间数")
+    private Integer surplusNum;
+}

+ 24 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockPageReqVO.java

@@ -0,0 +1,24 @@
+package com.yc.ship.module.product.controller.admin.voyagestock.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 VoyageStockPageReqVO extends PageParam {
+
+    @Schema(description = "航次名称", example = "张三")
+    private String voyageName;
+
+    @Schema(description = "船ID", example = "6357")
+    private Long shipId;
+
+}

+ 17 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockRespVO.java

@@ -0,0 +1,17 @@
+package com.yc.ship.module.product.controller.admin.voyagestock.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 航次库存 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class VoyageStockRespVO extends VoyageStockBaseVO{
+
+
+
+}

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestock/vo/VoyageStockSaveReqVO.java

@@ -0,0 +1,12 @@
+package com.yc.ship.module.product.controller.admin.voyagestock.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 航次库存新增/修改 Request VO")
+@Data
+public class VoyageStockSaveReqVO extends VoyageStockBaseVO{
+
+}

+ 148 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/VoyageStockDetailController.java

@@ -0,0 +1,148 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdetail;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yc.ship.framework.common.util.collection.CollectionUtils;
+import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.*;
+import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
+import com.yc.ship.module.product.enums.ProductStockStaticsName;
+import com.yc.ship.module.product.service.voyagestock.VoyageStockService;
+import com.yc.ship.module.product.service.voyagestockdetail.VoyageStockDetailService;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.*;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 航次库存")
+@RestController
+@RequestMapping("/product/voyage-stock-detail")
+@Validated
+public class VoyageStockDetailController {
+
+    @Resource
+    private VoyageStockDetailService voyageStockDetailService;
+
+    @Resource
+    private VoyageStockService voyageStockService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建航次库存")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock-detail:create')")
+    public CommonResult<Boolean> createVoyageStock(@Valid @RequestBody List<VoyageStockDetailSaveReqVO> createReqVO) {
+        return success(voyageStockDetailService.createVoyageStock(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新航次库存")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock-detail:update')")
+    public CommonResult<Boolean> updateVoyageStock(@Valid @RequestBody VoyageStockDetailSaveReqVO updateReqVO) {
+        voyageStockDetailService.updateVoyageStock(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除航次库存")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock-detail:delete')")
+    public CommonResult<Boolean> deleteVoyageStock(@RequestParam("id") Long id) {
+        voyageStockDetailService.deleteVoyageStock(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得航次库存")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('product:voyage-stock-detail:query')")
+    public CommonResult<VoyageStockDetailRespVO> getVoyageStock(@RequestParam("id") Long id) {
+        VoyageStockDetailDO voyageStock = voyageStockDetailService.getVoyageStock(id);
+        return success(BeanUtils.toBean(voyageStock, VoyageStockDetailRespVO.class));
+    }
+
+    @GetMapping("/getByVoyageId")
+    @Operation(summary = "获得航次库存")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<VoyageStockDetailRespVO> getVoyageStockByVoyageId(@RequestParam("voyageId") Long voyageId) {
+        VoyageStockDO voyageStock = voyageStockService.getVoyageStock(voyageId);
+        List<VoyageStockDetailDO> list = voyageStockDetailService.getListByVoyageId(voyageId);
+        VoyageStockDetailRespVO respVO = new VoyageStockDetailRespVO();
+        List<VoyageStockDetailHeaderRespVO> headerList = new ArrayList<>();
+        Map<Long, List<VoyageStockDetailDO>> map = list.stream().collect(Collectors.groupingBy(VoyageStockDetailDO::getRoomModelId));
+        map.forEach((roomModelId, detailList) -> {
+            VoyageStockDetailHeaderRespVO header = new VoyageStockDetailHeaderRespVO();
+            header.setRoomModelId(roomModelId);
+            header.setRoomModelName(detailList.get(0).getRoomModelName());
+            header.setFloorList(detailList.stream().map(VoyageStockDetailDO::getFloor).collect(Collectors.toList()));
+            headerList.add(header);
+        });
+        List<Map<String, Object>> totalList = new ArrayList<>();
+        Map<String, Object> mapTotal = new HashMap<>();//房间总数量
+        mapTotal.put("staticsName", ProductStockStaticsName.TOTAL_NUM);
+        mapTotal.put("allTotalNum", voyageStock.getTotalNum());
+        Map<String, Object> mapShelf = new HashMap<>(); //本次上架数量
+        mapShelf.put("staticsName", ProductStockStaticsName.SHELF_NUM);
+        mapShelf.put("allTotalNum", 0);
+        Map<String, Object> mapNotShelf = new HashMap<>(); //待上架房间数量
+        mapNotShelf.put("staticsName", ProductStockStaticsName.NOT_SHELF_NUM);
+        mapNotShelf.put("allTotalNum", voyageStock.getNotShelfNum());
+        Map<String, Object> mapShelfed = new HashMap<>(); //已上架房间数量
+        mapShelfed.put("staticsName", ProductStockStaticsName.SHELFED_NUM);
+        mapShelfed.put("allTotalNum", voyageStock.getShelfedNum());
+        Map<String, Object> mapBook = new HashMap<>(); // 预定房间数
+        mapBook.put("staticsName", ProductStockStaticsName.BOOK_NUM);
+        mapBook.put("allTotalNum", voyageStock.getBookNum());
+        Map<String, Object> mapCanSell = new HashMap<>(); //可售房间数
+        mapCanSell.put("staticsName", ProductStockStaticsName.CAN_SELL_NUM);
+        mapCanSell.put("allTotalNum", voyageStock.getCanSellNum());
+        Map<String, Object> mapOverSold = new HashMap<>(); //超卖房间数
+        mapOverSold.put("staticsName", ProductStockStaticsName.OVERSOLD_NUM);
+        mapOverSold.put("allTotalNum", voyageStock.getOversoldNum());
+        Map<String, Object> mapSurplus = new HashMap<>(); //剩余房间数
+        mapSurplus.put("staticsName", ProductStockStaticsName.SURPLUS_NUM);
+        mapSurplus.put("allTotalNum", voyageStock.getSurplusNum());
+        totalList.add(mapTotal);
+        totalList.add(mapShelf);
+        totalList.add(mapNotShelf);
+        totalList.add(mapShelfed);
+        totalList.add(mapBook);
+        totalList.add(mapCanSell);
+        totalList.add(mapOverSold);
+        totalList.add(mapSurplus);
+        list.stream().forEach(detail -> {
+            mapTotal.put(detail.getRoomModelId()+"_"+detail.getFloor(),detail.getTotalNum());
+            mapShelf.put(detail.getRoomModelId()+"_"+detail.getFloor(),0);
+            mapNotShelf.put(detail.getRoomModelId()+"_"+detail.getFloor(),detail.getNotShelfNum());
+            mapShelfed.put(detail.getRoomModelId()+"_"+detail.getFloor(),detail.getShelfedNum());
+            mapBook.put(detail.getRoomModelId()+"_"+detail.getFloor(),detail.getBookNum());
+            mapCanSell.put(detail.getRoomModelId()+"_"+detail.getFloor(),detail.getCanSellNum());
+            mapOverSold.put(detail.getRoomModelId()+"_"+detail.getFloor(),detail.getOversoldNum());
+            mapSurplus.put(detail.getRoomModelId()+"_"+detail.getFloor(),detail.getSurplusNum());
+        });
+        respVO.setHeaderList(headerList);
+        respVO.setTotalList(totalList);
+        return success(respVO);
+    }
+
+    @GetMapping("/getByVoyageIdNew")
+    @Operation(summary = "获得航次库存")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    public CommonResult<List<VoyageStockDetailRespNewVO>> getVoyageStockByVoyageIdNew(@RequestParam("voyageId") Long voyageId) {
+        List<VoyageStockDetailDO> list = voyageStockDetailService.getListByVoyageId(voyageId);
+        return success(BeanUtils.toBean(list, VoyageStockDetailRespNewVO.class));
+    }
+
+}

+ 15 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailHeaderRespVO.java

@@ -0,0 +1,15 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdetail.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VoyageStockDetailHeaderRespVO {
+
+    private Long roomModelId;
+
+    private String roomModelName;
+
+    private List<Integer> floorList;
+}

+ 57 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailPageReqVO.java

@@ -0,0 +1,57 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdetail.vo;
+
+import lombok.*;
+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 VoyageStockDetailPageReqVO extends PageParam {
+
+    @Schema(description = "房型ID", example = "6357")
+    private Long roomModelId;
+
+    @Schema(description = "房型名称", example = "李四")
+    private String roomModelName;
+
+    @Schema(description = "航次ID", example = "3260")
+    private Long voyageId;
+
+    @Schema(description = "楼层")
+    private Integer floor;
+
+    @Schema(description = "房间总数")
+    private Integer totalNum;
+
+    @Schema(description = "本次上架房间数")
+    private Integer shelfNum;
+
+    @Schema(description = "待上架房间数")
+    private Integer notShelfNum;
+
+    @Schema(description = "已上架房间数")
+    private Integer shelfedNum;
+
+    @Schema(description = "预定房间数")
+    private Integer bookNum;
+
+    @Schema(description = "可售房间数")
+    private Integer canSellNum;
+
+    @Schema(description = "超卖房间数")
+    private Integer oversoldNum;
+
+    @Schema(description = "剩余房间数")
+    private Integer surplusNum;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 13 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailRespNewVO.java

@@ -0,0 +1,13 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdetail.vo;
+
+import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 航次库存 Response VO")
+@Data
+public class VoyageStockDetailRespNewVO extends VoyageStockDetailDO {
+
+
+
+}

+ 17 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailRespVO.java

@@ -0,0 +1,17 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdetail.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.util.List;
+import java.util.Map;
+
+@Schema(description = "管理后台 - 航次库存 Response VO")
+@Data
+public class VoyageStockDetailRespVO {
+
+   List<VoyageStockDetailHeaderRespVO> headerList;
+
+   List<Map<String, Object>> totalList;
+
+}

+ 46 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailSaveReqVO.java

@@ -0,0 +1,46 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdetail.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+@Schema(description = "管理后台 - 航次库存新增/修改 Request VO")
+@Data
+public class VoyageStockDetailSaveReqVO {
+
+    @Schema(description = "房型ID", example = "6357")
+    private Long roomModelId;
+
+    @Schema(description = "房型名称", example = "李四")
+    private String roomModelName;
+
+    @Schema(description = "航次ID", example = "3260")
+    private Long voyageId;
+
+    @Schema(description = "楼层")
+    private Integer floor;
+
+    @Schema(description = "房间总数")
+    private Integer totalNum;
+
+    @Schema(description = "本次上架房间数")
+    private Integer shelfNum;
+
+    @Schema(description = "待上架房间数")
+    private Integer notShelfNum;
+
+    @Schema(description = "已上架房间数")
+    private Integer shelfedNum;
+
+    @Schema(description = "预定房间数")
+    private Integer bookNum;
+
+    @Schema(description = "可售房间数")
+    private Integer canSellNum;
+
+    @Schema(description = "超卖房间数")
+    private Integer oversoldNum;
+
+    @Schema(description = "剩余房间数")
+    private Integer surplusNum;
+
+}

+ 65 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/vo/VoyageStockDetailTotalRespVO.java

@@ -0,0 +1,65 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdetail.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+
+@Schema(description = "管理后台 - 航次库存 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class VoyageStockDetailTotalRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27102")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "房型ID", example = "6357")
+    @ExcelProperty("房型ID")
+    private Long roomModelId;
+
+    @Schema(description = "房型名称", example = "李四")
+    @ExcelProperty("房型名称")
+    private String roomModelName;
+
+    @Schema(description = "航次ID", example = "3260")
+    @ExcelProperty("航次ID")
+    private Long voyageId;
+
+    @Schema(description = "楼层")
+    @ExcelProperty("楼层")
+    private Integer floor;
+
+    @Schema(description = "房间总数")
+    @ExcelProperty("房间总数")
+    private Integer totalNum;
+
+    @Schema(description = "本次上架房间数")
+    @ExcelProperty("本次上架房间数")
+    private Integer shelfNum;
+
+    @Schema(description = "待上架房间数")
+    @ExcelProperty("待上架房间数")
+    private Integer notShelfNum;
+
+    @Schema(description = "已上架房间数")
+    @ExcelProperty("已上架房间数")
+    private Integer shelfedNum;
+
+    @Schema(description = "预定房间数")
+    @ExcelProperty("预定房间数")
+    private Integer bookNum;
+
+    @Schema(description = "可售房间数")
+    @ExcelProperty("可售房间数")
+    private Integer canSellNum;
+
+    @Schema(description = "超卖房间数")
+    @ExcelProperty("超卖房间数")
+    private Integer oversoldNum;
+
+    @Schema(description = "剩余房间数")
+    @ExcelProperty("剩余房间数")
+    private Integer surplusNum;
+}

+ 80 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestock/VoyageStockDO.java

@@ -0,0 +1,80 @@
+package com.yc.ship.module.product.dal.dataobject.voyagestock;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 航次库存 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_voyage_stock")
+@KeySequence("product_voyage_stock_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class VoyageStockDO extends TenantBaseDO {
+
+    /**
+     * 航次ID
+     */
+    @TableId
+    private Long voyageId;
+
+    /**
+     * 航次名称
+     */
+    private String voyageName;
+
+    /**
+     * 游轮ID
+     */
+    private Long shipId;
+
+    /**
+     * 游轮名称
+     */
+    private String shipName;
+
+    /**
+     * 航次类型
+     */
+    private Integer type;
+    /**
+     * 房间总数
+     */
+    private Integer totalNum;
+    /**
+     * 待上架房间数
+     */
+    private Integer notShelfNum;
+    /**
+     * 已上架房间数
+     */
+    private Integer shelfedNum;
+    /**
+     * 预定房间数
+     */
+    private Integer bookNum;
+    /**
+     * 可售房间数
+     */
+    private Integer canSellNum;
+    /**
+     * 超卖房间数
+     */
+    private Integer oversoldNum;
+    /**
+     * 剩余房间数
+     */
+    private Integer surplusNum;
+
+}

+ 80 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestockdetail/VoyageStockDetailDO.java

@@ -0,0 +1,80 @@
+package com.yc.ship.module.product.dal.dataobject.voyagestockdetail;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 航次库存 DO
+ *
+ * @author 管理员
+ */
+@TableName("product_voyage_stock_detail")
+@KeySequence("product_voyage_stock_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class VoyageStockDetailDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 房型ID
+     */
+    private Long roomModelId;
+    /**
+     * 房型名称
+     */
+    private String roomModelName;
+    /**
+     * 航次ID
+     */
+    private Long voyageId;
+    /**
+     * 楼层
+     */
+    private Integer floor;
+    /**
+     * 房间总数
+     */
+    private Integer totalNum;
+    /**
+     * 本次上架房间数
+     */
+    private Integer shelfNum;
+    /**
+     * 待上架房间数
+     */
+    private Integer notShelfNum;
+    /**
+     * 已上架房间数
+     */
+    private Integer shelfedNum;
+    /**
+     * 预定房间数
+     */
+    private Integer bookNum;
+    /**
+     * 可售房间数
+     */
+    private Integer canSellNum;
+    /**
+     * 超卖房间数
+     */
+    private Integer oversoldNum;
+    /**
+     * 剩余房间数
+     */
+    private Integer surplusNum;
+
+}

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

@@ -0,0 +1,27 @@
+package com.yc.ship.module.product.dal.mysql.voyagestock;
+
+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.voyagestock.VoyageStockDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.product.controller.admin.voyagestock.vo.*;
+
+/**
+ * 航次库存 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface VoyageStockMapper extends BaseMapperX<VoyageStockDO> {
+
+    default PageResult<VoyageStockDO> selectPage(VoyageStockPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<VoyageStockDO>()
+                .likeIfPresent(VoyageStockDO::getVoyageName, reqVO.getVoyageName())
+                .eqIfPresent(VoyageStockDO::getShipId, reqVO.getShipId())
+                .orderByDesc(VoyageStockDO::getVoyageId));
+    }
+
+}

+ 30 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdetail/VoyageStockDetailMapper.java

@@ -0,0 +1,30 @@
+package com.yc.ship.module.product.dal.mysql.voyagestockdetail;
+
+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.voyagestockdetail.VoyageStockDetailDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 航次库存 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface VoyageStockDetailMapper extends BaseMapperX<VoyageStockDetailDO> {
+
+
+    default List<VoyageStockDetailDO> selectListByVoyageId(Long voyageId) {
+        return selectList(new LambdaQueryWrapperX<VoyageStockDetailDO>()
+                .eq(VoyageStockDetailDO::getVoyageId, voyageId)
+                .orderByAsc(VoyageStockDetailDO::getRoomModelId)
+                .orderByAsc(VoyageStockDetailDO::getFloor));
+    }
+
+    default void deleteByVoyageId(Long voyageId) {
+        delete(new LambdaQueryWrapperX<VoyageStockDetailDO>()
+                .eq(VoyageStockDetailDO::getVoyageId, voyageId));
+    }
+}

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

@@ -7,8 +7,11 @@ 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.dataobject.voyagestock.VoyageStockDO;
 import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
+import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
@@ -32,22 +35,47 @@ public class VoyageServiceImpl implements VoyageService {
     @Resource
     private VoyageMapper voyageMapper;
 
+    @Resource
+    private VoyageStockMapper voyageStockMapper;
+
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Long createVoyage(VoyageSaveReqVO createReqVO) {
         // 插入
         VoyageDO voyage = BeanUtils.toBean(createReqVO, VoyageDO.class);
         voyageMapper.insert(voyage);
+        Long id = voyage.getId();
+
+        saveOrUpdateVoyageStock(createReqVO);
         // 返回
-        return voyage.getId();
+        return id;
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateVoyage(VoyageSaveReqVO updateReqVO) {
         // 校验存在
         validateVoyageExists(updateReqVO.getId());
         // 更新
         VoyageDO updateObj = BeanUtils.toBean(updateReqVO, VoyageDO.class);
         voyageMapper.updateById(updateObj);
+        saveOrUpdateVoyageStock(updateReqVO);
+
+    }
+
+    private void saveOrUpdateVoyageStock(VoyageSaveReqVO reqVO) {
+        VoyageStockDO voyageStockDO = new VoyageStockDO();
+        voyageStockDO.setVoyageId(reqVO.getId());
+        voyageStockDO.setVoyageName(reqVO.getName());
+        voyageStockDO.setShipId(reqVO.getShipId());
+        voyageStockDO.setType(reqVO.getType());
+
+        VoyageStockDO stockDO = voyageStockMapper.selectById(reqVO.getId());
+        if(stockDO != null) {
+            voyageStockMapper.updateById(voyageStockDO);
+        }else {
+            voyageStockMapper.insert(voyageStockDO);
+        }
     }
 
     @Override

+ 52 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestock/VoyageStockService.java

@@ -0,0 +1,52 @@
+package com.yc.ship.module.product.service.voyagestock;
+
+import javax.validation.*;
+import com.yc.ship.module.product.controller.admin.voyagestock.vo.*;
+import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+
+/**
+ * 航次库存 Service 接口
+ *
+ * @author 管理员
+ */
+public interface VoyageStockService {
+
+    /**
+     * 创建航次库存
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createVoyageStock(@Valid VoyageStockSaveReqVO createReqVO);
+
+    /**
+     * 更新航次库存
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateVoyageStock(@Valid VoyageStockSaveReqVO updateReqVO);
+
+    /**
+     * 删除航次库存
+     *
+     * @param voyageId 编号
+     */
+    void deleteVoyageStock(Long voyageId);
+
+    /**
+     * 获得航次库存
+     *
+     * @param voyageId 编号
+     * @return 航次库存
+     */
+    VoyageStockDO getVoyageStock(Long voyageId);
+
+    /**
+     * 获得航次库存分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 航次库存分页
+     */
+    PageResult<VoyageStockDO> getVoyageStockPage(VoyageStockPageReqVO pageReqVO);
+}

+ 59 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestock/VoyageStockServiceImpl.java

@@ -0,0 +1,59 @@
+package com.yc.ship.module.product.service.voyagestock;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+
+import com.yc.ship.module.product.controller.admin.voyagestock.vo.*;
+import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
+
+/**
+ * 航次库存 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class VoyageStockServiceImpl implements VoyageStockService {
+
+    @Resource
+    private VoyageStockMapper voyageStockMapper;
+
+    @Override
+    public Long createVoyageStock(VoyageStockSaveReqVO createReqVO) {
+        // 插入
+        VoyageStockDO voyageStock = BeanUtils.toBean(createReqVO, VoyageStockDO.class);
+        voyageStockMapper.insert(voyageStock);
+        // 返回
+        return voyageStock.getVoyageId();
+    }
+
+    @Override
+    public void updateVoyageStock(VoyageStockSaveReqVO updateReqVO) {
+        // 更新
+        VoyageStockDO updateObj = BeanUtils.toBean(updateReqVO, VoyageStockDO.class);
+        voyageStockMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteVoyageStock(Long id) {
+        // 删除
+        voyageStockMapper.deleteById(id);
+    }
+
+
+    @Override
+    public VoyageStockDO getVoyageStock(Long id) {
+        return voyageStockMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<VoyageStockDO> getVoyageStockPage(VoyageStockPageReqVO pageReqVO) {
+        return voyageStockMapper.selectPage(pageReqVO);
+    }
+
+}

+ 49 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailService.java

@@ -0,0 +1,49 @@
+package com.yc.ship.module.product.service.voyagestockdetail;
+
+import javax.validation.*;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
+
+import java.util.List;
+
+/**
+ * 航次库存 Service 接口
+ *
+ * @author 管理员
+ */
+public interface VoyageStockDetailService {
+
+    /**
+     * 创建航次库存
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Boolean createVoyageStock(@Valid List<VoyageStockDetailSaveReqVO> createReqVO);
+
+    /**
+     * 更新航次库存
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateVoyageStock(@Valid VoyageStockDetailSaveReqVO updateReqVO);
+
+    /**
+     * 删除航次库存
+     *
+     * @param id 编号
+     */
+    void deleteVoyageStock(Long id);
+
+    /**
+     * 获得航次库存
+     *
+     * @param id 编号
+     * @return 航次库存
+     */
+    VoyageStockDetailDO getVoyageStock(Long id);
+
+    List<VoyageStockDetailDO> getListByVoyageId(Long voyageId);
+}

+ 69 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailServiceImpl.java

@@ -0,0 +1,69 @@
+package com.yc.ship.module.product.service.voyagestockdetail;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
+import com.yc.ship.module.product.enums.ProductStockStaticsName;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 航次库存 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
+
+    @Resource
+    private VoyageStockDetailMapper voyageStockDetailMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean createVoyageStock(List<VoyageStockDetailSaveReqVO> createReqVO) {
+        if(createReqVO.isEmpty()) {
+            return null;
+        }
+        Long voyageId = createReqVO.get(0).getVoyageId();
+        voyageStockDetailMapper.deleteByVoyageId(voyageId);
+        List<VoyageStockDetailDO> list = BeanUtils.toBean(createReqVO, VoyageStockDetailDO.class);
+        return voyageStockDetailMapper.insertBatch(list);
+    }
+
+    @Override
+    public void updateVoyageStock(VoyageStockDetailSaveReqVO updateReqVO) {
+        // 更新
+        VoyageStockDetailDO updateObj = BeanUtils.toBean(updateReqVO, VoyageStockDetailDO.class);
+        voyageStockDetailMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteVoyageStock(Long id) {
+        // 删除
+        voyageStockDetailMapper.deleteById(id);
+    }
+
+
+    @Override
+    public VoyageStockDetailDO getVoyageStock(Long id) {
+        return voyageStockDetailMapper.selectById(id);
+    }
+
+    @Override
+    public List<VoyageStockDetailDO> getListByVoyageId(Long voyageId) {
+        return voyageStockDetailMapper.selectListByVoyageId(voyageId);
+    }
+
+}

+ 7 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/ship/ShipApi.java

@@ -16,4 +16,11 @@ public interface ShipApi {
      */
     Map<Long, ShipRespDTO> queryShip(List<Long> ids);
 
+    /**
+     * 获取房型和楼层对应的房间数
+     * @param shipId
+     * @return
+     */
+    Map<Long, Integer> queryRoomModelFloorToNum(Long shipId);
+
 }

+ 15 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/ship/dto/RoomModelFloorNumDTO.java

@@ -0,0 +1,15 @@
+package com.yc.ship.module.resource.api.ship.dto;
+
+import lombok.Data;
+
+@Data
+public class RoomModelFloorNumDTO {
+
+    private Long roomModelId;
+
+    private String roomModelName;
+
+    private Integer floor;
+
+    private Integer num;
+}

+ 5 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/api/ship/ShipApiImpl.java

@@ -23,4 +23,9 @@ public class ShipApiImpl implements ShipApi {
         Map<Long, ShipRespDTO> map = CollectionUtils.convertMap(shipRespDTOS, ShipRespDTO::getId);
         return map;
     }
+
+    @Override
+    public Map<Long, Integer> queryRoomModelFloorToNum(Long shipId) {
+        return null;
+    }
 }