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

3.1 KiB
Raw Permalink Blame 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.pyadd_test_order_services - 没有自动创建工单
  • test_work_order_service.pygenerate_order_from_work_orders_services - 没有自动创建工单
  • 前端 test_work_order/index.vueconfirmGenerateOrder - 没有额外调用

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防止自动创建

如果找到了自动创建的逻辑,需要:

  1. 添加判断:检查订单是否是从工单生成的
  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 的新工单
  • 这些工单是自动创建的,需要找到创建的源头

下一步

  1. 运行 check_duplicate_workorders.sql 查看数据
  2. 确认是否存在重复工单
  3. 如果存在,找到创建的源头并修复
  4. 清理已经产生的重复数据