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