# 样品生成工单不创建订单修复说明 ## 问题描述 之前的设计中,从样品生成工单时会自动创建一个测试订单(TestOrder)用于分组工单。这导致: 1. 订单列表中出现大量自动创建的订单,让人混乱 2. 从工单生成的订单和从样品生成的订单混在一起,难以区分 3. 用户希望订单只通过"从工单生成订单"功能创建 ## 解决方案 **破坏原有数据关系**,让样品生成工单时不再创建订单: 1. 修改数据库:`test_work_order.test_order_id` 改为可空 2. 修改代码:样品生成工单时不创建订单,`test_order_id` 设为 NULL 3. 工单独立存在,只有通过"生成订单"功能才会关联到订单 ## 修改内容 ### 1. 数据库修改 **文件**: `remove_sample_order_creation.sql` ```sql -- 修改 test_work_order.test_order_id 字段为可空 ALTER TABLE test_work_order MODIFY COLUMN test_order_id INTEGER NULL COMMENT '工单分组(可选)'; ``` **执行步骤**: ```bash # 在数据库服务器上执行 mysql -u root -p your_database < remove_sample_order_creation.sql ``` ### 2. 后端代码修改 #### 2.1 修改 DO 模型 **文件**: `ruoyi-fastapi-backend/module_admin/system/entity/do/test_work_order_do.py` ```python # 修改前 test_order_id = Column(Integer, nullable=False, comment='工单分组') # 修改后 test_order_id = Column(Integer, nullable=True, comment='工单分组(可选)') ``` #### 2.2 修改样品生成工单逻辑 **文件**: `ruoyi-fastapi-backend/module_admin/service/warehouse_sample_service.py` **主要变更**: 1. **移除订单创建代码**(第68-82行) - 不再创建 `TestOrder` 对象 - 不再调用 `db.add(test_order)` 和 `db.flush()` 2. **test_eut 不关联订单** ```python # 修改前 test_eut = TestEut( test_order_id=order_id, # 关联订单 ... ) # 修改后 test_eut = TestEut( test_order_id=None, # 不关联订单 ... ) ``` 3. **工单不关联订单** ```python # 修改前 work_order = TestWorkOrder( test_order_id=order_id, # 关联订单 ... ) # 修改后 work_order = TestWorkOrder( test_order_id=None, # 不关联订单 ... ) ``` ## 新的业务流程 ### 修改前 ``` 样品 → 自动创建订单 → 生成工单(test_order_id = 订单ID) ↓ 工单列表显示 ↓ 选择工单生成新订单(order_id = 新订单ID) ``` ### 修改后 ``` 样品 → 生成工单(test_order_id = NULL, order_id = NULL) ↓ 工单列表显示 ↓ 选择工单生成订单(order_id = 订单ID) ↓ 订单详情显示关联的工单 ``` ## 数据关系变化 ### test_work_order 表字段 - `test_order_id`: 工单分组(可选,现在为 NULL) - `order_id`: 关联的订单ID(从工单生成订单后才有值) ### 工单状态 1. **新建工单**: `test_order_id = NULL`, `order_id = NULL` 2. **已汇总到订单**: `test_order_id = NULL`, `order_id = 订单ID` ## 影响分析 ### 正面影响 ✅ 订单列表不再有自动创建的订单,更清晰 ✅ 工单独立存在,可以灵活组合成订单 ✅ 订单只通过"生成订单"功能创建,流程统一 ### 需要注意 ⚠️ 现有的从样品自动创建的订单仍然存在 ⚠️ 工单列表查询需要处理 `test_order_id = NULL` 的情况 ⚠️ 订单详情查询需要通过 `order_id` 查询工单 ## 验证步骤 ### 1. 执行数据库迁移 ```bash mysql -u root -p your_database < remove_sample_order_creation.sql ``` ### 2. 重启后端服务 ```bash cd ruoyi-fastapi-backend # 停止服务 # 启动服务 ``` ### 3. 测试样品生成工单 1. 进入样品管理页面 2. 选择样品,点击"生成工单" 3. **验证**: 订单列表中不应该出现新订单 4. **验证**: 工单列表中应该显示新工单 ### 4. 测试工单生成订单 1. 进入工单列表 2. 选择工单,点击"生成订单" 3. **验证**: 订单列表中出现新订单 4. **验证**: 工单列表中不再显示这些工单(已汇总) 5. **验证**: 点击订单详情,能看到关联的工单 ## 清理旧数据(可选) 如果需要清理之前自动创建的订单: ```sql -- 查看从样品自动创建的订单 SELECT o.id AS order_id, o.name AS order_name, o.create_time, COUNT(w.id) AS work_order_count FROM test_order o LEFT JOIN test_work_order w ON w.test_order_id = o.id WHERE w.order_id IS NULL GROUP BY o.id, o.name, o.create_time ORDER BY o.id DESC; -- 删除这些订单(谨慎操作,先备份!) -- DELETE FROM test_order -- WHERE id IN ( -- SELECT DISTINCT test_order_id -- FROM test_work_order -- WHERE order_id IS NULL -- ); ``` ## 相关文件 - `remove_sample_order_creation.sql` - 数据库迁移脚本 - `ruoyi-fastapi-backend/module_admin/system/entity/do/test_work_order_do.py` - 工单DO模型 - `ruoyi-fastapi-backend/module_admin/service/warehouse_sample_service.py` - 样品服务 - `工单生成订单功能实现进度.md` - 总体进度文档 ## 完成时间 2026-01-08