2026-08-17-qc-inbound-lab-storage-code-sort-design.md 3.6 KB

入库质检列表按实验室入库编码排序 — 设计文档

日期: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. 验收

  1. 细胞存储、科研捐赠:两页列表均为「编码倒序,同编码创建时间倒序」;翻页顺序连续。
  2. 无编码按空串参与倒序;同一样本多工单时间新的在上。
  3. 其它 Tab 无回归。

7. 非目标

  • 数据库迁移 / 工单表冗余字段
  • 修改「全部」Tab 中入库卡片的全局排序策略
  • 改变同协议互链胶囊的展示顺序规则