# 设计文档 ## 概述 本设计重构业务流程,将订单从"生成工单"的起点改为"从工单生成"的终点。订单变为只读展示,仅用于客户结算。 ## 架构 ### 新的业务流程 ``` 样品 → 生成工单 → 筛选工单 → 生成订单(结算用) ``` ### 数据流向 ``` 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. **测试验证** - 完整流程测试