提交
This commit is contained in:
1 parent
0b50eff3d8
commit
ee364e24aa
323 files changed
+57731
-35766
No files matched your search
@@ -0,0 +1,2 @@
|
||||
schema: spec-driven
|
||||
created: 2026-06-25
|
||||
@@ -0,0 +1,36 @@
|
||||
# 质检检测批次 — 技术设计
|
||||
|
||||
权威产品决策见 `docs/superpowers/specs/2026-06-25-qc-inspection-batch-design.md`。
|
||||
|
||||
## 架构
|
||||
|
||||
工单 → `biz_qc_work_order_inspection_batch` → lab/third 明细(`batch_id`)→ `biz_qc_task` → `biz_qc_task_assignee`(从 `biz_qc_batch_assignee` 同步)。
|
||||
|
||||
批次无状态字段;进度由任务聚合。
|
||||
|
||||
## 数据表
|
||||
|
||||
- `biz_qc_work_order_inspection_batch`
|
||||
- `biz_qc_batch_assignee`
|
||||
- `biz_qc_work_order_lab_item.batch_id`
|
||||
- `biz_qc_work_order_third_item.batch_id`
|
||||
- 可选 `biz_qc_task.batch_id` 冗余
|
||||
|
||||
## API
|
||||
|
||||
- `POST /qc-work-orders/{id}/configure` — body `batches[]`;扁平 `labItemIds` 兼容为单批次
|
||||
- `GET /qc-work-orders/{id}/inspection-batches` — 批次 + tasks 嵌套
|
||||
|
||||
## 同步策略
|
||||
|
||||
按批次 ID 比对:增删改 lab/third 行;任务 assignee 调用 `sync_assignees_for_task` 与批次负责人一致。
|
||||
|
||||
## 前端
|
||||
|
||||
- `index.vue` 配置弹窗:批次卡片
|
||||
- `QcWorkOrderBatchSubList.vue`:折叠批次 + 内嵌任务卡片
|
||||
- `qc-mine-task-groups.ts`:工单下按批次分组
|
||||
|
||||
## 迁移
|
||||
|
||||
SQL 脚本为每个已配置工单创建 `B01` 默认批次并回填 `batch_id`。
|
||||
@@ -0,0 +1,31 @@
|
||||
## Why
|
||||
|
||||
质检工单配置检测时,每个检测主数据项目在同一工单内只能选一次,负责人需按项目逐一指派,列表平铺展示任务,无法满足客户「多批次、跨批重复项目、批次级负责人」的质检组织方式。
|
||||
|
||||
## What Changes
|
||||
|
||||
- 新增 **检测批次** 实体:工单下可配置多个批次,`ypz` 后可追加批次
|
||||
- 批次内可选 lab + 第三方项目(批次内不重复,跨批次可重复同一主数据项目)
|
||||
- **批次级多人负责人**,同步至批次内全部任务的 `biz_qc_task_assignee`
|
||||
- **BREAKING**:配置检测 API 请求体改为 `batches[]`(保留扁平字段短期兼容转单批次)
|
||||
- 新增 `GET /qc-work-orders/{id}/inspection-batches` 供列表展开
|
||||
- 配置/调整检测弹窗改为批次卡片 UI
|
||||
- 质检工单、我的质检任务:列表先展示批次,展开后展示检测项目/任务
|
||||
- DDL + 历史数据迁移(默认批次 1)
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
- `qc-inspection-batch`: 检测批次数据模型、配置/调整 API、批次列表 API、迁移与任务 assignee 同步
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
(无 `openspec/specs/` 基线;行为变更记录于本变更 spec)
|
||||
|
||||
## Impact
|
||||
|
||||
- **后端**:`models.py`、`qc_work_order.py`、`qc.py` API;新 `qc_inspection_batch.py` CRUD
|
||||
- **SQL**:`docs/sql/` 新表 + alter + 迁移脚本
|
||||
- **前端**:`qc-work-order/index.vue` 配置弹窗、`QcWorkOrderTaskSubList` / 新 `QcWorkOrderBatchSubList`、`qc-mine-task-groups.ts`、`qc-work-order.ts` API
|
||||
- **文档**:`docs/superpowers/specs/2026-06-25-qc-inspection-batch-design.md` 为实现权威
|
||||
@@ -0,0 +1,51 @@
|
||||
### Requirement: 检测批次数据模型
|
||||
|
||||
系统 SHALL 提供 `biz_qc_work_order_inspection_batch` 与 `biz_qc_batch_assignee` 表;lab/third 明细表 SHALL 包含 `batch_id` 外键。
|
||||
|
||||
#### Scenario: 新建批次
|
||||
|
||||
- **WHEN** 用户在 `dpz` 或 `ypz` 工单上提交配置且包含新批次
|
||||
- **THEN** 系统创建批次记录,`batch_no` 为 `{work_order_no}-Bnn`,`batch_name` 为 `YYYYMMDD检测`(同日多批递增 `-2` 后缀)
|
||||
|
||||
### Requirement: 批次内项目唯一与跨批重复
|
||||
|
||||
系统 SHALL 允许同一 `lab_test_item_id` / `third_party_item_id` 出现在同一工单的不同批次;同一批次内 SHALL NOT 重复同一主数据项目 ID。
|
||||
|
||||
#### Scenario: 批次内重复项目
|
||||
|
||||
- **WHEN** 提交的配置在同一批次 lab 列表含重复 ID
|
||||
- **THEN** 返回 400 校验错误
|
||||
|
||||
### Requirement: 批次负责人
|
||||
|
||||
每个批次 SHALL 配置至少一名负责人(多名允许);配置保存时 SHALL 将该负责人集合同步至批次内全部未删除任务的 `biz_qc_task_assignee`。
|
||||
|
||||
#### Scenario: 修改批次负责人
|
||||
|
||||
- **WHEN** 调整检测修改某批次负责人
|
||||
- **THEN** 该批次下所有任务 assignee 更新,「我的质检任务」对新负责人可见
|
||||
|
||||
### Requirement: 配置检测 API
|
||||
|
||||
`POST /web/admin/qc-work-orders/{id}/configure` SHALL 接受 `batches[]`;每批含 `assigneeUserIds`、`hasLab`、`hasThirdParty`、`labItemIds`、`thirdPartyItemIds`。`dpz` 首次配置后工单状态为 `ypz`;`ypz` 可追加批次。
|
||||
|
||||
### Requirement: 批次列表 API
|
||||
|
||||
`GET /web/admin/qc-work-orders/{id}/inspection-batches` SHALL 返回批次列表,每项含 `tasks` 嵌套(结构与任务列表项一致)及 `taskCount` / `completedTaskCount`。
|
||||
|
||||
### Requirement: 列表 UI 批次层级
|
||||
|
||||
质检工单与我的质检任务页面 SHALL 在工单展开区先展示检测批次,展开批次后展示检测项目任务卡片;任务级操作(开始、填写结果)不变。
|
||||
|
||||
### Requirement: 只读质检信息批次展示
|
||||
|
||||
协议单/捐赠单/入库放行/出库放行等查看弹窗中的质检信息、以及质检工单「查看」弹窗 SHALL 按检测批次分组展示任务;多批次时以 Tab 或分节展示批次名、批次编号、负责人与进度。
|
||||
|
||||
#### Scenario: 协议样本卡质检信息
|
||||
|
||||
- **WHEN** 用户在协议单查看弹窗打开含多批次质检工单的样本卡
|
||||
- **THEN** 质检信息区按批次 Tab 展示各批任务摘要,可跳转任务详情
|
||||
|
||||
### Requirement: 详情内嵌 inspectionBatches
|
||||
|
||||
工单详情、`qcInfo`(样本关联摘要)、出库质检详情 SHALL 可选内嵌 `inspectionBatches` 字段,结构与 `GET .../inspection-batches` 一致,以减少前端重复请求。
|
||||
@@ -0,0 +1,36 @@
|
||||
# Tasks: qc-inspection-batch
|
||||
|
||||
## 1. Database & Models
|
||||
|
||||
- [x] 1.1 `docs/sql/qc_inspection_batch.sql` — 新表 + alter `batch_id` + 数据迁移
|
||||
- [x] 1.2 `models.py` — `BizQcWorkOrderInspectionBatch`、`BizQcBatchAssignee`;明细/任务 `batch_id`
|
||||
- [x] 1.3 更新 `待同步到生产的sql脚本`;`migrate_qc_inspection_batch_data.sql` 历史迁移
|
||||
- [ ] 1.4 合并到 `docs/sql/zkxw.sql` 全量基线(待下次库导出)
|
||||
|
||||
## 2. Backend
|
||||
|
||||
- [x] 2.1 `crud/qc_inspection_batch.py` — 批次 CRUD、同步 lab/third、assignee、configure
|
||||
- [x] 2.2 `configure_work_order` 改为批次数组;扁平 body 兼容单批
|
||||
- [x] 2.3 `GET /qc-work-orders/{id}/inspection-batches`
|
||||
- [x] 2.4 工单详情 / qcInfo / outbound-detail 内嵌 `inspectionBatches`
|
||||
|
||||
## 3. Frontend — 配置弹窗
|
||||
|
||||
- [x] 3.1 `qc-work-order.ts` / `qc-inspection-batch.ts` — 类型与 API
|
||||
- [x] 3.2 `QcWorkOrderConfigureBatches.vue` + `index.vue` 批次卡片配置 UI
|
||||
- [x] 3.3 校验:批次负责人、批次内不重复、至少一项检测
|
||||
|
||||
## 4. Frontend — 列表与只读展示
|
||||
|
||||
- [x] 4.1 `QcWorkOrderBatchSubList.vue`
|
||||
- [x] 4.2 `QcWorkOrderSingleCard` 改用批次列表(SampleGroup 经 SingleCard 继承)
|
||||
- [x] 4.3 我的任务:`QcWorkOrderBatchSubList` 按 `batchId` 分组 preset 任务
|
||||
- [x] 4.4 `SampleQcBatchReadonly` + `SampleQcInfoCards` 批次 Tab(协议/捐赠/放行等查看弹窗)
|
||||
- [x] 4.5 工单查看弹窗六 Tab:`QcWorkOrderSystemViewDialog` 按批次分节
|
||||
- [x] 4.6 任务详情弹窗补充「检测批次」字段;`loadQcInspectionBatches` 优先内嵌数据
|
||||
|
||||
## 5. Verification
|
||||
|
||||
- [ ] 5.1 执行迁移 SQL(本地)
|
||||
- [ ] 5.2 手工验收:双批次、跨批重复项目、追加批次、我的任务可见性
|
||||
- [ ] 5.3 手工验收:协议单/放行查看弹窗质检信息按批次展示;工单查看弹窗批次分节
|
||||
Reference in new issue
Block a user