一、设计目标

    1. 满足多变业务需求:动态修改    ==> 动态脚本

    2. 满足复杂逻辑计算:不仅要支持简单表达式,还是支持多语句循环判断、预定义函数等需求 ==> 完整脚本语言(groovy、javascript、python等),而非表达式(mvel、aviator、fel、expr4J等)

    3. 快速计算获得结果:最好支持脚本预编译(groovy)

    4. 语言语法简单易学:类动态语言处理,属性可以直接访问(groovy,javascript,python),列表支持声明式处理等(groovy3,javascript,python)

    5. 多个变量同时计算:一次性计算好某个场景下的多变量结果返回

    6. 多个场景同时支持:作为通用计算引擎,支持多场景

二、计算流程

    1. 请求数据:{},json对象,内部包括json数组和json对象的多层嵌套 

    2. 预定义函数:指定场景下很多变量计算公共使用的函数,比如账单工具中的datediff,比如人行工具中的最近几期 L24(X),L60(X)

    3. 预处理【可选】:字典值映射等

    4. 数据加工:

        - 属性访问:req.xxx.yyy.zzz   多层次数据可以直接用.访问

        - 列表统计:req.xxx.nnn        得到数组后可以采用声明式处理 :过滤、映射、排序等中间操作,sum、count、max、min等归约操作 (_StreamAPI.java 

        - 特殊场景:比如从某个条件A开始循环累计到某个条件B得到某个值,然后以这个值作为区分点进行进一步操作。for循环break后多行脚本处理

    5. 结果输出:{},json对象,(code、msg、data)其中data为json对象,内部包含每个变量的计算结果值

三、接口分析

    1. 设置变量:可以自定义某个场景下的多个变量计算公式,同时支持设置这个场景下的预处理脚本(包含预定义函数及数据预处理)

    2. 查看变量:设置完毕后,可以查看验证下场景下的变量,及多个变量同时计算的封装整体脚本内容

    3. 评估脚本:给出数据,得到结果

四、部署方式

    1. SDK提供:gav引入后即可直接使用

    2. 独立服务:计算压力比较大时进行动态扩展