# 函数分类

版本要求:v2.3或以上版本

函数以fn.开头,如fn.date.timestamp(), date为类别, 网关内置了以下几大类函数

  • 公共类 fn.common
  • 日期类 fn.date
  • 字符串类 fn.string
  • 编解码类 fn.codec
  • 数学类 fn.math
  • 数据列表类 fn.list

样例:

# 引用值

在函数里支持使用引用值,如:

fn.string.concat({step1.result.channelCode},{step1.result.nonce})

{step1.result.channelCode} 表示引用值, 引用step1的结果

fn.string.concat({step1.result.channelCode},{g.account.name})

{g.account.name} 表示引用值, 引用公共资源“account.name”, 以g开头表示引用公共资源

# 嵌套调用

支持多重嵌套调用,如:

fn.codec.md5(
    fn.date.add(
        fn.date.add(
            "2021-07-09 22:44:55", 
            "yyyy-MM-dd HH:mm:ss", 
            1, 
            fn.math.addExact(999,1)
        ), 
        "yyyy-MM-dd HH:mm:ss", 
        fn.math.addExact(0,1), 
        1000
    )
)
fn.string.toUpperCase(
    fn.codec.sha256(
        fn.string.concat(
            {step1.result.channelCode},
            {step1.result.nonce},
            {step1.result.timestamp},
            {step1.result.appSecret}
        )
    )
)

# 公共类 fn.common

函数 返回值类型 用途 参数说明
fn.common.iif(
boolean exprResult,
Object truepart,
Object falsepart)
Object 条件判断函数,当第一个参数
为true时返回第二个参数,否则
返回第三个
fn.common.iif(true,1,2)返回1
exprResult:引用值或函数的返回值
truepart:第一个参数为true时的返回值
falsepart第一个参数为false时的返回值
fn.common.equals(
Object obj1, Object obj2)
boolean 判断两个对象是否相等 obj1: 对象1
obj2: 对象2
fn.common.isNull(
Object obj)
boolean 判断对象是否null obj: 对象
fn.common.isNotNull(
Object obj)
boolean 判断对象是否不为null obj: 对象
fn.common.isBlank(
String str)
boolean 判断字符串是否为空 Str: 字符串
fn.common.isNotBlank(
String str)
boolean 判断字符串是否不为空 Str: 字符串
fn.common.isEmpty(
Object obj)
boolean 判断对象是否为空,主要用于
List/Map/数组/字符串类型的对象
obj: 对象
fn.common.isEmpty(
Object obj)
boolean 判断对象是否不为空,主要用于
List/Map/数组/字符串类型的对象
obj: 对象
fn.common.and(
Boolean... objs)
boolean 版本要求:v2.7.1或以上版本
与逻辑函数
objs: 布尔值,可多个
fn.common.or(
Boolean... objs)
boolean 版本要求:v2.7.1或以上版本
或逻辑函数
objs: 布尔值,可多个
fn.common.not(
Boolean obj)
boolean 版本要求:v2.7.1或以上版本
非逻辑函数
obj: 布尔值
fn.common.emptyList() List 版本要求:v2.7.3或以上版本
创建空列表或空数组函数
fn.common.emptyMap() Map 版本要求:v2.7.3或以上版本
创建空对象函数
fn.common.toJson(Object obj) String 版本要求:v3.1或以上版本
对象转为字符串函数
fn.common.parseJson(String obj) Object 版本要求:v3.5或以上版本
字符串转为JSON对象函数

# 日期类 fn.date

常用日期格式:

  • yyyy-MM-dd HH:mm:ss

  • yyyy-MM-dd

  • HH:mm:ss

  • HH:mm

  • yyyy-MM-dd HH:mm:ss Z

  • 其它参考日期格式规范

函数 返回值类型 用途 参数说明
fn.date.timestamp() long 生成当前时间戳
fn.date.getTime(String date,
String pattern,
String timeZone)
long 获取日期对应的时间戳
fn.date.getTime("2021-08-04","yyyy-MM-dd")
date:日期
pattern: 日期格式,
timeZone: 【可选】时区,默认东八区
如:GMT+08:00
fn.date.now(String pattern,
String timeZone)
String 获取当前时间,如获取当前日期:
fn.date.now("yyyy-MM-dd")
pattern: 日期格式,
常用格式有:
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
HH:mm:ss
HH:mm
yyyy-MM-dd HH:mm:ss Z
timeZone 【可选】时区,默认东八区
如:GMT+08:00
fn.date.add(String date,
String pattern,
int field, int amount,
String timeZone)
String 给日期增加时间,如给时间
"2021-08-04 14:23:12"加5小时:
fn.date.add("2021-08-04 14:23:12",
"yyyy-MM-dd HH:mm:ss", 4, 5)
得到:2021-08-04 19:23:12
date: 日期
pattern:date参数的日期格式
field:日期字段
1 for millisecond
2 for second
3 for minute
4 for hour
5 for date
6 for month
7 for year
amount: 时间数量
timeZone 【可选】时区,默认东八区
如:GMT+08:00
fn.date.formatTs(long timestamp,
String pattern,
String timeZone)
String 将时间戳格式化为日期 timestamp:时间戳
pattern:目标日期格式
timeZone 【可选】时区,默认东八区
如:GMT+08:00
fn.date.changePattern(String dateStr,
String sourcePattern,
String targetPattern,
String timeZone)
String 将日期转换为另一种格式 dateStr:日期
sourcePattern:dateStr参数的日期格式
targetPattern:目标日期格式
timeZone 【可选】时区,默认东八区
如:GMT+08:00

# 日期格式规范

字母 说明 例子
G 时代代号 AD
y 年份 2018(yyyy),18(yy)
M 月份 July(MMMM), Jul(MMM), 07(MM)
w 一年中第几周的结果 16
W 每月第几周的结果 3
D 一年中的第几天 266
d 09(dd), 9(d)
F 每月的星期几 4
E 星期几 Tuesday, Tue
u 星期几,其中1代表星期一,2代表星期二,依此类推 2
a AM或PM标记 AM
H 一天中的小时(0-23) 12
k 一天中的小时(1-24) 23
K 上午/下午以12小时格式显示的小时(0-11) 0
h 以am / pm表示的小时,表示12小时格式(1-12) 12
m 分钟 59
s 35
S 毫秒 978
z 时区 Pacific Standard Time; PST; GMT-08:00
Z 以小时为单位的时区偏移量(RFC模式) -0800
X ISO格式的时区偏移 -08; -0800; -08:00

# 字符串类 fn.string

函数 返回值类型 用途 参数说明
fn.string.equals(String str1,
String str1)
Boolean str1是否等于str2 str1: 字符串
str2: 字符串
fn.string.equalsIgnoreCase(
String str1,tring str1)
Boolean str1是否等于(不区分大小写)str2 str1: 字符串
str2: 字符串
fn.string.compare(String str1,
String str1)
Int 比较str1和str2
str1小于str2返回-1,
str1等于于str2返回0,
str1大于str2返回1
str1: 字符串
str2: 字符串
fn.string.concat(String... strs) String 拼接字符串,如:
fn.string.concat("a","b","c")
返回:abc
Strs: 字符串,可多个
fn.string.concatws(
String separator,
String... strs)
String 拼接字符串,如:
fn.string.concatws("-","a","b","c")
返回:a-b-c
separator:分隔符
Strs: 字符串,可多个
fn.string.substring(String str,
int beginIndex, int endIndex)
String 截取字符串,如:
fn.string.substring("abcd",1,2)
返回:b
fn.string.substring("abcd",1)
返回:bcd
str:字符串
beginIndex:开始下标
endIndex:【可选】结束下标
fn.string.indexOf(String str,
String substr)
Int 返回子字符串的下标,如:
fn.string.indexOf("abcd", "bd")
返回:1
str:字符串
substr:子字符串
fn.string.startsWith(String str,
String prefix)
Bool 字符串是否以指定前缀开头,
如:
fn.string.startsWith("abcd", "bd")
返回:1
str:字符串
prefix:前缀
fn.string.endsWith(String str,
String suffix)
Bool 字符串是否以指定后缀结尾,
如:
fn.string.endsWith("abcd", "bd")
返回:1
str:字符串
suffix:后缀
fn.string.toUpperCase(String str) String 转换为大写,
如:
fn.string.toUpperCase("abcd")
返回:ABCD
str:字符串
fn.string.toLowerCase(String str) String 转换为小写,
如:
fn.string.toLowerCase("aBCd")
返回:abcd
str:字符串
fn.string.uuid() String 获取UUID,
如:
fn.string.uuid()
fn.string.replace(String str,
String target,
String replacement)
String 替换指定字符串,
如:
fn.string.replace("abcd", "bc","111")
返回:a111d
str:字符串
target:需被替换的字符串
replacement:替换的字符串
fn.string.replaceAll(String str,
String regex,
String replacement)
String 替换正则表达式匹配到的字符串,
如:
fn.string.replaceAll("abcbcd", "bc","111")
返回:a111111d
str:字符串
regex:正则表达式用于匹配
需被替换的字符串
replacement:替换的字符串
fn.string.replaceFirst(String str,
String regex,
String replacement)
String 替换正则表达式匹配到
的第一个字符串,
如:
fn.string.replaceFirst("abcbcd", "bc","111")
返回:a111bcd
str:字符串
regex:正则表达式用于匹配
需被替换的字符串
replacement:替换的字符串

# 编解码类 fn.codec

函数 返回值类型 用途 参数说明
fn.codec.md5(String data) String MD5加密,如:
fn.codec.md5("abc")
返回:
900150983cd24fb0d6963f7
d28e17f72
data: 需进行加密的数据
fn.codec.sha1(String data) String SHA1加密,如:
fn.codec.sha1("abc")
返回:
a9993e364706816aba3e2571
7850c26c9cd0d89d
data: 需进行加密的数据
fn.codec.sha256(String data) String SHA256加密,如:
fn.codec.sha256("abc")
data: 需进行加密的数据
fn.codec.sha384(String data) String SHA384加密,如:
fn.codec.sha384("abc")
data: 需进行加密的数据
fn.codec.sha512(String data) String SHA512加密,如:
fn.codec.sha512("abc")
data: 需进行加密的数据
fn.codec.base64Encode(
String data)
String base64加密,如:
fn.codec.base64Encode(
"Base64编码介绍")
返回:
QmFzZTY057yW56CB5LuL57uN
data: 需进行加密的数据
fn.codec.base64Decode(
String data)
String base64解密,如:
fn.codec.base64Decode(
"QmFzZTY057yW56CB5LuL57uN")
返回:
Base64编码介绍
data: 需进行解密的数据
fn.codec.aesEncrypt(
String data, String key)
String AES加密(AES/ECB/PKCS5Padding),如:
fn.codec.aesEncrypt("abc",
"1234567812345678")
data: 需进行加密的数据
key:密钥
fn.codec.aesDecrypt(
String data, String key)
String AES解密(AES/ECB/PKCS5Padding),如:
fn.codec.aesDecrypt("abc",
"1234567812345678")
data: 需进行解密的数据
key:密钥
fn.codec.desEncrypt(
String data, String key)
String DES加密(DES/CBC/PKCS5Padding),如:
fn.codec.desEncrypt("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥
fn.codec.desDecrypt(
String data, String key)
String DES加密(DES/CBC/PKCS5Padding),如:
fn.codec.desDecrypt("abc",
"123456781234567812345
67812345678")
data: 需进行解密的数据
key:密钥
fn.codec.aesEncrypt7(
String data, String key)
String 版本要求:v3.1或以上版本
AES加密(AES/ECB/PKCS7Padding),如:
fn.codec.aesEncrypt7("abc",
"1234567812345678")
data: 需进行加密的数据
key:密钥
fn.codec.aesDecrypt7(
String data, String key)
String 版本要求:v3.1或以上版本
AES解密(AES/ECB/PKCS7Padding),如:
fn.codec.aesDecrypt7("abc",
"1234567812345678")
data: 需进行解密的数据
key:密钥
fn.codec.desEncrypt7(
String data, String key)
String 版本要求:v3.1或以上版本
DES加密(DES/CBC/PKCS7Padding),如:
fn.codec.desEncrypt7("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥
fn.codec.desDecrypt7(
String data, String key)
String 版本要求:v3.1或以上版本
DES加密(DES/CBC/PKCS7Padding),如:
fn.codec.desDecrypt7("abc",
"123456781234567812345
67812345678")
data: 需进行解密的数据
key:密钥
fn.codec.hmacMd5(
String data, String key)
String 版本要求:v2.7.2或以上版本
hmacMd5加密,如:
fn.codec.hmacMd5("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥
fn.codec.hmacSha1(
String data, String key)
String 版本要求:v2.7.2或以上版本
hmacSha1加密,如:
fn.codec.hmacSha1("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥
fn.codec.hmacSha224(
String data, String key)
String 版本要求:v2.7.2或以上版本
hmacSha224加密,如:
fn.codec.hmacSha224("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥
fn.codec.hmacSha256(
String data, String key)
String 版本要求:v2.7.2或以上版本
hmacSha256加密,如:
fn.codec.hmacSha256("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥
fn.codec.hmacSha384(
String data, String key)
String 版本要求:v2.7.2或以上版本
hmacSha384加密,如:
fn.codec.hmacSha384("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥
fn.codec.hmacSha512(
String data, String key)
String 版本要求:v2.7.2或以上版本
hmacSha512加密,如:
fn.codec.hmacSha512("abc",
"123456781234567812345
67812345678")
data: 需进行加密的数据
key:密钥

# 数学类 fn.math

数学类函数分为整数和浮点数两大类,如果不确定入参的类型可用浮点数函数

函数 返回值类型 用途 参数说明
fn.math.absExact(long a) Long 获取绝对值,如:
fn.math.absExact(-32)
返回:32
fn.math.absExact(5)
返回:5
a: 整数
fn.math.negateExact(long a) Long 取反,如:
fn.math.negateExact(-3)
返回:3
fn.math.negateExact(5)
返回:-5
a: 整数
fn.math.addExact(
long x, long y)
Long 两整数相加,如:
fn.math.addExact(3,2)
返回:5
x: 整数
y: 整数
fn.math.subtractExact(
long x, long y)
Long 两整数相减,如:
fn.math.subtractExact(3,2)
返回:1
x: 整数
y: 整数
fn.math.multiplyExact(
long x, long y)
Long 两整数相乘,如:
fn.math.multiplyExact(3,2)
返回:6
x: 整数
y: 整数
fn.math.maxExact(
long x, long y)
Long 取两整数中的最大值,如:
fn.math.maxExact(3,2)
返回:3
x: 整数
y: 整数
fn.math.minExact
(long x, long y)
Long 取两整数中的最小值,如:
fn.math.minExact(3,2)
返回:2
x: 整数
y: 整数
fn.math.mod(long x, long y) Long 取模,如:
fn.math.mod(3,2)
返回:1
x: 整数
y: 整数
fn.math.pow(double a,
double b)
double 乘方,如:
fn.math.pow(3,2)
返回:9
a:浮点数
b:浮点数
fn.math.sqrt(double a) double 开平方根,如:
fn.math.sqrt(9)
返回:3
a:浮点数
fn.math.random() double 获取随机数,返回一个0到1间的浮点数
fn.math.absDecimal(
double a)
double 获取绝对值,如:
fn.math.absDecimal(-3.2)
返回:3.2
fn.math.absDecimal(5.1)
返回:5.1
a:浮点数
fn.math.negateDecimal(
double a)
double 取反,如:
fn.math.negateDecimal(-3.2)
返回:3.2
fn.math.negateDecimal(5.2)
返回:-5.2
a:浮点数
fn.math.addDecimal(
double x, double y)
double 两浮点数相加,如:
fn.math.addDecimal(3.1,2.2)
返回:5.3
x:浮点数
y:浮点数
fn.math.subtractDecimal(
double x, double y)
double 两浮点数相减,如:
fn.math.subtractDecimal(3.1,2.2)
返回:0.9
x:浮点数
y:浮点数
fn.math.multiplyDecimal(
double x, double y)
double 两浮点数相乘,如:
fn.math.multiplyDecimal(3.2,2)
返回:6.4
x:浮点数
y:浮点数
fn.math.divideDecimal(
double x, double y)
double 两浮点数相除,如:
fn.math.divideDecimal(4.2,2)
返回:2.1
x:浮点数
y:浮点数
fn.math.maxDecimal(
double x, double y)
double 取两整数中的最大值,如:
fn.math.maxDecimal(3.2,2)
返回:3.2
x:浮点数
y:浮点数
fn.math.minDecimal(
double x, double y)
double 取两整数中的最小值,如:
fn.math.minDecimal(3.2,2)
返回:2
x:浮点数
y:浮点数
fn.math.scaleDecimal(
double a, int scale)
double 设置小数位数,四舍五入,如:
fn.math.scaleDecimal(3.236787,2)
返回:3.24
a:浮点数
scale:保留小数位数
fn.math.compare(
double x, double y)
int 比较x和y
x小于y返回-1,
x等于于y返回0,
x大于y返回1
x:浮点数
y:浮点数
fn.math.equals(
double x, double y)
Boolean 判断x是否等于y x:浮点数
y:浮点数
fn.math.lt(
double x, double y)
Boolean 判断x是否小于y x:浮点数
y:浮点数
fn.math.le(
double x, double y)
Boolean 判断x是否小于等于y x:浮点数
y:浮点数
fn.math.gt(
double x, double y)
Boolean 判断x是否大于y x:浮点数
y:浮点数
fn.math.ge(
double x, double y)
Boolean 判断x是否大于等于y x:浮点数
y:浮点数

# 数据列表类 fn.list

函数 返回值类型 用途 参数说明
fn.list.expand(
List<List<Object>> data)
ListList<Object> 将二维数组(列表)展开为一维数组(列表),
如:
data=[[{a:1}],[{a:2}],[{a:3}]]
fn.list.expand(data)
返回:[{a:1},{a:2},{a:3}]
data: 二维数组(列表)
fn.list.merge(
List<Object>... data)
List<Object> 将多个列表合并成一个,如:
data1=[{a:1}]
data2=[{a:2}]
data3=[{a:3}]
fn.list.merge(data1,data2,data3)
返回:[{a:1},{a:2},{a:3}]
data: 列表,可多个
fn.list.extract(
List<Map<String, Object>> data,
String... fields)
List<Map<String, Object>> 只提取列表里的部分字段,如:
data=[
{a:1,b:4,c:7},
{a:2,b:5,c:8},
{a:3,b:6,c:9}
]
fn.list.extract(data, "a", "c")
返回:[
{a:1,c:7},
{a:2,c:8},
{a:3,c:9}
]
data: 列表
fields: 【可选】字段,可多个
fn.list.join(
List<Map<String, Object>> dest,
List<Map<String, Object>> src,
String joinField,
String... fields)
List<Map<String, Object>> 合并2个列表字段,可只合并指定字段,如:
dest=[
{a:1,b:4,c:7},
{a:2,b:5,c:8},
{a:3,b:6,c:9}
]
src=[
{a:1,d:444,e:777},
{a:2,d:555,e:888}
]
fn.list.join(dest,src, "a", "d")
返回:[
{a:1,b:4,c:7,d:444},
{a:2,b:5,c:8,d:555},
{a:3,b:6,c:9}
]
dest: 目标列表
src: 被合并的列表
joinField: 两个列表关联的字段
格式:
dest列表的关联字段:src列表的
关联字段,如:userName:uname,
如果两个列表的关联字段一样可
只填一个,如:userName
fields: 【可选】被合并列表里需合并的字段,可多个,不填则合并所有字段
fn.list.rename(
List<Map<String, Object>> data,
String... fieldPairs)
List<Map<String, Object>> 重命名列表里的部分字段,如:
data=[
{a:1,b:4,c:7},
{a:2,b:5,c:8},
{a:3,b:6,c:9}
]
fn.list.rename(data, "a:apple", "c:cat")
返回:[
{apple:1,b:4,cat:7},
{apple:2,b:5,cat:8},
{apple:3,b:6,cat:9}
]
data: 列表
fieldPairs: 【可选】需重命名
的字段对,可多个。格式:
原字段名:新字段名,如:c:cat
fn.list.removeFields(
List<Map<String, Object>> data,
String... fields)
List<Map<String, Object>> 删除列表里的部分字段,如:
data=[
{a:1,b:4,c:7},
{a:2,b:5,c:8},
{a:3,b:6,c:9}
]
fn.list.removeFields(data, "b")
返回:[
{a:1,c:7},
{a:2,c:8},
{a:3,c:9}
]
data: 列表
fields: 【可选】需删除的
字段,可多个
fn.list.emptyList() List 版本要求:v2.7.3或以上版本
创建空列表或空数组函数