业务流程
试剂主流程
说明:
frontend的ReagentOrders页面通过reagentOrderAPI.list/create/approve/confirmArrival/stockIn访问后端。- app/api/reagent_orders.py 提供试剂订单基础 CRUD,app/api/reagent_orders_workflow.py 提供审批、到货和入库。
confirm-arrival会根据订单原因和存储信息决定直接入库、进入常用货架或暂存。stock-in会把试剂订单复制为Inventory记录,并同步库存状态、常用货架标记、剩余量和拼音字段。- 借用与归还会写入 app/models/inventory.py 中的
BorrowLog,并通过 app/api/inventory.py 更新库存状态。
耗材主流程
说明:
- 耗材从
frontend的ConsumableOrders页面进入 app/api/consumable_orders.py。 - 该接口负责创建、更新、审批、拒绝、完成、查询与导出。
complete仅允许申请人或管理员调用,并要求订单处于已审批状态。- 耗材不生成库存记录,数据保留在
consumable_order表中。
浏览器扩展导入流程
说明:
- 扩展通过 browser-extension/content/script.js 抓取购物车数据,并写入
chrome.storage.local.import_batch_latest。 /cart-import页面再通过 browser-extension/content/import-bridge.js 读取页面缓存。- 前端导入页最终调用
cartSyncAPI.importItems,由 app/api/cart_sync.py 创建试剂或耗材订单。 - 导入前会做基础校验和标准化,减少重复和脏数据进入数据库。
库存借用与常用货架
说明:
inventory.py提供借用、归还、手动添加、导入和导出等接口。- 常用货架由
register_common_shelf提供,前端CommonShelf页面只订阅相关 SSE 房间。 - app/services/sse_manager.py 负责广播
inventory和common_shelf相关事件,前端通过useSSE和sseStore处理重复、缺失和 stale 状态。
双轨状态机对照
| 维度 | 试剂订单 | 耗材订单 |
|---|---|---|
| 状态枚举 | pending/approved/rejected/arrived/stocked | pending/approved/rejected/completed |
| 是否进入库存 | 是(stock-in 后复制为 Inventory) | 否 |
| 核心校验字段 | cas_number、规格解析、拼音字段 | product_number、规格文本、拼音字段 |
| 角色敏感动作 | 审批/驳回通常由管理员执行 | 审批/驳回/完成受角色控制 |
| 实时事件 | reagent_orders + inventory + common_shelf | consumable_orders |
流程一致性校验点
- 订单转库存必须保留订单审计记录。
confirm-arrival的不同分支需要保持互斥且可追溯。common-shelf更新要关注分组字段和并发修改。- 借还与消耗要写
BorrowLog,不能只改库存数量。 - 前端局部 patch 失败时要标记 stale,并允许用户刷新。