Browse Source

feat: 添加批量添加房间号功能

luofeiyun 3 weeks ago
parent
commit
38ca560f3d

+ 30 - 23
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/room/ResourceRoomController.java

@@ -1,39 +1,39 @@
 package com.yc.ship.module.resource.controller.admin.room;
 
+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.resource.controller.admin.room.vo.ResourceRoomBatchSaveReqVO;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomPageReqVO;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomRespVO;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomSaveReqVO;
+import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
 import com.yc.ship.module.resource.dal.dataobject.roommodel.ResourceRoomModelDO;
 import com.yc.ship.module.resource.dal.dataobject.ship.ResourceShipDO;
+import com.yc.ship.module.resource.service.room.ResourceRoomService;
 import com.yc.ship.module.resource.service.roommodel.ResourceRoomModelService;
 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 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.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
+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 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.apilog.core.enums.OperateTypeEnum.EXPORT;
 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.resource.controller.admin.room.vo.*;
-import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
-import com.yc.ship.module.resource.service.room.ResourceRoomService;
-
 @Tag(name = "管理后台 - 资源管理-游轮房间管理")
 @RestController
 @RequestMapping("/resource/room")
@@ -56,6 +56,13 @@ public class ResourceRoomController {
         return success(roomService.createRoom(createReqVO));
     }
 
+    @PostMapping("/createBatch")
+    @Operation(summary = "批量创建资源管理-游轮房间管理")
+    @PreAuthorize("@ss.hasPermission('resource:room:createBatch')")
+    public CommonResult<Boolean> createBatchRoom(@Valid @RequestBody ResourceRoomBatchSaveReqVO createReqVO) {
+        return success(roomService.createBatchRoom(createReqVO));
+    }
+
     @PutMapping("/update")
     @Operation(summary = "更新资源管理-游轮房间管理")
     @PreAuthorize("@ss.hasPermission('resource:room:update')")

+ 39 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/room/vo/ResourceRoomBatchSaveReqVO.java

@@ -0,0 +1,39 @@
+package com.yc.ship.module.resource.controller.admin.room.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 资源管理-游轮房间批量新增 Request VO")
+@Data
+public class ResourceRoomBatchSaveReqVO {
+
+
+
+    @Schema(description = "房间号")
+    private Integer startNum;
+
+    @Schema(description = "房型")
+    private Long roomModelId;
+
+    @Schema(description = "所属游轮", example = "2552")
+    private Long shipId;
+
+    @Schema(description = "所属楼层")
+    private Integer floors;
+
+    @Schema(description = "房间介绍")
+    private String brief;
+
+    @Schema(description = "房间数量")
+    private Integer num;
+
+    @Schema(description = "房间号长度")
+    private Integer roomNumLen;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+}

+ 12 - 4
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/room/ResourceRoomMapper.java

@@ -1,13 +1,14 @@
 package com.yc.ship.module.resource.dal.mysql.room;
 
-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.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomPageReqVO;
 import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
 import org.apache.ibatis.annotations.Mapper;
-import com.yc.ship.module.resource.controller.admin.room.vo.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 资源管理-游轮房间管理 Mapper
@@ -43,4 +44,11 @@ public interface ResourceRoomMapper extends BaseMapperX<ResourceRoomDO> {
                 .eqIfPresent(ResourceRoomDO::getShipId, shipId)
                 .inIfPresent(ResourceRoomDO::getFloors, floorList));
     }
+
+    default List<String> selectRoomNumListByShipId(Long shipId, List<String> roomNums) {
+        List<ResourceRoomDO> list = selectList(new LambdaQueryWrapperX<ResourceRoomDO>()
+                .eq(ResourceRoomDO::getShipId, shipId)
+                .inIfPresent(ResourceRoomDO::getRoomNum, roomNums));
+        return list.stream().map(ResourceRoomDO::getRoomNum).map(String::valueOf).collect(Collectors.toList());
+    }
 }

+ 60 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/helper/RoomNumberHelper.java

@@ -0,0 +1,60 @@
+package com.yc.ship.module.resource.helper;
+
+import java.util.ArrayList;
+import java.util.List; 
+
+public class RoomNumberHelper {
+
+    /**
+     * 生成带楼层号的房间号列表
+     * @param floor 楼层号(必须为单个字符)
+     * @param start 起始房间号(必须为正整数)
+     * @param count 生成数量(必须>0)
+     * @param totalLength 房间号总长度(包含楼层号,必须≥2)
+     * @return 固定长度的房间号列表,格式为:[楼层号][格式化后的数字部分]
+     * @throws IllegalArgumentException 参数非法时抛出
+     */
+    public static synchronized List<String> generate(String floor, long start, int count, int totalLength) {
+        // 参数校验
+        if (floor == null || floor.length()  != 1) {
+            throw new IllegalArgumentException("楼层号必须为单个字符");
+        }
+        if (start < 1 || count < 1 || totalLength < 2) {
+            throw new IllegalArgumentException("起始号、数量必须为正整数,总长度至少为2");
+        }
+        // 数字部分的长度
+        int numberLength = totalLength - 1;
+        // 检查数字部分是否溢出
+        long maxNumber = start + count - 1;
+        if (String.valueOf(maxNumber).length()  > numberLength) {
+            throw new IllegalArgumentException("房间号数字部分溢出: 起始号+数量超过指定长度");
+        }
+
+        List<String> roomNumbers = new ArrayList<>();
+        for (int i = 0; i < count; i++) {
+            long currentNum = start + i;
+            // 格式化数字部分(左侧补零至numberLength位)
+            String numberPart = formatNumber(currentNum, numberLength);
+            // 拼接楼层号和数字部分
+            roomNumbers.add(floor  + numberPart);
+        }
+        return roomNumbers;
+    }
+
+    /**
+     * 数字格式化补零
+     * @param number 原始数字
+     * @param length 目标长度(指数字部分的长度)
+     * @return 左侧补零后的字符串
+     */
+    private static String formatNumber(long number, int length) {
+        String numStr = String.valueOf(number); 
+        if (numStr.length()  >= length) return numStr;
+        
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length - numStr.length();  i++) {
+            sb.append('0'); 
+        }
+        return sb.append(numStr).toString(); 
+    }
+}

+ 14 - 5
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/room/ResourceRoomService.java

@@ -1,11 +1,13 @@
 package com.yc.ship.module.resource.service.room;
 
-import java.util.*;
-import javax.validation.*;
-import com.yc.ship.module.resource.controller.admin.room.vo.*;
-import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
 import com.yc.ship.framework.common.pojo.PageResult;
-import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomBatchSaveReqVO;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomPageReqVO;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomSaveReqVO;
+import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
+
+import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 资源管理-游轮房间管理 Service 接口
@@ -66,4 +68,11 @@ public interface ResourceRoomService {
      * @return
      */
     List<ResourceRoomDO> getRoomListByShipIdAndFloors(String shipId, String floors);
+
+    /**
+     * 批量新增房间
+     * @param createReqVO
+     * @return
+     */
+    Boolean createBatchRoom(ResourceRoomBatchSaveReqVO createReqVO);
 }

+ 37 - 11
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/room/ResourceRoomServiceImpl.java

@@ -1,25 +1,28 @@
 package com.yc.ship.module.resource.service.room;
 
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomBatchSaveReqVO;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomPageReqVO;
+import com.yc.ship.module.resource.controller.admin.room.vo.ResourceRoomSaveReqVO;
+import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
 import com.yc.ship.module.resource.dal.dataobject.roommodelrooms.ResourceRoomModelRoomsDO;
+import com.yc.ship.module.resource.dal.mysql.room.ResourceRoomMapper;
 import com.yc.ship.module.resource.dal.mysql.roomModelRooms.ResourceRoomModelRoomsMapper;
+import com.yc.ship.module.resource.helper.RoomNumberHelper;
 import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
-import java.util.*;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.stream.Collectors;
 
-import com.yc.ship.module.resource.controller.admin.room.vo.*;
-import com.yc.ship.module.resource.dal.dataobject.room.ResourceRoomDO;
-import com.yc.ship.framework.common.pojo.PageResult;
-import com.yc.ship.framework.common.util.object.BeanUtils;
-
-import com.yc.ship.module.resource.dal.mysql.room.ResourceRoomMapper;
-
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.yc.ship.module.resource.enums.ErrorCodeConstants.*;
+import static com.yc.ship.module.resource.enums.ErrorCodeConstants.ROOM_NOT_EXISTS;
+import static com.yc.ship.module.resource.enums.ErrorCodeConstants.ROOM_NUMS_EXISTS;
 
 /**
  * 资源管理-游轮房间管理 Service 实现类
@@ -118,4 +121,27 @@ public class ResourceRoomServiceImpl implements ResourceRoomService {
         return roomMapper.selectByShipIdAndFloors(shipId, floorList);
     }
 
+    @Override
+    public Boolean createBatchRoom(ResourceRoomBatchSaveReqVO createReqVO) {
+        Integer startNum = createReqVO.getStartNum();
+        List<String> roomNums = RoomNumberHelper.generate(createReqVO.getFloors().toString(), startNum, createReqVO.getNum(), createReqVO.getRoomNumLen());
+        //已存在的房间号
+        List<String> exitRoomNums = roomMapper.selectRoomNumListByShipId(createReqVO.getShipId(), roomNums);
+        roomNums.removeAll(exitRoomNums);
+        List<ResourceRoomDO> list = new ArrayList<>();
+        roomNums.stream().forEach(roomNum -> {
+            ResourceRoomDO room = ResourceRoomDO.builder()
+                    .roomNum(Integer.parseInt(roomNum))
+                    .roomModelId(createReqVO.getRoomModelId())
+                    .shipId(createReqVO.getShipId())
+                    .floors(createReqVO.getFloors())
+                    .brief(createReqVO.getBrief())
+                    .status(createReqVO.getStatus())
+                    .build();
+            list.add(room);
+        });
+        Boolean flag = roomMapper.insertBatch(list);
+        return flag;
+    }
+
 }