From 13c42d2c87c44618ba8f3c69df33c7be767c8160 Mon Sep 17 00:00:00 2001 From: huangping Date: Mon, 25 May 2026 11:13:56 +0800 Subject: [PATCH] docs: add remaining gaps WBS execution plan (P0/P1/P2 + SDK JNI) --- .../plans/2026-05-25-remaining-gaps-wbs.md | 282 ++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 docs/superpowers/plans/2026-05-25-remaining-gaps-wbs.md diff --git a/docs/superpowers/plans/2026-05-25-remaining-gaps-wbs.md b/docs/superpowers/plans/2026-05-25-remaining-gaps-wbs.md new file mode 100644 index 0000000..78fec32 --- /dev/null +++ b/docs/superpowers/plans/2026-05-25-remaining-gaps-wbs.md @@ -0,0 +1,282 @@ +# 剩余缺口 WBS 任务拆解与排期计划 + +> **基于**:PRD vs 代码实现状态完整审计(2026-05-25) +> **范围**:全部 ⚠️ 部分实现 + ❌ 未实现 功能点 +> **涉及**:平台后端/前端 + 客户端 SDK + +--- + +## 迭代路线图 + +| 迭代 | 周期 | 聚焦 | 任务数 | 估计工时 | +|------|------|------|--------|---------| +| **I14** | T0+1W | P0 缺口修复 + 审计修复 | 7 | 12h | +| **I15** | T0+2W | P1 增强(M2/M3/M4) | 6 | 14h | +| **I16** | T0+3W | P1 增强(M5/M6/M8/M11) | 8 | 16h | +| **I17** | T0+4W | SDK JNI 桥接 + 单元测试 | 3 | 16h | +| **V2.1** | T0+6W | P2 功能 + 其他语言封装 | 8 | 20h | + +--- + +## 迭代 I14:P0 缺口修复(12h) + +### I14-T1: M1-F06 项目干系人(2h) + +**文件:** +- Create: `services/.../db/migration/V17__project_stakeholder.sql` +- Create: `services/.../persistence/project/PlatformProjectStakeholder.java` +- Create: `services/.../persistence/project/PlatformProjectStakeholderMapper.java` +- Create: `services/.../web/dto/StakeholderRequest.java` +- Create: `services/.../web/dto/StakeholderResponse.java` +- Modify: `services/.../project/ProjectController.java` +- Modify: `services/.../service/ProjectService.java` +- Create: `web/.../views/ProjectStakeholderDialog.vue` +- Modify: `web/.../views/ProjectsView.vue` + +**DB:** +```sql +CREATE TABLE platform_project_stakeholder ( + id BIGSERIAL PRIMARY KEY, + project_id BIGINT NOT NULL REFERENCES platform_project(id), + contact_name VARCHAR(128) NOT NULL, + contact_role VARCHAR(64), + phone VARCHAR(32), + email VARCHAR(128), + is_internal BOOLEAN DEFAULT FALSE, + created_at TIMESTAMPTZ NOT NULL DEFAULT now() +); +``` + +**工作量:** 后端 2h + 前端 1h + +--- + +### I14-T2: M2-F01 合同日期字段(1h) + +**文件:** +- Create: `services/.../db/migration/V18__contract_date_fields.sql` +- Modify: `services/.../persistence/contract/PlatformContract.java` +- Modify: `services/.../web/dto/ContractCreateRequest.java` +- Modify: `services/.../web/dto/ContractUpdateRequest.java` +- Modify: `services/.../web/dto/ContractResponse.java` +- Modify: `services/.../service/ContractService.java` +- Modify: `services/.../contracts/ContractController.java` +- Modify: `web/.../views/ContractWizardView.vue` + +**DB:** +```sql +ALTER TABLE platform_contract + ADD COLUMN signing_date DATE, + ADD COLUMN effective_date DATE, + ADD COLUMN end_date DATE; +``` + +--- + +### I14-T3: M2-F04 行项 amount 字段 UI 补全(0.5h) + +**文件:** +- Modify: `web/.../views/ContractDetailView.vue`(添加 amount字段到行项对话框) +- Modify: `web/.../views/ContractWizardView.vue`(添加 amount到行项表) + +--- + +### I14-T4: M4-F05 激活原因码分类(1.5h) + +**文件:** +- Modify: `services/.../api/web/dto/LicenseSnStatusPatchRequest.java` +- Modify: `services/.../api/service/LicenseSnService.java` +- Modify: `web/.../views/LicenseSnDetailView.vue` + +在状态变更对话框中增加「原因码」下拉字段:ACTIVATION_SUCCESS / ACTIVATION_FAILED / MANUAL_CHANGE / EXPIRED + +--- + +### I14-T5: M10-F02 审计 userId 筛选(1h) + +**文件:** +- Modify: `services/.../api/service/AuditService.java`(searchAuditEvents加userId参数) +- Modify: `services/.../api/audit/AuditController.java` + +--- + +### I14-T6: M11-F05 登录锁定逻辑接入(2h) + +**文件:** +- Modify: `services/.../api/auth/AuthController.java` + +在 `AuthController.login()` 中,硬编码用户校验之前插入: +1. 查询 `platform_login_attempt` 表统计最近15分钟内该用户的失败次数 +2. 如果 >= 5 次,返回 429 "账户已临时锁定" +3. 登录成功后清除失败记录 + +--- + +### I14-T7: M11-F16 v-permission 扩展到全部页面(4h) + +**文件:** +- Modify: 所有 20+ 个 Vue 页面的 CRUD 操作按钮 + +为每个页面的 新建/编辑/删除 按钮添加 `v-permission` 指令,权限码按模块命名: +- `customer:rw` / `customer:delete` +- `project:rw` / `project:delete` +- `contract:rw` +- `delivery:rw` +- `license:sn:rw` / `license:sn:batch-import` +- `callback:process` +- `integration:config:rw` +- `device:rw` +- `todo:process` +- `report:view` / `report:export` +- `audit:search` / `audit:export` + +--- + +## 迭代 I15:P1 增强(M2/M3/M4)(14h) + +### I15-T1: M2-F06 合同与订单关联(2h) + +**文件:** +- Create: `services/.../db/migration/V19__order_linking.sql` +- Modify: `services/.../persistence/contract/PlatformContract.java` +- Modify: `web/.../views/ContractDetailView.vue` + +### I15-T2: M2-F08 SKU 规则映射(3h) + +**文件:** +- Create: `services/.../db/migration/V20__sku_mapping.sql` +- Create: `services/.../api/persistence/integration/PlatformSkuMapping.java` +- Modify: `services/.../api/service/IntegrationCatalogService.java` +- Create: `web/.../views/IntegrationSkuMappingView.vue` + +### I15-T3: M3-F06 现场环境信息(1.5h) + +**文件:** +- Create: V21 migration for field_env_info on platform_delivery_batch +- Modify: DeliveryBatchDetailView.vue 增加字段 + +### I15-T4: M3-F07 交付-SN 门禁逻辑(2h) + +**文件:** +- Modify: `services/.../service/LicenseSnService.java` +- SN 创建/绑定时,校验 `platform_delivery_batch.status = DELIVERED` + +### I15-T5: M4-F06 比特控制台链接(1.5h) + +**文件:** +- Modify: `web/.../views/LicenseSnDetailView.vue` +- 从 `platform_integration_environment.bitanswer_base_url` 构建控制台链接 + +### I15-T6: M4-F07/F08/F09 批量操作/需求单/标签(4h) + +**文件:** +- 批量绑定额外对话框 +- 授权需求单视图 +- SN 标签字段 + +--- + +## 迭代 I16:P1 增强(M5/M6/M8/M11)(16h) + +### I16-T1: M5-F06 失败原因标注(1.5h) + +### I16-T2: M5-F07 批量重试(2h) + +### I16-T3: M6-F04 特征映射管理(3h) + +### I16-T4: M8-F03/F04 邮件/企微通知 + 模板(3h) + +### I16-T5: M11-F08/F11/F12 密码重置/并发会话/强制下线(4h) + +### I16-T6: M11-F18/F20/F21 数据属主/系统参数/敏感操作审计(2.5h) + +--- + +## 迭代 I17:SDK JNI 桥接(16h) + +### I17-T1: Rust JNI bridge.cpp 实现(8h) + +**关键修复:** NativeBridge.java 引用的 JNI 函数在 Rust 侧无对应实现。需要: +1. 在 `native/craft-core/` 中新增 JNI 桥接模块 +2. 实现 `Java_cn_craftlabs_auth_internal_NativeBridge_nativeInitialize` 等 8 个 JNI 函数 +3. 每个 JNI 函数调用 Rust C ABI 对应的 `craft_*` 函数 + +### I17-T2: Java SDK 单元测试(4h) + +为 BitAnswerProvider 和 SelfHostedAuthProvider 编写集成测试: +- 配置解析测试 +- Provider 初始化/激活/校验测试(Mock 模式) + +### I17-T3: 端到端集成测试(4h) + +- Rust 核心库编译 + Java SDK 调用验证 +- 完整激活 → 校验 → 心跳链路 + +--- + +## V2.1:P2 功能 + 多语言封装(20h) + +| 任务 | 工时 | 说明 | +|------|------|------| +| M1-F07 客户/项目冻结 | 1.5h | | +| M1-F08 客户合并 | 2h | | +| M1-F09 CRM 同步 | 3h | 外部依赖 | +| M5-F10 模拟投递 | 1.5h | 仅测试环境 | +| M6-F08/F09 版本矩阵/影响分析 | 3h | | +| M9-F06 订阅报表 | 2h | | +| M10-F04 留存策略 | 1h | | +| M11-F09/F10 SSO/MFA | 4h | 外部依赖 | +| C#/Python SDK 封装(选1个) | 8h | 视需求 | + +--- + +## 依赖关系图 + +```mermaid +flowchart LR + subgraph I14["I14: P0修复"] + T1[I14-T1: 项目干系人] + T2[I14-T2: 合同日期] + T3[I14-T3: amount UI] + T4[I14-T4: 激活原因码] + T5[I14-T5: 审计筛选] + T6[I14-T6: 登录锁定] + T7[I14-T7: v-permission扩展] + end + subgraph I15["I15: P1增强"] + T8[I15-T1: 订单关联] + T9[I15-T2: SKU映射] + T10[I15-T3: 环境信息] + T11[I15-T4: 交付门禁] + T12[I15-T5: 比特链接] + T13[I15-T6: 批量操作] + end + subgraph I16["I16: P1增强"] + T14[I16-T1~T6] + end + subgraph I17["I17: SDK JNI"] + T15[I17-T1: JNI bridge] + T16[I17-T2: 单元测试] + T17[I17-T3: 端到端测试] + end + subgraph V21["V2.1: P2+封装"] + T18[V2.1: P2/封装] + end + I14 --> I15 --> I16 + I17 -.->|可并行| I16 + I15 --> V21 + I16 --> V21 +``` + +--- + +## 工作量汇总 + +| 迭代 | 聚焦 | 任务数 | 工时 | 交付物 | +|------|------|--------|------|--------| +| **I14** | P0 缺口修复 | 7 | 12h | 干系人/合同日期/登录锁定/v-permission | +| **I15** | M2/M3/M4 P1 增强 | 6 | 14h | 订单/SKU/环境/门禁/批量 | +| **I16** | M5/M6/M8/M11 P1 增强 | 6 | 16h | 通知/特征映射/通知/安全 | +| **I17** | SDK JNI 桥接 | 3 | 16h | JNI bridge/测试 | +| **V2.1** | P2 + 多语言封装 | 8 | 20h | 冻结/合并/SSO/封装 | +| **总计** | | **30** | **78h** | |