Переглянути джерело

Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server

jincheng 10 годин тому
батько
коміт
61ad4167a9

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

@@ -9,6 +9,8 @@ public class RoomModelFloorNumDTO {
 
     private String roomModelName;
 
+    private String shortName;
+
     private Integer floor;
 
     private Integer num;

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

@@ -56,7 +56,7 @@ public interface ResourceRoomMapper extends BaseMapperX<ResourceRoomDO> {
         return list.stream().map(ResourceRoomDO::getRoomNum).map(String::valueOf).collect(Collectors.toList());
     }
 
-    @Select("select t1.room_model_id as roomModelId, t1.floors as floor, count(t1.id) as num, t2.name as room_model_name from resource_room t1 left JOIN resource_room_model t2 on t1.room_model_id = t2.id where t1.ship_id = #{shipId} and t2.can_sale = 1 and t1.deleted = 0 and t2.deleted = 0 group by t1.room_model_id, t1.floors")
+    @Select("select t1.room_model_id as roomModelId, t1.floors as floor, count(t1.id) as num, t2.name as room_model_name,t2.short_name as  shortName from resource_room t1 left JOIN resource_room_model t2 on t1.room_model_id = t2.id where t1.ship_id = #{shipId} and t2.can_sale = 1 and t1.deleted = 0 and t2.deleted = 0 group by t1.room_model_id, t1.floors ORDER BY t2.id ASC,t1.floors ASC")
     List<RoomModelFloorNumDTO> selectRoomModelFloorToNum(Long shipId);
 
     List<ResourceRoomDO> selectRoomListByRoomModelIdAndFloor(@Param("shipId") Long shipId, @Param("roomModelIdFloorList") List<String> roomModelIdFloorList);

+ 30 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/KanbanBoardController.java

@@ -3,8 +3,7 @@ package com.yc.ship.module.trade.controller.admin.report;
 import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
 import com.yc.ship.framework.common.pojo.CommonResult;
 import com.yc.ship.framework.common.pojo.PageResult;
-import com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardReqVO;
-import com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardRespVO;
+import com.yc.ship.module.trade.controller.admin.report.vo.*;
 import com.yc.ship.module.trade.service.report.VoyageStockBoardService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -18,6 +17,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
+import java.util.List;
 
 import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static com.yc.ship.framework.common.pojo.CommonResult.success;
@@ -63,4 +63,32 @@ public class KanbanBoardController {
         voyageStockBoardService.exportVoyageStockBoardExcel(pageReqVO, response);
     }
 
+
+    /**
+     * 查询全航次库存看板表头信息
+     *
+     * @param reqVO 查询条件
+     * @return
+     */
+    @GetMapping("/allVoyageStockBoard/tableHead")
+    @Operation(summary = "查询全航次库存看板表头信息")
+    public CommonResult<List<AllVoyageStockBoardTableHeadRespVO>> getAllVoyageStockBoardTableHead(@Valid AllVoyageStockBoardReqVO reqVO) {
+        List<AllVoyageStockBoardTableHeadRespVO> list = voyageStockBoardService.getAllVoyageStockBoardTableHead(reqVO);
+        return success(list);
+    }
+
+
+    /**
+     * 查询全航次库存看板分页信息
+     *
+     * @param reqVO 分页查询条件
+     * @return 分页结果
+     */
+    @GetMapping("/allVoyageStockBoard/page")
+    @Operation(summary = "查询全航次库存看板分页信息")
+    public CommonResult<PageResult<AllVoyageStockBoardRespVO>> getAllVoyageStockBoardPage(@Valid AllVoyageStockBoardReqVO reqVO) {
+        PageResult<AllVoyageStockBoardRespVO> page = voyageStockBoardService.getAllVoyageStockBoardPage(reqVO);
+        return success(page);
+    }
+
 }

+ 28 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/vo/AllVoyageStockBoardReqVO.java

@@ -0,0 +1,28 @@
+package com.yc.ship.module.trade.controller.admin.report.vo;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 全航次库存看板 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class AllVoyageStockBoardReqVO extends PageParam {
+    @Schema(description = "游轮ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "游轮ID不能为空")
+    private Long shipId;
+
+    @Schema(description = "航线", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long routeId;
+
+    @Schema(description = "航次ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Long voyageId;
+
+    @Schema(description = "航次时间")
+    private String[] voyageTime;
+}

+ 32 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/vo/AllVoyageStockBoardRespVO.java

@@ -0,0 +1,32 @@
+package com.yc.ship.module.trade.controller.admin.report.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+@Schema(description = "管理后台 - 全航次库存看板分页 Response VO")
+@Data
+public class AllVoyageStockBoardRespVO {
+    @Schema(description = "航次")
+    private String voyage;
+
+    @Schema(description = "倒计时(天)")
+    private Integer countDown;
+
+    @Schema(description = "实团计划")
+    private BigDecimal realGroupTotal;
+
+    @Schema(description = "占位计划")
+    private BigDecimal occupyTotal;
+
+    @Schema(description = "切位计划")
+    private BigDecimal switchTotal;
+
+    @Schema(description = "总计划")
+    private BigDecimal totalPlanSum;
+
+    @Schema(description = "动态房型数据,key格式: {floorKey}_confirmed 或 {floorKey}_virtual")
+    private Map<String, BigDecimal> roomData;
+}

+ 38 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/vo/AllVoyageStockBoardTableHeadRespVO.java

@@ -0,0 +1,38 @@
+package com.yc.ship.module.trade.controller.admin.report.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - 全航次库存看板表头 Response VO")
+@Data
+public class AllVoyageStockBoardTableHeadRespVO {
+    @Schema(description = "房型键值")
+    private String key;
+
+    @Schema(description = "房型标签")
+    private String label;
+
+    @Schema(description = "房间总数")
+    private Integer sumRooms;
+
+    @Schema(description = "楼层列表")
+    private List<FloorInfo> floors;
+
+    @Schema(description = "楼层信息")
+    @Data
+    public static class FloorInfo {
+        @Schema(description = "楼层键值")
+        private String key;
+
+        @Schema(description = "楼层名称")
+        private String name;
+
+        @Schema(description = "楼层号")
+        private Integer floors;
+
+        @Schema(description = "该楼层房间总数")
+        private Integer totalRooms;
+    }
+}

+ 16 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/report/VoyageStockBoardService.java

@@ -1,11 +1,12 @@
 package com.yc.ship.module.trade.service.report;
 
 import com.yc.ship.framework.common.pojo.PageResult;
-import com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardReqVO;
-import com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardRespVO;
+import com.yc.ship.module.trade.controller.admin.report.vo.*;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 import java.io.IOException;
+import java.util.List;
 
 /**
  * 航次库存看板 Service 接口
@@ -29,4 +30,17 @@ public interface VoyageStockBoardService {
      */
     void exportVoyageStockBoardExcel(VoyageStockBoardReqVO pageReqVO, HttpServletResponse response) throws IOException;
 
+    /**
+     * 查询全航次库存看板表头信息
+     * @param reqVO
+     * @return
+     */
+    List<AllVoyageStockBoardTableHeadRespVO> getAllVoyageStockBoardTableHead(@Valid AllVoyageStockBoardReqVO reqVO);
+
+    /**
+     * 查询全航次库存看板分页信息
+     * @param reqVO
+     * @return
+     */
+    PageResult<AllVoyageStockBoardRespVO> getAllVoyageStockBoardPage(@Valid AllVoyageStockBoardReqVO reqVO);
 }

+ 106 - 3
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/report/impl/VoyageStockBoardServiceImpl.java

@@ -6,9 +6,9 @@ import com.alibaba.excel.converters.longconverter.LongStringConverter;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.excel.core.util.ExcelUtils;
-import com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardItemVO;
-import com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardReqVO;
-import com.yc.ship.module.trade.controller.admin.report.vo.VoyageStockBoardRespVO;
+import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
+import com.yc.ship.module.resource.dal.mysql.room.ResourceRoomMapper;
+import com.yc.ship.module.trade.controller.admin.report.vo.*;
 import com.yc.ship.module.trade.dal.mysql.report.VoyageStockBoardMapper;
 import com.yc.ship.module.trade.service.report.VoyageStockBoardService;
 import com.yc.ship.module.trade.utils.excel.VoyageStockBoardExportStyleHandler;
@@ -35,6 +35,9 @@ public class VoyageStockBoardServiceImpl implements VoyageStockBoardService {
     @Resource
     private VoyageStockBoardMapper voyageStockBoardMapper;
 
+    @Resource
+    private ResourceRoomMapper resourceRoomMapper;
+
     @Override
     public PageResult<VoyageStockBoardRespVO> getVoyageStockBoardPage(VoyageStockBoardReqVO pageReqVO) {
         Long voyageId = pageReqVO.getVoyageId();
@@ -110,6 +113,106 @@ public class VoyageStockBoardServiceImpl implements VoyageStockBoardService {
 
     }
 
+    @Override
+    public List<AllVoyageStockBoardTableHeadRespVO> getAllVoyageStockBoardTableHead(AllVoyageStockBoardReqVO reqVO) {
+        List<RoomModelFloorNumDTO> roomModelFloorNumList = resourceRoomMapper.selectRoomModelFloorToNum(reqVO.getShipId());
+        if (CollUtil.isEmpty(roomModelFloorNumList)) {
+            return Collections.emptyList();
+        }
+        List<AllVoyageStockBoardTableHeadRespVO> result = new ArrayList<>();
+
+
+        // 记录已处理的房型ID
+        Set<Long> processedRoomModelIds = new HashSet<>();
+
+        // 按数据库返回顺序处理
+        for (RoomModelFloorNumDTO item : roomModelFloorNumList) {
+            Long roomModelId = item.getRoomModelId();
+
+            // 如果已经处理过,跳过
+            if (processedRoomModelIds.contains(roomModelId)) {
+                continue;
+            }
+            String roomModelName = item.getRoomModelName();
+            // 判断是否是家庭套房或家庭套房PRO
+            if (roomModelName != null && roomModelName.contains("家庭套房")) {
+                // 如果是家庭套房,合并处理
+                AllVoyageStockBoardTableHeadRespVO familyVO = new AllVoyageStockBoardTableHeadRespVO();
+                familyVO.setKey("family");
+                familyVO.setLabel("家庭套房");
+
+                // 筛选出所有家庭套房相关的楼层数据(包括家庭套房和家庭套房PRO等)
+                List<RoomModelFloorNumDTO> familyFloors = roomModelFloorNumList.stream()
+                        .filter(r -> r.getRoomModelName() != null && r.getRoomModelName().contains("家庭套房"))
+                        .collect(Collectors.toList());
+
+                // 计算总房间数
+                int sumRooms = familyFloors.stream()
+                        .mapToInt(r -> r.getNum() != null ? r.getNum() : 0)
+                        .sum();
+                familyVO.setSumRooms(sumRooms);
+
+                // 构建楼层列表
+                List<AllVoyageStockBoardTableHeadRespVO.FloorInfo> floorInfoList = new ArrayList<>();
+                for (RoomModelFloorNumDTO floorItem : familyFloors) {
+                    AllVoyageStockBoardTableHeadRespVO.FloorInfo floorInfo = new AllVoyageStockBoardTableHeadRespVO.FloorInfo();
+                    // 根据房型名称生成key:家庭套房 -> family, 家庭套房PRO -> family_pro
+                    String floorKey = floorItem.getRoomModelName().contains("PRO") ? "family_pro" : "family";
+                    floorInfo.setKey(floorKey + "_" + floorItem.getFloor() + "f");
+                    floorInfo.setName(floorItem.getRoomModelName());
+                    floorInfo.setFloors(floorItem.getFloor());
+                    floorInfo.setTotalRooms(floorItem.getNum());
+                    floorInfoList.add(floorInfo);
+                }
+
+                familyVO.setFloors(floorInfoList);
+                result.add(familyVO);
+
+                // 标记所有家庭套房相关的房型都已处理
+                familyFloors.forEach(f -> processedRoomModelIds.add(f.getRoomModelId()));
+            } else {
+                // 普通房型处理
+                AllVoyageStockBoardTableHeadRespVO tableHeadVO = new AllVoyageStockBoardTableHeadRespVO();
+
+                // 筛选出该房型的所有楼层
+                List<RoomModelFloorNumDTO> roomFloors = roomModelFloorNumList.stream()
+                        .filter(r -> roomModelId.equals(r.getRoomModelId()))
+                        .collect(Collectors.toList());
+
+                RoomModelFloorNumDTO firstItem = roomFloors.get(0);
+                tableHeadVO.setKey("room_" + firstItem.getRoomModelId());
+                tableHeadVO.setLabel(firstItem.getShortName());
+
+                int sumRooms = roomFloors.stream()
+                        .mapToInt(r -> r.getNum() != null ? r.getNum() : 0)
+                        .sum();
+                tableHeadVO.setSumRooms(sumRooms);
+
+                List<AllVoyageStockBoardTableHeadRespVO.FloorInfo> floorInfoList = new ArrayList<>();
+                for (RoomModelFloorNumDTO floorItem : roomFloors) {
+                    AllVoyageStockBoardTableHeadRespVO.FloorInfo floorInfo = new AllVoyageStockBoardTableHeadRespVO.FloorInfo();
+                    floorInfo.setKey("room_" + floorItem.getRoomModelId() + "_" + floorItem.getFloor() + "f");
+                    floorInfo.setName(floorItem.getRoomModelName());
+                    floorInfo.setFloors(floorItem.getFloor());
+                    floorInfo.setTotalRooms(floorItem.getNum());
+                    floorInfoList.add(floorInfo);
+                }
+
+                tableHeadVO.setFloors(floorInfoList);
+                result.add(tableHeadVO);
+
+                processedRoomModelIds.add(roomModelId);
+            }
+        }
+
+        return result;
+    }
+
+    @Override
+    public PageResult<AllVoyageStockBoardRespVO> getAllVoyageStockBoardPage(AllVoyageStockBoardReqVO reqVO) {
+        return null;
+    }
+
     /**
      * 填充同比环比数据
      */