# Phase 17 Completion Report ## Status ✅ Completed ## Implemented ### P17-T01 ~ P17-T10: 举报 + 风控核心 - [x] V012 迁移:`reports` + `risk_events` + `risk_actions` 三张表 - [x] `Report` / `RiskEvent` / `RiskAction` 实体 + Mapper(8个查询方法) - [x] `ReportService` — 提交举报/获取列表/处理举报/风险画像 - [x] `ReportController` — 用户端2个端点 - [x] `ReportOperatorController` — 管理端5个端点 - [x] Constants 新增:举报原因/状态/风险动作/风险等级 常量 ### Miniapp 页面 - [x] U26 举报页 — 9种举报原因 + 补充说明 + 截图证据 - [x] 我的举报页 — 举报记录列表 + 状态标签 ### Admin Web - [x] A15 举报中心 — 统计卡片 + 待处理列表 + 按优先级排序 - [x] A16 举报详情抽屉 — 被举报人风险画像 + 处置操作表单 - [x] 路由注册:/risk/reports ## Core Invariants 已保护 - ✅ **关键词命中 ≠ 直接处罚** — 仅创建风险事件+提示,不自动封禁 - ✅ **风险评分不自动定罪** — 仅用于排序发现和人工审核 - ✅ **封禁需人工复核** — 永久封禁不走自动流程 - ✅ **举报不成立 ≠ 诈骗** — 不处罚举报人 - ✅ **RiskLevel与AccountStatus分离** — 风险等级高不代表直接封号 - ✅ **诈骗/冒充优先处理** — 按 reason_type 优先级排序 ## API 端点(7个) POST /risk/reports(提交举报) GET /risk/reports/my(我的举报) GET /operator/risk/reports/pending(待处理列表) GET /operator/risk/reports/{id}(详情+风险画像) POST /operator/risk/reports/{id}/process(处理举报) GET /operator/risk/reports/stats(统计) GET /operator/risk/users/{userId}(用户风险画像) ## Migration V012__add_risk_and_report_tables.sql ## Tests - `ReportServiceTest`: 7 个不变量用例 ## Project Stats - Java files: 176 (+12 from Phase 16) - Test classes: 29 (+1) - Migration SQL: 12 ## Next Phase Phase 18: 申诉(appeal提交/审核/Feature Flag控制) EOF echo "Done"