无关风月
2026-02-24 32063e565deaf03a0cc8abf1fafd146cc4e4d421
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.xiaopeng.itinerary.repository;
 
import com.xiaopeng.api.model.operation.XpGeoQueryEntity;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
 
import java.util.Date;
import java.util.List;
 
/**
 * MongoDB Repository 接口
 * 用于支持地理空间查询和其他操作
 */
public interface XpGeoQueryEntityRepository extends MongoRepository<XpGeoQueryEntity, String> {
 
    /**
     * 通过经纬度查询范围1000米内、一周内、状态>1的数据
     * @param point 中心点坐标
     * @param distance 距离范围
     * @param startTime 开始时间(一周前)
     * @param status 状态阈值
     * @return 符合条件的实体列表
     */
    @Query("{ 'location' : { '$nearSphere' : ?0, '$maxDistance' : ?1 }, 'timestamp' : { '$gte' : ?2 } }")
    List<XpGeoQueryEntity> findByLocationNearAndTimestampAfterAndStatusGreaterThan(
            Point point,
            Distance distance,
            Date startTime,
            Integer status
    );
 
    /**
     * 通过经纬度查询范围500米内、一周内、指定时段、状态>1的数据
     * @param point 中心点坐标
     * @param distance 距离范围
     * @param startTime 开始时间(一周前)
     * @param time 时段(格式:HH-HH)
     * @param status 状态阈值
     * @return 符合条件的实体列表
     */
    @Query("{ 'location' : { '$nearSphere' : ?0, '$maxDistance' : ?1 }, 'timestamp' : { '$gte' : ?2 }, 'time' : ?3 }")
    List<XpGeoQueryEntity> findByLocationNearAndTimestampAfterAndTimeAndStatusGreaterThan(
            Point point,
            Integer distance,
            Date startTime,
            String time,
            Integer status
    );
 
    /**
     * 通过时间范围和状态查询数据
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param status 状态阈值
     * @return 符合条件的实体列表
     */
    List<XpGeoQueryEntity> findByTimestampBetweenAndStatusGreaterThan(
            Date startTime,
            Date endTime,
            Integer status
    );
}