Skip to content

后台脚本是一款强大的动态脚本处理引擎,核心基于高性能的 AviatorScript 表达式求值引擎。该功能允许您(用户)通过编写简单的脚本,灵活、自定义地处理系统中的数据,并实时返回计算结果。

简单来说,您可以将业务逻辑以脚本的形式“告诉”系统,系统会忠实地执行这些逻辑,从而实现无需修改核心代码即可满足多样化、易变的需求。

核心价值

  • 灵活性 业务规则不再硬编码,可以随时根据需求变化,通过修改脚本快速响应
  • 可配置性 将复杂的业务逻辑外置为可配置的脚本,降低了系统的耦合度
  • 用户赋能 高级用户可以直接参与业务逻辑的定制,减少对开发人员的依赖,提升业务迭代效率
  • 高性能与安全 底层 AviatorScript 引擎保障了脚本的执行效率接近原生 Java 代码,同时其沙箱机制确保了脚本执行环境的安全性,无法进行危险操作

工作原理

  1. 编写脚本: 在系统中编写 AviatorScript 脚本
  2. 传递字段/函数: 在执行时,系统会将您配置的“字段”替换为当前业务数据的真实值,并注入到脚本执行环境中
  3. 计算并返回: 脚本执行完成后,系统会返回计算结果,用于后续的业务流程。如数据校验、结果判断、值计算等。

功能特性

1. 内置增强函数

我们在标准的 AviatorScript 语法之上,额外封装了一系列贴合业务场景的实用函数,例如:

  • caller() 当前系统使用者的id
  • date_add([field], [i], [unit]) 时间加上...
    • field 时间字段名,例如 orderTime, createdTime
    • i 时间间隔数
    • unit 时间单位,例如 s, m, hd, M, Y,分别对应秒,分钟,小时,天,月,年
  • date_diff([startDate], [endDate], [unit]) 两个时间之间的间隔
    • startDate 开始时间
    • endDate 结束时间
    • unit 时间单位,例如 s, m, hd, M, Y,分别对应秒,分钟,小时,天,月,年
  • queryById([id], [fields]) 根据id来查询数据
    • id 查询的记录id
    • fields 查询的字段列表
  • query([sql], [params]) 手动查询数据
    • sql sql/预编译语句
    • params 参数列表

2. 字段变量注入

当脚本执行环境中包含实体记录时,只需在脚本中使用实体字段名(例如 userAge, orderAmount, productCategory),系统会在执行前自动将它们替换为实际的数据值。

3. 完整的 AviatorScript 语法支持

  • 基本运算:+, -, *, /, %……
  • 逻辑判断:>, <, ==, !=……
  • 多种数据结构:Map, List, Set……

更多语法请查看 AviatorScript 官方文档

示例

根据用户的订单金额和用户等级,计算最终应支付的金额(享受不同的折扣) 确认字段 根据业务,我们确定脚本需要两个字段:

  • amount 订单金额
  • userLevel 用户等级 编写脚本
javascript
// 使用三元运算符进行条件判断
let discount = userLevel == "VIP" ? 0.8 : (userLevel == "Regular" ? 0.9 : 1.0);
// 计算折后金额
let finalAmount = amount * discount;
// 确保金额不会为负数
finalAmount > 0 ? finalAmount : 0;

配置与执行 在系统中,您可以在实体的事件中添加一个字段赋值事件。设置执行规则的赋值类型为脚本结果,并在脚本值域中填入脚本内容。即可实现在数据保存时,系统会自动计算并返回最终金额。

在系统所有可以配置脚本的地方,都提供了脚本执行功能,如:字段赋值事件、批量编辑、创建记录等。

总结

后台脚本处理功能是系统可扩展性的核心体现。它将编程能力交到了您的手中,让系统能够优雅地适应未来不可预知的需求变化。我们鼓励您在理解基本语法后,积极探索这一功能的潜力,以构建更智能、更灵活的业务流程

Linker