Files

687 lines
32 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>