687 lines
32 KiB
XML
687 lines
32 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
||
<Tran>
|
||
<Transaction code="204025" log_switch='1' timeout="600" desc="批量代收文件处理">
|
||
<Attributes>
|
||
<Attribute name="nodatabase" value="2"/> <!--数据库长连接-->
|
||
</Attributes>
|
||
<Quote name="SQL_RcvConfirm"/> <!--商户接入认证检查配套SQL语句-->
|
||
<DynSentence name="QryErrCnt">
|
||
<Sentence>
|
||
SELECT COUNT(*) SucCnt FROM CAPBATINF WHERE DSK_NAM = ? AND ORD_DT = ? AND (BAT_STS = '1' OR BAT_STS='0'
|
||
OR BAT_STS='U')
|
||
</Sentence>
|
||
<Fields>DSK_NAM|ORD_DT|</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="UpdDskSts"> <!--更新接入批量信息登记表-->
|
||
<Sentence>
|
||
UPDATE CAPDSKINF
|
||
SET DSK_STS=?
|
||
WHERE DSK_NAM=? AND ORD_DT=? AND DSK_STS = '0'
|
||
</Sentence>
|
||
<Fields>DSK_STS|DSK_NAM|ORD_DT|</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="QryBisTmp">
|
||
<Sentence>
|
||
SELECT * FROM CAPHROTMP WHERE DSK_NAM=?
|
||
</Sentence>
|
||
<Fields>DSK_NAM</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="VfyDskAmt">
|
||
<Sentence>
|
||
SELECT ORN_AMT AS DSK_AMT,ORN_CNT AS DSK_CNT FROM CAPDSKINF WHERE DSK_NAM = ? AND ORD_DT = ?
|
||
</Sentence>
|
||
<Fields>DSK_NAM|ORD_DT</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="VfyTxnAmt">
|
||
<Sentence>
|
||
SELECT SUM(TXN_AMT) AS TXN_AMT,COUNT(*) AS TXN_CNT FROM CAPTXNJNL WHERE DSK_NAM = ? AND ORD_DT = ?
|
||
</Sentence>
|
||
<Fields>DSK_NAM|ORD_DT</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="QryLBnkNo">
|
||
<Sentence>
|
||
SELECT Pty_Id LBNK_NO,PTY_NM LBNK_NAM FROM CAPCOMPTY WHERE BkCtgy_Cd = ?
|
||
</Sentence>
|
||
<Fields>BNK_TYP</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="QryInitBatLst">
|
||
<Sentence>
|
||
SELECT CORG_NO FROM CAPTXNJNL
|
||
WHERE DSK_NAM=? AND ORD_DT=? AND TXN_MOD=? AND DSK_NAM_STS='0' AND TXN_STS='U' AND CORG_DSK_NO = '0'
|
||
group by CORG_NO having length(trim(CORG_NO)) > 0
|
||
</Sentence>
|
||
<Fields>DSK_NAM|ORD_DT|TXN_MOD</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="QrySndBatLst">
|
||
<Sentence>
|
||
SELECT * FROM CAPBATINF WHERE DSK_NAM = ? AND ORD_DT = ? AND BAT_TYP = '01' AND BAT_STS = '0'
|
||
</Sentence>
|
||
<Fields>DSK_NAM|ORD_DT</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="Updbatstt">
|
||
<Sentence>
|
||
UPDATE CAPBATINF SET BAT_STS = '2' , RSP_CD = '999999' , RSP_MSG = ? WHERE ORD_DT = ? AND CORG_DSK_NO =
|
||
?
|
||
</Sentence>
|
||
<Fields>Rsp_Msg|ORD_DT|CORG_DSK_NO</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="Updinfstt">
|
||
<Sentence>
|
||
UPDATE CAPTXNJNL SET TXN_STS = 'F' , RSP_CD = '999999' , RSP_MSG = ? WHERE ORD_DT =? AND ORG_NO = ? AND
|
||
CORG_DSK_NO = ? AND TXN_STS='U'
|
||
</Sentence>
|
||
<Fields>Rsp_Msg|ORD_DT|CORG_NO|CORG_DSK_NO</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="DelHroTmp">
|
||
<Sentence>
|
||
DELETE FROM CAPHROTMP
|
||
</Sentence>
|
||
<Fields></Fields>
|
||
</DynSentence>
|
||
<!--查询支付地信息 -->
|
||
<DynSentence name="QRY_CAPACCOUNTINF">
|
||
<Sentence>
|
||
SELECT BR_NO,ACCT_NO TAC_NO,ACCT_NAME TAC_NAM ,ACCT_TYPE TAC_TYP FROM CAPACCOUNTINF
|
||
WHERE TITLE_ID = ? AND ENABLED = 'Y' AND BANK_CODE = ?
|
||
</Sentence>
|
||
<Fields>TITLE_ID|CORG_NO|</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="UpdSumlmtrlr">
|
||
<Sentence>
|
||
UPDATE SUMLMTRLR
|
||
SET DAY_AMT= DAY_AMT - %s,
|
||
MTH_AMT = MTH_AMT - %s,
|
||
YAR_AMT = YAR_AMT - %s,
|
||
DAY_CNT = DAY_CNT - %s,
|
||
MTH_CNT = MTH_CNT - %s,
|
||
YAR_CNT = YAR_CNT - %s
|
||
WHERE ID=?
|
||
</Sentence>
|
||
<Fields>ORN_AMT|ORN_AMT|ORN_AMT|ORN_CNT|ORN_CNT|ORN_CNT|MERC_ID|</Fields>
|
||
</DynSentence>
|
||
<DynSentence name="QRY_LBNKNO">
|
||
<Sentence>
|
||
select * from (
|
||
select A.BNK_CD,B.PTY_ID,B.PTY_NM,B.PTYALS_NM from CMMTBKTYP A,CAPCOMPTY B
|
||
WHERE A.BNK_TYP = ? AND A.BNK_CD = B.BKCTGY_CD AND B.PTY_KND = 'PBC' AND trim(A.BNK_CD) is not null
|
||
) where rownum = '1'
|
||
</Sentence>
|
||
<Fields>BNK_TYP|</Fields>
|
||
</DynSentence>
|
||
|
||
<DynSentence name="QRY_LBNKNO2">
|
||
<Sentence>
|
||
select * from (
|
||
select B.PTY_ID,B.PTY_NM,B.PTYALS_NM from CAPCOMPTY B
|
||
WHERE B.BKCTGY_CD = ? AND B.PTY_KND = 'PBC'
|
||
) where rownum = '1'
|
||
</Sentence>
|
||
<Fields>BNK_CD|</Fields>
|
||
</DynSentence>
|
||
|
||
<DynSentence name="QRY_BNK_TYP">
|
||
<Sentence>
|
||
SELECT BNK_TYP FROM ( SELECT BNK_TYP FROM CMMTBKTYP where bnk_cd = ? ) WHERE ROWNUM = 1
|
||
</Sentence>
|
||
<Fields>BNK_CD|</Fields>
|
||
</DynSentence>
|
||
|
||
<Function name="_after">
|
||
<Process>
|
||
<If condition="IS_EQUAL_STRING($SUMLMTRLR_FALG,1)">
|
||
<!--释放占用的额度-->
|
||
<Set>ERR_MSG=</Set>
|
||
<Set>MERC_ID=$MERC_ID</Set>
|
||
<Set>ORN_CNT=$ORN_CNT</Set>
|
||
<Set>ORN_AMT=$ORN_AMT</Set>
|
||
<Exec func="PUB:ExecSql" error="IGNORE">
|
||
<Arg name="SqlCmd" value="UpdSumlmtrlr"/>
|
||
</Exec>
|
||
<!--If condition="~RetCod != 0">
|
||
<Set>ERR_MSG=,释放商户额度失败</Set>
|
||
</If-->
|
||
</If>
|
||
<If condition="IS_NOEQUAL_STRING($Rsp_Cd,00)">
|
||
<If condition="ISNULL($EVT_TYP)=1">
|
||
<Set>EVENT.DSK_NO=$DSK_NAM</Set>
|
||
<If condition="ISNULL($Rsp_Msg)">
|
||
<Set>Rsp_Msg=接入批次异常</Set>
|
||
</If>
|
||
<Set>EVENT.ERR_MSG=STRCAT($Rsp_Msg,(,$Rsp_Cd,),$ERR_MSG)</Set>
|
||
<Set>EVT_TYP=EVT_DISK_PROC_FAILURE</Set>
|
||
</If>
|
||
<Exec func="PUB:SLEEP" error="IGNORE" desc="SLEEP三十秒钟">
|
||
<Arg name="SleepTime" value="30" />
|
||
</Exec>
|
||
<Exec func="PUB:InvokeService" error="IGNORE">
|
||
<Arg name="ServiceName" value="PUSH_EVENT"/>
|
||
<Arg name='Mode' value='NOTIFY'/>
|
||
</Exec>
|
||
|
||
<Set>DISK_NO=$DSK_NAM</Set>
|
||
<Set>DISK_STS=4</Set>
|
||
<If condition="ISNULL($Rsp_Msg)">
|
||
<Set>Rsp_Msg=接入批次异常</Set>
|
||
</If>
|
||
<Set>DISK_MESSAGE=STRCAT($Rsp_Msg,(,$Rsp_Cd,),$ERR_MSG)</Set>
|
||
<Delete>FILE_PATH</Delete>
|
||
<Delete>MD5</Delete>
|
||
<!--调用HRO送盘接口-->
|
||
<Exec func="PUB:CallThirdComm" error="IGNORE">
|
||
<Arg name="HTxnCd" value="diskNotify"/>
|
||
<Arg name="ObjSvr" value="SCAHRO3"/>
|
||
</Exec>
|
||
</If>
|
||
</Process>
|
||
</Function>
|
||
<FlowCtrl>
|
||
|
||
|
||
<Set>REG_ID=@SYS.ics.sys.regionid</Set>
|
||
<Set>NOD_ID=@SYS.ics.sys.nodeid</Set>
|
||
|
||
<!--判断文件是否存在-->
|
||
<Exec func="PUB:IsValidFile" error="IGNORE">
|
||
<Arg name="FileName" value="$FIL_NAM"/>
|
||
</Exec>
|
||
<If condition="OR( INTCMP($FIL_TYP,3,0), INTCMP(~RetCod,4,0) )">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=文件字节数不合法或数据文件不完整或不存在</Set>
|
||
<Return/>
|
||
</If>
|
||
|
||
<!--删除临时表-->
|
||
<Exec func="PUB:ExecSql" error="IGNORE">
|
||
<Arg name="SqlCmd" value="DelHroTmp"/>
|
||
</Exec>
|
||
|
||
<Exec func="PUB:ImportToDB" error="IGNORE">
|
||
<Arg name="FormatName" value="HroFmt01"/>
|
||
<Arg name="FileName" value="$FIL_NAM"/>
|
||
<Arg name="TableName" value="CAPHROTMP"/>
|
||
</Exec>
|
||
|
||
<If condition="~RetCod != 0">
|
||
<Set>Rsp_Cd=05</Set>
|
||
<Set>Rsp_Msg=文件解析失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
|
||
<Set>ORN_CNT=$SUM.TOTAL_COUNT</Set>
|
||
<Set>ORN_AMT=$SUM.TOTAL_AMOUNT</Set>
|
||
<Set>POSTSCRIPT=$SUM.POSTSCRIPT</Set>
|
||
|
||
<!--判断接口送的与文件上送的支付地抬头、客户编号是否相同-->
|
||
<If condition="OR(IS_NOEQUAL_STRING($SUM.CUSTOMER_ID,$CUSTOMER_ID),IS_NOEQUAL_STRING($SUM.TITLE_ID,$TITLE_ID))">
|
||
<Set>Rsp_Cd=30</Set>
|
||
<Set>Rsp_Msg=文件头上送参数与接口上送参数不一致</Set>
|
||
<Return/>
|
||
</If>
|
||
|
||
<Set>DSK_STS=0</Set>
|
||
<Set>CORG_TXN_MOD=$TXN_MOD</Set>
|
||
<Set>PAY_TYP=STRCAT(1,SUBSTR($TXN_MOD,2,1))</Set> <!--订单支付类型-->
|
||
<Set>ORD_TYP=STRCAT(1,SUBSTR($TXN_MOD,2,1))</Set> <!--订单类型-->
|
||
<Set>DSK_NAM_STS=0</Set>
|
||
<Set>ORD_TM=GETDATETIME(HHMISS)</Set>
|
||
<Set>ORD_DT_TM=GETDATETIME()</Set>
|
||
<Set>CHK_MRE=1</Set>
|
||
|
||
<Set>CAP_TYP=CAP_PAY_BAT</Set>
|
||
<Set>MERC_ID=$MERC_ID</Set>
|
||
<Set>TXN_AMT1=AMTPOWER($ORN_AMT,2)</Set>
|
||
<!--客户批量限额判断-->
|
||
<Call package="CEL" function="MERC_AMT_BAT_QTM_VERIFY">
|
||
<Input>CAP_TYP|TXN_AMT1|ORN_CNT|MERC_ID|LMT_NM|</Input>
|
||
<Output>MSG_CD|EVT_TYP|EVT_DSC|OUT|TIM_RAG|</Output>
|
||
</Call>
|
||
<If condition="SUBSTR(@O.MSG_CD,4,5)!=00000">
|
||
<Set>MSG_INF=@O.EVT_DSC</Set>
|
||
<Set>EVT_TYP=@O.EVT_TYP</Set>
|
||
<Set>EVENT.DSK_NO=$DSK_NAM</Set>
|
||
<Set>EVENT.CUS_ID=$MERC_ID</Set>
|
||
<Set>EVENT.ERR_MSG=$MSG_INF</Set>
|
||
<Set>Rsp_Cd=44</Set>
|
||
<Set>Rsp_Msg=$MSG_INF</Set>
|
||
<Return/>
|
||
</If>
|
||
<Exec func="PUB:CommitWork"/>
|
||
<Set>TIM_RAG.LMT_MAX_PL_AMT=@O.TIM_RAG.LMT_MAX_PL_AMT</Set> <!-- 单笔最大限额(对私)-->
|
||
<Set>TIM_RAG.LMT_MIN_PL_AMT=@O.TIM_RAG.LMT_MIN_PL_AMT</Set> <!-- 单笔最小限额(对私) -->
|
||
<Set>TIM_RAG.LMT_MAX_DAY_AMT=@O.TIM_RAG.LMT_MAX_DAY_AMT</Set> <!-- 每日最大限额 -->
|
||
<Set>TIM_RAG.LMT_MAX_MTH_AMT=@O.TIM_RAG.LMT_MAX_MTH_AMT</Set> <!-- 每月最大限额 -->
|
||
<Set>TIM_RAG.LMT_MAX_YAR_AMT=@O.TIM_RAG.LMT_MAX_YAR_AMT</Set> <!-- 每年最大限额 -->
|
||
<Set>TIM_RAG.DAY_AMT=@O.TIM_RAG.DAY_AMT</Set><!--当月交易金额累加-->
|
||
<Set>TIM_RAG.MTH_AMT=@O.TIM_RAG.MTH_AMT</Set><!--当月交易金额累加-->
|
||
<Set>TIM_RAG.YAR_AMT=@O.TIM_RAG.YAR_AMT</Set><!--当月交易金额累加-->
|
||
|
||
<!--额度标志:0不需要释放 1:需要释放额度-->
|
||
<Set>SUMLMTRLR_FALG=1</Set>
|
||
<!--建立事务-->
|
||
<Exec func="PUB:BeginWork"/>
|
||
<!--登记批量代收代付接入批量信息登记表-->
|
||
<Exec func="PUB:InsertRecord" error="IGNORE">
|
||
<Arg name="TblNam" value="CAPDSKINF"/>
|
||
</Exec>
|
||
<If condition="~RetCod=-1">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=登记接入批量信息登记表失败</Set>
|
||
<Return/>
|
||
</If>
|
||
<ElseIf condition="~RetCod=1">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=该批次重复提交</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</ElseIf>
|
||
|
||
|
||
<Exec func="PUB:OpenCursor" error="IGNORE">
|
||
<Arg name="SqlCmd" value="QryBisTmp"/>
|
||
</Exec>
|
||
<If condition="~RetCod != 0">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=打开游标失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
|
||
<While>
|
||
<Exec func="PUB:FetchCursor" error="IGNORE">
|
||
<Arg name="ObjectName" value="CAPTXNJNL"/>
|
||
</Exec>
|
||
<If condition="~RetCod=2">
|
||
<Exec func="PUB:CloseCursor"/>
|
||
<Break/>
|
||
</If>
|
||
<ElseIf condition="~RetCod!=0">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=循环游标失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</ElseIf>
|
||
<Delete>RTR_FLAG</Delete>
|
||
<Set>CAPTXNJNL.CYC_CD=CNY</Set>
|
||
<Set>CAPTXNJNL.CITY=$CAPTXNJNL.BANK_CITY</Set>
|
||
<Set>CAPTXNJNL.BANK_NAM=$CAPTXNJNL.BANK_NAME</Set>
|
||
<Set>CAPTXNJNL.CD_FLG=C</Set>
|
||
<Set>CAPTXNJNL.TXN_CD=$TXN_CD</Set>
|
||
<Set>CAPTXNJNL.TXN_TYP=N</Set>
|
||
<Set>CAPTXNJNL.TXN_TM=GETDATETIME()</Set>
|
||
<Set>CAPTXNJNL.BUS_TYP=$BUS_TYP</Set>
|
||
<Set>CAPTXNJNL.ORD_TYP=$ORD_TYP</Set>
|
||
<Set>CAPTXNJNL.PAY_TYP=$PAY_TYP</Set>
|
||
<Set>CAPTXNJNL.TXN_MOD=$TXN_MOD</Set>
|
||
<Set>CAPTXNJNL.CORG_TXN_MOD=$CORG_TXN_MOD</Set>
|
||
<Set>CAPTXNJNL.DSK_NAM_STS=$DSK_NAM_STS</Set>
|
||
<Set>CAPTXNJNL.ORD_TM=GETDATETIME(HHMISS)</Set>
|
||
<Set>CAPTXNJNL.ORD_DT_TM=GETDATETIME()</Set>
|
||
<Set>CAPTXNJNL.POSTSCRIPT=$POSTSCRIPT</Set>
|
||
<Set>CAPTXNJNL.TXN_STS=U</Set>
|
||
<Set>CAPTXNJNL.TTXN_ST=U</Set>
|
||
<Set>CAPTXNJNL.MERC_ID=$MERC_ID</Set>
|
||
<Set>CAPTXNJNL.MERC_NAM=$MERC_NAM</Set>
|
||
<Set>CAPTXNJNL.MERC_ORD_NO=$CAPTXNJNL.REF_ID</Set>
|
||
<Set>CAPTXNJNL.MERC_LOG_NO=$CAPTXNJNL.REF_ID</Set>
|
||
<Set>CAPTXNJNL.COP_BUS_TYP=$COP_BUS_TYP</Set>
|
||
<Set>TXN_AMT=$CAPTXNJNL.AMOUNT</Set>
|
||
<Set>CAPTXNJNL.TXN_AMT=$CAPTXNJNL.AMOUNT</Set>
|
||
<Set>CAPTXNJNL.ORD_DT=$ORD_DT</Set>
|
||
<Set>TXN_AMT3=AMTPOWER($TXN_AMT,2)</Set>
|
||
<Set>CAPTXNJNL.CUS_NAM=$CAPTXNJNL.ACCT_NAME</Set>
|
||
<Set>CAPTXNJNL.DSK_NO=$CAPTXNJNL.DSK_NAM</Set>
|
||
<Set>CAPTXNJNL.TXN_CNL=$TXN_CNL</Set>
|
||
<Set>CAPTXNJNL.RMK=$CAPTXNJNL.REMARK</Set>
|
||
|
||
|
||
<Set>CAPTXNJNL.CRD_NO=$CAPTXNJNL.ACCT_NO</Set>
|
||
<Set>CAPTXNJNL.AC_NO=$CAPTXNJNL.ACCT_NO</Set>
|
||
<Set>AC_NO=$CAPTXNJNL.AC_NO</Set>
|
||
<!--银行卡号包含空格或者*号直接交易失败-->
|
||
|
||
|
||
<Set>CHECK_AC_NO=REPCHAR($AC_NO,0,"")</Set>
|
||
|
||
<If condition="ISNULL($CHECK_AC_NO)">
|
||
<Set>CAPTXNJNL.TXN_STS=F</Set>
|
||
<Set>CAPTXNJNL.RSP_CD=02</Set>
|
||
<Set>CAPTXNJNL.RSP_MSG=收款账户有误</Set>
|
||
<Set>CAPTXNJNL.DSK_NAM_STS=4</Set>
|
||
<Set>RTR_FLAG=1</Set>
|
||
</If>
|
||
<If condition="NOT(ISNUMBER($AC_NO))">
|
||
<Set>CAPTXNJNL.TXN_STS=F</Set>
|
||
<Set>CAPTXNJNL.RSP_CD=02</Set>
|
||
<Set>CAPTXNJNL.RSP_MSG=收款账户非全数字</Set>
|
||
<Set>CAPTXNJNL.DSK_NAM_STS=4</Set>
|
||
<Set>RTR_FLAG=1</Set>
|
||
</If>
|
||
<Else>
|
||
<!--查询银行卡信息-->
|
||
<Exec func="ATMPTC:GetCrdFlg">
|
||
<Arg name="Table" value="CMMTUFIT"/>
|
||
<Arg name="Trk2" value="$TRACK_2"/>
|
||
<Arg name="Trk3" value="$TRACK_3"/>
|
||
<Arg name="CrdNo" value="$AC_NO"/>
|
||
</Exec>
|
||
|
||
<If condition="AND(OR(ISNULL($BNK_TYP),IS_EQUAL_STRING($BNK_TYP,ZZZZ)),ISNULL($CAPTXNJNL.BANK_CODE))">
|
||
<Set>CAPTXNJNL.CRD_FLG=04</Set>
|
||
<Set>CAPTXNJNL.TXN_STS=F</Set>
|
||
<Set>CAPTXNJNL.RSP_CD=80</Set>
|
||
<Set>CAPTXNJNL.RSP_MSG=收款账户所属银行未知</Set>
|
||
<Set>CAPTXNJNL.DSK_NAM_STS=4</Set>
|
||
<Set>RTR_FLAG=1</Set>
|
||
</If>
|
||
<ElseIf condition="AND(OR(ISNULL($BNK_TYP),IS_EQUAL_STRING($BNK_TYP,ZZZZ)),(ISNULL($CAPTXNJNL.BANK_CODE)=0))">
|
||
<Set>RTR_IN.CRD_FLG=04</Set><!--其他-->
|
||
<Set>CAPTXNJNL.CRD_FLG=04</Set>
|
||
<Set>RTR_IN.CRD_NM=其他</Set>
|
||
<Set>CAPTXNJNL.CRD_NM=其他</Set>
|
||
|
||
<Set>BNK_CD=$CAPTXNJNL.BANK_CODE</Set>
|
||
<Exec func="PUB:ReadRecord">
|
||
<Arg name="SqlCmd" value="QRY_BNK_TYP"/>
|
||
</Exec>
|
||
|
||
<Set>RTR_IN.BNK_TYP=$BNK_TYP</Set>
|
||
<Set>CAPTXNJNL.BNK_TYP=$BNK_TYP</Set>
|
||
<Exec func="PUB:ReadRecord" error="IGNORE">
|
||
<Arg name="SqlCmd" value="QRY_LBNKNO2"/>
|
||
</Exec>
|
||
<If condition="~RetCod !=0">
|
||
<If condition="ISNULL($CAPTXNJNL.BANK_NO)">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=查询联行号失败</Set>
|
||
</If>
|
||
<Else>
|
||
<Set>CAPTXNJNL.LBNK_NO=$CAPTXNJNL.BANK_NO</Set><!--联行号-->
|
||
<Set>CAPTXNJNL.LBNK_NAM=$CAPTXNJNL.BANK_NAME</Set><!--联行名称-->
|
||
<Set>PTYALS_NM=$CAPTXNJNL.BANK_NAME</Set><!--联行名称-->
|
||
</Else>
|
||
</If>
|
||
<Else>
|
||
<Set>CAPTXNJNL.LBNK_NO=$PTY_ID</Set><!--联行号-->
|
||
<Set>CAPTXNJNL.LBNK_NAM=$PTY_NM</Set><!--联行名称-->
|
||
</Else>
|
||
</ElseIf>
|
||
<Else>
|
||
<Set>RTR_IN.BNK_TYP=$BNK_TYP</Set>
|
||
<Set>RTR_IN.CRD_FLG=$CRD_FLG</Set>
|
||
<Set>RTR_IN.CRD_NM=$CRD_NM</Set>
|
||
<Set>CAPTXNJNL.BNK_TYP=$BNK_TYP</Set>
|
||
<Set>CAPTXNJNL.CRD_FLG=$CRD_FLG</Set>
|
||
<Set>CAPTXNJNL.CRD_NM=$CRD_NM</Set>
|
||
|
||
<Exec func="PUB:ReadRecord" error="IGNORE">
|
||
<Arg name="SqlCmd" value="QRY_LBNKNO"/>
|
||
</Exec>
|
||
<If condition="~RetCod !=0">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=查询联行号失败</Set>
|
||
</If>
|
||
<Else>
|
||
<Set>CAPTXNJNL.LBNK_NO=$PTY_ID</Set><!--联行号-->
|
||
<Set>CAPTXNJNL.LBNK_NAM=$PTY_NM</Set><!--联行名称-->
|
||
</Else>
|
||
</Else>
|
||
</Else>
|
||
|
||
<If condition="IS_NOEQUAL_STRING($RTR_FLAG,1)">
|
||
<!--所有参数由节点RTR_IN传进路由-->
|
||
<Set>RTR_IN.ORD_TYP=$ORD_TYP</Set>
|
||
<Set>RTR_IN.PAY_TYP=$PAY_TYP</Set>
|
||
<Set>RTR_IN.AC_NO=$CAPTXNJNL.ACCT_NO</Set>
|
||
<Set>RTR_IN.TXN_AMT=$TXN_AMT</Set>
|
||
<Set>RTR_IN.TXN_CNL=HRO</Set>
|
||
<Set>RTR_IN.TXN_MOD=$TXN_MOD</Set>
|
||
<Set>RTR_IN.GRP_NM=$GRP_NM</Set>
|
||
|
||
<!-- 预留增加动态路由选择 -->
|
||
<Call package="RTR" function="RANDOM_SELECT_ORG">
|
||
<!--Input>GWA|ORD_TYP|PAY_TYP|AC_NO|TXN_AMT|BNK_COD|TXN_CNL</Input-->
|
||
<Input>RTR_IN</Input>
|
||
<Output>MSG_CD|RTR_OUT</Output>
|
||
<!--Output>MSG_CD|BNK_TYP|CRD_FLG|CRD_NM|CORG_NO|LBNK_NO|UNION_FLG</Output-->
|
||
</Call>
|
||
|
||
<!--所有参数由节点RTR_OUT传出路由-->
|
||
<Set>CORG_NO=@O.RTR_OUT.CORG_NO</Set>
|
||
<Set>ROUT_FLG=@O.RTR_OUT.ROUT_FLG</Set>
|
||
<Set>CAPTXNJNL.ROUT_FLG=$ROUT_FLG</Set>
|
||
<Set>CAPTXNJNL.CORG_NO=$CORG_NO</Set>
|
||
<Set>CORG_NO=@O.RTR_OUT.CORG_NO</Set>
|
||
<If condition="IS_EQUAL_STRING($BNK_CD,$CORG_NO)">
|
||
<Set>CAPTXNJNL.BNK_FLG=Y</Set>
|
||
</If>
|
||
<Else>
|
||
<Set>CAPTXNJNL.BNK_FLG=N</Set>
|
||
</Else>
|
||
|
||
<If condition="SUBSTR(@O.MSG_CD,4,5)!=00000">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=计算动态路由失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
|
||
<!--路由查找失败-->
|
||
<If condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),99999)">
|
||
<Set>Rsp_Cd=99</Set>
|
||
<Set>Rsp_Msg=路由查找失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
<ElseIf condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),88888)">
|
||
<Set>Rsp_Cd=88</Set>
|
||
<Set>Rsp_Msg=交易路由查找失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</ElseIf>
|
||
<Else>
|
||
<Set>CORG_NO=@O.RTR_OUT.CORG_NO</Set>
|
||
<Set>Rsp_Cd=00</Set>
|
||
</Else>
|
||
|
||
<Set>TXN_AMT2=AMTPOWER($TXN_AMT,2)</Set>
|
||
|
||
<Set>CAPTXNJNL.ROUT_FLG=$ROUT_FLG</Set>
|
||
<Set>CAPTXNJNL.CORG_NO=$CORG_NO</Set>
|
||
<If condition="AND(IS_EQUAL_STRING($CORG_NO,ICBC),OR(IS_EQUAL_STRING($ROUT_FLG,LARGE),IS_EQUAL_STRING($ROUT_FLG,SMALL)))">
|
||
<Set>CAPTXNJNL.LBNK_NAM=$PTYALS_NM</Set><!--联行名称-->
|
||
</If>
|
||
|
||
|
||
<!--查询支付地账户-->
|
||
<Exec func="PUB:ReadRecord" error="IGNORE">
|
||
<Arg name="SqlCmd" value="QRY_CAPACCOUNTINF"/>
|
||
<Arg name="GrpNam" value="CAPTXNJNL"/>
|
||
</Exec>
|
||
<If condition="~RetCod!=0">
|
||
<Set>Rsp_Cd=31</Set>
|
||
<Set>Rsp_Msg=支付地信息有误</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
|
||
<Set>ACT_FLG=$ACT_FLG</Set>
|
||
<Set>ACT_FLG=PL</Set>
|
||
|
||
<Set>TXN_AMT2=AMTPOWER($CAPTXNJNL.TXN_AMT,2)</Set>
|
||
<!--客户批量限额判断-->
|
||
<Call package="CEL" function="MERC_AMT_QTM_VERIFY">
|
||
<Input>TXN_AMT2|TIM_RAG|</Input>
|
||
<Output>MSG_CD|TXN_STS|RSP_CD|RSP_MSG|</Output>
|
||
</Call>
|
||
<If condition="SUBSTR(@O.MSG_CD,4,5)!=00000">
|
||
<Set>CAPTXNJNL.TXN_STS=@O.TXN_STS</Set>
|
||
<Set>CAPTXNJNL.RSP_CD=@O.RSP_CD</Set>
|
||
<Set>CAPTXNJNL.RSP_MSG=@O.RSP_MSG</Set>
|
||
<Set>CAPTXNJNL.RSP_MSG=@O.RSP_MSG</Set>
|
||
<Set>CAPTXNJNL.DSK_NAM_STS=4</Set>
|
||
</If>
|
||
<Else>
|
||
<Set>TIM_RAG.DAY_AMT=ADD($TIM_RAG.DAY_AMT,$TXN_AMT2)</Set><!--当月交易金额累加-->
|
||
<Set>TIM_RAG.MTH_AMT=ADD($TIM_RAG.MTH_AMT,$TXN_AMT2)</Set><!--当月交易金额累加-->
|
||
<Set>TIM_RAG.YAR_AMT=ADD($TIM_RAG.YAR_AMT,$TXN_AMT2)</Set><!--当月交易金额累加-->
|
||
</Else>
|
||
|
||
</If>
|
||
<Quote name="GET_JRN_NO"/> <!--取交易流水号-->
|
||
<Quote name="GET_CAP_ORD_NO"/>
|
||
<Set>CAPTXNJNL.JRN_NO=$JRN_NO</Set>
|
||
<Set>CAPTXNJNL.CAP_ORD_NO=$CAP_ORD_NO</Set>
|
||
<!--计算商户手续费-->
|
||
<Set>CAPTXNJNL.MERC_FEE_AMT=0</Set> <!-- 手续费 -->
|
||
<Set>CAPTXNJNL.AC_DT=$AC_DT</Set>
|
||
|
||
<!--预记代收流水-->
|
||
<Exec func="PUB:InsertRecord" error="IGNORE">
|
||
<Arg name="TblNam" value="CAPTXNJNL"/>
|
||
<Arg name="GrpNam" value="CAPTXNJNL"/>
|
||
</Exec>
|
||
<If condition="~RetCod=-1">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=预计流水失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
<ElseIf condition="~RetCod=1">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=批量流水重复</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</ElseIf>
|
||
|
||
<!--删除关键域避免重复-->
|
||
<Delete>CRD_NO</Delete>
|
||
<Delete>MERC_ORD_NO</Delete>
|
||
<Delete>MERC_LOG_NO</Delete>
|
||
<Delete>TXN_AMT</Delete>
|
||
<Delete>JRN_NO</Delete>
|
||
<Delete>CRD_EXP_DT</Delete>
|
||
<Delete>CRD_FLG</Delete>
|
||
<Delete>BNK_TYP</Delete>
|
||
<Delete>BNK_FLG</Delete>
|
||
<Delete>BNK_CD</Delete>
|
||
<Delete>CAPTXNJNL</Delete>
|
||
<Delete>CRD_FLG</Delete>
|
||
<Delete>CRD_NM</Delete>
|
||
<Delete>PTYALS_NM</Delete>
|
||
<Delete>PTY_ID</Delete>
|
||
<Delete>PTY_NM</Delete>
|
||
|
||
</While>
|
||
|
||
<!--关闭游标-->
|
||
<Exec func="PUB:CloseCursor" error="IGNORE"/>
|
||
<!--提交游标-->
|
||
<Exec func="PUB:CommitWork"/>
|
||
<!--额度标志:0不需要释放-->
|
||
<Set>SUMLMTRLR_FALG=0</Set>
|
||
|
||
<!--验证各批次汇总金额是否等于文件总金额-->
|
||
<Exec func="PUB:ReadRecord" error="IGNORE">
|
||
<Arg name="SqlCmd" value="VfyDskAmt"/>
|
||
</Exec>
|
||
|
||
<!--验证交易金额是否与文件总金额相匹配-->
|
||
<Exec func="PUB:ReadRecord" error="IGNORE">
|
||
<Arg name="SqlCmd" value="VfyTxnAmt"/>
|
||
</Exec>
|
||
<If condition="DOUBLECMP($DSK_AMT,4,$TXN_AMT)">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=流水总金额与文件总金额不符</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
|
||
<!--查询需要生成的批次机构-->
|
||
<Exec func="PUB:OpenCursor" error="IGNORE">
|
||
<Arg name="SqlCmd" value="QryInitBatLst"/>
|
||
</Exec>
|
||
<If condition="~RetCod != 0">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=打开游标失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</If>
|
||
|
||
<!--循环生成批次-->
|
||
<While>
|
||
<Exec func="PUB:FetchCursor" error="IGNORE"/>
|
||
<If condition="~RetCod=2">
|
||
<Exec func="PUB:CloseCursor"/>
|
||
<Break/>
|
||
</If>
|
||
<ElseIf condition="~RetCod!=0">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=循环游标失败</Set>
|
||
<Exec func="PUB:RollbackWork"/>
|
||
<Return/>
|
||
</ElseIf>
|
||
|
||
<Exec func="PUB:CallThirdService">
|
||
<Arg name="HTxnCd" value="STRCAT(initBatch_,$CORG_NO)"/>
|
||
<Arg name="ObjSvr" value="OFRTCAP1"/>
|
||
</Exec>
|
||
<Set>RSP_CD=$RSP_CD</Set>
|
||
<Set>RSP_MSG=$RSP_MSG</Set>
|
||
<Set>CORG_NO=$CORG_NO</Set> <!-- 机构号 -->
|
||
<Set>BAT_ORN_AMT1=AMTPOWER($BAT_ORN_AMT,2)</Set> <!-- 批次金额 -->
|
||
<Set>CORG_DSK_NO=$CORG_DSK_NO</Set> <!-- 批次号 -->
|
||
<Set>ORD_TYP=$ORD_TYP</Set> <!-- 代收付标志 -->
|
||
<Set>OBAT_TYP=$OBAT_TYP</Set>
|
||
|
||
<Set>CAP_TYP=CAP_PAY_BAT</Set>
|
||
<Set>RMK=批量代付</Set>
|
||
|
||
<!--清理数据-->
|
||
<Delete>CORG_MERC_ID</Delete>
|
||
<Delete>CORG_DSK_NO</Delete>
|
||
<Delete>CORG_FIL_NAM</Delete>
|
||
<Delete>SND_DT</Delete>
|
||
<Delete>SND_TM</Delete>
|
||
<Delete>BAT_ORN_CNT</Delete>
|
||
<Delete>BAT_ORN_AMT</Delete>
|
||
<Delete>BAT_SUC_CNT</Delete>
|
||
<Delete>BAT_SUC_AMT</Delete>
|
||
<Delete>BAT_FAL_CNT</Delete>
|
||
<Delete>BAT_FAL_AMT</Delete>
|
||
<Delete>BAT_STS</Delete>
|
||
<Delete>CORG_NO</Delete>
|
||
</While>
|
||
|
||
<Exec func="PUB:CloseCursor" error="IGNORE"/>
|
||
|
||
<!--查询成功批次笔数-->
|
||
<Exec func="PUB:ReadRecord" error="IGNORE">
|
||
<Arg name="SqlCmd" value="QryErrCnt"/>
|
||
</Exec>
|
||
<If condition="~RetCod!=0">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=查询成功批次数失败</Set>
|
||
</If>
|
||
<If condition="INTCMP(0,1,$SucCnt)">
|
||
<Set>DSK_STS=1</Set> <!--只要成功一批,就认为该报盘文件成功处理-->
|
||
</If>
|
||
<Else>
|
||
<Set>DSK_STS=9</Set> <!--批次接受失败-->
|
||
</Else>
|
||
|
||
<!--更新DSKINF,标记该批量文件已经开始处理-->
|
||
<Exec func="PUB:ExecSql" error="IGNORE">
|
||
<Arg name="SqlCmd" value="UpdDskSts"/>
|
||
</Exec>
|
||
<If condition="~RetCod != 0">
|
||
<Set>Rsp_Cd=80</Set>
|
||
<Set>Rsp_Msg=更新接入批量信息登记表失败</Set>
|
||
</If>
|
||
|
||
<Set>Rsp_Cd=00</Set>
|
||
<Set>Rsp_Msg=交易成功</Set>
|
||
</FlowCtrl>
|
||
</Transaction>
|
||
</Tran>
|