5.1 KiB
5.1 KiB
样品生成工单不创建订单修复说明
问题描述
之前的设计中,从样品生成工单时会自动创建一个测试订单(TestOrder)用于分组工单。这导致:
- 订单列表中出现大量自动创建的订单,让人混乱
- 从工单生成的订单和从样品生成的订单混在一起,难以区分
- 用户希望订单只通过"从工单生成订单"功能创建
解决方案
破坏原有数据关系,让样品生成工单时不再创建订单:
- 修改数据库:
test_work_order.test_order_id改为可空 - 修改代码:样品生成工单时不创建订单,
test_order_id设为 NULL - 工单独立存在,只有通过"生成订单"功能才会关联到订单
修改内容
1. 数据库修改
文件: remove_sample_order_creation.sql
-- 修改 test_work_order.test_order_id 字段为可空
ALTER TABLE test_work_order
MODIFY COLUMN test_order_id INTEGER NULL COMMENT '工单分组(可选)';
执行步骤:
# 在数据库服务器上执行
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
# 修改前
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
主要变更:
-
移除订单创建代码(第68-82行)
- 不再创建
TestOrder对象 - 不再调用
db.add(test_order)和db.flush()
- 不再创建
-
test_eut 不关联订单
# 修改前 test_eut = TestEut( test_order_id=order_id, # 关联订单 ... ) # 修改后 test_eut = TestEut( test_order_id=None, # 不关联订单 ... ) -
工单不关联订单
# 修改前 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(从工单生成订单后才有值)
工单状态
- 新建工单:
test_order_id = NULL,order_id = NULL - 已汇总到订单:
test_order_id = NULL,order_id = 订单ID
影响分析
正面影响
✅ 订单列表不再有自动创建的订单,更清晰 ✅ 工单独立存在,可以灵活组合成订单 ✅ 订单只通过"生成订单"功能创建,流程统一
需要注意
⚠️ 现有的从样品自动创建的订单仍然存在
⚠️ 工单列表查询需要处理 test_order_id = NULL 的情况
⚠️ 订单详情查询需要通过 order_id 查询工单
验证步骤
1. 执行数据库迁移
mysql -u root -p your_database < remove_sample_order_creation.sql
2. 重启后端服务
cd ruoyi-fastapi-backend
# 停止服务
# 启动服务
3. 测试样品生成工单
- 进入样品管理页面
- 选择样品,点击"生成工单"
- 验证: 订单列表中不应该出现新订单
- 验证: 工单列表中应该显示新工单
4. 测试工单生成订单
- 进入工单列表
- 选择工单,点击"生成订单"
- 验证: 订单列表中出现新订单
- 验证: 工单列表中不再显示这些工单(已汇总)
- 验证: 点击订单详情,能看到关联的工单
清理旧数据(可选)
如果需要清理之前自动创建的订单:
-- 查看从样品自动创建的订单
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