3.6 KiB
3.6 KiB
入库质检列表按实验室入库编码排序 — 设计文档
日期:2026-08-17
状态:已实现
范围:【质检工单】【我的质检任务】的「细胞存储」「科研捐赠」Tab
1. 背景
当前入库列表后端按工单 create_time DESC 分页;前端卡片再按「协议组最新创建时间 + 样本编码」重排,组内工单另按触发来源权重 + 创建时间升序。用户希望细胞存储 / 科研捐赠统一按实验室入库编码倒序,同编码下按创建时间倒序,且跨页一致。
2. 已确认规则
| 项 | 约定 |
|---|---|
| 页面 | 仅【质检工单】+【我的质检任务】 |
| Tab | 仅 inbound_cell_storage、inbound_research_donation |
| 主排序 | lab_storage_code / labStorageCode 字符串倒序 |
| 次排序 | 工单 create_time / createTime 倒序 |
| 空编码 | 按空字符串 '' 直接参与倒序比较 |
| 分页 | 后端按上述规则排序后再分页(跨页一致) |
| 其它 Tab | 「全部 / 出库 / 临时」等不改 |
3. 方案(方案 1)
后端入库两 Tab 专用 ORDER BY(JOIN 样本接收取编码)+ 前端展示排序对齐同一规则。
不采用:仅前端页内重排;工单表冗余 lab_storage_code。
4. 后端
4.1 编码来源
lab_storage_code 在 biz_sample_reception,不在 biz_qc_work_order。列表排序通过 LEFT JOIN 取得,COALESCE(lab_storage_code, '')。
JOIN 对齐现有 enrich 语义:优先 BizQcWorkOrder.reception_id;无接收 ID 时再按 sample_code + tenant(及必要的 del_flag)关联,避免生产触发等无 reception_id 的工单编码全空导致乱序。
4.2 质检工单 list_work_orders
- 当
reception_source ∈ {cell_storage, research_donation}:
ORDER BY COALESCE(lab_storage_code, '') DESC, BizQcWorkOrder.create_time DESC - 其它来源:保持
create_time DESC - 不改筛选条件与返回字段结构
4.3 我的质检任务 list_mine_tasks
- 查询已 JOIN 工单;当请求带入库两 Tab 的
reception_source时:
ORDER BY COALESCE(lab_storage_code, '') DESC, BizQcWorkOrder.create_time DESC,并以work_order_no/task_no作为稳定次序 - 其它 Tab:保持现有任务
create_time DESC等规则 - 前端仍
fetchAllMineTasks拉全量;聚合后按同一规则排序再客户端分页
5. 前端
| 文件 | 改动 |
|---|---|
qc-work-order-inbound-sample-cards.ts |
buildInboundSampleListItems:卡片序改为编码倒序 → 组内最大 createTime 倒序;去掉「协议组再样本编码」主序 |
qc-work-order-groups.ts |
仅入库路径组内排序改为 createTime 倒序(取消触发来源权重);出库 groupOutboundQcWorkOrders 保持原组内规则不变 |
qc-mine-task-groups.ts |
入库两 Tab:分页前对工单条目按编码 DESC → 工单创建时间 DESC 排序 |
不改:同协议样本胶囊内按 sampleCode 的互链排序;全部 / 出库 / 临时展示逻辑。
卡片代表字段:
- 编码:组内首个非空
labStorageCode,否则'' - 时间:组内最大
createTime(同编码下新的在前)
6. 验收
- 细胞存储、科研捐赠:两页列表均为「编码倒序,同编码创建时间倒序」;翻页顺序连续。
- 无编码按空串参与倒序;同一样本多工单时间新的在上。
- 其它 Tab 无回归。
7. 非目标
- 数据库迁移 / 工单表冗余字段
- 修改「全部」Tab 中入库卡片的全局排序策略
- 改变同协议互链胶囊的展示顺序规则