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

188 lines
5.1 KiB
Markdown
Raw 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.

# 样品生成工单不创建订单修复说明
## 问题描述
之前的设计中从样品生成工单时会自动创建一个测试订单TestOrder用于分组工单。这导致
1. 订单列表中出现大量自动创建的订单,让人混乱
2. 从工单生成的订单和从样品生成的订单混在一起,难以区分
3. 用户希望订单只通过"从工单生成订单"功能创建
## 解决方案
**破坏原有数据关系**,让样品生成工单时不再创建订单:
1. 修改数据库:`test_work_order.test_order_id` 改为可空
2. 修改代码:样品生成工单时不创建订单,`test_order_id` 设为 NULL
3. 工单独立存在,只有通过"生成订单"功能才会关联到订单
## 修改内容
### 1. 数据库修改
**文件**: `remove_sample_order_creation.sql`
```sql
-- 修改 test_work_order.test_order_id 字段为可空
ALTER TABLE test_work_order
MODIFY COLUMN test_order_id INTEGER NULL COMMENT '工单分组(可选)';
```
**执行步骤**:
```bash
# 在数据库服务器上执行
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`
```python
# 修改前
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 不关联订单**
```python
# 修改前
test_eut = TestEut(
test_order_id=order_id, # 关联订单
...
)
# 修改后
test_eut = TestEut(
test_order_id=None, # 不关联订单
...
)
```
3. **工单不关联订单**
```python
# 修改前
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. 执行数据库迁移
```bash
mysql -u root -p your_database < remove_sample_order_creation.sql
```
### 2. 重启后端服务
```bash
cd ruoyi-fastapi-backend
# 停止服务
# 启动服务
```
### 3. 测试样品生成工单
1. 进入样品管理页面
2. 选择样品,点击"生成工单"
3. **验证**: 订单列表中不应该出现新订单
4. **验证**: 工单列表中应该显示新工单
### 4. 测试工单生成订单
1. 进入工单列表
2. 选择工单,点击"生成订单"
3. **验证**: 订单列表中出现新订单
4. **验证**: 工单列表中不再显示这些工单(已汇总)
5. **验证**: 点击订单详情,能看到关联的工单
## 清理旧数据(可选)
如果需要清理之前自动创建的订单:
```sql
-- 查看从样品自动创建的订单
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