高級(jí)配置
更新時(shí)間:
在 創(chuàng)建文件核對(duì)規(guī)則 的過(guò)程中,您可以在設(shè)置核對(duì)配置時(shí)進(jìn)行以下高級(jí)配置。
說(shuō)明
高級(jí)配置 僅適用于創(chuàng)建文件核對(duì)規(guī)則的場(chǎng)景。對(duì)于離線核對(duì)規(guī)則,未提供該選項(xiàng)。
規(guī)則表達(dá)式
如果在設(shè)置規(guī)則表達(dá)式時(shí)開啟 高級(jí)配置 開關(guān),您可以使用 qlExpress 或 Groovy 自定義較為復(fù)雜的表達(dá)式。
若選擇 qlExpress,示例如下:
引用數(shù)據(jù)源或文件時(shí),需要使用數(shù)據(jù)節(jié)點(diǎn)名稱。
多個(gè)規(guī)則用英文逗號(hào) [,] 隔開。
獲取數(shù)據(jù)節(jié)點(diǎn)上的數(shù)據(jù)。使用時(shí)須使用字段對(duì)應(yīng)的映射字段。
DCD0191204k29o26m1.fileamount < DCD019120997hcfyh1.payamount , DCD0191204k29o26m1.fileamount <= DCD019120997hcfyh1.payamount
若選擇 Groovy,示例如下:
重要模型 一詞非字面義,本文特指 映射字段,即字段映射關(guān)系。以
核對(duì)模型,一左一右
為例,是指會(huì)根據(jù)映射字段分別為兩個(gè)數(shù)據(jù)節(jié)點(diǎn)生成兩個(gè)模型。
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();
//核對(duì)模型,一左一右,可以通過(guò)模型 id 等關(guān)鍵信息判斷具體誰(shuí)左誰(shuí)右
def model1 = immuneModelList.get(0);
def model2 = immuneModelList.get(1);
//獲取模型上的數(shù)據(jù),明細(xì)核對(duì)時(shí)候,是一行數(shù)據(jù)的 fieldName; 匯總核對(duì)時(shí)候,是自定義的匯總字段 fieldName;
Map<String, Object> kv1 = model1.getFieldName2Value();
Map<String, Object> kv2 = model2.getFieldName2Value();
//匯總數(shù)值; 明細(xì)核對(duì)時(shí)候,可以獲取到明細(xì)數(shù)值
Object id_sum1 = kv1.get("fileamount");
Object id_sum2 = kv2.get("payamount");
//可以統(tǒng)一轉(zhuǎn)為 bigdecimal 的方式處理
def isSuccess = id_sum1 > id_sum2;
// 核對(duì)結(jié)果
ruleResult.setIsSuccess(isSuccess);
// 如果失敗,失敗的原因可以在這里放進(jìn)去
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
}
文檔內(nèi)容是否對(duì)您有幫助?