feat(ops): 新增轨迹统计接口 summary/hourly-trend/area-stay-stats

- summary: KPI 卡片(作业时长、覆盖区域数、事件数、平均停留)
- hourly-trend: 按小时聚合出入趋势
- area-stay-stats: 区域停留分布(含 fullAreaName,按时长降序)
- deviceId 可选,不传则汇总全部设备
- selectByDateAndDevice 加 LIMIT 5000 安全上限
- 删除无调用方的 selectTimeline 方法
- enrichWithAreaInfo 改用 buildPaths 批量构建路径

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-04-05 15:26:14 +08:00
parent 368fa90156
commit 9ffaac5c91
5 changed files with 141 additions and 112 deletions

View File

@@ -126,10 +126,24 @@ public class TrajectoryController {
}
@GetMapping("/summary")
@Operation(summary = "获得设备某天的轨迹统计摘要")
@Operation(summary = "获得轨迹统计摘要KPI 卡片)")
@PreAuthorize("@ss.hasPermission('ops:trajectory:query')")
public CommonResult<TrajectorySummaryDTO> getSummary(@Valid TrajectoryTimelineReqDTO req) {
return success(trajectoryService.getSummary(req.getDeviceId(), req.getDate()));
public CommonResult<TrajectorySummaryDTO> getSummary(@Valid TrajectoryStatsReqDTO req) {
return success(trajectoryService.getSummary(req));
}
@GetMapping("/hourly-trend")
@Operation(summary = "获得时段出入趋势(按小时聚合)")
@PreAuthorize("@ss.hasPermission('ops:trajectory:query')")
public CommonResult<List<HourlyTrendDTO>> getHourlyTrend(@Valid TrajectoryStatsReqDTO req) {
return success(trajectoryService.getHourlyTrend(req));
}
@GetMapping("/area-stay-stats")
@Operation(summary = "获得区域停留分布")
@PreAuthorize("@ss.hasPermission('ops:trajectory:query')")
public CommonResult<List<AreaStayStatsDTO>> getAreaStayStats(@Valid TrajectoryStatsReqDTO req) {
return success(trajectoryService.getAreaStayStats(req));
}
// ==================== 实时位置 ====================