3.1 KiB
3.1 KiB
工单循环创建问题分析
问题描述
从工单生成订单时,系统可能会为新订单自动创建新的工单分组,导致混乱的循环关系。
问题场景
正常流程
- 原始订单23 → 有样品 → 生成工单661-670
- 从工单661-670生成新订单36
- 工单661-670的
order_id更新为36
问题流程(如果存在)
- 原始订单23 → 有样品 → 生成工单661-670
- 从工单661-670生成新订单36
- 工单661-670的
order_id更新为36 - 系统自动为订单36创建新的工单分组(这是问题所在)
- 新工单的
test_order_id= 36 - 造成混乱:订单36既有通过
order_id关联的工单,又有通过test_order_id关联的工单
数据关系说明
test_work_order 表的两个订单字段
test_order_id: 工单所属的原始订单(样品所属的订单)order_id: 工单关联的生成订单(从工单生成的订单)
正确的数据关系
对于从工单生成的订单36:
- 工单661-670:
test_order_id= 23(原始订单)order_id= 36(生成的订单)
- 订单36不应该有
test_order_id = 36的工单
排查步骤
1. 检查数据库
运行 check_duplicate_workorders.sql 脚本,查看:
- 订单36-39是否有
test_order_id = 36-39的工单 - 如果有,说明系统自动创建了新工单
2. 检查代码
已检查的位置(未发现自动创建逻辑):
- ✅
test_order_service.py的add_test_order_services- 没有自动创建工单 - ✅
test_work_order_service.py的generate_order_from_work_orders_services- 没有自动创建工单 - ✅ 前端
test_work_order/index.vue的confirmGenerateOrder- 没有额外调用
3. 可能的原因
- 数据库触发器(Trigger)
- 应用层的事件监听器
- 其他后台任务或定时任务
- 前端的其他页面逻辑
解决方案
方案1:清理重复工单(如果已经产生)
-- 删除为订单36-39自动创建的工单(test_order_id = 36-39)
DELETE FROM test_work_order
WHERE test_order_id IN (36, 37, 38, 39)
AND order_id IS NULL;
方案2:防止自动创建
如果找到了自动创建的逻辑,需要:
- 添加判断:检查订单是否是从工单生成的
- 如果是从工单生成的,跳过自动创建工单的逻辑
方案3:修改业务逻辑
明确区分两种订单类型:
- 原始订单:有样品,需要生成工单
- 汇总订单:从工单生成,不需要再生成工单
验证方法
1. 查看数据库
-- 查看订单36的所有工单
SELECT
id,
name,
test_order_id,
order_id,
test_eut_id
FROM test_work_order
WHERE test_order_id = 36 OR order_id = 36;
2. 预期结果
- 应该只有
order_id = 36的工单(661-670) - 不应该有
test_order_id = 36的工单
3. 如果有问题
- 会看到
test_order_id = 36的新工单 - 这些工单是自动创建的,需要找到创建的源头
下一步
- 运行
check_duplicate_workorders.sql查看数据 - 确认是否存在重复工单
- 如果存在,找到创建的源头并修复
- 清理已经产生的重复数据