249 lines
13 KiB
XML
249 lines
13 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<Package>
|
|
|
|
<!--现场模块圈存交易风控处理-->
|
|
<Function name="LpsRiskControl">
|
|
<Input>RISK_DAT|GWA|</Input>
|
|
<!--Input>RISK_SWITCH|MBL_NO|TX_AMT1|RISK_TYPE|RISK_RSN|RISK_SEQ|GWA|</Input-->
|
|
<Output>MSG_CD|</Output>
|
|
<!-- 查询卡片信息 -->
|
|
<DynSentence name="QRY_LPSTCRD_INFO">
|
|
<Sentence>
|
|
SELECT CRD_STS,SUB_AC,USR_NO,CRD_STSW,CRD_VER,MAIN_AC
|
|
FROM LPSTCRD
|
|
WHERE MBL_NO=? AND CRD_STS!='2'
|
|
</Sentence>
|
|
<Fields>MBL_NO|</Fields>
|
|
</DynSentence>
|
|
|
|
<!-- 查询钱包透支限额 -->
|
|
<DynSentence name="QRY_LPSTVER_ODLMT">
|
|
<Sentence>
|
|
SELECT OD_LMT
|
|
FROM LPSTVER
|
|
WHERE VER_TYP='O'
|
|
</Sentence>
|
|
</DynSentence>
|
|
|
|
|
|
<Process>
|
|
<Set>MBL_NO=$RISK_DAT.MBL_NO</Set>
|
|
<Set>RISK_SWITCH=$RISK_DAT.RISK_SWITCH</Set>
|
|
|
|
<!--初始化错误信息为交易失败-->
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="LPS80001"/>
|
|
</Exec>
|
|
|
|
<!--查询用户基本信息-->
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QRY_LPSTCRD_INFO"/>
|
|
</Exec>
|
|
|
|
<!---查询用户实名信息-->
|
|
<Set>INP_DAT.MBL_NO=$MBL_NO</Set>
|
|
<Exec func="URM:QueryUserBaseInfo">
|
|
<Arg name="_I_GWA" value="GWA"/>
|
|
<Arg name="_I_INP_DAT" value="INP_DAT"/>
|
|
<Arg name="_O_OUT_DAT" value="OUT_DAT"/>
|
|
</Exec>
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<Switch expression="$RISK_SWITCH">
|
|
<Case value="C"> <!--实时风控检查-->
|
|
<!--风控检查参数设置-->
|
|
<Set>CRR_IN.TX_CD=$GWA.TX_CD</Set>
|
|
<Set>CRR_IN.TX_TYP=06</Set>
|
|
<Set>CRR_IN.BUS_CNL=$GWA.BUS_CNL</Set>
|
|
<Set>CRR_IN.TX_JRN=$GWA.JRN_NO</Set>
|
|
<Set>CRR_IN.TX_DT=$GWA.TX_DT</Set>
|
|
<Set>CRR_IN.RUL_FLG=2</Set>
|
|
<Set>CRR_IN.PAY_AC_TYP=100</Set>
|
|
<Set>CRR_IN.PAY_AC_NO=$MAIN_AC</Set>
|
|
<Set>CRR_IN.PAY_USR_NO=$USR_NO</Set>
|
|
<Set>CRR_IN.PAY_REAL_NM_FLG=@O.OUT_DAT.REAL_NM_FLG</Set>
|
|
<Set>CRR_IN.STL_AC_TYP=101</Set>
|
|
<Set>CRR_IN.STL_AC_NO=$SUB_AC</Set>
|
|
<Set>CRR_IN.STL_USR_NO=$USR_NO</Set>
|
|
<Set>CRR_IN.STL_REAL_NM_FLG=@O.OUT_DAT.REAL_NM_FLG</Set>
|
|
<If condition="AND(IS_EQUAL_STRING($CRD_VER,01),IS_EQUAL_STRING($GWA.BUS_CNL,STK))"> <!-- 1.1卡片空中充值查询透支限额 -->
|
|
<Exec func="PUB:ReadRecord">
|
|
<Arg name="SqlCmd" value="QRY_LPSTVER_ODLMT"/>
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="LPS80001"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<Set>CRR_IN.TX_AMT_TOT=FSUB($RISK_DAT.TX_AMT_TOT,$OD_LMT,2)</Set>
|
|
</If>
|
|
<Else>
|
|
<Set>CRR_IN.TX_AMT_TOT=$RISK_DAT.TX_AMT_TOT</Set>
|
|
</Else>
|
|
<Set>CRR_IN.TX_AMT1=$RISK_DAT.TX_AMT</Set>
|
|
<Set>CRR_IN.AMT_FLG=1</Set>
|
|
<Exec func="RRC:ChkRtmRsk">
|
|
<Arg name="_I_INP_DAT" value="CRR_IN"/>
|
|
<Arg name="_O_OUT_DAT" value="CRR_OUT"/>
|
|
</Exec>
|
|
<Exec func="PUB:DumpDs"/>
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
<Arg name="MsgDat" value="调用风控用户检查失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<Else>
|
|
<!--建议操作不为0-->
|
|
<If condition="AND(NOT(ISNULL(@O.CRR_OUT.OPERATOR)),IS_NOEQUAL_STRING(@O.CRR_OUT.OPERATOR,0))">
|
|
<Set>~CRR_CNT=0</Set>
|
|
<While condition="INTCMP(~CRR_CNT,1,@O.CRR_OUT.RUL_NUM)">
|
|
<Set>RISK_MSG_CD = @O.CRR_OUT.RISK[~CRR_CNT].MSG_CD</Set>
|
|
<Set>RISK_OPER=@O.CRR_OUT.RISK[~CRR_CNT].RRC_OPER</Set>
|
|
<If condition ="NOT(IS_SUCC($RISK_MSG_CD))"> <!-- 风控循环体中的交易码不为0 -->
|
|
<If condition="IS_EQUAL_STRING($RISK_OPER,@O.CRR_OUT.OPERATOR)"> <!-- 比较循环体中的建议操作和总的建议操作 -->
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="$RISK_MSG_CD"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
</If>
|
|
<Set>~CRR_CNT=ADD(~CRR_CNT,1)</Set>
|
|
</While>
|
|
<Return/>
|
|
</If>
|
|
</Else>
|
|
<Break/>
|
|
</Case>
|
|
<Case value="G"> <!--加入灰名单-->
|
|
<!--调用风控加入灰名单-->
|
|
<Set>GRAYLIST_IN.TX_TYP=$RISK_DAT.TX_TYP</Set> <!--圈存交易类型 -->
|
|
<Set>GRAYLIST_IN.TX_JRN=$GWA.JRN_NO</Set> <!--流水号/订单号 -->
|
|
<Set>GRAYLIST_IN.JRN_SEQ=$RISK_DAT.RISK_SEQ</Set> <!--流水顺序号 -->
|
|
<Set>GRAYLIST_IN.PAY_AC_TYP=100</Set> <!--付款方账户类型 -->
|
|
<Set>GRAYLIST_IN.PAY_USR_NO=$USR_NO</Set> <!--付款方内部用户号 -->
|
|
<Set>GRAYLIST_IN.PAY_PSN_CRP_FLG=0</Set> <!--付款方个企标志 -->
|
|
<Set>GRAYLIST_IN.PAY_PSN_CRP_NO=$MBL_NO</Set> <!--付款方个企编号 -->
|
|
<Set>GRAYLIST_IN.PAY_NAM=@O.OUT_DAT.USR_OPR_LOG_ID</Set> <!--付款方姓名 -->
|
|
|
|
<Set>GRAYLIST_IN.TX_AMT1=$RISK_DAT.TX_AMT</Set> <!--现金交易金额 -->
|
|
<Set>GRAYLIST_IN.TX_CD=$GWA.TX_CD</Set> <!--交易码 -->
|
|
<Set>GRAYLIST_IN.TYPE=$RISK_DAT.RISK_TYPE</Set> <!--风控类别 -->
|
|
<Set>GRAYLIST_IN.GRAY_RSN=$RISK_DAT.RISK_RSN</Set> <!--原因描述 -->
|
|
<Set>GRAYLIST_IN.TX_DT=$GWA.TX_DT</Set> <!--交易日期 -->
|
|
<Set>GRAYLIST_IN.OPER=0</Set> <!--后续操作:监控 -->
|
|
<Set>GRAYLIST_IN.OPR_ID=$GWA.OPR_ID</Set> <!--电子柜员编号 -->
|
|
|
|
<If condition="IS_EQUAL_STRING($RISK_DAT.TX_TYP,22)"> <!-- 现场清分交易 -->
|
|
<!-- 查询商户基本信息 -->
|
|
<Set>INP_DAT.MERC_ID=$RISK_DAT.MERC_ID</Set>
|
|
<Exec func="URM:QueryMerchInfo">
|
|
<Arg name="_I_GWA" value="GWA"/>
|
|
<Arg name="_I_INP_DAT" value="INP_DAT"/>
|
|
<Arg name="_O_OUT_DAT" value="OUT_DAT"/>
|
|
</Exec>
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<Set>GRAYLIST_IN.STL_AC_TYP=800</Set> <!--收款方账户类型 -->
|
|
<Set>GRAYLIST_IN.STL_AC_NO=$RISK_DAT.MERC_ID</Set> <!--收款方账号 -->
|
|
<Set>GRAYLIST_IN.STL_USR_NO=@O.OUT_DAT.USR_NO</Set> <!--收款方内部用户号 -->
|
|
<Set>GRAYLIST_IN.STL_PSN_CRP_FLG=1</Set> <!--收款方个企标志 -->
|
|
<Set>GRAYLIST_IN.STL_PSN_CRP_NO=$RISK_DAT.MERC_ID</Set> <!--收款方个企编号 -->
|
|
<Set>GRAYLIST_IN.STL_NAM=@O.OUT_DAT.MERC_CNM</Set> <!--收款方姓名 -->
|
|
</If>
|
|
<Else>
|
|
<Set>GRAYLIST_IN.STL_AC_TYP=101</Set> <!--收款方账户类型 -->
|
|
<Set>GRAYLIST_IN.STL_AC_NO=$SUB_AC</Set> <!--收款方账号 -->
|
|
<Set>GRAYLIST_IN.STL_USR_NO=$USR_NO</Set> <!--收款方内部用户号 -->
|
|
<Set>GRAYLIST_IN.STL_PSN_CRP_FLG=0</Set> <!--收款方个企标志 -->
|
|
<Set>GRAYLIST_IN.STL_PSN_CRP_NO=$MBL_NO</Set> <!--收款方个企编号 -->
|
|
<Set>GRAYLIST_IN.STL_NAM=@O.OUT_DAT.USR_OPR_LOG_ID</Set> <!--收款方姓名 -->
|
|
</Else>
|
|
|
|
<Exec func="RRC:AddGrayLst">
|
|
<Arg name="_I_INP_DAT" value="GRAYLIST_IN"/>
|
|
<Arg name="_O_OUT_DAT" value="GRAYLIST_OUT"/>
|
|
</Exec>
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
<Arg name="MsgDat" value="加入灰名单失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<Break/>
|
|
</Case>
|
|
<Case value="B"> <!--加入黑名单-->
|
|
<!--调用风控加入黑名单-->
|
|
<Set>BLACKLIST_IN.USR_NO=$USR_NO</Set> <!-- 内部用户号 -->
|
|
<Set>BLACKLIST_IN.TX_TYP=06</Set> <!-- 业务类型 -->
|
|
<Set>BLACKLIST_IN.OPR_ID=$GWA.OPR_ID</Set> <!-- 电子操作员 -->
|
|
<Set>BLACKLIST_IN.TX_DT=$GWA.TX_DT</Set> <!-- 操作时间 -->
|
|
<Set>BLACKLIST_IN.IN_RSN=$RISK_DAT.RISK_RSN</Set> <!-- 原因描述 -->
|
|
<Set>BLACKLIST_IN.START_DT=$GWA.TX_DT</Set> <!-- 生效时间 -->
|
|
<Set>BLACKLIST_IN.END_DT=</Set> <!-- 失效时间 -->
|
|
<Set>BLACKLIST_IN.TX_JRN=$GWA.JRN_NO</Set> <!--触发交易流水号 -->
|
|
<Set>BLACKLIST_IN.PSN_CRP_FLG=0</Set> <!-- 个企标识 -->
|
|
<Set>BLACKLIST_IN.PSN_CRP_NO=$MBL_NO</Set> <!-- 个企编号 -->
|
|
<Exec func="RRC:AddBlackLst" error="IGNORE">
|
|
<Arg name="_I_INP_DAT" value="BLACKLIST_IN"/>
|
|
<Arg name="_O_OUT_DAT" value="BLACKLIST_OUT"/>
|
|
</Exec>
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
<Arg name="MsgDat" value="加入黑名单失败"/>
|
|
</Exec>
|
|
</If>
|
|
<Break/>
|
|
</Case>
|
|
<Case value="M"> <!--交易限额累加(减少)-->
|
|
<!--调用风控累计金额(减少累计金额)-->
|
|
<Set>CI_IN.PAY_USR_NO=$USR_NO</Set>
|
|
<Set>CI_IN.STL_USR_NO=$USR_NO</Set>
|
|
<Set>CI_IN.PAY_AC_NO=$MAIN_AC</Set>
|
|
<Set>CI_IN.STL_AC_NO=$SUB_AC</Set>
|
|
<Set>CI_IN.TX_AMT1=$TX_AMT1</Set>
|
|
<Set>CI_IN.TX_TYP=06</Set>
|
|
<Set>CI_IN.TX_DT=$GWA.TX_DT</Set>
|
|
<Exec func="RRC:CmlInf">
|
|
<Arg name="_I_INP_DAT" value="CI_IN"/>
|
|
<Arg name="_O_OUT_DAT" value="CI_OUT"/>
|
|
</Exec>
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:CMPAddMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
<Arg name="MsgDat" value="风控累计金额失败"/>
|
|
</Exec>
|
|
</If>
|
|
<Break/>
|
|
</Case>
|
|
<Default>
|
|
<Exec func="PUB:CMPSetMsg">
|
|
<Arg name="MsgCd" value="LPS80001"/>
|
|
</Exec>
|
|
<Return/>
|
|
</Default>
|
|
</Switch>
|
|
|
|
<!--交易成功-->
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="LPS00000"/>
|
|
<Arg name="MsgDat" value="现场模块实时风控处理成功"/>
|
|
</Exec>
|
|
</Process>
|
|
</Function>
|
|
|
|
</Package>
|