|
@@ -6,9 +6,9 @@ import com.alibaba.excel.converters.longconverter.LongStringConverter;
|
|
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
|
|
import com.yc.ship.framework.common.pojo.PageResult;
|
|
import com.yc.ship.framework.common.pojo.PageResult;
|
|
|
import com.yc.ship.framework.excel.core.util.ExcelUtils;
|
|
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.dal.mysql.report.VoyageStockBoardMapper;
|
|
|
import com.yc.ship.module.trade.service.report.VoyageStockBoardService;
|
|
import com.yc.ship.module.trade.service.report.VoyageStockBoardService;
|
|
|
import com.yc.ship.module.trade.utils.excel.VoyageStockBoardExportStyleHandler;
|
|
import com.yc.ship.module.trade.utils.excel.VoyageStockBoardExportStyleHandler;
|
|
@@ -35,6 +35,9 @@ public class VoyageStockBoardServiceImpl implements VoyageStockBoardService {
|
|
|
@Resource
|
|
@Resource
|
|
|
private VoyageStockBoardMapper voyageStockBoardMapper;
|
|
private VoyageStockBoardMapper voyageStockBoardMapper;
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private ResourceRoomMapper resourceRoomMapper;
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public PageResult<VoyageStockBoardRespVO> getVoyageStockBoardPage(VoyageStockBoardReqVO pageReqVO) {
|
|
public PageResult<VoyageStockBoardRespVO> getVoyageStockBoardPage(VoyageStockBoardReqVO pageReqVO) {
|
|
|
Long voyageId = pageReqVO.getVoyageId();
|
|
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;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 填充同比环比数据
|
|
* 填充同比环比数据
|
|
|
*/
|
|
*/
|