ETest-Vue-FastAPI/.kiro/specs/workorder-to-order-refactor/design.md

177 lines
5.5 KiB
Markdown
Raw Permalink Normal View History

# 设计文档
## 概述
本设计重构业务流程,将订单从"生成工单"的起点改为"从工单生成"的终点。订单变为只读展示,仅用于客户结算。
## 架构
### 新的业务流程
```
样品 → 生成工单 → 筛选工单 → 生成订单(结算用)
```
### 数据流向
```
1. 样品管理 → 选择样品 → 生成工单
2. 工单管理 → 筛选工单 → 批量选择 → 生成订单
3. 订单管理 → 只读展示 → 查看工单来源
```
## 组件和接口
### 1. 订单页面改造(只读模式)
**前端修改:**
- 隐藏所有编辑按钮(新增、修改、删除、生成工单)
- 保留查看、导出、打印功能
- 添加"关联工单"列显示工单数量
- 订单详情页显示关联工单列表
**后端修改:**
- 保留查询接口
- 保留导出接口
- 添加查询关联工单接口
### 2. 工单页面增强
**前端新增功能:**
- 添加"生成订单"按钮(批量操作)
- 添加工单筛选条件
- 添加多选功能
- 添加订单生成对话框
**后端新增接口:**
```python
POST /work_order/generate_order
{
"work_order_ids": [1, 2, 3],
"customer_id": 123,
"memo": "备注"
}
```
### 3. 样品生成工单调整
**前端修改:**
- 移除自动生成订单的逻辑
- 仅显示工单生成成功提示
**后端修改:**
- 移除生成订单的代码
- 仅创建工单
## 数据模型
### 订单表增加字段
```sql
ALTER TABLE test_order ADD COLUMN work_order_ids TEXT COMMENT '关联的工单ID列表JSON数组';
```
### 工单表增加字段
```sql
ALTER TABLE work_order ADD COLUMN order_id INTEGER COMMENT '关联的订单ID';
```
## 正确性属性
*属性是指在系统所有有效执行中都应该成立的特征或行为——本质上是关于系统应该做什么的正式声明。属性作为人类可读规范和机器可验证正确性保证之间的桥梁。*
### 属性 1: 订单只读性
*对于任何* 订单页面的编辑操作,系统都应该拒绝或隐藏该操作
**验证: 需求 1.1, 1.2, 1.3, 1.4**
### 属性 2: 工单订单关联性
*对于任何* 从工单生成的订单订单中的work_order_ids应该包含所有选中的工单ID
**验证: 需求 3.2, 3.5**
### 属性 3: 工单唯一订单关联
*对于任何* 工单其order_id字段最多只能关联一个订单
**验证: 需求 3.5**
### 属性 4: 样品工单独立性
*对于任何* 从样品生成的工单,不应该自动生成订单
**验证: 需求 5.4, 5.5**
## 错误处理
### 1. 重复生成订单
- **场景**: 选中的工单已经关联了订单
- **处理**: 显示警告,列出已关联订单的工单,询问是否继续
### 2. 不同客户的工单
- **场景**: 选中的工单属于不同客户
- **处理**: 显示错误提示,要求选择同一客户的工单
### 3. 空工单列表
- **场景**: 用户未选择任何工单就点击生成订单
- **处理**: 禁用按钮或显示提示
## 测试策略
### 单元测试
1. **订单只读测试**
- 验证编辑按钮被隐藏
- 验证编辑接口返回错误
2. **工单生成订单测试**
- 测试单个工单生成订单
- 测试多个工单批量生成订单
- 测试关联关系正确建立
### 集成测试
1. **完整流程测试**
- 样品 → 工单 → 订单的完整流程
- 验证数据关联正确
2. **边界测试**
- 已关联订单的工单再次生成
- 不同客户工单混合选择
## UI设计
### 订单列表页面
```
┌─────────────────────────────────────────────────┐
│ 订单管理(只读) │
├─────────────────────────────────────────────────┤
│ [搜索] [重置] [导出] [打印] │
├─────────────────────────────────────────────────┤
│ 订单号 | 客户 | 工单数 | 金额 | 状态 | 操作 │
│ ORD001 | 客户A | 3个 | 1000 | 已完成 | [查看] │
└─────────────────────────────────────────────────┘
```
### 工单列表页面
```
┌─────────────────────────────────────────────────┐
│ 工单管理 │
├─────────────────────────────────────────────────┤
│ [搜索] [重置] [生成订单] │
├─────────────────────────────────────────────────┤
│ □ | 工单号 | 客户 | 样品 | 状态 | 订单 | 操作 │
│ ☑ | WO001 | 客户A | 样品1 | 完成 | - | [查看] │
│ ☑ | WO002 | 客户A | 样品2 | 完成 | - | [查看] │
└─────────────────────────────────────────────────┘
```
## 实施步骤
1. **数据库迁移** - 添加新字段
2. **订单页面改造** - 改为只读模式
3. **工单页面增强** - 添加生成订单功能
4. **样品生成工单调整** - 移除自动生成订单
5. **测试验证** - 完整流程测试