订单库存扣减
项目访问链接
https://zion.functorz.com/tool/qwEkPKRl8gq/WEB?code=L8RqQPWZTesG3&ref=4857164
简介
- 目标:实现一个安全的库存扣减流程,防止在高并发电商场景中出现超卖。
- 适用场景:秒杀、限时优惠,或任何高流量的结算过程。
- 核心逻辑:使用行为流执行带条件的数据库更新。系统仅在当前库存大于或等于请求数量时才执行扣减,从而在数据库层面保证数据一致性。
实现步骤
本教程基于预置的「常用组件样式」模板进行演示。模板页中仅预设了基础的常用组件的样式,不包条件状态、数据绑定或行为配置。在实际搭建时,可以选择直接从模板页复制所需组件到工作页,以节省样式调整时间,专注于核心逻辑的构建。
数据存储
数据模型
配置关系型数据库以存储商品、订单和用户帐户信息。
1. 数据表:商品
存储商品详情及核心库存控制字段。
| 字段名 | 类型 | 说明 |
|---|---|---|
| 商品名 | 文本 | 商品名称 |
| 价格 | 无限精度小数 | 单价 |
| 库存 | 长整数 | 可用数量(核心控制字段) |
2. 数据表:订单
作为交易凭证,关联用户和商品。
| 字段名 | 类型 | 说明 |
|---|---|---|
| 帐户_id | 长整数 | 关联到 帐户 表的外键 |
| 商品_id | 长整数 | 关联到 商品 表的外键 |
| 购买数量 | 长整数 | 购买的商品数量 |

逻辑与状态配置
行为流构建:
- 行为流入参:定义
product_id(长整数)和quantity(长整数)作为行为流的必填输入。

- 行为流变量:创建一个
status(文本)变量,用于向 UI 返回反馈信息。

- 获取 ID:使用获取 ID 节点获取
current_account_id(当前登录账户的 ID)。 - 条件分支:校验购买数量
- 分支:购买数量有效
- 条件设置:
行为流数据/input-data/quantity不为空 且 大于0
- 条件设置:
- 分支:购买数量有效

- 分支:购买数量无效
- 条件设置:
否则(即不满足上述条件时执行) - 在 购买数量无效 分支下,添加设置变量节点,将
status设置为“请输入大于0的整数”。
- 条件设置:
-
修改数据:更新库存
在 购买数量有效 分支上,添加一个修改数据节点,命名为“更新库存”。
-
数据表:选择
商品 -
过滤条件:
id等于行为流数据/input-data/product_id库存大于等于行为流数据/input-data/quantity
-
设置字段:将
库存设置为 减少行为流数据/input-data/quantity
-

通过将 库存 >= quantity 加入过滤条件,数据库将仅在库存充足时执行更新,从而在高并发场景下防止库存变为负数。
-
条件分支:判断库存扣减结果
在“更新库存”节点之后,添加一个新的条件分支节点,创建两个分支:
- 分支:库存不足
- 条件设置:
行为流数据/更新库存/id为空(表示更新操作没有影响任何行,即库存不足) - 在 库存不足 分支下,添加设置变量节点,将
status设置为“库存不足”。
- 条件设置:
- 分支:库存不足

- 分支:成功下单(库存充足)
- 条件设置:
否则(即更新成功,库存已扣减)
- 条件设置:
-
添加数据:创建订单
在 成功下单 分支下,添加添加数据节点。
-
数据表:
订单 -
字段映射:
账户_id:从获取 ID 节点获取商品_id:行为流数据/input-data/product_id购买数量:行为流数据/input-data/quantity

-
-
设置变量:在订单创建成功后,添加设置变量节点,将
status设置为“成功下单”。 -
输出:配置行为流输出,返回
status变量。
前端界面构建与交互
页面布局
-
新建一个名为
页面订单库存扣减的页面。 -
向画布添加一个列表组件。
-
数据源:绑定到
商品数据表。 -
请求类型:
订阅(以便实时查看库存更新)。
-
-
在列表项内部,按以下顺序放置组件:
- 文本:绑定到
列表项.商品名。 - 文本:绑定到
列表项.价格。 - 文本:绑定到
列表项.库存(可添加前缀“库存:”)。 - 输入框:命名为
购买数量,将输入值类型设为长整数。 - 按钮:命名为
按钮下单。
- 文本:绑定到
交互配置
配置 按钮下单 的 点击时 事件:
- 条件分支:检查用户是否已登录。
- 分支未登录:
全局.is_logged_in为假。 - 分支已登录:
全局.is_logged_in为真。
- 分支未登录:
- 行为(未登录):显示提示,内容为“请先登录”。

- 行为(已登录):调用行为流 -> 选择
下单。- 输入参数:
product_id:绑定到列表.数据源.当前项.id。quantity:绑定到输入框 购买数量.组件输出。
- 行为流成功时:显示提示。
- 内容:绑定到
行为流结果.status。
- 内容:绑定到
- 输入参数:

可以在设置 > 权限管理中配置权限,允许相应用户角色执行“下单”行为流。

验证
步骤 1:模拟登录
使用底部工具栏中的模拟登录工具,创建用户并登录。
步骤 2:测试无效输入
在购买数量输入框中输入 0,然后点击下单。
预期结果:出现提示“请输入大于0的整数”。

步骤 3:测试库存不足
若当前库存为 2,在输入框中输入 3,然后点击下单。
预期结果:出现提示“库存不足”。数据库中的库存保持不变。

步骤 4:测试购买成功
在输入框中输入 1,然后点击下单。
预期结果:
-
出现提示“成功下单”。
-
界面上的库存数量自动更新为
1。 -
在数据 -> 数据库视图中,
订单表内新增一条记录,包含正确的帐户_id、商品_id和购买数量。
由于列表组件使用了订阅请求类型,用户完成购买后,页面上的库存数量都会立即对所有在线用户实时更新。