# Phase 21 Completion Report ## Status ✅ Completed ## Implemented ### P21-T01 ~ P21-T08: 账号生命周期 - [x] V014 迁移:`consent_records` + `user_privacy_settings` 表 - [x] `ConsentRecord` 实体 + `ConsentRecordMapper` - [x] `AccountLifecycleService` — 退出婚恋服务/重新开启/注销前检查/执行注销/撤回同意/隐私设置 - [x] `AccountController` — 用户端6个端点 - [x] `AccountOperatorController` — 管理端2个端点(强制注销/检查) - [x] Constants 已有:RELATIONSHIP_STATUS_SERVICE_EXITED / ACCOUNT_STATUS_CLOSED ### Miniapp 页面(+3 页面) - [x] U41 我的婚恋状态 — 展示状态 + 退出/重新开启 + 跳转成功确认/隐私/注销 - [x] 注销账号页 — 注销前说明(7项后果)+ 原因选择 + 在线便捷完成 - [x] U43 隐私设置 — 推荐可见/活动邀请/显示上线时间 三个开关 ## Core Invariants 已保护 - ✅ **注销不制造障碍** — 全程在线,无需打电话/邮寄身份证/到现场 - ✅ **敏感数据脱敏** — 手机号保留后4位,其余替换为* - ✅ **注销后不展示完整资料** — 历史会话显示"用户已注销" - ✅ **注销前检查进行中的业务** — 有进行中的红娘服务/活动不能直接注销 - ✅ **通知 Match 对方** — 账号关闭时通知所有活跃 Match 对方 - ✅ **取消未开始活动报名** — 注销时自动取消 pending/approved 但未开始的活动 - ✅ **数据保留合规** — 必要审计信息脱敏保留,其他数据删除 ## API 端点(8个) POST /account/withdraw(退出婚恋服务) POST /account/resume(重新开启服务) GET /account/can-withdraw(注销前检查) POST /account/close(执行注销) GET /account/privacy-settings(获取隐私设置) PUT /account/privacy-settings(更新隐私设置) POST /operator/account/{userId}/close(强制注销) GET /operator/account/{userId}/can-withdraw(检查) ## Migration V014__add_consent_and_privacy_tables.sql ## Tests - `AccountLifecycleServiceTest`: 8 个不变量用例 ## Project Stats - Java files: 200 (+5 from Phase 20) - Test classes: 32 (+1) - Migration SQL: 14 - Miniapp 页面: 33 (+3) ## Next Phase Phase 22: 部署运维(Docker Compose生产配置 + Nginx生产域名 + 监控告警 + 备份恢复脚本)