浏览代码

feat: 添加下单时可以选择的房间号列表接口

luofeiyun 4 周之前
父节点
当前提交
41728b69a9

+ 7 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/VoyageStockDistributeController.java

@@ -108,6 +108,13 @@ public class VoyageStockDistributeController {
         return success(list);
     }
 
+    @GetMapping("/getCanSelectRoomList")
+    @Operation(summary = "获得可以选择的房间号")
+    public CommonResult<List<RoomRespDTO>> getCanSelectRoomList(@RequestBody QueryCanSelectRoomListReqVO reqVO) {
+        List<RoomRespDTO> list = voyageStockDistributeService.getCanSelectRoomList(reqVO);
+        return success(list);
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出航次库存分配 Excel")
     @PreAuthorize("@ss.hasPermission('product:voyage-stock-distribute:export')")

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

@@ -0,0 +1,24 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo;
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "查询可分配房间列表请求参数")
+@Data
+public class QueryCanSelectRoomListReqVO {
+    @Schema(description = "航次ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long voyageId;
+    @Schema(description = "分销商类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer distributorType;
+    @Schema(description = "分销商ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long distributorId;
+    @Schema(description = "门店ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long storeId;
+    @Schema(description = "房型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private List<Long> roomModelIds;
+    @Schema(description = "楼层号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private List<Integer> floors;
+}

+ 7 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributeTotalRespVO.java

@@ -2,6 +2,8 @@ package com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo;
 
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -45,6 +47,11 @@ public class VoyageStockDistributeTotalRespVO {
       @Schema(description = "已分配房型房间总数")
       private Integer roomModelNum;
 
+      @ExcelProperty("已分配房间号")
+      @Schema(description = "已分配房间号", example = "1,2,3")
+      @TableField(typeHandler = JacksonTypeHandler.class)
+      List<Integer> roomNums;
+
    }
 
    @Data

+ 11 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeMapper.java

@@ -36,7 +36,7 @@ public interface VoyageStockDistributeMapper extends BaseMapperX<VoyageStockDist
                 .eq(VoyageStockDistributeDO::getVoyageId, voyageId));
     }
 
-    @Select("select distributor_type,distributor_id,store_id,sum(num) num,sum(room_model_num) room_model_num from product_voyage_stock_distribute where voyage_id = #{voyageId} and deleted = 0 GROUP BY distributor_type,distributor_id,store_id")
+    @Select("select distributor_type,distributor_id,store_id,sum(num) num,sum(room_model_num) room_model_num, room_nums from product_voyage_stock_distribute where voyage_id = #{voyageId} and deleted = 0 GROUP BY distributor_type,distributor_id,store_id")
     List<VoyageStockDistributeTotalRespVO.TotalGroupByDistributorVO> selectListGroupByDistributor(Long voyageId);
 
     @Select("select room_model_id,floor,sum(num) num from product_voyage_stock_distribute where voyage_id = #{voyageId} and deleted = 0 and distributor_id is null and store_id is null GROUP BY room_model_id,floor")
@@ -46,4 +46,14 @@ public interface VoyageStockDistributeMapper extends BaseMapperX<VoyageStockDist
         delete(new LambdaQueryWrapperX<VoyageStockDistributeDO>()
                 .eq(VoyageStockDistributeDO::getVoyageId, getVoyageId));
     }
+
+    default List<VoyageStockDistributeDO> selectList(QueryCanSelectRoomListReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<VoyageStockDistributeDO>()
+                .eqIfPresent(VoyageStockDistributeDO::getDistributorId, reqVO.getDistributorId())
+                .eqIfPresent(VoyageStockDistributeDO::getStoreId, reqVO.getStoreId())
+                .eqIfPresent(VoyageStockDistributeDO::getVoyageId, reqVO.getVoyageId())
+                .inIfPresent(VoyageStockDistributeDO::getRoomModelId, reqVO.getRoomModelIds())
+                .inIfPresent(VoyageStockDistributeDO::getFloor, reqVO.getFloors())
+        );
+    }
 }

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

@@ -73,4 +73,11 @@ public interface VoyageStockDistributeService {
      * @return
      */
     List<RoomRespDTO> getRoomList(Long voyageId);
+
+    /**
+     * 获取可以选择的房间号
+     * @param reqVO
+     * @return
+     */
+    List<RoomRespDTO> getCanSelectRoomList(QueryCanSelectRoomListReqVO reqVO);
 }

+ 34 - 3
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeServiceImpl.java

@@ -8,6 +8,7 @@ import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
 import com.yc.ship.module.ota.enums.DistributorTypeEnum;
 import com.yc.ship.module.otc.api.store.StoreApi;
 import com.yc.ship.module.otc.api.store.dto.StoreInfoRespDTO;
+import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.QueryCanSelectRoomListReqVO;
 import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.VoyageStockDistributePageReqVO;
 import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.VoyageStockDistributeSaveReqVO;
 import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.VoyageStockDistributeTotalRespVO;
@@ -84,7 +85,7 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
             list.stream().forEach(item -> {
                 item.setBookNum(0);
                 item.setSurplusNum(item.getNum());
-                item.setRoomModelNum(item.getNum());
+                item.setRoomModelNum(item.getRoomModelNum());
             });
             voyageStockDistributeMapper.insertBatch(list);
         }else { //不为空则修改库存
@@ -101,6 +102,13 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
                         + "_" + item.getRoomModelId() + "_" + item.getFloor();
             }, item -> item.getRoomModelNum());
 
+            Map<String, List<Integer>> roomNumsMap = CollectionUtils.convertMap(createReqVO, item -> {
+                //key为航次ID_分销商类型_分销商ID_门店ID_房型ID_楼层号作为唯一
+                return item.getVoyageId() + "_" + item.getDistributorType()
+                        + "_" + item.getDistributorId() + "_" + item.getStoreId()
+                        + "_" + item.getRoomModelId() + "_" + item.getFloor();
+            }, item -> item.getRoomNums());
+
 
             list.stream().forEach(item -> {
                 String key = item.getVoyageId() + "_" + item.getDistributorType()
@@ -108,7 +116,8 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
                         + "_" + item.getRoomModelId() + "_" + item.getFloor();
                 item.setNum(item.getNum()+roomNumMap.get(key));
                 item.setSurplusNum(item.getSurplusNum()+roomNumMap.get(key));
-                item.setRoomModelNum(item.getRoomModelNum()+roomModelNumMap.get(key));
+                item.setRoomModelNum(roomModelNumMap.get(key));
+                item.setRoomNums(roomNumsMap.get(key));
             });
             voyageStockDistributeMapper.updateBatch(list);
 
@@ -129,7 +138,7 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
                 addList.stream().forEach(item -> {
                     item.setBookNum(0);
                     item.setSurplusNum(item.getNum());
-                    item.setRoomModelNum(item.getNum());
+                    item.setRoomModelNum(item.getRoomModelNum());
                 });
                 voyageStockDistributeMapper.insertBatch(addList);
             }
@@ -291,4 +300,26 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
         return roomList;
     }
 
+    @Override
+    public List<RoomRespDTO> getCanSelectRoomList(QueryCanSelectRoomListReqVO reqVO) {
+        Long voyageId = reqVO.getVoyageId();
+        VoyageDO voyage = voyageService.getVoyage(voyageId);
+        if(voyage == null) {
+            throw exception(ErrorCodeConstants.VOYAGE_NOT_EXISTS);
+        }
+        List<RoomRespDTO> roomList = roomApi.getRoomList(voyage.getShipId());
+        List<VoyageStockDistributeDO> list = voyageStockDistributeMapper.selectList(reqVO);
+        List<Integer> canSelectList = list.stream().flatMap(list1 -> {
+            List<Integer> roomNums = list1.getRoomNums();
+            if(roomNums != null) {
+                return roomNums.stream();
+            }
+            return new ArrayList<Integer>().stream();
+        }).collect(Collectors.toList());
+        List<RoomRespDTO> result = roomList.stream().filter(room -> canSelectList.contains(room.getRoomNum())).collect(Collectors.toList());
+        //TODO:还要去掉订单中已被选择的房间号
+        return result;
+    }
+
+
 }