ETest-Vue-FastAPI/样品生成工单不创建订单修复说明.md

5.1 KiB
Raw Permalink Blame History

样品生成工单不创建订单修复说明

问题描述

之前的设计中从样品生成工单时会自动创建一个测试订单TestOrder用于分组工单。这导致

  1. 订单列表中出现大量自动创建的订单,让人混乱
  2. 从工单生成的订单和从样品生成的订单混在一起,难以区分
  3. 用户希望订单只通过"从工单生成订单"功能创建

解决方案

破坏原有数据关系,让样品生成工单时不再创建订单:

  1. 修改数据库:test_work_order.test_order_id 改为可空
  2. 修改代码:样品生成工单时不创建订单,test_order_id 设为 NULL
  3. 工单独立存在,只有通过"生成订单"功能才会关联到订单

修改内容

1. 数据库修改

文件: remove_sample_order_creation.sql

-- 修改 test_work_order.test_order_id 字段为可空
ALTER TABLE test_work_order 
MODIFY COLUMN test_order_id INTEGER NULL COMMENT '工单分组(可选)';

执行步骤:

# 在数据库服务器上执行
mysql -u root -p your_database < remove_sample_order_creation.sql

2. 后端代码修改

2.1 修改 DO 模型

文件: ruoyi-fastapi-backend/module_admin/system/entity/do/test_work_order_do.py

# 修改前
test_order_id = Column(Integer, nullable=False, comment='工单分组')

# 修改后
test_order_id = Column(Integer, nullable=True, comment='工单分组(可选)')

2.2 修改样品生成工单逻辑

文件: ruoyi-fastapi-backend/module_admin/service/warehouse_sample_service.py

主要变更:

  1. 移除订单创建代码第68-82行

    • 不再创建 TestOrder 对象
    • 不再调用 db.add(test_order)db.flush()
  2. test_eut 不关联订单

    # 修改前
    test_eut = TestEut(
        test_order_id=order_id,  # 关联订单
        ...
    )
    
    # 修改后
    test_eut = TestEut(
        test_order_id=None,  # 不关联订单
        ...
    )
    
  3. 工单不关联订单

    # 修改前
    work_order = TestWorkOrder(
        test_order_id=order_id,  # 关联订单
        ...
    )
    
    # 修改后
    work_order = TestWorkOrder(
        test_order_id=None,  # 不关联订单
        ...
    )
    

新的业务流程

修改前

样品 → 自动创建订单 → 生成工单test_order_id = 订单ID
                    ↓
                工单列表显示
                    ↓
            选择工单生成新订单order_id = 新订单ID

修改后

样品 → 生成工单test_order_id = NULL, order_id = NULL
         ↓
     工单列表显示
         ↓
   选择工单生成订单order_id = 订单ID
         ↓
   订单详情显示关联的工单

数据关系变化

test_work_order 表字段

  • test_order_id: 工单分组(可选,现在为 NULL
  • order_id: 关联的订单ID从工单生成订单后才有值

工单状态

  1. 新建工单: test_order_id = NULL, order_id = NULL
  2. 已汇总到订单: test_order_id = NULL, order_id = 订单ID

影响分析

正面影响

订单列表不再有自动创建的订单,更清晰 工单独立存在,可以灵活组合成订单 订单只通过"生成订单"功能创建,流程统一

需要注意

⚠️ 现有的从样品自动创建的订单仍然存在 ⚠️ 工单列表查询需要处理 test_order_id = NULL 的情况 ⚠️ 订单详情查询需要通过 order_id 查询工单

验证步骤

1. 执行数据库迁移

mysql -u root -p your_database < remove_sample_order_creation.sql

2. 重启后端服务

cd ruoyi-fastapi-backend
# 停止服务
# 启动服务

3. 测试样品生成工单

  1. 进入样品管理页面
  2. 选择样品,点击"生成工单"
  3. 验证: 订单列表中不应该出现新订单
  4. 验证: 工单列表中应该显示新工单

4. 测试工单生成订单

  1. 进入工单列表
  2. 选择工单,点击"生成订单"
  3. 验证: 订单列表中出现新订单
  4. 验证: 工单列表中不再显示这些工单(已汇总)
  5. 验证: 点击订单详情,能看到关联的工单

清理旧数据(可选)

如果需要清理之前自动创建的订单:

-- 查看从样品自动创建的订单
SELECT 
    o.id AS order_id,
    o.name AS order_name,
    o.create_time,
    COUNT(w.id) AS work_order_count
FROM test_order o
LEFT JOIN test_work_order w ON w.test_order_id = o.id
WHERE w.order_id IS NULL
GROUP BY o.id, o.name, o.create_time
ORDER BY o.id DESC;

-- 删除这些订单(谨慎操作,先备份!)
-- DELETE FROM test_order 
-- WHERE id IN (
--     SELECT DISTINCT test_order_id 
--     FROM test_work_order 
--     WHERE order_id IS NULL
-- );

相关文件

  • remove_sample_order_creation.sql - 数据库迁移脚本
  • ruoyi-fastapi-backend/module_admin/system/entity/do/test_work_order_do.py - 工单DO模型
  • ruoyi-fastapi-backend/module_admin/service/warehouse_sample_service.py - 样品服务
  • 工单生成订单功能实现进度.md - 总体进度文档

完成时间

2026-01-08