Skip to Content

订单库存扣减

项目访问链接

https://zion.functorz.com/tool/qwEkPKRl8gq/WEB?code=L8RqQPWZTesG3&ref=4857164

简介

  • 目标:实现一个安全的库存扣减流程,防止在高并发电商场景中出现超卖。
  • 适用场景:秒杀、限时优惠,或任何高流量的结算过程。
  • 核心逻辑:使用行为流执行带条件的数据库更新。系统仅在当前库存大于或等于请求数量时才执行扣减,从而在数据库层面保证数据一致性。

实现步骤

本教程基于预置的「常用组件样式」模板进行演示。模板页中仅预设了基础的常用组件的样式,不包条件状态、数据绑定或行为配置。在实际搭建时,可以选择直接从模板页复制所需组件到工作页,以节省样式调整时间,专注于核心逻辑的构建。

数据存储

数据模型

配置关系型数据库以存储商品、订单和用户帐户信息。

1. 数据表:商品

存储商品详情及核心库存控制字段。

字段名类型说明
商品名文本商品名称
价格无限精度小数单价
库存长整数可用数量(核心控制字段)

2. 数据表:订单

作为交易凭证,关联用户和商品。

字段名类型说明
帐户_id长整数关联到 帐户 表的外键
商品_id长整数关联到 商品 表的外键
购买数量长整数购买的商品数量

逻辑与状态配置

行为流构建:

  1. 行为流入参:定义 product_id(长整数)和 quantity(长整数)作为行为流的必填输入。

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

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

  • 分支:购买数量无效
    • 条件设置:否则(即不满足上述条件时执行)
    • 购买数量无效 分支下,添加设置变量节点,将 status 设置为“请输入大于0的整数”。
  1. 修改数据:更新库存

    购买数量有效 分支上,添加一个修改数据节点,命名为“更新库存”。

    • 数据表:选择 商品

    • 过滤条件

      • id 等于 行为流数据/input-data/product_id
      • 库存 大于等于 行为流数据/input-data/quantity
    • 设置字段:将 库存 设置为 减少 行为流数据/input-data/quantity

⚠️

通过将 库存 >= quantity 加入过滤条件,数据库将仅在库存充足时执行更新,从而在高并发场景下防止库存变为负数。

  1. 条件分支:判断库存扣减结果

    在“更新库存”节点之后,添加一个新的条件分支节点,创建两个分支:

    • 分支:库存不足
      • 条件设置:行为流数据/更新库存/id 为空(表示更新操作没有影响任何行,即库存不足)
      • 库存不足 分支下,添加设置变量节点,将 status 设置为“库存不足”。

  • 分支:成功下单(库存充足)
    • 条件设置:否则(即更新成功,库存已扣减)
  1. 添加数据:创建订单

    成功下单 分支下,添加添加数据节点。

    • 数据表订单

    • 字段映射

      • 账户_id:从获取 ID 节点获取
      • 商品_id行为流数据/input-data/product_id
      • 购买数量行为流数据/input-data/quantity

  2. 设置变量:在订单创建成功后,添加设置变量节点,将 status 设置为“成功下单”。

  3. 输出:配置行为流输出,返回 status 变量。

前端界面构建与交互

页面布局

  1. 新建一个名为 页面订单库存扣减 的页面。

  2. 向画布添加一个列表组件。

    • 数据源:绑定到 商品 数据表。

    • 请求类型订阅(以便实时查看库存更新)。

  3. 列表项内部,按以下顺序放置组件:

    • 文本:绑定到 列表项.商品名
    • 文本:绑定到 列表项.价格
    • 文本:绑定到 列表项.库存(可添加前缀“库存:”)。
    • 输入框:命名为 购买数量,将输入值类型设为 长整数
    • 按钮:命名为 按钮下单

交互配置

配置 按钮下单点击时 事件:

  1. 条件分支:检查用户是否已登录。
    • 分支未登录全局.is_logged_in 为假
    • 分支已登录全局.is_logged_in 为真
  2. 行为(未登录)显示提示,内容为“请先登录”。

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

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

验证

步骤 1:模拟登录

使用底部工具栏中的模拟登录工具,创建用户并登录。

步骤 2:测试无效输入

在购买数量输入框中输入 0,然后点击下单

预期结果:出现提示“请输入大于0的整数”。

步骤 3:测试库存不足

若当前库存为 2,在输入框中输入 3,然后点击下单

预期结果:出现提示“库存不足”。数据库中的库存保持不变。

步骤 4:测试购买成功

在输入框中输入 1,然后点击下单

预期结果

  1. 出现提示“成功下单”。

  2. 界面上的库存数量自动更新为 1

  3. 数据 -> 数据库视图中,订单 表内新增一条记录,包含正确的 帐户_id商品_id购买数量

由于列表组件使用了订阅请求类型,用户完成购买后,页面上的库存数量都会立即对所有在线用户实时更新。

Last updated on