You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中按日期过滤查询有效行程列表的实现方案

实现方案

你之前查询不符合需求的核心原因是把用户输入的参考日期作为了findByTravelDateAfter的过滤参数,导致只返回了晚于用户输入日期的行程,按以下步骤调整即可:

1. 调整Repository查询方法(可选)

如果不需要把用户输入的参考日期作为行程过滤条件,可在现有Repository中新增以下适配未过期行程查询的方法(也可直接复用现有带TravelDateAfter后缀的方法,只需要调用时传对参数即可):

import java.sql.Date;
import java.util.List;

@Repository
public interface ProposeTravelRepository extends JpaRepository<ProposeTravel, Long> {
    // 原有方法保留
    ProposeTravel findByTravelId(Long travelId);
    List<ProposeTravel> findByUserId(Long userId);
    List<ProposeTravel> findByStartCityAndTravelDateAfterAndEndCity(String startCity, Date travelDate, String endCity);
    List<ProposeTravel> findByStartCityAndTravelDateAndEndCity(String startCity, Date travelDate, String endCity);
    List<ProposeTravel> findByStartCityAndTravelDateAfter(String startCity, Date travelDate);
    List<ProposeTravel> findByEndCityAndTravelDateAfter(String endCity, Date travelDate);
    List<ProposeTravel> findByStartCityAndEndCityAndTravelDateAfter(String startCity, String endCity, Date travelDate);

    // 新增:仅过滤未过期的所有行程
    List<ProposeTravel> findByTravelDateAfter(Date currentDate);
}

2. 业务层调用时传入当前系统日期

在Service层调用查询方法时,生成当前日期的java.sql.Date对象作为过滤参数,不需要使用用户输入的参考日期作为日期过滤条件即可:

import java.sql.Date;

// 示例业务代码
@Service
public class ProposeTravelService {
    @Autowired
    private ProposeTravelRepository proposeTravelRepository;

    public List<ProposeTravel> getValidTravelList(String startCity, String endCity) {
        // 生成当前系统日期作为未过期过滤的下限
        Date currentDate = new Date(System.currentTimeMillis());
        // 按需求选择对应的查询方法即可,以下为不同场景示例:
        // 场景1:查询所有未过期行程
        // return proposeTravelRepository.findByTravelDateAfter(currentDate);
        // 场景2:按出发城市查询未过期行程
        // return proposeTravelRepository.findByStartCityAndTravelDateAfter(startCity, currentDate);
        // 场景3:按出发+到达城市查询未过期行程
        return proposeTravelRepository.findByStartCityAndEndCityAndTravelDateAfter(startCity, endCity, currentDate);
    }
}

可选扩展:结合用户输入参考日期过滤

如果后续需求调整为需要同时满足「晚于当前日期」和「晚于用户输入参考日期」,只需要取两个日期的最大值作为过滤参数即可:

Date currentDate = new Date(System.currentTimeMillis());
Date userInputDate = // 从请求参数中获取的用户输入日期
Date filterDate = currentDate.after(userInputDate) ? currentDate : userInputDate;
List<ProposeTravel> validTravels = proposeTravelRepository.findByTravelDateAfter(filterDate);

内容的提问来源于stack exchange,提问作者Valero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:18:04