# 函数分类
版本要求: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.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或以上版本 创建空列表或空数组函数 |