Files

283 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 剩余缺口 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 |
---
## 迭代 I14P0 缺口修复(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`
---
## 迭代 I15P1 增强(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 标签字段
---
## 迭代 I16P1 增强(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)
---
## 迭代 I17SDK 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.1P2 功能 + 多语言封装(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** | |