42 lines
1.6 KiB
Markdown
42 lines
1.6 KiB
Markdown
# Phase 20 Completion Report
|
||||
|
|
|
|||
|
|
## Status
|
|||
|
|
✅ Completed
|
|||
|
|
|
|||
|
|
## Implemented
|
|||
|
|
|
|||
|
|
### P20-T01 ~ P20-T08: Analytics 分析
|
|||
|
|
- [x] `AnalyticsService` — Dashboard / 用户漏斗 / Match漏斗 / 每日汇总 / 安全统计
|
|||
|
|
- [x] `AnalyticsController` — 5个API端点(含日期范围参数)
|
|||
|
|
- [x] 新增API:/operator/analytics/user-funnel, /match-funnel, /daily-summary, /safety
|
|||
|
|
- [x] LambdaQueryWrapper 正确引用 Match.matchedAt, Conversation.createdAt, Report.createdAt
|
|||
|
|
|
|||
|
|
### Admin Web 页面
|
|||
|
|
- [x] A20 数据分析页 — 用户漏斗(4阶段)+ Match漏斗(6阶段)+ 安全卡片 + 每日汇总表
|
|||
|
|
- [x] 路由注册:/analytics
|
|||
|
|
|
|||
|
|
## Core Invariants 已保护
|
|||
|
|
- ✅ **漏斗各阶段转化率可计算** — 每个阶段计算转化率百分比
|
|||
|
|
- ✅ **每日汇总包含所有关键指标** — 新增用户/Match/聊天/举报
|
|||
|
|
- ✅ **数据范围可配置** — since/until 日期参数控制时间窗口
|
|||
|
|
- ✅ **男女比例/年龄分布有效** — 从 UserProfile 聚合计算
|
|||
|
|
|
|||
|
|
## API 端点(5个)
|
|||
|
|
GET /operator/analytics/dashboard(工作台统计)
|
|||
|
|
GET /operator/analytics/user-funnel?since=&until=(用户漏斗)
|
|||
|
|
GET /operator/analytics/match-funnel?since=&until=(Match漏斗)
|
|||
|
|
GET /operator/analytics/daily-summary?days=30(每日汇总)
|
|||
|
|
GET /operator/analytics/safety(安全统计)
|
|||
|
|
|
|||
|
|
## Tests
|
|||
|
|
- `AnalyticsServiceTest`: 5 个不变量用例
|
|||
|
|
|
|||
|
|
## Project Stats
|
|||
|
|
- Java files: 195(未增加,复用已有)
|
|||
|
|
- Test classes: 31 (+1)
|
|||
|
|
- Migration SQL: 13
|
|||
|
|
- Admin Web 模块: 10
|
|||
|
|
|
|||
|
|
## Next Phase
|
|||
|
|
Phase 21: 账号生命周期(注销/退出服务/数据脱敏)
|