阿里云首页 金融分布式架构 SOFAStack

高级配置

创建文件核对规则 的过程中,您可以在设置核对配置时进行以下高级配置。

说明

高级配置 仅适用于创建文件核对规则的场景。对于离线核对规则,未提供该选项。

规则表达式

如果在设置规则表达式时开启 高级配置 开关,您可以使用 qlExpressGroovy 自定义较为复杂的表达式。

  • 若选择 qlExpress,示例如下:

    • 引用数据源或文件时,需要使用数据节点名称。

    • 多个规则用英文逗号 [,] 隔开。

    • 获取数据节点上的数据。使用时须使用字段对应的映射字段。

    DCD0191204k29o26m1.fileamount < DCD019120997hcfyh1.payamount , DCD0191204k29o26m1.fileamount <= DCD019120997hcfyh1.payamount

  • 若选择 Groovy示例如下:

    注意

    模型 一词非字面义,本文特指 映射字段,即字段映射关系。以 核对模型,一左一右 为例,是指会根据映射字段分别为两个数据节点生成两个模型。

import com.alibaba.common.lang.StringUtil
 
import com.alibaba.fastjson.JSONObject
import org.slf4j.LoggerFactory;
import com.alipay.finorm.common.util.LoggerConstants;
import com.alipay.finorm.common.util.LoggerUtil;
import com.alipay.finorm.common.facade.enums.RuleResultErrorCode
import com.alipay.finorm.common.facade.sdk.GuardianContext
import com.alipay.finorm.common.facade.model.immune.RuleResult
 
def ruleExecute(rule, immuneModelList) {
 
    def LOGGER = LoggerFactory.getLogger(LoggerConstants.BIZ_GUARDIAN);
 
    def ruleResult = new RuleResult()
    ruleResult.setRuleId(rule.ruleId)
    ruleResult.setRuleName(rule.ruleName)
    ruleResult.setIsSuccess(true)
 
    if (immuneModelList==null){
       return ruleResult
    }
 
    //上下文 map
    def tmModel = GuardianContext.getBizEventContext();
 
    //核对模型,一左一右,可以通过模型id等关键信息判断具体谁左谁右
    def model1 = immuneModelList.get(0);
    def model2 = immuneModelList.get(1);
 
    //获取模型上的数据,明细核对时候,是一行数据的fieldName; 汇总核对时候,是自定义的汇总字段fieldName;
    Map<String, Object> kv1 = model1.getFieldName2Value();
    Map<String, Object> kv2 = model2.getFieldName2Value();
    //汇总数值  ;  明细核对时候,可以获取到明细数值
    Object id_sum1 = kv1.get("fileamount");
    Object id_sum2 = kv2.get("payamount");
 
    //可以统一转为bigdecimal的方式处理
 
    def isSuccess = id_sum1 > id_sum2;
 
    // 核对结果
    ruleResult.setIsSuccess(isSuccess);
    // 如果失败,失败的原因可以在这里放进去
    ruleResult.setRuleErrorCode(" fileamount :" + id_sum1 +"  [class:"+id_sum1.class + "] vs payamount :" + id_sum2+"  [class:"+id_sum2.class + "]" )
 
    打印日志
    LoggerUtil.info(LOGGER, " ###groovy###  immuneModelList :" + JSONObject.toJSONString(immuneModelList) + "   ruleResult :" + JSONObject.toJSONString(ruleResult));
 
    return ruleResult
 
}