316 lines
13 KiB
XML
316 lines
13 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<Package>
|
|
|
|
<!-- 计算商户手续费及商户结算 -->
|
|
<Function name="MERC_STL_FEE_FUNC">
|
|
<Input>GWA|ORD_TYP|PAY_TYP|STL_DT|STL_MOD|STL_PERD|STL_DAY|STL_DAY_BIT|STL_TRF_DAYS|NEXT_STL_DT|MERC_ID|MERC_TYP|MERC_NAM|</Input>
|
|
<Output>MSG_CD|</Output>
|
|
|
|
<DynSentence name="QRY_URMTMFEE"> <!-- 查询商户服务费费率表 -->
|
|
<Sentence>
|
|
SELECT MERC_FEE_MOD FROM URMTMFEE
|
|
WHERE MERC_ID = ? AND CAP_TYP = '1' AND FEE_TYP = '01' AND ( EFF_DT <= ? AND EXP_DT > ? )
|
|
</Sentence>
|
|
<Fields>MERC_ID|STL_DT|STL_DT|</Fields>
|
|
</DynSentence>
|
|
|
|
<DynSentence name="QryTxnJnl">
|
|
<Sentence>
|
|
SELECT JRN_NO,TXN_AMT
|
|
FROM CAPSTLDTL
|
|
WHERE TXN_TYP='N' AND PAY_TYP=? AND ORD_TYP=?
|
|
AND BUS_TYP='CAP01' AND (TXN_CD='204010' OR TXN_CD='204015' OR TXN_CD='204020') AND TXN_STS='S' AND MERC_CLR_FLG='0'
|
|
AND MERC_ID = ? AND AC_DT <= ?
|
|
</Sentence>
|
|
<Fields>PAY_TYP|ORD_TYP|MERC_ID|TXN_DT|</Fields>
|
|
</DynSentence>
|
|
|
|
<DynSentence name="UpdTxnJnl">
|
|
<Sentence>
|
|
UPDATE CAPSTLDTL
|
|
SET MERC_CLR_FLG='1',MERC_CLR_DT=?,
|
|
MERC_FEE_MOD=?, MERC_FEE_CAL_MTH=?,
|
|
MERC_FEE_AMT=?, MERC_STL_AMT=?
|
|
WHERE JRN_NO=?
|
|
</Sentence>
|
|
<Fields>MERC_CLR_DT|MERC_FEE_MOD|MERC_FEE_CAL_MTH|MERC_FEE_AMT|MERC_STL_AMT|JRN_NO|</Fields>
|
|
</DynSentence>
|
|
|
|
<DynSentence name="QrySUMSTL">
|
|
<Sentence>
|
|
SELECT COUNT(*) TO_MERC_SUCC_CNT,NVL(SUM(TXN_AMT),0) TO_TXN_AMT,
|
|
NVL(SUM(MERC_FEE_AMT),0) TO_MERC_FEE_AMT, NVL(SUM(MERC_STL_AMT),0) TO_MERC_STL_AMT
|
|
FROM CAPSTLDTL
|
|
WHERE PAY_TYP=? AND ORD_TYP=? AND BUS_TYP='CAP01' AND (TXN_CD='204010' OR TXN_CD='204015' OR TXN_CD='204020')
|
|
AND TXN_STS='S' AND MERC_CLR_FLG='1' AND MERC_ID = ? AND AC_DT <= ?
|
|
</Sentence>
|
|
<Fields>PAY_TYP|ORD_TYP|MERC_ID|TXN_DT|</Fields>
|
|
</DynSentence>
|
|
|
|
<DynSentence name="QrySUMJnl">
|
|
<Sentence>
|
|
SELECT COUNT(*) TO_MERC_SUCC_CNT,NVL(SUM(TXN_AMT),0) TO_TXN_AMT
|
|
FROM CAPSTLDTL
|
|
WHERE TXN_TYP='N' AND PAY_TYP=? AND ORD_TYP=?
|
|
AND BUS_TYP='CAP01' AND (TXN_CD='204010' OR TXN_CD='204015' OR TXN_CD='204020') AND TXN_STS='S' AND MERC_CLR_FLG='0'
|
|
AND MERC_ID = ? AND AC_DT <= ?
|
|
</Sentence>
|
|
<Fields>PAY_TYP|ORD_TYP|MERC_ID|TXN_DT|</Fields>
|
|
</DynSentence>
|
|
|
|
<DynSentence name="UpdSUMJnl">
|
|
<Sentence>
|
|
UPDATE CAPSTLDTL
|
|
SET MERC_CLR_FLG='1',MERC_CLR_DT=?,
|
|
MERC_FEE_MOD=?, MERC_FEE_CAL_MTH=?
|
|
WHERE TXN_TYP='N' AND PAY_TYP=? AND ORD_TYP=?
|
|
AND BUS_TYP='CAP01' AND (TXN_CD='204010' OR TXN_CD='204015' OR TXN_CD='204020') AND TXN_STS='S' AND MERC_CLR_FLG='0'
|
|
AND MERC_ID = ? AND AC_DT <= ?
|
|
</Sentence>
|
|
<Fields>MERC_CLR_DT|MERC_FEE_MOD|MERC_FEE_CAL_MTH|PAY_TYP|ORD_TYP|MERC_ID|TXN_DT|</Fields>
|
|
</DynSentence>
|
|
|
|
<Process>
|
|
<Set>TXN_DT=$NEXT_STL_DT</Set>
|
|
|
|
<Set>STL_STT_DT=$STL_DT</Set>
|
|
<!-- 计算协议付款日 = 当前会计日期 + 结算划款天数 -->
|
|
<Set>STL_END_DT=CALCDATE($STL_DT,+,d,$STL_TRF_DAYS)</Set>
|
|
|
|
<!-- 查询商户服务费费率表 -->
|
|
<Exec func="PUB:ReadRecord">
|
|
<Arg name="SqlCmd" value="QRY_URMTMFEE"/>
|
|
</Exec>
|
|
<If condition="OR(INTCMP($MERC_FEE_MOD,3,0),INTCMP($MERC_FEE_MOD,3,1))">
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QrySUMSTL"/>
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL99999"/>
|
|
<Arg name="MsgDat" value="交易失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<If condition="INTCMP($TO_MERC_SUCC_CNT,4,0)">
|
|
<Exec func="PUB:InsertRecord" error="IGNORE">
|
|
<Arg name="TblNam" value="CAPSTLREG"/>
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL99999"/>
|
|
<Arg name="MsgDat" value="交易失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
</If>
|
|
</If>
|
|
<If condition="INTCMP($MERC_FEE_MOD,3,2)">
|
|
|
|
<Exec func="PUB:OpenCursor">
|
|
<Arg name="SqlCmd" value="QryTxnJnl"/>
|
|
<Arg name="CursorName" value="QryTxnJnl"/>
|
|
</Exec>
|
|
<While>
|
|
<Exec func="PUB:FetchCursor" error="IGNORE">
|
|
<Arg name="CursorName" value="QryTxnJnl"/>
|
|
</Exec>
|
|
<If condition="~RetCod=2">
|
|
<Break/>
|
|
</If>
|
|
<ElseIf condition="~RetCod<0">
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL99999"/>
|
|
<Arg name="MsgDat" value="交易失败"/>
|
|
</Exec>
|
|
<Exec func="PUB:CloseCursor">
|
|
<Arg name="CursorName" value="QryTxnJnl"/>
|
|
</Exec>
|
|
<Return/>
|
|
</ElseIf>
|
|
|
|
<!--计算商户手续费-->
|
|
<Set>MERC_FEE_AMT=0</Set> <!-- 手续费 -->
|
|
<Set>INP_DAT.MERC_ID=$MERC_ID</Set>
|
|
<Set>INP_DAT.CAP_TYP=1</Set>
|
|
<Set>INP_DAT.TX_MOD=0</Set>
|
|
<Set>INP_DAT.FEE_TYP=01</Set>
|
|
<Set>INP_DAT.ORD_AMT=$TXN_AMT</Set>
|
|
<Set>INP_DAT.TXN_AMT=$TXN_AMT</Set>
|
|
<Set>INP_DAT.TOT_CALL_FLG=1</Set>
|
|
<Set>INP_DAT.RCV_AMT1=$TXN_AMT</Set>
|
|
|
|
<!--计算手续费-->
|
|
<Exec func="URM:ComputeMerchFee">
|
|
<Arg name="INP_DAT" value="INP_DAT" />
|
|
<Arg name="OUT_DAT" value="OUT_DAT" />
|
|
</Exec>
|
|
<If condition="IS_SUCC(@O.MSG_CD)=0">
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL99999"/>
|
|
<Arg name="MsgDat" value="交易失败"/>
|
|
</Exec>
|
|
<Exec func="PUB:CloseCursor">
|
|
<Arg name="CursorName" value="QryTxnJnl"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<Set>MERC_FEE_AMT=$OUT_DAT.ORD_FEE</Set> <!-- 手续费 -->
|
|
<Set>MERC_FEE_MOD=$OUT_DAT.MERC_FEE_MOD</Set> <!-- 收费方式 -->
|
|
<Set>MERC_FEE_CAL_MTH=$OUT_DAT.FEE_CAL_MTH</Set> <!-- 费用计算依据 -->
|
|
|
|
<Set>MERC_STL_AMT=FSUB($TXN_AMT,$MERC_FEE_AMT,2)</Set> <!-- 实际清算到商户账金额 -->
|
|
|
|
<!--商户清分标志更改-->
|
|
<Set>MERC_CLR_FLG=1</Set>
|
|
<Set>MERC_CLR_DT=$GWA.AC_DT</Set>
|
|
<!-- 更新清算明细表 -->
|
|
<Exec func="PUB:ExecSql">
|
|
<Arg name="SqlCmd" value="UpdTxnJnl"/>
|
|
</Exec>
|
|
|
|
<Delete>INP_DAT</Delete>
|
|
<Delete>OUT_DAT</Delete>
|
|
<Delete>TXN_AMT</Delete>
|
|
<Delete>LOG_NO</Delete>
|
|
</While>
|
|
<!--查询商户代收汇总信息-->
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QrySUMSTL"/>
|
|
</Exec>
|
|
<If condition="INTCMP($TO_MERC_SUCC_CNT,4,0)">
|
|
<Exec func="PUB:InsertRecord" error="IGNORE">
|
|
<Arg name="TblNam" value="CAPSTLREG"/>
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL99999"/>
|
|
<Arg name="MsgDat" value="交易失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
</If>
|
|
</If>
|
|
<!--- 按周期汇总,计算手续费 -->
|
|
<If condition="INTCMP($MERC_FEE_MOD,3,3)">
|
|
|
|
<!--查询商户代收汇总信息-->
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QrySUMJnl"/>
|
|
</Exec>
|
|
|
|
<!--计算商户手续费-->
|
|
<Set>TO_MERC_FEE_AMT=0</Set> <!-- 手续费 -->
|
|
<Set>INP_DAT.MERC_ID=$MERC_ID</Set>
|
|
<Set>INP_DAT.CAP_TYP=1</Set>
|
|
<Set>INP_DAT.TX_MOD=0</Set>
|
|
<Set>INP_DAT.FEE_TYP=01</Set>
|
|
<Set>INP_DAT.TOT_ORD_AMT=$TO_TXN_AMT</Set>
|
|
<Set>INP_DAT.TOT_ORD_CNT=$TO_MERC_SUCC_CNT</Set>
|
|
<Set>INP_DAT.TOT_CALL_FLG=2</Set>
|
|
|
|
<!--计算手续费-->
|
|
<Exec func="URM:ComputeMerchFee">
|
|
<Arg name="INP_DAT" value="INP_DAT" />
|
|
<Arg name="OUT_DAT" value="OUT_DAT" />
|
|
</Exec>
|
|
<If condition="IS_SUCC(@O.MSG_CD)=0">
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL99999"/>
|
|
<Arg name="MsgDat" value="交易失败"/>
|
|
</Exec>
|
|
<Exec func="PUB:CloseCursor">
|
|
<Arg name="CursorName" value="QryTxnJnl"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<Set>TO_MERC_FEE_AMT=$OUT_DAT.ORD_FEE</Set> <!-- 手续费 -->
|
|
<Set>MERC_FEE_MOD=$OUT_DAT.MERC_FEE_MOD</Set> <!-- 收费方式 -->
|
|
<Set>MERC_FEE_CAL_MTH=$OUT_DAT.FEE_CAL_MTH</Set> <!-- 费用计算依据 -->
|
|
|
|
<Set>TO_MERC_STL_AMT=FSUB($TO_TXN_AMT,$TO_MERC_FEE_AMT,2)</Set> <!-- 实际清算到商户账金额 -->
|
|
|
|
<!--商户清分标志更改-->
|
|
<Set>MERC_CLR_FLG=1</Set>
|
|
<Set>MERC_CLR_DT=$GWA.AC_DT</Set>
|
|
<!-- 更新清算明细表 -->
|
|
<Exec func="PUB:ExecSql">
|
|
<Arg name="SqlCmd" value="UpdSUMJnl"/>
|
|
</Exec>
|
|
<If condition="INTCMP($TO_MERC_SUCC_CNT,4,0)">
|
|
<Exec func="PUB:InsertRecord" error="IGNORE">
|
|
<Arg name="TblNam" value="CAPSTLREG"/>
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL99999"/>
|
|
<Arg name="MsgDat" value="交易失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
</If>
|
|
</If>
|
|
|
|
<!-- @msg 正常结束 -->
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="STL00000"/>
|
|
<Arg name="MsgDat" value="交易成功"/>
|
|
</Exec>
|
|
</Process>
|
|
</Function>
|
|
|
|
<!-- 交易路由选择 本代本走银行,本代他走银行-->
|
|
<Function name="MERC_TXN_ROUT">
|
|
<Input>GWA|CRD_NO|</Input>
|
|
<Output>MSG_CD|</Output>
|
|
|
|
<DynSentence name="QRY_CORG_NO"> <!-- 根据银行类型转换为合作机构编码 -->
|
|
<Sentence>
|
|
SELECT CORG_NO FROM CMMTINORG
|
|
WHERE BNK_TYP=? AND BNK_STS='1'
|
|
</Sentence>
|
|
<Fields>BNK_TYP|</Fields>
|
|
</DynSentence>
|
|
|
|
<Process>
|
|
<!--获取银行卡类型及判断卡种 00:借记卡 01:贷记卡 02:准贷记卡-->
|
|
<!--Exec func="ATMPTC:GetCrdFlg">
|
|
<Arg name="Table" value="CMMTUFIT"/>
|
|
<Arg name="Trk2" value=" "/>
|
|
<Arg name="Trk3" value=" "/>
|
|
<Arg name="CrdNo" value="$CRD_NO"/>
|
|
<Arg name="cacheFlg" value="N"/><参数cacheFlg若为N,则直接读卡表,不读取缓存>
|
|
</Exec-->
|
|
<!--如果是信用卡,判断CVV2和信用卡有效期是否为空-->
|
|
<If condition="IS_EQUAL_STRING($CRD_FLG,01)">
|
|
<If condition="OR(ISNULL($CVV2),ISNULL(CRD_EXP_DT))">
|
|
<!-- 数据格式错误 -->
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="TXN99999"/>
|
|
<Arg name="MsgDat" value="数据格式错误"/>
|
|
</Exec>
|
|
</If>
|
|
</If>
|
|
|
|
<!-- 根据银行类型转换为合作机构编码 -->
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QRY_CORG_NO"/>
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<!--根据银行类型查询不到合作机构,取默认值-->
|
|
<Set>CORG_NO=$DEFAULT_ROUT</Set>
|
|
</If>
|
|
<Else>
|
|
<Set>CORG_NO=$CORG_NO</Set>
|
|
</Else>
|
|
<!-- @msg 正常结束 -->
|
|
<Exec func="PUB:CmpSetMsg">
|
|
<Arg name="MsgCd" value="TXN00000"/>
|
|
<Arg name="MsgDat" value="交易成功"/>
|
|
</Exec>
|
|
</Process>
|
|
</Function>
|
|
|
|
</Package>
|