From 5132051605f26e11e320cd5359ec9dda2e88eb46 Mon Sep 17 00:00:00 2001 From: khalil Date: Wed, 23 Jul 2025 20:44:53 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5-=E5=9B=BD=E5=AE=B6=E5=88=97?= =?UTF-8?q?=E8=A1=A8-=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../room/RoomTabRegionAdminService.java | 2 +- .../homeV2/sort/HomeRoomSortService.java | 55 +++++++++++++++++-- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/room/RoomTabRegionAdminService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/room/RoomTabRegionAdminService.java index 94c970933..233e946be 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/room/RoomTabRegionAdminService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/room/RoomTabRegionAdminService.java @@ -69,7 +69,7 @@ public class RoomTabRegionAdminService { return Collections.emptyList(); } - List homeRoomList = sortService.sort(roomUidSet, partitionId, roomTab); + List homeRoomList = sortService.roomTabRegionSort(roomUidSet, partitionId, roomTab, true); return homeV2Service.decorator(homeRoomList, partitionId); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/homeV2/sort/HomeRoomSortService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/homeV2/sort/HomeRoomSortService.java index 551fe2a5e..82fbe20c7 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/homeV2/sort/HomeRoomSortService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/homeV2/sort/HomeRoomSortService.java @@ -1,18 +1,18 @@ package com.accompany.business.service.homeV2.sort; import com.accompany.business.model.roomtab.RoomTab; +import com.accompany.business.model.roomtab.RoomTabHome; import com.accompany.business.model.roomtab.RoomTabMap; +import com.accompany.business.service.roomtab.RoomTabHomeService; import com.accompany.business.service.roomtab.RoomTabMapService; import com.accompany.business.vo.home.HomeRoomVo; +import com.accompany.core.base.SpringContextHolder; import jodd.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @Service @@ -35,7 +35,7 @@ public class HomeRoomSortService { } if (roomTab.getHomeRegionId() > 0){ - return decorateSortValue(roomUidSet, partitionId, roomTab.getHomeRegionId()); + return roomTabRegionSort(roomUidSet, partitionId, roomTab, false); } return roomTab.getIsHomeRecommend()? @@ -43,6 +43,51 @@ public class HomeRoomSortService { sort(roomUidSet, partitionId, HomeRoomSorterEnum.Newest.name()); } + public List roomTabRegionSort(Collection roomUidList, Integer partitionId, RoomTab roomTab, boolean isShow) { + List homeSpecialList = roomTabMapService.lambdaQuery() + .in(RoomTabMap::getRoomUid, roomUidList) + .eq(RoomTabMap::getTabId, roomTab.getId()) + .list(); + + if (!isShow){ + for (RoomTabMap special: homeSpecialList) { + if (Boolean.FALSE.equals(special.getIsHome())){ + roomUidList.remove(special.getRoomUid()); + } + } + } + + List baseSortList = decorateSortValue(roomUidList, partitionId, roomTab.getHomeRegionId()); + + Date now = new Date(); + Map specialSortMap = homeSpecialList.stream() + .filter(roomTabHome -> Boolean.TRUE.equals(roomTabHome.getIsHome())) + .filter(roomTabHome -> Boolean.TRUE.equals(roomTabHome.getIsTop())) + .filter(roomTabHome -> now.compareTo(roomTabHome.getTopStart()) >= 0 && now.compareTo(roomTabHome.getTopEnd()) <= 0) + .collect(Collectors.toMap(RoomTabMap::getRoomUid, roomTabHome -> roomTabHome)); + if (CollectionUtils.isEmpty(specialSortMap)){ + return baseSortList; + } + + List needInsertList = baseSortList.stream() + .filter(homeRoomVo -> specialSortMap.containsKey(homeRoomVo.getUid())) + .sorted(Comparator.comparing(homeRoomVo-> specialSortMap.get(homeRoomVo.getUid()).getSeq())) + .toList(); + // 先退出,后插入置顶位置 + baseSortList.removeAll(needInsertList); + for (HomeRoomVo needInsert: needInsertList) { + RoomTabMap specialConfig = specialSortMap.get(needInsert.getUid()); + if (null == specialConfig){ + continue; + } + + // 防负数 + int index = Math.min(baseSortList.size(), Math.abs(specialConfig.getSeq() - 1)); + baseSortList.add(index, needInsert); + } + return baseSortList; + } + private List roomTabSort(Collection roomUidSet, Integer partitionId, Long tabId) { Date now = new Date(); List roomTabSort = roomTabMapService.lambdaQuery()