Quellcode durchsuchen

feat: 完成库存分配和房间分配

luofeiyun vor 3 Monaten
Ursprung
Commit
f5e9b90e12
15 geänderte Dateien mit 507 neuen und 45 gelöschten Zeilen
  1. 0 3
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdetail/VoyageStockDetailController.java
  2. 30 19
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/VoyageStockDistributeNewController.java
  3. 48 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewRespVO.java
  4. 50 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewSaveReqVO.java
  5. 9 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributorRoomRespVO.java
  6. 49 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributorRoomSaveReqVO.java
  7. 7 2
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestockdistribute/VoyageStockDistributeNewDO.java
  8. 65 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestockdistribute/VoyageStockDistributeRoomDO.java
  9. 24 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeNewMapper.java
  10. 29 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeRoomMapper.java
  11. 22 4
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewService.java
  12. 94 17
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java
  13. 29 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeRoomService.java
  14. 42 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeRoomServiceImpl.java
  15. 9 0
      ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/room/dto/RoomRespDTO.java

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

@@ -43,9 +43,6 @@ public class VoyageStockDetailController {
     @Resource
     private VoyageStockService voyageStockService;
 
-    @Resource
-    private ResourceRoomModelService resourceRoomModelService;
-
     @PostMapping("/create")
     @Operation(summary = "创建航次库存")
     @PreAuthorize("@ss.hasPermission('product:voyage-stock-detail:create')")

+ 30 - 19
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/VoyageStockDistributeNewController.java

@@ -1,44 +1,55 @@
 package com.yc.ship.module.product.controller.admin.voyagestockdistributeNew;
 
 import com.yc.ship.framework.common.pojo.CommonResult;
-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.ota.api.OtaDistributorApi;
-import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.*;
-import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeDO;
-import com.yc.ship.module.product.service.voyagestockdistribute.VoyageStockDistributeService;
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewRespVO;
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewSaveReqVO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;
+import com.yc.ship.module.product.service.voyagestockdistribute.VoyageStockDistributeNewService;
+import com.yc.ship.module.product.service.voyagestockdistribute.VoyageStockDistributeRoomService;
 import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;
-import com.yc.ship.module.resource.dal.dataobject.roommodel.ResourceRoomModelDO;
-import com.yc.ship.module.resource.service.roommodel.ResourceRoomModelService;
 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.validation.Valid;
 import java.util.List;
-import java.util.Map;
 
 import static com.yc.ship.framework.common.pojo.CommonResult.success;
 
 @Tag(name = "管理后台 - 航次库存分配")
 @RestController
-@RequestMapping("/product/voyage-stock-distribute")
+@RequestMapping("/product/voyage-stock-distribute-new")
 @Validated
 public class VoyageStockDistributeNewController {
 
     @Resource
-    private VoyageStockDistributeService voyageStockDistributeService;
-
-    @Resource
-    private OtaDistributorApi distributorApi;
-
-    @Resource
-    private ResourceRoomModelService resourceRoomModelService;
+    private VoyageStockDistributeNewService voyageStockDistributeNewService;
+
+
+    @Operation(summary = "创建航次库存分配")
+    @PostMapping("/create")
+//    @PreAuthorize("@ss.hasPermission('product:voyage-stock-distribute-new:create')")
+    public CommonResult<Boolean> createVoyageStockDistribute(@Valid @RequestBody List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
+        voyageStockDistributeNewService.createVoyageStockDistributeNew(createReqVO);
+        return success(true);
+    }
+
+    @Operation(summary = "获取航次库存分配")
+    @GetMapping("/getByVoyageId")
+    public CommonResult<List<VoyageStockDistributeNewRespVO>> getByVoyageId(@RequestParam("voyageId") Long voyageId) {
+        List<VoyageStockDistributeNewRespVO> list = voyageStockDistributeNewService.getByVoyageId(voyageId);
+        return success(list);
+    }
+
+    @GetMapping("/getRoomList")
+    @Operation(summary = "获取航次库存分配房间列表")
+    public CommonResult<List<RoomRespDTO>> getRoomList(@RequestParam("voyageId") Long voyageId, @RequestParam("shipId") Long shipId) {
+        List<RoomRespDTO> list = voyageStockDistributeNewService.getRoomList(voyageId, shipId);
+        return success(list);
+    }
 
 
 }

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

@@ -0,0 +1,48 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Schema(description = "管理后台 - 航次库存分配保存 Request VO")
+@Data
+public class VoyageStockDistributeNewRespVO {
+
+    @Schema(description = "ID", example = "1")
+    private Long id;
+
+    @Schema(description = "分销商或者门店ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long objectId;
+
+    @Schema(description = "1分销商 2门店", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer type;
+
+    @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private BigDecimal num;
+
+    @Schema(description = "分配的房型房间数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private BigDecimal roomModelNum;
+
+    @Schema(description = "房型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long roomModelId;
+
+    @Schema(description = "楼层", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer floor;
+
+    @Schema(description = "航次ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long voyageId;
+
+    @Schema(description = "船ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long shipId;
+
+    @Schema(description = "房间列表")
+    private List<VoyageStockDistributorRoomRespVO> roomList;
+
+
+
+
+
+
+}

+ 50 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewSaveReqVO.java

@@ -0,0 +1,50 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo;
+
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Schema(description = "管理后台 - 航次库存分配保存 Request VO")
+@Data
+public class VoyageStockDistributeNewSaveReqVO {
+
+    @Schema(description = "ID", example = "1")
+    private Long id;
+
+    @Schema(description = "分销商或者门店ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long objectId;
+
+    @Schema(description = "1分销商 2门店", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer type;
+
+    @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private BigDecimal num;
+
+    @Schema(description = "分配的房型房间数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private BigDecimal roomModelNum;
+
+    @Schema(description = "房型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long roomModelId;
+
+    @Schema(description = "楼层", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer floor;
+
+    @Schema(description = "航次ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long voyageId;
+
+    @Schema(description = "船ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long shipId;
+    /**
+     * 房间列表
+     */
+    List<VoyageStockDistributorRoomSaveReqVO> roomList;
+
+
+
+
+
+
+}

+ 9 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributorRoomRespVO.java

@@ -0,0 +1,9 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo;
+
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
+import lombok.Data;
+
+@Data
+public class VoyageStockDistributorRoomRespVO extends VoyageStockDistributeRoomDO {
+
+}

+ 49 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributorRoomSaveReqVO.java

@@ -0,0 +1,49 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 航次库存分配分销商或者门店房间 Request VO")
+@Data
+public class VoyageStockDistributorRoomSaveReqVO {
+
+    /**
+     * 分销商ID或者门店ID
+     */
+    @Schema(description = "分销商ID或者门店ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long objectId;
+
+    /**
+     * 1分销商 2门店
+     */
+    @Schema(description = "1分销商 2门店", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer type;
+
+    /**
+     * 游轮ID
+     */
+    @Schema(description = "游轮ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long shipId;
+    /**
+     * 航次ID
+     */
+    @Schema(description = "航次ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long voyageId;
+    /**
+     * 房型ID
+     */
+    @Schema(description = "房型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long roomModelId;
+    /**
+     * 楼层号
+     */
+    @Schema(description = "楼层号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer floor;
+
+    /**
+     * 房间ID
+     */
+    @Schema(description = "房间ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long roomId;
+
+}

+ 7 - 2
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestockdistribute/VoyageStockDistributeNewDO.java

@@ -34,6 +34,11 @@ public class VoyageStockDistributeNewDO extends TenantBaseDO {
      */
     private Long objectId;
 
+    /**
+     * 1分销商 2门店
+     */
+    private Integer type;
+
     /**
      * 游轮ID
      */
@@ -52,9 +57,9 @@ public class VoyageStockDistributeNewDO extends TenantBaseDO {
     private Integer floor;
 
     /**
-     * 剩余房间数
+     * 库存
      */
-    private BigDecimal surplusNum;
+    private BigDecimal num;
 
     /**
      * 预订房间数

+ 65 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/voyagestockdistribute/VoyageStockDistributeRoomDO.java

@@ -0,0 +1,65 @@
+package com.yc.ship.module.product.dal.dataobject.voyagestockdistribute;
+
+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(value = "product_voyage_stock_distribute_room", autoResultMap = true)
+@KeySequence("product_voyage_stock_distribute_room_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class VoyageStockDistributeRoomDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 分销商ID或者门店ID
+     */
+    private Long objectId;
+
+    /**
+     * 1分销商 2门店
+     */
+    private Integer type;
+
+    /**
+     * 游轮ID
+     */
+    private Long shipId;
+    /**
+     * 航次ID
+     */
+    private Long voyageId;
+    /**
+     * 房型ID
+     */
+    private Long roomModelId;
+    /**
+     * 楼层号
+     */
+    private Integer floor;
+
+    /**
+     * 房间ID
+     */
+    private Long roomId;
+
+}

+ 24 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeNewMapper.java

@@ -0,0 +1,24 @@
+package com.yc.ship.module.product.dal.mysql.voyagestockdistribute;
+
+
+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.voyagestockdistribute.VoyageStockDistributeNewDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 航次库存分配 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface VoyageStockDistributeNewMapper extends BaseMapperX<VoyageStockDistributeNewDO> {
+
+
+    default List<VoyageStockDistributeNewDO> selectListByVoyageId(Long voyageId) {
+        return selectList(new LambdaQueryWrapperX<VoyageStockDistributeNewDO>()
+                .eq(VoyageStockDistributeNewDO::getVoyageId, voyageId));
+    }
+}

+ 29 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeRoomMapper.java

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

+ 22 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewService.java

@@ -1,11 +1,10 @@
 package com.yc.ship.module.product.service.voyagestockdistribute;
 
-import com.yc.ship.framework.common.pojo.PageResult;
-import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.*;
-import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeDO;
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewRespVO;
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewSaveReqVO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;
 import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;
 
-import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -15,5 +14,24 @@ import java.util.List;
  */
 public interface VoyageStockDistributeNewService {
 
+    /**
+     * 创建分配库存
+     * @param createReqVO
+     */
+    void createVoyageStockDistributeNew(List<VoyageStockDistributeNewSaveReqVO> createReqVO);
 
+    /**
+     * 获取航次库存分配
+     * @param voyageId
+     * @return
+     */
+    List<VoyageStockDistributeNewRespVO> getByVoyageId(Long voyageId);
+
+    /**
+     * 获取房间列表
+     * @param voyageId
+     * @param shipId
+     * @return
+     */
+    List<RoomRespDTO> getRoomList(Long voyageId, Long shipId);
 }

+ 94 - 17
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java

@@ -1,16 +1,25 @@
 package com.yc.ship.module.product.service.voyagestockdistribute;
 
-import com.yc.ship.module.ota.api.OtaDistributorApi;
-import com.yc.ship.module.otc.api.store.StoreApi;
-import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeLogMapper;
-import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper;
-import com.yc.ship.module.product.service.voyage.VoyageService;
-import com.yc.ship.module.product.service.voyagestockdetail.VoyageStockDetailService;
+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.voyagestockdistributeNew.vo.VoyageStockDistributeNewRespVO;
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributeNewSaveReqVO;
+import com.yc.ship.module.product.controller.admin.voyagestockdistributeNew.vo.VoyageStockDistributorRoomRespVO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeNewDO;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
+import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
 import com.yc.ship.module.resource.api.room.RoomApi;
+import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * 航次库存分配 Service 实现类
@@ -22,26 +31,94 @@ import javax.annotation.Resource;
 public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistributeNewService {
 
     @Resource
-    private VoyageStockDistributeMapper voyageStockDistributeMapper;
+    private VoyageStockDistributeNewMapper voyageStockDistributeNewMapper;
 
-    @Resource
-    private VoyageStockDistributeLogMapper voyageStockDistributeLogMapper;
 
     @Resource
-    private VoyageStockDetailService voyageStockDetailService;
+    private VoyageStockDistributeRoomService voyageStockDistributeRoomService;
 
     @Resource
-    private VoyageService voyageService;
+    private RoomApi roomApi;
 
-    @Resource
-    private OtaDistributorApi otaDistributorApi;
 
-    @Resource
-    private StoreApi storeApi;
 
-    @Resource
-    private RoomApi roomApi;
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void createVoyageStockDistributeNew(List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
+        BigDecimal zero = BigDecimal.ZERO;
+        Long voyageId = createReqVO.get(0).getVoyageId();
+        //删除分配的房间
+        voyageStockDistributeRoomService.deleteByVoyageId(voyageId);
+        // 分配的房间列表
+        List<VoyageStockDistributeRoomDO> roomList = new ArrayList<>();
+        createReqVO.stream().forEach(item -> {
+            if(!CollectionUtils.isAnyEmpty(item.getRoomList())) {
+                roomList.addAll(BeanUtils.toBean(item.getRoomList(), VoyageStockDistributeRoomDO.class));
+            }
+        });
+        voyageStockDistributeRoomService.createVoyageStockDistributeRoomBatch(roomList);
+        //修改或插入库存表
+        List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId);
+        if(CollectionUtils.isAnyEmpty(list)) { // 为空则新增
+            list = BeanUtils.toBean(createReqVO, VoyageStockDistributeNewDO.class);
+            list.stream().forEach(item -> {
+                item.setBookNum(zero);
+            });
+            if(!CollectionUtils.isAnyEmpty(list)) {
+                voyageStockDistributeNewMapper.insertBatch(list);
+            }
+        }else {
+            Map<String, BigDecimal> map = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
+            Map<String, VoyageStockDistributeNewSaveReqVO> mapVO = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+            List<String> existList = CollectionUtils.convertList(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+            Map<String, VoyageStockDistributeNewDO> existMap = CollectionUtils.convertMap(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+            List<VoyageStockDistributeNewDO> insertList = new ArrayList<>();// 插入数据
+            List<VoyageStockDistributeNewDO> updateList = new ArrayList<>(); //  修改数据
+            map.keySet().stream().forEach(key -> {
+                if(existList.contains(key)) { //存在,做修改
+                    VoyageStockDistributeNewDO voyageStockDistributeNewDO = existMap.get(key);
+                    voyageStockDistributeNewDO.setNum(map.get(key));
+                    voyageStockDistributeNewDO.setRoomModelNum(mapVO.get(key).getRoomModelNum());
+                    updateList.add(voyageStockDistributeNewDO);
+                }else { //不存在,做插入
+                    VoyageStockDistributeNewDO voyageStockDistributeNewDO = BeanUtils.toBean(mapVO.get(key), VoyageStockDistributeNewDO.class);
+                    insertList.add(voyageStockDistributeNewDO);
+                }
+            });
+            if(!CollectionUtils.isAnyEmpty(updateList)) {
+                voyageStockDistributeNewMapper.updateBatch(updateList);
+            }
+            if(!CollectionUtils.isAnyEmpty(insertList)) {
+                voyageStockDistributeNewMapper.insertBatch(insertList);
+            }
+        }
 
+    }
 
+    @Override
+    public List<VoyageStockDistributeNewRespVO> getByVoyageId(Long voyageId) {
+        List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId);
+        List<VoyageStockDistributeNewRespVO> respList = BeanUtils.toBean(list, VoyageStockDistributeNewRespVO.class);
+        List<VoyageStockDistributeRoomDO> roomList = voyageStockDistributeRoomService.getListByVoyageId(voyageId);
+        Map<String, List<VoyageStockDistributeRoomDO>> map = CollectionUtils.convertMultiMap(roomList, (item) -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+        respList.stream().forEach(item -> {
+            item.setRoomList(BeanUtils.toBean(map.get(item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor()),  VoyageStockDistributorRoomRespVO.class));
+        });
+        return respList;
+    }
 
+    @Override
+    public List<RoomRespDTO> getRoomList(Long voyageId, Long shipId) {
+        //获取该游轮的所有房间
+        List<RoomRespDTO> roomList = roomApi.getRoomList(shipId);
+        // 获取已被分配的房间
+        List<VoyageStockDistributeRoomDO> distributeRoomList = voyageStockDistributeRoomService.getListByVoyageId(voyageId);
+        List<Long> selectedRoomIds = CollectionUtils.convertList(distributeRoomList, VoyageStockDistributeRoomDO::getRoomId);
+        roomList.stream().forEach(item -> {
+            item.setIsSelected(selectedRoomIds.contains(item.getId()));
+            //TODO 待完善,已被销售的房间不可操作
+            item.setDisabled(false);//当前全部都可操作
+        });
+        return roomList;
+    }
 }

+ 29 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeRoomService.java

@@ -0,0 +1,29 @@
+package com.yc.ship.module.product.service.voyagestockdistribute;
+
+
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
+
+import java.util.List;
+
+/**
+ * 航次库存分配 Service 接口
+ *
+ * @author 管理员
+ */
+public interface VoyageStockDistributeRoomService {
+
+    /**
+     * 获取该航次已分配的房间
+     * @param voyageId
+     * @return
+     */
+    List<VoyageStockDistributeRoomDO> getListByVoyageId(Long voyageId);
+
+    /**
+     * 删除该航次已分配的房间
+     * @param voyageId
+     */
+    void deleteByVoyageId(Long voyageId);
+
+    void createVoyageStockDistributeRoomBatch(List<VoyageStockDistributeRoomDO> roomList);
+}

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

@@ -0,0 +1,42 @@
+package com.yc.ship.module.product.service.voyagestockdistribute;
+
+import com.yc.ship.framework.common.util.collection.CollectionUtils;
+import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeRoomDO;
+import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeRoomMapper;
+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 VoyageStockDistributeRoomServiceImpl implements VoyageStockDistributeRoomService {
+
+    @Resource
+    private VoyageStockDistributeRoomMapper voyageStockDistributeRoomMapper;
+
+
+    @Override
+    public List<VoyageStockDistributeRoomDO> getListByVoyageId(Long voyageId) {
+        return voyageStockDistributeRoomMapper.selectListByVoyageId(voyageId);
+    }
+
+    @Override
+    public void deleteByVoyageId(Long voyageId) {
+        voyageStockDistributeRoomMapper.deleteByVoyageId(voyageId);
+    }
+
+    @Override
+    public void createVoyageStockDistributeRoomBatch(List<VoyageStockDistributeRoomDO> roomList) {
+        if(CollectionUtils.isAnyEmpty()) {
+            return;
+        }
+        voyageStockDistributeRoomMapper.insertBatch(roomList);
+    }
+}

+ 9 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/room/dto/RoomRespDTO.java

@@ -5,6 +5,10 @@ import lombok.Data;
 @Data
 public class RoomRespDTO {
 
+    /**
+     * 房间ID
+     */
+    private Long id;
     /**
      * 房间号
      */
@@ -31,4 +35,9 @@ public class RoomRespDTO {
      * 是否已被选
      */
     private Boolean isSelected;
+
+    /**
+     * 已被卖出的房间不可操作
+     */
+    private Boolean disabled;
 }