Skip to Content

状态记录

项目访问链接

https://zion.functorz.com/tool/2gXzl5Orley/WEB?code=6N6XCvRLybK2m&ref=4857164

简介

  • 目标:创建一个安全的每日奖励系统,限制每个用户每天只能领取 3 次奖励。
  • 适用场景:每日登录奖励、免费 API 调用额度控制、每日抽奖次数刷新或高频业务动作审计。
  • 核心逻辑:使用 领取状态 表追踪用户的“单条状态”进度。后端 行为流 处理日期校验和计数自增,而 数据库内容变化 触发器则自动将审计日志写入 领取日志 表。

实现步骤

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

数据存储

数据模型

配置关系型数据库以存储用户状态和交易历史。

1. 表名:领取状态

用于状态控制;每个帐户在系统中至多维持一条对应记录。

字段名类型备注
id长整数主键
最后领取日期日期用于比对当前请求是否为“新的一天”
当日领取次数长整数每日循环自增的值(1-3)
帐户_id长整数指向 帐户 表的外键(1:1 关系)

2. 表名:领取日志

仅追加的审计日志表。

字段名类型备注
id长整数主键
领取序号长整数记录本次领取是当天的第几次(1, 2, 或 3)
帐户_id长整数指向 帐户 表的外键(N:1 关系)

逻辑与状态配置

“每日领取”行为流构建

此行为流在用户请求领取时更新或创建用户的状态记录,并输出操作状态。

  1. 行为流变量:在行为流内部添加一个名为 status 的全局变量,类型为 布尔值,用于追踪请求执行的整体成功情况。
  2. 获取 ID:添加一个名为“获取 ID”的代码块节点,以检索登录用户的帐户 ID (current_account_id)。
  3. 查询数据:添加一个名为“获取领取状态”的查询记录节点。
    • 数据表领取状态
    • 数据过滤帐户_id 等于 行为流数据/获取 ID/current_account_id
    • 行数限制:1。
  4. 条件分支 - 根分支:添加一个“条件分支”节点,验证数据库中是否存在状态记录。
    • 分支 已有状态记录行为流数据/获取领取状态/id 非空。(进入步骤 5)
    • 分支 无记录 (Else):如果用户从未领取过(记录为空)。(进入步骤 9)
  5. 条件分支 - 嵌套日期检查:在“已有状态记录”分支内,添加一个嵌套的“条件分支”节点。
    • 分支 今日已领行为流数据/获取领取状态/最后领取日期 等于 当前日期。(进入步骤 6)
    • 分支 今日未领 (Else):如果最后领取日期属于之前的日期。(进入步骤 8)
  6. 修改数据 (今日已领):添加一个名为“更新当日领取次数”的修改数据节点。
    • 数据表领取状态
    • 输入参数当日领取次数 -> 增加 1
    • 数据过滤帐户_id 等于 行为流数据/获取 ID/current_account_id当日领取次数 小于 3
  7. 设置变量:添加一个设置变量节点,根据计数自增的执行结果确定 status 变量的值。
    • 分支 更新成功行为流数据/更新当日领取次数/id 非空 -> 设置为 True
    • 分支 更新失败 (Else):设置为 False(如果 当日领取次数 已达到 3,则违反过滤约束)。
  8. 修改数据 (今日未领):由于是新的一天,添加一个名为“更新领取状态”的修改数据节点来重置计数。
    • 数据表领取状态
    • 输入参数最后领取日期 -> 当前日期当日领取次数 -> 直接设为 1
    • 数据过滤帐户_id 等于 行为流数据/获取 ID/current_account_id最后领取日期 不等于 当前日期
    • 设置变量:更新行为流变量 status。如果 更新领取状态/id 非空,设为 True,否则为 False
  9. 添加数据 (无记录):对于首次领取的账户,添加一个名为“添加领取状态记录”的添加数据节点。
    • 数据表领取状态
    • 输入参数最后领取日期 -> 当前日期当日领取次数 -> 1帐户_id -> 行为流数据/获取 ID/current_account_id
    • 约束冲突:选择 ud_zhanghu_id 约束,处理方式设为 忽略并跳过
    • 设置变量:更新行为流变量 status。如果 添加领取状态记录/id 非空,设为 True,否则为 False
  10. 行为流出参:将所有条件分支合并到输出节点,并配置出参绑定以返回 行为流变量/status

“领取日志”行为流与触发器

每当 领取状态 表被修改时,自动创建审计轨迹。

  1. 行为流入参:创建一个名为“领取日志”的新行为流。添加输入参数:account_id (长整数) 和 sequence (长整数)。
  2. 配置触发器
    • 触发器类型数据库内容变化
    • 选择操作类型数据添加或修改时
    • 选择数据表领取状态
    • 行为流入参映射
      • account_id -> 添加或修改的数据/帐户_id
      • sequence -> 添加或修改的数据/当日领取次数
  3. 添加数据:添加一个名为“添加数据”的节点。
    • 数据表领取日志
    • 输入参数领取序号 -> 行为流数据/入参/sequence帐户_id -> 行为流数据/入参/account_id

通过使用“数据添加或修改时”触发器,您可以确保无论 领取状态 表如何更新,每次成功的领取都会被记录。

UI 构建与交互

配置前端以动态显示领取状态,并根据后端逻辑处理用户交互。

页面:每日奖励领取

  1. 条件式容器设置

    • 条件 未满三次:适用于仍可领取奖励的用户。
    • 条件 已满三次:适用于已达到每日限额的用户。
    • 初始化:默认状态(未登录用户)。
  2. 配置激活按钮:在 未满三次 分支内,放置一个按钮组件。

    • 按钮文本:点击 数据绑定 图标并选择 条件
      • 分支 无记录:若 当前登录用户领取状态当日领取次数 为空,设置显示数据为 0
      • 分支 有记录:否则,将数据绑定到 当前登录用户领取状态当日领取次数
      • 最终字符串领取每日奖励 ({条件}/3)
    • 配置按钮交互:选中激活按钮,切换到 交互 面板,配置其行为。
      • 动作:添加 点击时 事件,选择 每日领取 行为流,并启用 显示加载动画 开关。
      • 成功时
        • 显示提示:添加一个“显示提示”节点。点击 数据绑定 图标设置 消息,并选择 条件
          • 分支 领取成功:若 行为结果每日领取status 为真,设置消息为 领取成功
          • 分支 领取失败:否则,设置消息为 领取失败
        • 刷新当前用户数据:添加一个“刷新当前用户数据”节点,确保数据库更改后前端计数器立即更新。
  3. 配置禁用按钮:在 已满三次 分支内,配置达到每日限额时的 UI。按钮文本同“激活按钮”或直接使用静态文本领取每日奖励 (3/3)

  4. 配置初始化视图:在 初始化 分支内,选中 文本 组件,为未认证用户显示提示。

    • 文本内容:静态文本 请先登录
  5. 配置条件式容器逻辑:选中顶层的 条件式容器,在右侧面板中点击 配置,定义每个分支的显示条件。

    • 未满三次
      • 添加条件:全局是否登录状态 为真
      • 添加 条件:当前登录用户领取状态当日领取次数 小于 3
    • 已满三次
      • 添加条件:全局是否登录状态 为真
      • (注意:由于分支按顺序评估,此条件将捕获计数为 3 或更多的用户。)
    • 初始化
      • 添加条件:全局是否登录状态 为假

验证

步骤 1:未登录状态

  1. 点击右上角的“预览”图标。
  2. 预期结果:页面显示文本“请先登录”。

步骤 2:首次领取

  1. 使用底部栏的 模拟登录 工具。点击“添加用户”并选择 已登录用户 角色。
  2. 点击标记为 领取每日奖励 (0/3) 的按钮。
  3. 预期结果:出现“领取成功”提示,按钮标签更新为 领取每日奖励 (1/3)

步骤 3:达到限额

  1. 再点击按钮两次。
  2. 预期结果:第三次领取后,按钮标签显示 领取每日奖励 (3/3) 并变为禁用状态(切换到 条件 已满三次 UI)。

步骤 4:数据库审计

  1. 导航到“数据”选项卡。
  2. 检查 领取状态 表:当日领取次数 应为 3
  3. 检查 领取日志 表:应有三条不同的记录,领取序号 分别为 123,且都链接到同一个 帐户_id
⚠️

如果前端计数器没有更新,请验证“刷新当前用户数据”动作是否正确放置在按钮 点击时 交互的“成功时”分支中。

Last updated on