188 lines
5.1 KiB
Markdown
188 lines
5.1 KiB
Markdown
|
|
# 样品生成工单不创建订单修复说明
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
之前的设计中,从样品生成工单时会自动创建一个测试订单(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
|