fix:修复分页查询,因缓存确实导致无法查到行程规划单的问题

This commit is contained in:
lulz1 2024-07-09 13:47:22 +08:00
parent 64ea271e4b
commit b7e1734ec7
1 changed files with 15 additions and 2 deletions

View File

@ -41,7 +41,7 @@ public class RouteCacheService {
.orElse(List.of()) .orElse(List.of())
.stream().filter(Objects::nonNull).toList(); .stream().filter(Objects::nonNull).toList();
if (!routeIdsByEmployeeNo.isEmpty()) { if (!routeIdsByEmployeeNo.isEmpty()) {
return routeCacheManage.getRouteListByIds(routeIdsByEmployeeNo); return queryByIdIn(routeIdsByEmployeeNo);
} }
log.info("开始缓存用户行程规划单"); log.info("开始缓存用户行程规划单");
List<RouteOrder> routeOrders = jdbcRouteRepository.findByUserIdOrApproveOrderNo_Creator(employeeNo, employeeNo); List<RouteOrder> routeOrders = jdbcRouteRepository.findByUserIdOrApproveOrderNo_Creator(employeeNo, employeeNo);
@ -215,9 +215,22 @@ public class RouteCacheService {
public List<RouteOrder> queryByIdIn(List<Long> routeIds) { public List<RouteOrder> queryByIdIn(List<Long> routeIds) {
if (routeIds != null && !routeIds.isEmpty()) { if (routeIds != null && !routeIds.isEmpty()) {
return routeCacheManage.getRouteListByIds(routeIds); List<RouteOrder> inCacheRouteOrder = routeCacheManage.getRouteListByIds(routeIds);
List<Long> inCacheRouteIds = inCacheRouteOrder.stream().filter(Objects::nonNull)
.map(RouteOrder::getRouteId).toList();
List<Long> notInCacheRouteIds = routeIds.stream().filter(it -> !inCacheRouteIds.contains(it))
.toList();
List<RouteOrder> byRouteIdIn = jdbcRouteRepository.findByRouteIdIn(notInCacheRouteIds);
CompletableFuture.runAsync(() -> byRouteIdIn.forEach(this::updateRouteCache));
inCacheRouteOrder.addAll(byRouteIdIn);
return inCacheRouteOrder;
} else { } else {
return List.of(); return List.of();
} }
} }
private void updateRouteCache(RouteOrder routeOrder) {
routeCacheManage.invalidateRouteCache(routeOrder.getRouteId());
routeCacheManage.cacheRouteOrder(routeOrder);
}
} }