对 Phase 09(Text Chat)执行 KEEP-VERIFY/EXTEND 复验:不采信历史 ✅,逐条核对
REST 发送 + WebSocket 接收、幂等、重连、未读计数、非 active Match 禁聊、Unmatch/
Block 即时禁聊、活动双确认会话复用。共发现并修复 4 处真实缺陷 + 1 处规范不符。
D1(Critical)WebSocket 下行整条链路是死代码
- 无 HandshakeInterceptor,无任一环节把 userId 写入 session attributes,
extractUserId 恒返回 null;sendToUser/sendToConversation 全仓库零调用点。
- 新增 ChatHandshakeInterceptor:从 ?token= 或 Authorization: Bearer 解析 JWT,
校验通过后写 session attr userId;失败 fail-closed 拒绝握手;仅接受 type=access。
- 重写 ChatWebSocketHandler:按规范 {event,data} 信封推送;未认证连接直接
close(NOT_ACCEPTABLE);同账号重连由新连接接管、旧连接 close(NORMAL);
上行仅支持 ping->pong,禁止客户端自订阅。
- ChatService.sendText 落库+递增未读后推送 message.new;RiskNotice 同推。
- 移除 WebSocketConfig 的 .withSockJS()(SockJS 改写端点致原生 WS 无法直连)。
D2(Critical)Unmatch 后仍可发消息
- unmatch 只改 Match,不联动会话;sendText 仅校验 conv.status==active。
- 新增 ChatService.assertMatchAlive(conv):按 matchId 查 Match,状态非
{active,getting_to_know} 抛 "匹配已解除,无法发送消息"。sendText 在 conv.status
校验之后调用。
- MatchController.unmatch 落库后调 chatService.syncFromMatch 推 conversation.closed。
- syncFromMatch 重写:alive 恢复 active;非 alive 只推 conversation.closed,
不改 status(会话仍以灰显态留在列表,属未授权产品决策,登记待决)。
D3(Critical)RelationService.block 调静态 MatchService.unmatch 只改内存态不落库
- 结果:Block 后 matches.status 仍为 active。
- 补 matchMapper.updateById(m) 持久化 + chatService.closeConversationForMatch(
CONVERSATION_STATUS_BLOCKED) 通知对端。RelationshipService.block 同步补会话关闭通知。
D4(Critical 安全)聊天 4 个接口无成员校验 -> IDOR 越权读私聊
- MessageController.load/markRead、ConversationController.detail/unread 补
chatService.isMember(conversationId, userId) 校验;非成员返回
ApiResponse.notFound()(body 级 success=false code=NOT_FOUND,HTTP 200,
与 MatchController.authorizedMatch 同约定),不区分"不存在"与"无权"以防探测。
D5(Medium)上行订阅/信封不符规范
- REST API 接口详细设计规范.md 第124-126章要求禁止客户端自订阅,事件名
message.new/message.read/conversation.closed,信封 {event,data}。已对齐。
测试保真度 + 测试补齐
- schema-h2.sql 新增 uk_message_client_id(sender_id, client_message_id),
对齐生产 V004:71;H2 不支持过滤索引故省略 WHERE(NULL 语义等价)。
否则 service 的 SELECT-then-INSERT 竞态在测试中无 DB 兜底,形成测试盲区。
- 新增 ChatPhase09IntegrationTest(13 用例):幂等重试不重复投递、推送信封字段、
未读增减清零、Match unmatched 拒发、Unmatch/Block 端点即时禁聊+收 closed 事件、
活动双确认复用同一消息体系、未形成 Match 无法建会话、非成员读消息/详情/未读
被拒且不泄露正文、DB 唯一索引兜底重复 clientMessageId、无幂等键系统消息可共存。
- 新增 ChatWebSocketHandlerTest(7 用例):userId 路由、信封格式、未认证关连、
断开不推、重连替换旧连接、上行仅 ping。
验证证据
- 全量回归(离线容器 danyang-match-backend-test,mvn -o test):
328 tests / 0 failures / 0 errors / 3 skipped / BUILD SUCCESS(基线 308,+20)。
- 负向验证:临时注释 assertMatchAlive + 两处 isMember,恰好 3 个用例变红,
证明守卫有效;随后还原并 grep 确认无残留。
文档
- 新增 Phase-09-V11-Recovery-Completion-Report-2026-09-16.md(完整报告)。
- Phase-09-V11-Completion-Report.md 顶部加状态注记,推翻其 4 条 WebSocket 结论。
- 计划/STATUS/JIRA_BACKLOG 同步 Phase 09 完成态与测试总数(328)。
Phase 10 未启动,按计划每阶段出报告后停止等待确认。
686 lines
29 KiB
Markdown
686 lines
29 KiB
Markdown
# 善缘丹阳 V1.1 Jira Backlog
|
||
|
||
> V1.0 Phase 01~26 基础 + V1.1 增量任务合并基线
|
||
> 版本:v1.1.0-dev | 最后更新:2026-09-08
|
||
|
||
> **2026-09-16 状态校正:** Phase 07 UI 已按 2026-09-13 规格重新实现,**首批 11 页于 2026-09-16 通过用户验收(结论:基本达标)**,本文件此前"视觉否决/REOPENED"口径随之关闭。
|
||
>
|
||
> **2026-09-16 Phase 09 复验关闭:** EPIC-P09-V11 已完成。复验中发现并修复 4 处真实缺陷(WebSocket 下行整条链路为死代码、Unmatch 后仍可发消息、Block 未落库 Match、聊天四接口 IDOR 越权),
|
||
> 新增 `ChatPhase09IntegrationTest`(13 用例)与 `ChatWebSocketHandlerTest`(7 用例),并把生产消息唯一索引下沉到测试库。后端全量 **328 tests / 0 failures / 0 errors**。
|
||
> 证据:`docs/Phase-09-V11-Recovery-Completion-Report-2026-09-16.md`。**Phase 10 需用户确认后启动。**
|
||
>
|
||
> **2026-09-16 Phase 08 复验关闭:** EPIC-P08-V11 已完成。复验中发现并修复 3 处真实缺陷(搜索绕过 Block / 详情无 Block 检查 / `matches.source` 取值越界),
|
||
> 新增 `DiscoverBlockInvisibilityIntegrationTest`(9 用例)并把生产 `chk_match_source` 约束下沉到测试库。
|
||
> 证据:`docs/Phase-08-V11-Recovery-Completion-Report-2026-09-16.md`。
|
||
>
|
||
> **2026-09-13 状态校正(历史):** 本文件中的既有 `✅` 是历史开发声明,不再单独作为验收证据。Phase 01~06 已由恢复版 Completion Report 重新举证;Phase 07 仅保留业务测试证据,管理端与小程序视觉已被用户否决并重新打开。Phase 08 暂停,当前先执行 UI 清理与参考图重设计。
|
||
|
||
| 当前执行项 | 状态 | 依据 |
|
||
|---|---|---|
|
||
| Phase 01 项目治理与检查基线 | 已完成 | Git 基线已建立,提交 `b46b48e` |
|
||
| Phase 02 统一认证、RBAC、DataScope | 已完成 | 见 `Phase-02-V11-Recovery-Completion-Report-2026-09-10.md` |
|
||
| Phase 03 实名认证增量预留 | 已完成 | 见 `Phase-03-V11-Recovery-Completion-Report-2026-09-12.md` |
|
||
| Phase 04 Profile、Preference 与本地资格 | 已完成 | 见 `Phase-04-V11-Recovery-Completion-Report-2026-09-12.md`;Phase 05 尚未获准 |
|
||
| Phase 05 统一审核扩展 | 已完成 | 见 `Phase-05-V11-Recovery-Completion-Report-2026-09-12.md`;Phase 06 尚未开始 |
|
||
| Phase 06 Match Eligibility 增量 | 已完成 | 见 `Phase-06-V11-Recovery-Completion-Report-2026-09-12.md`;Phase 07 尚未开始 |
|
||
| Phase 07 V1.1 首页唯一实现 + 找对象 | 已完成:视觉已通过用户验收(2026-09-16) | 保留首页聚合、Capability、8 入口和推荐规则证据;UI 已按 2026-09-13 新规格重新实现,11 页经用户验收通过 |
|
||
| Phase 08 Like / Match / Block 复验 | 已完成(2026-09-16) | 见 `Phase-08-V11-Recovery-Completion-Report-2026-09-16.md`;修复 3 处真实缺陷(搜索绕过 Block、详情无 Block 检查、`matches.source` 取值越界),后端 308 tests 全绿 |
|
||
| Phase 09 Text Chat 复验 | 已完成(2026-09-16) | 见 `Phase-09-V11-Recovery-Completion-Report-2026-09-16.md`;修复 4 处真实缺陷(WebSocket 下行死代码、Unmatch 后仍可发消息、Block 未落库 Match、聊天接口 IDOR),后端 328 tests 全绿;Phase 10 尚未获准 |
|
||
| UI-CLEANUP-20260913 | 已完成 | 废弃 UI 代码、冲突规范、旧计划和无效验收证据已清理;`ui-document-baseline-contracts` 锁定唯一视觉入口 |
|
||
| UI-ADMIN-20260913 | 已完成(待桌面端目视复验) | 管理端全局框架与工作台已按规格交付;18 modules + 22 routes,vue-tsc 与 vite build 全绿 |
|
||
| UI-MINIAPP-20260913 | 已完成 | 小程序 11 个核心页面已重构;11/11 页 TS-only,2026-09-16 通过用户验收 |
|
||
| V1.1 UAT / RC / Production | 进行中 | UI 视觉验收已通过;剩余前端调用与后端契约收敛(`/me/*` 路径族约 15 个端点)与页面闭环 |
|
||
|
||
---
|
||
|
||
## 命名规范
|
||
|
||
- Epic: `EPIC-P{XX}-V11`(V1.0已有Epic保持原名)
|
||
- Story: `{Phase}-V11-S{NN}`
|
||
- Task: `{Phase}-V11-T{NN}`
|
||
- Bug: `BUG-{编号}`
|
||
- 旧V1.0废弃任务标记: `DEPRECATED_BY_V1_1`
|
||
|
||
---
|
||
|
||
## Epic 总览
|
||
|
||
| Epic | Phase | 名称 | 优先级 |
|
||
|------|-------|------|--------|
|
||
| EPIC-P01-V11 | P01 | 项目治理与V1.1基线修订 | P0 |
|
||
| EPIC-P02-V11 | P02 | 新业务权限域预留 | P0 |
|
||
| EPIC-P03-V11 | P03 | 实名体系扩展预留 | P1 |
|
||
| EPIC-P04-V11 | P04 | 本地资格与Profile扩展 | P1 |
|
||
| EPIC-P05-V11 | P05 | 本地资格审核复用 | P1 |
|
||
| EPIC-P06-V11 | P06 | Match Eligibility扩展 | P0 |
|
||
| EPIC-P07-V11 | P07 | 首页V1.1重构与找对象 | P0 |
|
||
| EPIC-P08-V11 | P08 | Like/Match保留+活动兼容 | P0 | ✅
|
||
| EPIC-P09-V11 | P09 | 聊天核心保持+活动兼容 | P0 | ✅
|
||
| EPIC-P10-V11 | P10 | 聊天安全扩展 | P0 | ✅
|
||
| EPIC-P11-V11 | P11 | 公益服务通知扩展 | P0 | ✅
|
||
| EPIC-P12-V11 | P12 | 关系状态轻量扩展 | P1 | ✅
|
||
| EPIC-P13-V11 | P13 | 红娘服务转介扩展 | P1 |
|
||
| EPIC-P13A | P13A | 公益婚恋咨询与婚前辅导 | P1 |
|
||
| EPIC-P14-V11 | P14 | 多类型公益活动 | P1 |
|
||
| EPIC-P15-V11 | P15 | 活动签到回归测试 | P1 |
|
||
| EPIC-P16-V11 | P16 | 活动互选二阶段同意重构 | P0 |
|
||
| EPIC-P17-V11 | P17 | 公益服务风险来源扩展 | P0 |
|
||
| EPIC-P18-V11 | P18 | 申诉保持 | P1 |
|
||
| EPIC-P19-V11 | P19 | 善缘丹阳综合运营后台 | P1 |
|
||
| EPIC-P20-V11 | P20 | 公益项目数据统计扩展 | P1 |
|
||
| EPIC-P21-V11 | P21 | 账户生命周期增量 | P1 |
|
||
| EPIC-P22-V11 | P22 | 部署运维配置扩展 | P1 |
|
||
| EPIC-P23-V11 | P23 | V1.1专项测试 | P0 |
|
||
| EPIC-P24-V11 | P24 | UAT增量 | P1 |
|
||
| EPIC-P25-V11 | P25 | RC内容检查 | P1 |
|
||
| EPIC-P26-V11 | P26 | Production初始化 | P1 |
|
||
|
||
---
|
||
|
||
## EPIC-P01-V11: 项目治理与V1.1基线修订
|
||
|
||
> **2026-09-09 有效状态:** Phase 01 治理交付已收口,但不是“项目测试通过”。当前阻断为缺少 Git 元数据;检查基线实测 5 个失败门禁。以下历史任务的“已完成”仅表示文件曾创建,验收结论以 `Phase-01-V11-Recovery-Completion-Report-2026-09-09.md` 为准。
|
||
|
||
### Tasks
|
||
- P01-V11-T01 [已完成] 更新AGENTS.md加入V1.1硬规则
|
||
- P01-V11-T02 [已完成] 更新docs/STATUS.md版本基线
|
||
- P01-V11-T03 [已完成] 更新docs/PENDING_DECISIONS.md
|
||
- P01-V11-T04 [已完成] 新建docs/V1_1_CHANGELOG.md
|
||
- P01-V11-T05 [已完成] 新建docs/V1_0_TO_V1_1_GAP_ANALYSIS.md
|
||
- P01-V11-T06 [已完成] 新建docs/JIRA_BACKLOG.md
|
||
- P01-V11-T07 [已完成] 新建docs/ARCHITECTURE_BASELINE_V1.1.md
|
||
|
||
---
|
||
|
||
## EPIC-P02-V11: 新业务权限域预留
|
||
|
||
### Tasks
|
||
- P02-V11-T01 ✅ banner permission domain
|
||
- P02-V11-T02 ✅ counseling permission domain
|
||
- P02-V11-T03 ✅ content permission domain
|
||
- P02-V11-T04 ✅ service_location permission domain
|
||
- P02-V11-T05 ✅ service_appointment permission domain
|
||
- P02-V11-T06 ✅ local_eligibility permission domain
|
||
- P02-V11-T07 ✅ service_program permission domain
|
||
- P02-V11-T08 ✅ service_station_operator role
|
||
- P02-V11-T09 ✅ counselor role
|
||
- P02-V11-T10 ✅ counseling_manager role
|
||
- P02-V11-T11 ✅ content_editor role
|
||
|
||
### Acceptance
|
||
- 新角色不自动拥有用户全库权限 ✅
|
||
- content_editor默认无用户数据权限 ✅
|
||
- counselor默认assigned scope ✅
|
||
- service_station_operator无身份证权限 ✅
|
||
|
||
---
|
||
|
||
## EPIC-P03-V11: 实名体系扩展预留
|
||
|
||
### Tasks
|
||
- P03-V11-T01 ✅ 增加verification_level字段到user_identities
|
||
- P03-V11-T02 ✅ 增加liveness_verification_status预留
|
||
- P03-V11-T03 ✅ 增加verification_provider字段
|
||
- P03-V11-T04 ✅ Feature Flag控制人脸能力
|
||
|
||
### Forbidden
|
||
- 不得实现 face_embedding
|
||
- 不得实现 face_template
|
||
- 不得实现 self-hosted face recognition
|
||
|
||
---
|
||
|
||
## EPIC-P04-V11: 本地资格与Profile扩展
|
||
|
||
### Data Tasks
|
||
- P04-V11-T01 ✅ user_local_eligibilities migration
|
||
- P04-V11-T02 ✅ local_eligibility_evidences migration
|
||
- P04-V11-T03 ✅ local eligibility DTO
|
||
|
||
### API Tasks
|
||
- P04-V11-T04 ✅ GET /api/v1/local-eligibility
|
||
- P04-V11-T05 ✅ POST /api/v1/local-eligibility/declaration
|
||
- P04-V11-T06 ✅ POST /api/v1/local-eligibility/evidences
|
||
- P04-V11-T07 ✅ POST /api/v1/local-eligibility/submit
|
||
|
||
### Miniapp
|
||
- P04-V11-T08 ✅ U62 本地资格说明页
|
||
- P04-V11-T09 ✅ U63 本地资格补充核验页
|
||
- P04-V11-T10 ⏳ Onboarding增加本地资格步骤(后续Phase)
|
||
|
||
### MeStatus
|
||
- P04-V11-T11 ✅ /me/status增加localEligibilityStatus
|
||
- P04-V11-T12 ✅ CapabilityService接入本地资格(Phase 07整合)
|
||
|
||
---
|
||
|
||
## EPIC-P05-V11: 本地资格审核复用
|
||
|
||
### Tasks
|
||
- P05-V11-T01 ✅ review_type扩展local_eligibility
|
||
- P05-V11-T02 ✅ 本地资格审核Queue
|
||
- P05-V11-T03 ✅ Claim(复用现有)
|
||
- P05-V11-T04 ✅ Need Evidence
|
||
- P05-V11-T05 ✅ Approve
|
||
- P05-V11-T06 ✅ Reject
|
||
- P05-V11-T07 ✅ Evidence access audit
|
||
|
||
### Acceptance
|
||
- 不新建第二套审核引擎 ✅
|
||
- 多审核员Claim仍原子 ✅
|
||
- 审核通过更新local eligibility ✅
|
||
- 佐证查看被审计 ✅
|
||
|
||
---
|
||
|
||
## EPIC-P06-V11: Match Eligibility扩展
|
||
|
||
### Tasks
|
||
- P06-V11-T01 ✅ MatchEligibilityService接入local eligibility
|
||
- P06-V11-T02 ✅ localEligibilityRequired配置
|
||
- P06-V11-T03 ✅ 缓存失效处理
|
||
- P06-V11-T04 ✅ eligibility test matrix扩展
|
||
|
||
---
|
||
|
||
## EPIC-P07-V11: 首页V1.1重构与找对象
|
||
|
||
### Story: Home Aggregate
|
||
- P07-V11-T01 ✅ HomeApplicationService
|
||
- P07-V11-T02 ✅ GET /api/v1/home
|
||
- P07-V11-T03 ✅ HomeDTO
|
||
- P07-V11-T04 ✅ Home capability mapping
|
||
|
||
### Story: Banner
|
||
- P07-V11-T05 ✅ home_banners migration
|
||
- P07-V11-T06 ✅ Banner repository/service
|
||
- P07-V11-T07 ✅ Banner audience filter
|
||
- P07-V11-T08 ✅ Banner time filter
|
||
- P07-V11-T09 ✅ Banner internal target validation
|
||
|
||
### Story: 新首页UI
|
||
- P07-V11-T10 ✅ BrandHeader
|
||
- P07-V11-T11 ✅ UserStatusStrip
|
||
- P07-V11-T12 ✅ HomeBannerCarousel
|
||
- P07-V11-T13 ✅ QuickEntryGrid
|
||
- P07-V11-T14 ✅ HomeRecommendationSection
|
||
- P07-V11-T15 ✅ ServiceRecommendationCard
|
||
- P07-V11-T16 ✅ ActivityPreviewSection
|
||
- P07-V11-T17 ✅ ServiceLocationCard
|
||
- P07-V11-T18 ✅ ArticleSection
|
||
- P07-V11-T19 ✅ SafetyNoticeCard
|
||
|
||
### Story: 固定8入口
|
||
- P07-V11-T20 ✅ QuickEntry static config
|
||
- P07-V11-T21 ✅ Feature flag availability
|
||
- P07-V11-T22 ✅ Capability fallback UI
|
||
|
||
### Story: 首页状态差异
|
||
- P07-V11-T23 ✅ onboarding home
|
||
- P07-V11-T24 ✅ review-pending home
|
||
- P07-V11-T25 ✅ searching home
|
||
- P07-V11-T26 ✅ paused home
|
||
- P07-V11-T27 ✅ successful home
|
||
|
||
---
|
||
|
||
## EPIC-P11-V11: 公益服务通知扩展
|
||
|
||
### Tasks
|
||
- P11-V11-T01 ✅ appointment submitted notification
|
||
- P11-V11-T02 ✅ appointment confirmed notification
|
||
- P11-V11-T03 ✅ counseling assigned notification
|
||
- P11-V11-T04 ✅ counseling scheduled notification
|
||
- P11-V11-T05 ✅ counseling completed notification
|
||
- P11-V11-T06 ✅ premarital scheduled notification
|
||
- P11-V11-T07 ✅ local eligibility need evidence notification
|
||
- P11-V11-T08 ✅ local eligibility verified notification
|
||
- P11-V11-T09 ✅ local eligibility rejected notification
|
||
- P11-V11-T10 ✅ privacy-safe notification copy
|
||
|
||
---
|
||
|
||
## EPIC-P13-V11: 红娘服务转介 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P13-V11-T01 转介婚恋咨询 ✅
|
||
- P13-V11-T02 转介公益活动 ✅
|
||
- P13-V11-T03 转介善缘服务站 ✅
|
||
- P13-V11-T04 referral source tracking ✅
|
||
- P13-V11-T05 user consent/confirmation ✅
|
||
|
||
---
|
||
|
||
## EPIC-P13A: 公益婚恋咨询与婚前辅导 ✅ 核心链路已完成(V1.1 MVP)
|
||
|
||
### Story: 数据模型
|
||
- P13A-T01 counseling_services migration ✅ (V022)
|
||
- P13A-T02 counseling_followups migration ✅ (V022)
|
||
- P13A-T03 indexes ✅ (V022)
|
||
- P13A-T04 migration tests ⏳ 待补全
|
||
|
||
### Story: 用户咨询
|
||
- P13A-T05 GET counseling service intro ✅
|
||
- P13A-T06 POST counseling request ✅
|
||
- P13A-T07 GET my counseling ✅
|
||
- P13A-T08 GET counseling detail ✅
|
||
- P13A-T09 cancel counseling ✅
|
||
|
||
### Story: 婚前辅导
|
||
- P13A-T10 premarital service type ✅ (service_type=premarital_guidance)
|
||
- P13A-T11 premarital intro ✅ (复用 counseling/intro + U58页面)
|
||
- P13A-T12 premarital request ✅ (复用 counseling/create,serviceType=premarital_guidance)
|
||
- P13A-T13 optional companion support ✅ (companionUserId 字段)
|
||
|
||
### Story: Miniapp
|
||
- P13A-T14 U55 婚恋咨询介绍 ✅
|
||
- P13A-T15 U56 申请咨询 ✅
|
||
- P13A-T16 U57 我的咨询 ✅
|
||
- P13A-T17 U58 婚前辅导介绍 ✅
|
||
- P13A-T18 U59 婚前辅导申请 ✅
|
||
|
||
### Story: 后台
|
||
- P13A-T19 Counseling Queue ✅ (getPendingQueue)
|
||
- P13A-T20 Counseling Detail ✅ (getCounselingDetail)
|
||
- P13A-T21 Assign Counselor ✅
|
||
- P13A-T22 Schedule ✅
|
||
- P13A-T23 Start ✅
|
||
- P13A-T24 Followup ✅
|
||
- P13A-T25 Complete ✅
|
||
- P13A-T26 Close ✅
|
||
|
||
### Story: 权限与隐私
|
||
- P13A-T27 counselor assigned scope ✅ (getCounselorAssignedServices)
|
||
- P13A-T28 counseling_manager scope ⏳ 待补充(Admin Web Phase 19)
|
||
- P13A-T29 matchmaker deny counseling notes ✅ (常量隔离,INV-013)
|
||
- P13A-T30 generic admin deny sensitive note ⏳ 待补充(Admin Web Phase 19)
|
||
- P13A-T31 SensitiveAccessLog ⏳ 待补充(随访内容写入审计日志)
|
||
|
||
### Story: 风控联动
|
||
- P13A-T32 counseling risk referral ⏳ 待补充(后续 Phase)
|
||
- P13A-T33 RiskEvent source=counseling ⏳ 待补充(后续 Phase)
|
||
|
||
**备注**:V1.1 MVP 核心链路已实现,Admin Web 前端、高级权限细分、风控联动在后续 Phase 补充。
|
||
|
||
---
|
||
|
||
## EPIC-P14-V11: 多类型公益活动 ✅ 核心链路已完成(V1.1 MVP)
|
||
|
||
### Data Tasks
|
||
- P14-V11-T01 activity_type field ✅ (V023 + Activity.java)
|
||
- P14-V11-T02 registration_policy field ✅ (V023 + Activity.java)
|
||
- P14-V11-T03 target_group field ✅ (V023 + Activity.java)
|
||
- P14-V11-T04 industry_scope field ✅ (V023 + Activity.java)
|
||
- P14-V11-T05 activity_organizations table ✅ (V023 + ActivityOrganization.java)
|
||
- P14-V11-T06 activity_capacity_groups table ✅ (V023 + ActivityCapacityGroup.java)
|
||
|
||
### Frontend Tasks
|
||
- P14-V11-T07 活动分类Tabs ⏳ 待Miniapp实现(后续补充)
|
||
- P14-V11-T08 类型化ActivityCard ⏳ 待Miniapp实现(后续补充)
|
||
- P14-V11-T09 动态报名资格提示 ⏳ 待Miniapp实现(后续补充)
|
||
|
||
### Admin Tasks
|
||
- P14-V11-T10 Activity type selector ✅ (GET /activities/types/{type} API)
|
||
- P14-V11-T11 registration policy form ✅ (createActivityFromAdmin支持registrationPolicy)
|
||
- P14-V11-T12 multi-organization selection ✅ (POST /operator/activities + POST /operator/activities/{id}/organizations)
|
||
- P14-V11-T13 capacity groups editor ✅ (POST /operator/activities/{id}/capacity-groups)
|
||
|
||
**备注**:后端API核心链路已完成,Miniapp活动分类页面和Admin Web前端在后续Phase补充。
|
||
|
||
---
|
||
|
||
## EPIC-P16-V11: 活动互选二阶段同意重构 ✅ 核心链路已完成(V1.1 MVP)
|
||
|
||
### Data Tasks
|
||
- P16-V11-T01 activity_mutual_connection_consents table ✅ (V024)
|
||
- P16-V11-T02 pair unique active constraint ✅ (UNIQUE index with LEAST/GREATEST)
|
||
|
||
### Business Tasks
|
||
- P16-V11-T03 detect mutual interest ✅ (detectMutualResults)
|
||
- P16-V11-T04 create mutual consent ✅ (createMutualConsent)
|
||
- P16-V11-T05 user A confirm ✅ (confirmConnection)
|
||
- P16-V11-T06 user B confirm ✅ (confirmConnection)
|
||
- P16-V11-T07 both-confirm transaction ✅ (@Transactional)
|
||
- P16-V11-T08 create Match Episode ✅ (existing RelationshipService.confirmActivityInterest)
|
||
- P16-V11-T09 create Conversation ✅ (not auto-created, per INV-015)
|
||
- P16-V11-T10 existing active Match reuse ✅ (hasActiveMatch check)
|
||
- P16-V11-T11 prior Unmatch new episode ✅ (findLatestMatch + priorUnmatchExists)
|
||
- P16-V11-T12 decline handling ✅ (declineConnection)
|
||
- P16-V11-T13 timeout handling ⏳ 待补充(后续Phase)
|
||
|
||
### Miniapp Tasks
|
||
- P16-V11-T14 Mutual Result page ✅ (activity-mutual-result)
|
||
- P16-V11-T15 开启线上沟通按钮 ✅
|
||
- P16-V11-T16 Waiting for other side state ✅
|
||
- P16-V11-T17 Both confirmed success page ✅
|
||
|
||
---
|
||
|
||
## EPIC-P17-V11: 公益服务风险来源扩展 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P17-V11-T01 risk source counseling ✅ (RiskReferralService.detectCounselingRisk)
|
||
- P17-V11-T02 risk source service_station ✅ (RiskReferralService.detectAppointmentRisk)
|
||
- P17-V11-T03 risk source offline_activity ✅ (RiskReferralService.detectActivityRisk)
|
||
- P17-V11-T04 risk referral UI ⏳ Admin Web 后续补充(Phase 19)
|
||
---
|
||
|
||
## EPIC-P18-V11: 申诉保持 ✅ 已验证(V1.0基础保持不变)
|
||
|
||
### Verification
|
||
- V013 appeals 表结构完整(ban_appeal / suspend_appeal)
|
||
- AppealService: FeatureFlag 控制 + 幂等性 + 可申诉限制(仅 ban/suspend)
|
||
- AppealController: 用户端 account-status / submit / my
|
||
- AppealOperatorController: 后台端 pending / detail / process / stats
|
||
- Miniapp: appeal 页面已注册
|
||
- 申诉通过 → 自动解除对应 risk_action(status→revoked)
|
||
- 申诉被拒 → 维持原处置
|
||
|
||
### 新增文件
|
||
- V025__extend_risk_sources.sql — 扩展 risk_events.event_type CHECK + risk_actions.action_type
|
||
- RiskReferralService.java — 统一风险检测与事件创建
|
||
- RiskController.java — 运营人员手动风险标记接口
|
||
- CounselingServiceApp.java — 集成咨询风险检测
|
||
- ServiceAppointmentService.java — 集成服务站风险检测
|
||
- ActivityService.java — 集成活动风险检测
|
||
- Constants.java — 新增 6 个风险相关常量
|
||
|
||
---
|
||
|
||
## EPIC-P19-V11: 善缘丹阳综合运营后台 ✅ 后端API核心链路已完成(V1.1 MVP)
|
||
|
||
### 内容管理(后端API)
|
||
- P19-V11-T08 content_categories management ✅ (V026 + ContentService CRUD)
|
||
- P19-V11-T09 content_articles management ✅ (V026 + ContentService CRUD)
|
||
- P19-V11-T10 Article list ✅ (GET /content/articles)
|
||
- P19-V11-T11 Article editor ✅ (PUT /operator/articles/{id})
|
||
- P19-V11-T12 Article publish ✅ (POST /operator/articles/{id}/publish)
|
||
- P19-V11-T13 Article offline ✅ (POST /operator/articles/{id}/offline)
|
||
- P19-V11-T14 Miniapp preview ⏳ 待Admin Web实现
|
||
|
||
### 专项项目管理(后端API)
|
||
- P19-V11-T25 service_programs CRUD ✅ (V026 + ServiceProgramService)
|
||
- P19-V11-T26 service_program_members ✅ (V026 + MemberCRUD)
|
||
- P19-V11-T27 Program CRUD ✅ (GET/POST/PUT /service-programs)
|
||
- P19-V11-T28 Member application ✅ (POST /service-programs/{id}/apply)
|
||
- P19-V11-T29 Member approval ✅ (POST /operator/members/{id}/approve)
|
||
- P19-V11-T30 Program statistics basic ⏳ 待Phase 20 Analytics
|
||
|
||
### Banner管理(后端API)
|
||
- P19-V11-T01~T07 ✅ (V019已有HomeBannerService + HomeController,后续补充Admin CRUD API)
|
||
|
||
### 服务站管理(后端API)
|
||
- P19-V11-T15~T18 ✅ (V019已有service_locations表,CRUD接口待Admin Web调用)
|
||
|
||
### 服务预约管理(后端API)
|
||
- P19-V11-T19~T24 ✅ (V021已有ServiceAppointmentService,全部操作已实现)
|
||
|
||
### 组织协同
|
||
- P19-V11-T31 organization_relationships management ✅ (V026 + OrganizationRelationshipMapper)
|
||
- P19-V11-T32 no automatic permission inheritance ✅ (INV-020已由V015权限模型保证)
|
||
|
||
**备注**:后端API核心链路已完成,Admin Web Vue 3前端界面在后续补充。
|
||
|
||
---
|
||
|
||
## EPIC-P20-V11: 公益项目数据统计扩展 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P20-V11-T01 Banner impressions/clicks ✅ (getBannerStats)
|
||
- P20-V11-T02 Service Station visits ✅ (getServiceStationStats)
|
||
- P20-V11-T03 Service appointments stats ✅ (getServiceAppointmentStats)
|
||
- P20-V11-T04 Counseling requests/completed ✅ (getCounselingStats)
|
||
- P20-V11-T05 Premarital guidance stats ✅ (getPremaritalStats)
|
||
- P20-V11-T06 Content views ✅ (getContentStats + topArticles)
|
||
- P20-V11-T07 Local eligibility verified ✅ (getLocalEligibilityStats)
|
||
- P20-V11-T08 Service program users ✅ (getServiceProgramStats)
|
||
- P20-V11-T09 Registration source ✅ (getRegistrationSourceStats)
|
||
- P20-V11-T10 Unique service users vs occurrences ✅ (getUniqueServiceUsersStats)
|
||
- P20-V11-T11 EFFECTIVE_CONNECTION provisional metric ✅ (getEffectiveConnectionStats)
|
||
|
||
### 新增API端点
|
||
- GET /operator/analytics/v11-dashboard — 综合Dashboard
|
||
- GET /operator/analytics/v11/banners — Banner统计
|
||
- GET /operator/analytics/v11/appointments — 预约统计
|
||
- GET /operator/analytics/v11/counseling — 咨询统计
|
||
- GET /operator/analytics/v11/premarital — 婚前辅导统计
|
||
- GET /operator/analytics/v11/content — 内容统计
|
||
- GET /operator/analytics/v11/local-eligibility — 本地资格统计
|
||
- GET /operator/analytics/v11/service-programs — 专项项目统计
|
||
- GET /operator/analytics/v11/registration-sources — 报名来源分布
|
||
- GET /operator/analytics/v11/unique-service-users — 去重用户统计
|
||
- GET /operator/analytics/v11/effective-connections — 有效牵手指标
|
||
|
||
---
|
||
|
||
## EPIC-P21-V11: 账户生命周期增量 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P21-V11-T01 cancel future service appointments on account close ✅ (cancelServiceAppointments)
|
||
- P21-V11-T02 counseling lifecycle on account close ✅ (cancelCounselingServices)
|
||
- P21-V11-T03 service program exit on account close ✅ (exitServicePrograms)
|
||
- P21-V11-T04 local eligibility invalidation ✅ (invalidateLocalEligibility)
|
||
- P21-V11-T05 service history anonymization hooks ✅ (anonymizeServiceHistory)
|
||
|
||
### 变更文件
|
||
- AccountLifecycleService.java — 扩展 checkCanWithdraw 和 closeAccount 处理V1.1业务
|
||
|
||
### 注销前检查新增
|
||
| 检查项 | 阻断条件 |
|
||
|--------|----------|
|
||
| 服务预约 | submitted / pending_confirmation |
|
||
| 心理咨询 | pending / assigned / scheduled / in_progress |
|
||
| 专项项目 | approved(进行中) |
|
||
| 本地资格 | submitted / pending_review |
|
||
|
||
---
|
||
|
||
## EPIC-P22-V11: 部署运维配置扩展 ✅ 已完成
|
||
|
||
### Tasks
|
||
- P22-V11-T01 counselingEnabled flag ✅ (FeatureFlagConfig.counselingEnabled)
|
||
- P22-V11-T02 premaritalEnabled flag ✅ (FeatureFlagConfig.premaritalEnabled)
|
||
- P22-V11-T03 contentEnabled flag ✅ (FeatureFlagConfig.contentEnabled)
|
||
- P22-V11-T04 serviceLocationEnabled flag ✅ (FeatureFlagConfig.serviceLocationEnabled)
|
||
- P22-V11-T05 localEligibilityEnabled flag ✅ (FeatureFlagConfig.localEligibilityEnabled)
|
||
- P22-V11-T06 local evidence upload policy ✅ (maxFiles/maxSizeMB/allowedTypes)
|
||
- P22-V11-T07 private storage for counseling attachments ✅ (private/bucket config)
|
||
|
||
### 变更文件
|
||
- FeatureFlagConfig.java — 新增 13 个 V1.1 feature flag 配置项
|
||
- application.yml — 新增 13 个 features.* 默认配置
|
||
- FeatureFlagController.java — GET/PUT /operator/feature-flags 端点
|
||
|
||
### Flag 列表
|
||
| Flag | 默认值 | 说明 |
|
||
|------|--------|------|
|
||
| counselingEnabled | true | 公益咨询功能总开关 |
|
||
| premaritalEnabled | true | 婚前辅导功能开关 |
|
||
| contentEnabled | true | 内容管理功能开关 |
|
||
| serviceLocationEnabled | true | 善缘服务站功能开关 |
|
||
| localEligibilityEnabled | true | 本地资格核验开关 |
|
||
| referralEnabled | true | 红娘转介功能开关 |
|
||
| mutualConsentEnabled | true | 活动互选二阶段同意开关 |
|
||
| serviceProgramEnabled | true | 专项公益服务项目开关 |
|
||
| livenessEnabled | false | 活体检测开关(预留) |
|
||
| localEvidenceUploadEnabled | true | 本地资格佐证上传开关 |
|
||
| localEvidenceMaxFiles | 5 | 最大佐证文件数 |
|
||
| localEvidenceMaxFileSizeMB | 10 | 单个文件最大大小(MB) |
|
||
| localEvidenceAllowedTypes | jpg,png,pdf | 允许的文件类型 |
|
||
| counselingAttachmentsPrivate | true | 咨询附件私有存储 |
|
||
| counselingAttachmentsBucket | counseling-attachments | 咨询附件存储桶名 |
|
||
|
||
---
|
||
|
||
## EPIC-P23-V11: V1.1专项测试 ✅ 已完成
|
||
|
||
### E2E Tests
|
||
- P23-V11-T01 Home V1.1 E2E ✅ (home_v11_test.py)
|
||
- P23-V11-T02 Banner timing filter ✅ (home_v11_test.py)
|
||
- P23-V11-T03 Banner audience filter ✅ (home_v11_test.py)
|
||
- P23-V11-T04 Quick Entry order ✅ (home_v11_test.py)
|
||
- P23-V11-T05 Local Eligibility E2E ✅ (local_eligibility_test.py)
|
||
- P23-V11-T06 Counseling E2E ✅ (counseling_v11_test.py)
|
||
- P23-V11-T07 Counseling permission ✅ (counseling_permission_test.py)
|
||
- P23-V11-T08 Service Appointment E2E ✅ (service_appointment_test.py)
|
||
- P23-V11-T09 Content E2E ✅ (content_e2e_test.py)
|
||
- P23-V11-T10 Multi-type Activity E2E ✅ (multi_type_activity_test.py)
|
||
- P23-V11-T11 Activity Mutual Consent E2E ✅ (activity_mutual_consent_test.py)
|
||
- P23-V11-T12 Service Station permission ✅ (service_station_permission_test.py)
|
||
- P23-V11-T13 Organization relation isolation ✅ (organization_isolation_test.py)
|
||
|
||
### Invariant Tests
|
||
- P23-V11-T14 INV-011~INV-020 ✅ (V11InvariantsTest.java — 10个测试用例)
|
||
|
||
**E2E测试文件:12个,共774行代码,80+测试用例**
|
||
- P23-V11-T01 Home V1.1 E2E
|
||
- P23-V11-T02 Banner timing filter
|
||
- P23-V11-T03 Banner audience filter
|
||
- P23-V11-T04 Quick Entry order
|
||
- P23-V11-T05 Local Eligibility E2E
|
||
- P23-V11-T06 Counseling E2E
|
||
- P23-V11-T07 Counseling permission
|
||
- P23-V11-T08 Service Appointment E2E
|
||
- P23-V11-T09 Content E2E
|
||
- P23-V11-T10 Multi-type Activity E2E
|
||
- P23-V11-T11 Activity Mutual Consent E2E
|
||
- P23-V11-T12 Service Station permission
|
||
- P23-V11-T13 Organization relation isolation
|
||
|
||
### Invariant Tests
|
||
- P23-V11-T14 INV-011~INV-020
|
||
|
||
---
|
||
|
||
## EPIC-P24-V11: UAT增量 ✅ 已就绪(后端支持完整)
|
||
|
||
### Tasks
|
||
- P24-V11-T01 Service Station Operator UAT ✅
|
||
- P24-V11-T02 Counselor UAT ✅
|
||
- P24-V11-T03 Counseling Manager UAT ✅
|
||
- P24-V11-T04 Content Editor UAT ✅
|
||
- P24-V11-T05 服务站扫码→预约→到场 ✅ (API链路完整)
|
||
- P24-V11-T06 咨询申请→服务完成 ✅ (API链路完整)
|
||
- P24-V11-T07 婚前辅导申请 ✅ (Miniapp U58/U59)
|
||
- P24-V11-T08 活动双方互选→双方确认→Chat ✅ (API+Miniapp完整)
|
||
|
||
### Admin Web V1.1 模块
|
||
- BannerManagementView.vue — Banner CRUD + 上架/下架
|
||
- ContentManagementView.vue — 分类+文章管理 + 发布/下架
|
||
- ServiceStationView.vue — 服务站信息管理
|
||
- ServiceAppointmentView.vue — 预约确认/完成/取消
|
||
- ServiceProgramView.vue — 专项项目CRUD + 成员审批
|
||
- CounselingView.vue — 咨询分配/排期/跟进/完成
|
||
- ReferralManagementView.vue — 红娘转介历史
|
||
- router/index.ts — 新增7个菜单项和路由
|
||
|
||
### Tasks
|
||
- P24-V11-T01 Service Station Operator UAT
|
||
- P24-V11-T02 Counselor UAT
|
||
- P24-V11-T03 Counseling Manager UAT
|
||
- P24-V11-T04 Content Editor UAT
|
||
- P24-V11-T05 服务站扫码→预约→到场
|
||
- P24-V11-T06 咨询申请→服务完成
|
||
- P24-V11-T07 婚前辅导申请
|
||
- P24-V11-T08 活动双方互选→双方确认→Chat
|
||
|
||
---
|
||
|
||
## EPIC-P25-V11: RC内容检查 ⏳ 待运营提供素材
|
||
|
||
### Tasks
|
||
- P25-V11-T01 Banner真实素材 ⏳
|
||
- P25-V11-T02 服务站真实地址 ✅(万善公园站已初始化)
|
||
- P25-V11-T03 服务站开放时间 ✅(已配置)
|
||
- P25-V11-T04 咨询服务介绍 ⏳
|
||
- P25-V11-T05 婚前辅导介绍 ⏳
|
||
- P25-V11-T06 婚恋反诈首批内容 ⏳
|
||
- P25-V11-T07 婚恋课堂首批内容 ⏳
|
||
- P25-V11-T08 关于善缘丹阳 ⏳
|
||
- P25-V11-T09 主办/执行信息 ⏳
|
||
|
||
### Tasks
|
||
- P25-V11-T01 Banner真实素材
|
||
- P25-V11-T02 服务站真实地址
|
||
- P25-V11-T03 服务站开放时间
|
||
- P25-V11-T04 咨询服务介绍
|
||
- P25-V11-T05 婚前辅导介绍
|
||
- P25-V11-T06 婚恋反诈首批内容
|
||
- P25-V11-T07 婚恋课堂首批内容
|
||
- P25-V11-T08 关于善缘丹阳
|
||
- P25-V11-T09 主办/执行信息
|
||
|
||
---
|
||
|
||
## EPIC-P26-V11: Production初始化 ✅ 已完成(V027迁移)
|
||
|
||
### V027 种子数据
|
||
- 4个内容分类(婚恋课堂/反诈/婚前辅导/婚俗新风)
|
||
- 万善公园服务站基础数据
|
||
- 3条首页Banner
|
||
|
||
### Admin Web V1.1 模块扩展 ✅
|
||
- BannerManagementView.vue
|
||
- ContentManagementView.vue
|
||
- ServiceStationView.vue
|
||
- ServiceAppointmentView.vue
|
||
- ServiceProgramView.vue
|
||
- CounselingView.vue
|
||
- ReferralManagementView.vue
|
||
- router/index.ts(7个新路由)
|
||
|
||
### Tasks
|
||
- P26-V11-T01 Seed Content Categories ✅ (V027)
|
||
- P26-V11-T02 Seed Activity Types ✅ (CHECK约束)
|
||
- P26-V11-T03 Seed Service Types ✅ (CHECK约束)
|
||
- P26-V11-T04 创建万善公园服务站 ✅ (V027)
|
||
- P26-V11-T05 初始化Banner ✅ (V027)
|
||
- P26-V11-T06 初始化Feature Flags ✅ (application.yml)
|
||
- P26-V11-T07 初始化新增Roles/Permissions ✅ (V015)
|
||
- P26-V11-T08 Home Banner smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T09 Quick Entries smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T10 Service Station smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T11 Counseling smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T12 Content smoke test ⏳ 上线前手动验证
|
||
- P26-V11-T13 Activity Mutual Consent smoke test ⏳ 上线前手动验证
|
||
|
||
### Tasks
|
||
- P26-V11-T01 Seed Content Categories
|
||
- P26-V11-T02 Seed Activity Types
|
||
- P26-V11-T03 Seed Service Types
|
||
- P26-V11-T04 创建万善公园服务站
|
||
- P26-V11-T05 初始化Banner
|
||
- P26-V11-T06 初始化Feature Flags
|
||
- P26-V11-T07 初始化新增Roles/Permissions
|
||
- P26-V11-T08 Home Banner smoke test
|
||
- P26-V11-T09 Quick Entries smoke test
|
||
- P26-V11-T10 Service Station smoke test
|
||
- P26-V11-T11 Counseling smoke test
|
||
- P26-V11-T12 Content smoke test
|
||
- P26-V11-T13 Activity Mutual Consent smoke test
|
||
|
||
---
|
||
|
||
## 依赖关系
|
||
|
||
```
|
||
P01 → P02 → P03/P04/P05 → P06 → P07/P08 → P09/P10 → P11/P12 → P13 → P13A → P14/P15/P16 → P17/P18 → P19 → P20 → P21/P22 → P23 → P24 → P25 → P26
|
||
```
|
||
|
||
---
|
||
|
||
## 不可开发项(V1.1明确禁止)
|
||
|
||
- 独立 CMS Server
|
||
- 独立 Counseling Server
|
||
- 社区/Feed/评论/点赞
|
||
- 积分/排行榜
|
||
- AI推荐/AI代聊/AI婚姻预测
|
||
- 支付系统
|
||
- 语音/视频通话
|
||
- 群聊
|
||
|
||
---
|
||
|
||
*生成时间: 2026-09-08 | WorkBuddy首轮执行期间生成*
|