日期: 2026-05-24 状态: 待审核 模块: 临时质检工单 + 临时生产工单
系统已有 4 个模块:
| 模块 | 表名 | 说明 |
|---|---|---|
| 入库质检工单 | biz_qc_work_order |
关联样本接收记录和协议 |
| 质检任务 | biz_qc_task |
由入库质检工单配置检测项目后自动生成 |
| 入库生产工单 | biz_production_work_order |
关联样本接收记录和协议 |
| 生产任务 | biz_production_task |
由入库生产工单手动派发创建 |
新增 2 个临时工单模块,复用现有任务生成机制,在任务表中记录工单来源:
| 决策项 | 选择 | 原因 |
|---|---|---|
| 关联关系 | 完全不关联 reception/protocol | 临时工单独立于入库流程 |
| 来源追踪 | 任务表新增 order_source 字段 |
最小侵入,清晰区分来源 |
| 任务生成方式 | 配置→自动批量生成 | 和入库模式一致 |
| 工单字段 | 极简(工单号+状态+备注) | 用户要求简单 |
| 工单号前缀 | LSZJ(临时质检)、LSSC(临时生产) | 区分于入库前缀 |
| 实现方案 | 新建独立临时工单表 | 和入库完全解耦,避免混合复杂度 |
biz_temp_qc_work_order(临时质检工单)DROP TABLE IF EXISTS biz_temp_qc_work_order;
CREATE TABLE biz_temp_qc_work_order (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
work_order_no VARCHAR(64) NOT NULL COMMENT '工单号(LSZJ+日期+序号)',
work_order_status VARCHAR(20) NOT NULL DEFAULT 'dpz' COMMENT '状态: dpz=待配置, ypz=已配置, ywc=已完成',
configured_time DATETIME DEFAULT NULL COMMENT '配置时间',
configured_by VARCHAR(64) DEFAULT NULL COMMENT '配置人',
has_lab TINYINT DEFAULT 0 COMMENT '是否含实验室自检: 0=否, 1=是',
has_third_party TINYINT DEFAULT 0 COMMENT '是否含第三方检测: 0=否, 1=是',
third_party_fee_total DECIMAL(12,2) DEFAULT NULL COMMENT '第三方费用合计',
tenant_no VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户编号',
order_num INT DEFAULT NULL COMMENT '排序号',
remark VARCHAR(512) DEFAULT NULL COMMENT '备注',
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人id',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记: 0=正常, 1=已删除',
PRIMARY KEY (id),
KEY idx_temp_qc_wo_tenant (tenant_no, del_flag),
KEY idx_temp_qc_wo_no (work_order_no, tenant_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='临时质检工单';
biz_temp_production_work_order(临时生产工单)DROP TABLE IF EXISTS biz_temp_production_work_order;
CREATE TABLE biz_temp_production_work_order (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
work_order_no VARCHAR(64) NOT NULL COMMENT '工单号(LSSC+日期+序号)',
work_order_status VARCHAR(20) NOT NULL DEFAULT 'dpz' COMMENT '状态: dpz=待配置, jxz=进行中, ywc=已完成',
configured_time DATETIME DEFAULT NULL COMMENT '配置时间',
configured_by VARCHAR(64) DEFAULT NULL COMMENT '配置人',
tenant_no VARCHAR(64) NOT NULL DEFAULT '' COMMENT '租户编号',
order_num INT DEFAULT NULL COMMENT '排序号',
remark VARCHAR(512) DEFAULT NULL COMMENT '备注',
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人id',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
del_flag TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记: 0=正常, 1=已删除',
PRIMARY KEY (id),
KEY idx_temp_prod_wo_tenant (tenant_no, del_flag),
KEY idx_temp_prod_wo_no (work_order_no, tenant_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='临时生产工单';
order_source 字段-- 质检任务表新增来源字段
ALTER TABLE biz_qc_task
ADD COLUMN order_source VARCHAR(20) NOT NULL DEFAULT 'inbound'
COMMENT '工单来源: inbound=入库, temporary=临时' AFTER work_order_id;
-- 生产任务表新增来源字段
ALTER TABLE biz_production_task
ADD COLUMN order_source VARCHAR(20) NOT NULL DEFAULT 'inbound'
COMMENT '工单来源: inbound=入库, temporary=临时' AFTER work_order_id;
临时质检工单复用现有 biz_qc_work_order_lab_item 和 biz_qc_work_order_third_item 表,通过 order_source 字段区分来源。
-- 实验室项目明细表新增来源字段
ALTER TABLE biz_qc_work_order_lab_item
ADD COLUMN order_source VARCHAR(20) NOT NULL DEFAULT 'inbound'
COMMENT '工单来源: inbound=入库, temporary=临时' AFTER work_order_id;
-- 第三方项目明细表新增来源字段
ALTER TABLE biz_qc_work_order_third_item
ADD COLUMN order_source VARCHAR(20) NOT NULL DEFAULT 'inbound'
COMMENT '工单来源: inbound=入库, temporary=临时' AFTER work_order_id;
biz_temp_qc_work_order
├─(work_order_id + order_source='temporary')→ biz_qc_work_order_lab_item
├─(work_order_id + order_source='temporary')→ biz_qc_work_order_third_item
└─(work_order_id + order_source='temporary')→ biz_qc_task
→ biz_qc_task_result
biz_temp_production_work_order
└─(work_order_id + order_source='temporary')→ biz_production_task
→ biz_production_task_step + 子表
| 层 | 临时质检工单 | 临时生产工单 |
|---|---|---|
| Model | models.py 新增 BizTempQcWorkOrder |
models.py 新增 BizTempProductionWorkOrder |
| Schema | 新建 schemas/temp_qc_work_order.py |
新建 schemas/temp_production_work_order.py |
| CRUD | 新建 crud/temp_qc_work_order.py |
新建 crud/temp_production_work_order.py |
| API | api/qc.py 新增路由组 |
api/production.py 新增路由组 |
临时质检工单:
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/admin/temp-qc-work-orders |
创建 |
| GET | /api/admin/temp-qc-work-orders |
列表 |
| GET | /api/admin/temp-qc-work-orders/{id} |
详情 |
| DELETE | /api/admin/temp-qc-work-orders/{id} |
删除(软删除) |
| POST | /api/admin/temp-qc-work-orders/{id}/configure |
配置检测项目(→自动生成任务) |
临时生产工单:
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/admin/temp-production-work-orders |
创建 |
| GET | /api/admin/temp-production-work-orders |
列表 |
| GET | /api/admin/temp-production-work-orders/{id} |
详情 |
| DELETE | /api/admin/temp-production-work-orders/{id} |
删除(软删除) |
| POST | /api/admin/temp-production-work-orders/{id}/configure |
配置→自动生成任务 |
LSZJ + YYYYMMDD + 4位序号(如 LSZJ202605240001)LSSC + YYYYMMDD + 4位序号(如 LSSC202605240001)_gen_qc_work_order_no() 模式,按日期+租户查询当日最大序号+1极简创建:仅需 remark(可选),自动生成工单号,状态默认 dpz(待配置)。
流程与入库质检工单的 configure_work_order() 一致:
用户选择检测项目 (lab_item_ids, third_party_ids)
├─ 校验工单状态 (dpz/ypz)
├─ 清除旧的待执行任务(order_source='temporary')
├─ 遍历 lab_item_ids:
│ ├─ 创建 BizQcWorkOrderLabItem (order_source='temporary')
│ └─ 调用 qc_task.create_task_for_line(order_source='temporary')
├─ 遍历 third_party_ids:
│ ├─ 创建 BizQcWorkOrderThirdItem (order_source='temporary')
│ └─ 调用 qc_task.create_task_for_line(order_source='temporary')
└─ 更新工单状态为 'ypz'
与入库生产工单完全一致,选择工艺路线后创建生产任务(自动克隆路线步骤+4类子表):
用户配置任务信息 (task_name, task_type, route_id 工艺路线, description 可选)
├─ 创建 BizProductionTask (order_source='temporary', task_status='dpz')
├─ 如果选择了工艺路线: _clone_route_to_task() — 深拷贝路线步骤 + 子表
├─ 工单状态更新为 'jxz'
└─ 流程与入库生产工单的 create_production_task() 完全一致
后需复用 production_task.create_production_task() + _clone_route_to_task() 机制。
ywcsync_production_work_order_status_from_tasks() 逻辑)软删除(del_flag=1),级联删除关联的任务(仅 order_source='temporary')和明细行。
| 类型 | 临时质检工单 | 临时生产工单 |
|---|---|---|
| API | 新建 api/temp-qc-work-order.ts |
新建 api/temp-production-work-order.ts |
| 视图 | 新建 views/quality-inspection/temp-qc-work-order/index.vue |
新建 views/production/temp-production-work-order/index.vue |
参照模板页 views/system/unit/index.vue(标准列表页),功能简化:
同样参照标准列表页:
在现有质检任务和生产任务列表页中:
inbound → Tag <el-tag type="success" size="small">入库</el-tag>temporary → Tag <el-tag type="warning" size="small">临时</el-tag>在 src/router/modules/ 中对应的质量检验和生产管理路由组下新增子路由:
// 质量检验路由组下
{ path: 'temp-qc-work-order', name: 'TempQcWorkOrder', component: () => import('@views/quality-inspection/temp-qc-work-order/index.vue') }
// 生产管理路由组下
{ path: 'temp-production-work-order', name: 'TempProductionWorkOrder', component: () => import('@views/production/temp-production-work-order/index.vue') }
需要在系统菜单管理中添加对应菜单项(数据库 sys_menu 表插入)。
以下列出需要修改的现有文件(非新增文件):
| 文件 | 修改内容 |
|---|---|
backend/app/models/models.py |
新增 BizTempQcWorkOrder、BizTempProductionWorkOrder 模型;BizQcTask、BizProductionTask 新增 order_source 列;BizQcWorkOrderLabItem、BizQcWorkOrderThirdItem 新增 order_source 列 |
backend/app/crud/qc_task.py |
create_task_for_line() 接受 order_source 参数;list_tasks() 展示 order_source;_task_to_dict() 序列化 order_source |
backend/app/crud/production_task.py |
create_production_task() 接受 order_source 参数;list_production_tasks() 展示 order_source;序列化 order_source |
backend/app/api/qc.py |
新增临时质检工单路由组 |
backend/app/api/production.py |
新增临时生产工单路由组 |
backend/app/api/__init__.py |
如有新路由文件则注册 |
web-admin/src/api/qc-task.ts |
类型定义新增 orderSource 字段 |
web-admin/src/api/production-task.ts |
类型定义新增 orderSource 字段 |
web-admin/src/views/quality-inspection/qc-task/index.vue |
列表新增"来源"Tag 列 |
web-admin/src/views/production/production-task/index.vue |
列表新增"来源"Tag 列 |
docs/sql/zkxw.sql |
同步新增表和 ALTER 语句 |
inbound,无需数据迁移work_order_id 关联时,默认只查 order_source='inbound' 或不加过滤(因为现有数据的 work_order_id 不会和临时工单冲突——指向不同表的主键)order_source='temporary' 的任务,不影响入库任务_clone_route_to_task() 机制,与入库生产工单完全一致(步骤+试剂+耗材+产出物+数据采集项全部深拷贝)