From 861c78efb56b9c88f87885f2d62a031d2709619b Mon Sep 17 00:00:00 2001 From: WorkBuddy Date: Fri, 9 Oct 2026 22:46:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(matchmaker):=20ZC-MM-002=20A1=20=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=AF=B9=E8=B1=A1=E5=88=86=E9=85=8D=E5=BB=BA=E6=A8=A1?= =?UTF-8?q?=EF=BC=88DEC-MATCHMAKER-002=20LOCKED=20=E8=90=BD=E5=9C=B0?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数据库(V053/V054): - 新表 matchmaker_assignments:独立分配关系(assigned_by/reason/scope/ expires_at/ended_at/end_reason),状态机 active/ended/revoked/transferred/ expired(CHECK 白名单),部分唯一索引防同用户多 ACTIVE 主责分配, 存量进行中服务单幂等回填 - 新角色 matchmaker_leader(014) + 新权限 matchmaker.team.assign(10000000-…-023); 组长授 view/service/team.assign(不给平台级 matchmaker.assign) 后端: - ServiceAssignmentPolicy 有效分配判定器(读前惰性过期,失效分配即时拒绝) - 分配/转分配/撤销/结束四操作:状态机非法转换拒绝、理由必填、 同用户主责冲突拒绝;组织范围校验(team.assign 同组织,NULL=NULL 视为 平台直属,技术默认安全值待治理登记);transfer 同时校验原持有人与新目标范围 - 全操作审计 MATCHMAKER_ASSIGNMENT_CREATE/TRANSFER/REVOKE/END, operatorId=当前操作者,afterData 仅记摘要(无敏感内容) - 删除认领端点 POST /services/{id}/claim(A1 禁止普通红娘认领,MM-AUTH-004=404) - GET /pending 收敛为分配权持有者(assign or team.assign); dashboard today/completed 改本人口径,inProgress 口径修正 'processing'→'in_service' - recommend/followup/complete/detail 归属判定接入判定器,拒绝走 DataScopeGuard(自动 DATA_SCOPE_DENIED 审计),不再裸 IllegalStateException; assignService 与创建分配同事务联动;删除死查询 findAssignedTo 前端: - admin-web 分配弹窗去硬编码假数据(operator_wang/chen)→ assignable-matchmakers 真实接口(仅 id/name/organizationId,无联系方式)+ 理由必填; 队列 tab 按 assign/team.assign 显隐;新增「服务对象分配」tab(转分配/撤销/结束) - 小程序红娘工作台:删除接单入口,数据源切 GET /operator/matchmaker/assignments/my, 枚举码不上屏(中文映射),空 serviceId 不跳转 测试: - MatchmakerAssignmentA1Test 14 用例(MM-AUTH-001~004、MM-AUDIT-001、 MM-LIFECYCLE-001、组长跨组织拒绝、NULL=NULL 平台直属边界、transfer 原持有人 范围负向、/pending 403+审计),负向注入自证有效 - MatchmakerAssignmentPermissionTest 3 用例(端点权限契约 + claim 残留扫描) - MatchmakerServiceTest 补 assignment 状态/scope 白名单守卫;迁移基线 LATEST=54 - 验证:定向 38/38 全绿;UI 契约 24/24;小程序 wcc/wcsc 真编译 0 失败 --- .../matchmaker/MatchmakerManagementView.vue | 192 ++++++- admin-web/src/stores/auth.ts | 4 +- .../MatchmakerAssignmentController.java | 136 +++++ .../MatchmakerOperatorController.java | 35 +- .../entity/MatchmakerAssignment.java | 62 +++ .../mapper/MatchmakerAssignmentMapper.java | 69 +++ .../mapper/MatchmakerServiceMapper.java | 21 +- .../service/MatchmakerAssignmentService.java | 339 ++++++++++++ .../service/MatchmakerServiceService.java | 148 +++-- .../service/ServiceAssignmentPolicy.java | 71 +++ .../platform/shared/constant/Constants.java | 19 + .../V053__add_matchmaker_assignments.sql | 79 +++ .../V054__add_matchmaker_leader_role.sql | 38 ++ .../deployment/MigrationValidationTest.java | 4 +- .../MatchmakerAssignmentA1Test.java | 504 ++++++++++++++++++ .../MatchmakerAssignmentPermissionTest.java | 94 ++++ .../MatchmakerReferralPhase13Test.java | 4 +- .../matchmaker/MatchmakerServiceTest.java | 25 + backend/src/test/resources/schema-h2.sql | 55 ++ .../matchmaker-workbench.js | 75 +-- .../matchmaker-workbench.wxml | 30 +- 21 files changed, 1868 insertions(+), 136 deletions(-) create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/controller/MatchmakerAssignmentController.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/entity/MatchmakerAssignment.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/mapper/MatchmakerAssignmentMapper.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/service/MatchmakerAssignmentService.java create mode 100644 backend/src/main/java/com/danyang/match/platform/matchmaker/service/ServiceAssignmentPolicy.java create mode 100644 backend/src/main/resources/db/migration/V053__add_matchmaker_assignments.sql create mode 100644 backend/src/main/resources/db/migration/V054__add_matchmaker_leader_role.sql create mode 100644 backend/src/test/java/com/danyang/match/platform/matchmaker/MatchmakerAssignmentA1Test.java create mode 100644 backend/src/test/java/com/danyang/match/platform/matchmaker/MatchmakerAssignmentPermissionTest.java diff --git a/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue b/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue index 4ed9607..86baf7c 100644 --- a/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue +++ b/admin-web/src/modules/matchmaker/MatchmakerManagementView.vue @@ -3,7 +3,8 @@ - + + @@ -19,7 +20,7 @@ @@ -38,16 +39,47 @@ + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -71,18 +134,35 @@