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

101 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 工单循环创建问题分析
## 问题描述
从工单生成订单时,系统可能会为新订单自动创建新的工单分组,导致混乱的循环关系。
## 问题场景
### 正常流程
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. 清理已经产生的重复数据