ETest-Vue-FastAPI/工单循环创建问题分析.md

101 lines
3.1 KiB
Markdown
Raw Permalink Normal View History

# 工单循环创建问题分析
## 问题描述
从工单生成订单时,系统可能会为新订单自动创建新的工单分组,导致混乱的循环关系。
## 问题场景
### 正常流程
1. 原始订单23 → 有样品 → 生成工单661-670
2. 从工单661-670生成新订单36
3. 工单661-670的 `order_id` 更新为36
### 问题流程(如果存在)
1. 原始订单23 → 有样品 → 生成工单661-670
2. 从工单661-670生成新订单36
3. 工单661-670的 `order_id` 更新为36
4. **系统自动为订单36创建新的工单分组**(这是问题所在)
5. 新工单的 `test_order_id` = 36
6. 造成混乱订单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清理重复工单如果已经产生
```sql
-- 删除为订单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防止自动创建
如果找到了自动创建的逻辑,需要:
1. 添加判断:检查订单是否是从工单生成的
2. 如果是从工单生成的,跳过自动创建工单的逻辑
### 方案3修改业务逻辑
明确区分两种订单类型:
- **原始订单**:有样品,需要生成工单
- **汇总订单**:从工单生成,不需要再生成工单
## 验证方法
### 1. 查看数据库
```sql
-- 查看订单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` 的新工单
- 这些工单是自动创建的,需要找到创建的源头
## 下一步
1. 运行 `check_duplicate_workorders.sql` 查看数据
2. 确认是否存在重复工单
3. 如果存在,找到创建的源头并修复
4. 清理已经产生的重复数据