库存管理
阅读本教程需要你对 RB 的 实体管理、触发器 有一定了解基础,否则可能无法进行。难度 ⭐⭐⭐⭐
通过本教程你将学习到如何使用 RB 打造一个库存管理系统。本教程旨在抛砖引玉,因此仅会对库存的主要/核心业务进行实现,你可以此为基础自行扩展。
需求场景
- 入库时自动计算总入库量
- 出库时自动计算总出库量
- 出库时若库存数量不足则禁止出库
- 自动计算仓库中的可用库存数量
建立业务实体
实体与关系
实体 |
主要字段 |
说明 |
商品 |
商品名称 |
基础数据 |
仓库 |
仓库名称 |
基础数据 |
入库 |
入库商品、入库仓库、数量 |
- |
出库 |
出库商品、出库仓库、数量 |
- |
库存 |
商品、仓库、总入库量、总出库量、当前库存 |
- |
业务实体(及字段)的更多使用说明请参见 业务实体
业务流程
库存计算
通过 分组聚合 触发器,可以对“总入库量”、“总出库量”进行计算。通过 字段更新 触发器,可以对“当前库存”进行计算。
计算总入库量

- 使用 分组聚合 触发器(源实体为“入库”;触发动作为“新建”、“更新”、“删除”)
- 因为要对库存中的总入库量进行计算,所以目标实体为“库存”
- 通过“仓库”+“商品”字段组合来找到对应的库存记录,以更新计算值
- 源字段“数量”求和到目标字段“总入库量”
- 若在库存中无法通过“仓库”+“商品”找到对应记录,则自动新建
计算总出库量

- 使用 分组聚合 触发器(源实体为“出库”;触发动作为“新建”、“更新”、“删除”)
- 因为要对库存中的总出库量进行计算,所以目标实体为“库存”
- 通过“仓库”+“商品”字段组合来找到对应的库存记录,以更新计算值
- 源字段“数量”求和到目标字段“总出库量”
- 若在库存中无法通过“仓库”+“商品”找到对应记录,则自动新建
计算当前库存

- 使用 字段更新 触发器(源实体为“库存”;触发动作为“新建”、“更新”)
- 因为要对库存中的当前库存进行计算,所以目标实体为“库存”
- 通过计算公式
总入库量 - 总出库量
可以得出“当前库存”
- 因为“当前库存”是自动计算的,所以前台的输入并无意义,可以将其设为只读
- 请特别注意执行优先级,因为“当前库存”的计算依赖“总入库量”和“总出库量”字段,而这两个字段也是经由触发器计算得出,因此要保证这两个触发器先被执行
数据管控
在出库时,不希望没有库存的商品也被出库,因此需要进行当前库存数量的校验。
校验当前库存

- 使用 数据校验 触发器(源实体为“库存”;触发动作为“新建”、“更新”)
- 设置校验条件为“当前库存大于等于 0”
- 优先级设置为
-1
,让其晚于“计算当前库存”执行
触发器的更多使用说明请参见 触发器
更好的设计
本库存管理设计在现实场景中可能存在一定不足,你可根据自身需要进行扩展。这些不足包括:
- “入库”和“出库”添加明细实体,以便一次对多个商品进行出入库操作
- 字段不够丰富,可以根据需要添加其他字段,例如商品的单位、价格等
- 通过字段更新触发器对不同的入库单位进行换算(如 1 箱 = 12 瓶),使其更易使用