Files

1423 lines
58 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<Tran>
<!--初始化批次___招商银行 -->
<Transaction code="initBatch_CMB" log_switch='1' desc="生成招行批次">
<Quote name="SQL_RcvConfirm"/>
<DynSentence name="QryBatCnt"><!--查询超网该批次有多少记录 -->
<Sentence>
SELECT COUNT(*) BAT_CNT FROM CAPTXNJNL
WHERE DSK_NAM=? AND ROUT_FLG=? AND TAC_TYP=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND
DSK_NAM_STS='0' AND
TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>DSK_NAM|ROUT_FLG|TAC_TYP|ORD_DT|CORG_NO|TXN_MOD|MAX_CNT</Fields>
</DynSentence>
<DynSentence name="QryBatCnt1"><!--查询非超网该批次有多少记录 -->
<Sentence>
SELECT COUNT(*) BAT_CNT FROM CAPTXNJNL
WHERE DSK_NAM=? AND ROUT_FLG IN ('LARGE','SMALL') AND TAC_TYP=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND
DSK_NAM_STS='0' AND
TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>DSK_NAM|TAC_TYP|ORD_DT|CORG_NO|TXN_MOD|MAX_CNT</Fields>
</DynSentence>
<DynSentence name="QryFourBat"><!--查询未打包的批次(四种维度 代发工资,代发其它,超网代发工资,超网代发其它) -->
<Sentence>
SELECT ROUTFLAG,tac_typ FROM (
SELECT decode(ROUT_FLG,'SUPER','SUPER','LARGE','NOSUP','SMALL','NOSUP') ROUTFLAG ,tac_typ FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND DSK_NAM_STS='0' AND
TXN_STS='U' AND CORG_DSK_NO = '0')
group by ROUTFLAG,tac_typ
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|</Fields>
</DynSentence>
<DynSentence name="UpdDskNo">
<Sentence>
UPDATE CAPTXNJNL SET CORG_DSK_NO = ?,trx_seq=lpad(rownum,8,0),TXN_CD = ?, TTXN_CD = ?
WHERE DSK_NAM=? AND ROUT_FLG=? AND TAC_TYP=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND DSK_NAM_STS='0' AND
TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>CORG_DSK_NO|TXN_CD|TTXN_CD|DSK_NAM|ROUT_FLG|TAC_TYP|ORD_DT|CORG_NO|TXN_MOD|MAX_CNT|</Fields>
</DynSentence>
<DynSentence name="UpdDskNo1">
<Sentence>
UPDATE CAPTXNJNL SET CORG_DSK_NO = ?,trx_seq=lpad(rownum,8,0),TXN_CD = ?, TTXN_CD = ?
WHERE DSK_NAM=? AND ROUT_FLG IN ('LARGE','SMALL') AND TAC_TYP=? AND ORD_DT=? AND CORG_NO=? AND TXN_MOD=? AND DSK_NAM_STS='0' AND
TXN_STS='U' AND CORG_DSK_NO = '0' AND ROWNUM &lt;= ?
</Sentence>
<Fields>CORG_DSK_NO|TXN_CD|TTXN_CD|DSK_NAM|TAC_TYP|ORD_DT|CORG_NO|TXN_MOD|MAX_CNT</Fields>
</DynSentence>
<DynSentence name="QryBatAmt">
<Sentence>
SELECT COUNT(*) BAT_CNT,NVL(SUM(TXN_AMT),0) BAT_SUM FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT = ? AND CORG_NO=? AND CORG_DSK_NO = ? AND DSK_NAM_STS='0' AND TXN_STS='U'
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="UPD_CAPTXNJNL_STSBYROUT"> <!--大小额渠道本代他交易银行名称或城市名称为空 则直接更新为失败 -->
<Sentence>
UPDATE CAPTXNJNL SET CORG_DSK_NO =' ',
TXN_CD = '204020',
ACC_VER_STS= 'S',
TXN_STS='F',
DSK_NAM_STS='4',
RSP_CD='80',
RSP_MSG='大小额渠道本代他交易银行名称或城市名称为空',
TM_SMP=to_char(sysdate,'yyyymmddhh24miss')
WHERE (TRIM(BANK_NAM) IS NULL OR TRIM(CITY) IS NULL) AND BNK_FLG='N' AND
DSK_NAM=? AND ROUT_FLG IN ('LARGE','SMALL') AND ORD_DT=? AND CORG_NO=? AND
TXN_MOD=? AND DSK_NAM_STS='0' AND TXN_STS='U' AND CORG_DSK_NO = '0'
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|</Fields>
</DynSentence>
<FlowCtrl>
<!--清理数据 -->
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Exec func="PUB:DumpETF"/>
<!--读取参数配置 -->
<Quote name="Batch_Cfg_CMB"/>
<Quote name="Init_CAP01"/> <!--交易初始化-->
<Set>AC_DT=$AC_DT</Set>
<Set>BAT_TYP=$FIL_TYP</Set><!--交易模式 02 代付-->
<!--设置机构编号(招商) -->
<Set>CORG_NO=CMB</Set>
<Set>MAX_CNT=$PARA.MAX_CNT</Set>
<!--大小额渠道本带他交易异常数据更新为失败-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPTXNJNL_STSBYROUT"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新数据失败</Set>
<Return/>
</If>
<Exec func="PUB:OpenCursor" error="IGNORE">
<Arg name="SqlCmd" value="QryFourBat"/>
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Return/>
</If>
<While>
<Exec func="PUB:FetchCursor" error="IGNORE"/>
<If condition="~RetCod=2">
<Exec func="PUB:CloseCursor"/>
<Break/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:RollbackWork"/>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Return/>
</ElseIf>
<Set>ROUT_FLG=$ROUTFLAG</Set>
<Set>TAC_TYP=$TAC_TYP</Set>
<!--初始化流水信息 -->
<Set>TXN_CD=204020</Set>
<!--超网代发工资-->
<If condition="AND(IS_EQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,B))">
<Set>TTXN_CD=NTAGCSAI</Set>
<Set>CHECK_TMPE=QryBatCnt</Set>
<Set>UPDATE_TMPE=UpdDskNo</Set>
</If>
<!--超网代发其它-->
<ElseIf condition="AND(IS_EQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,N))">
<Set>TTXN_CD=NTAGCAPI</Set>
<Set>CHECK_TMPE=QryBatCnt</Set>
<Set>UPDATE_TMPE=UpdDskNo</Set>
</ElseIf>
<!--代发工资-->
<ElseIf condition="AND(IS_NOEQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,B))">
<Set>TTXN_CD=NTAGCSAL</Set>
<Set>CHECK_TMPE=QryBatCnt1</Set>
<Set>UPDATE_TMPE=UpdDskNo1</Set>
</ElseIf>
<!--代发其它-->
<ElseIf condition="AND(IS_NOEQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,N))">
<Set>TTXN_CD=NTAGCAPY</Set>
<Set>CHECK_TMPE=QryBatCnt1</Set>
<Set>UPDATE_TMPE=UpdDskNo1</Set>
</ElseIf>
<Else>
<Set>TTXN_CD=</Set>
</Else>
<While>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="$CHECK_TMPE"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
<Set>BAT_CNT=$BAT_CNT</Set>
<!--无数据 -->
<If condition="INTCMP($BAT_CNT,2,0)">
<Break/>
</If>
<Set>BAT_TYP=$FIL_TYP</Set> <!-- 交易模式 01 批扣 02 批付 99 联机 -->
<Set>SND_DT=SUBSTR($TACC_TM,1,8)</Set>
<Set>SND_TM=SUBSTR($TACC_TM,9,6)</Set>
<!--获取批次号 -->
<Quote name="GET_CUP_BAT_NO"/>
<Set>CORG_DSK_NO=STRCAT(GETDATETIME(),$CORG_DSK_NO)</Set>
<Set>CORG_SND_DT=GETDATE()</Set>
<!--更新批次号-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="$UPDATE_TMPE"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新批次号失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
<!--查询金额笔数数-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryBatAmt"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
<Set>BAT_ORN_AMT=$BAT_SUM</Set>
<Set>BAT_ORN_CNT=$BAT_CNT</Set>
<Set>BAT_VER_STS=1</Set>
<Set>CORG_MERC_ID=CMB</Set> <!--单位编号 -->
<Set>Rsp_Cd=STRCAT( , )</Set>
<Set>Rsp_Msg=STRCAT( , )</Set>
<!--登记接出批量信息登记表 -->
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="CAPBATINF"/>
</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>
<!--提交事务-->
<Exec func="PUB:CommitWork"/>
</While>
</While>
<Exec func="PUB:CloseCursor"> <!-- 关闭游标 -->
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<If condition="~RetCod!=0">
<!-- @msg 关闭游标失败 -->
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="PWM25804"/>
</Exec>
</If>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
<!--发送招行批次交易 -->
<Transaction code="sendBatch_CMB" log_switch='1' desc="发送招行批次交易">
<Quote name="SQL_RcvConfirm"/>
<DynSentence name="QRYBATINF"> <!--查询批次信息-->
<Sentence>
SELECT *
FROM CAPBATINF
WHERE CORG_DSK_NO=?
AND ORD_DT=?
AND PRO_JRL='1'
AND CORG_NO='CMB'
</Sentence>
<Fields>CORG_DSK_NO|ORD_DT|</Fields>
</DynSentence>
<DynSentence name="QRYCAPTXNJNL"> <!-- 查询批次信息 modify 20230629 -->
<Sentence>
SELECT TAC_TYP,ROUT_FLG,BR_NO,TAC_NO, case when TAC_TYP='N' AND POSTSCRIPT='工资' then '收入' ELSE substrb(POSTSCRIPT,0,40) END POSTSCRIPT
FROM CAPTXNJNL
WHERE DSK_NAM=?
AND CORG_DSK_NO=? and ORD_DT = ? and rownum=1
</Sentence>
<Fields>DSK_NAM|CORG_DSK_NO|ORD_DT|</Fields>
</DynSentence>
<DynSentence name="Qry_Export"> <!--招行代发工资/其它 查询打包记录 -->
<Sentence>
SELECT trx_seq trxseq,
ac_no accnbr,cus_nam accnam,TXN_AMT trsamt,case when TAC_TYP='N' AND POSTSCRIPT='工资' then '收入' ELSE substrb(POSTSCRIPT,0,40) END trsdsp,bnk_flg bnkflg,
' ' cprref,decode(ROUT_FLG,'SMALL','N','LARGE','Y','') fstflg,
decode(bnk_flg,'N',LBNK_NO,'') rcvbnk,decode(bnk_flg,'N',nvl(bank_nam,' '),'') eacbnk,city eaccty
FROM CAPTXNJNL
WHERE DSK_NAM='%s'
AND CORG_NO = '%s'
AND CORG_DSK_NO = '%s'
AND ORD_DT='%s'
AND TXN_MOD='%s'
AND DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>DSK_NAM|CORG_NO|CORG_DSK_NO|ORD_DT|TXN_MOD|</Fields>
</DynSentence>
<DynSentence name="Qry_Export_CW"> <!--招行超网代发工资/其它 查询打包记录 -->
<Sentence>
SELECT trx_seq trxseq,
ac_no eacnbr,cus_nam eacnam,TXN_AMT rcvamt,case when TAC_TYP='N' AND POSTSCRIPT='工资' then '收入' ELSE substrb(POSTSCRIPT,0,40) END trsdsp,bnk_flg bnkflg,
' ' cprref,case when TAC_TYP='N' AND POSTSCRIPT='工资' then '收入' ELSE substrb(POSTSCRIPT,0,40) END trxtxt
FROM CAPTXNJNL
WHERE DSK_NAM='%s'
AND CORG_NO = '%s'
AND CORG_DSK_NO = '%s'
AND ORD_DT='%s'
AND TXN_MOD='%s'
AND DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>DSK_NAM|CORG_NO|CORG_DSK_NO|ORD_DT|TXN_MOD|</Fields>
</DynSentence>
<!--更新该批次记录 -->
<DynSentence name="UpdJnlSts">
<Sentence>
UPDATE CAPTXNJNL
SET DSK_NAM_STS='1'
WHERE DSK_NAM=?
AND ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO = ?
AND TXN_MOD=?
AND DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO|TXN_MOD|</Fields>
</DynSentence>
<DynSentence name="UpdBatSts">
<Sentence>
UPDATE CAPBATINF
SET BAT_STS=?,
RSP_CD = ?,
RSP_MSG = ?,
S_RSP_CD = ?,
S_RSP_MSG = ?,
CORG_JRN_NO=?,
BAT_FAL_CNT =?,
BAT_FAL_AMT=?
WHERE
ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO=?
AND BAT_STS='0'
</Sentence>
<Fields>BAT_STS|RSP_CD|RSP_MSG|RSP_CD|RSP_MSG|CORG_JRN_NO|BAT_FAL_CNT|BAT_FAL_AMT|ORD_DT|CORG_NO|CORG_DSK_NO|
</Fields>
</DynSentence>
<DynSentence name="InitPRO_JRL"> <!--初始化PRO_JRL-->
<Sentence>
UPDATE CAPBATINF SET PRO_JRL ='0'
WHERE ORD_DT=? AND CORG_NO=? AND CORG_DSK_NO=? AND PRO_JRL='1'
</Sentence>
<Fields>ORD_DT|CORG_NO|CORG_DSK_NO|</Fields>
</DynSentence>
<!--更新该批次失败记录 -->
<DynSentence name="UpdJnlStsF">
<Sentence>
UPDATE CAPTXNJNL
SET DSK_NAM_STS='4',
TXN_STS='F',
TTXN_ST='F',
RSP_CD = '80',
RSP_MSG = ?,
TM_SMP=to_char(sysdate,'yyyymmddhh24miss')
WHERE DSK_NAM=?
AND
ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO = ?
AND TXN_MOD=?
AND
DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>RSP_MSG|DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO|TXN_MOD|</Fields>
</DynSentence>
<Function name="_before">
<Process>
<Exec func="PUB:DumpETF"/>
<Set>LockKey=STRCAT($CORG_NO,$CORG_DSK_NO)</Set>
<!-- 应用加锁,防止并发 -->
<Exec func="PUB:Lock">
<Arg name="RecKey" value="$LockKey" error="IGNORE"/>
<Arg name="TimOut" value="1800"/>
<Arg name="AutoUnlock" value="no"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=加锁失败</Set>
<Exit/>
</If>
<Set>IS_LOCKED=TRUE</Set>
</Process>
</Function>
<Function name="_after">
<Process>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="InitPRO_JRL"/>
</Exec>
<If condition="IS_EQUAL_STRING($IS_LOCKED,TRUE)">
<!--解锁-->
<Exec func="PUB:UnLock">
<Arg name="RecKey" value="$LockKey"/>
</Exec>
<Exec func="PUB:DumpETF"/>
</If>
</Process>
</Function>
<FlowCtrl>
<!--清理数据 -->
<Delete>TRSP_CD</Delete>
<Delete>TRSP_MSG</Delete>
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>RET_CODE</Delete>
<Delete>REQNBR</Delete>
<Exec func="PUB:DumpETF"/>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="REC"/>
</Exec>
<Quote name="Init_CAP01"/> <!--交易初始化-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRYBATINF"/>
</Exec>
<!--查询合作机构检查-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryBnkInf"/>
</Exec>
<If condition="~RetCod=2">
<Set>Rsp_Cd=31</Set>
<Set>Rsp_Msg=该合作机构不存在</Set>
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Return/>
</ElseIf>
<If condition="INTCMP($ENB_FLG,4,1)">
<Set>Rsp_Cd=31</Set>
<Set>Rsp_Msg=该合作机构未启用</Set>
<Return/>
</If>
<!--查询通道-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRYCAPTXNJNL"/>
</Exec>
<Set>reqid=STRCAT(GETDATETIME(),$CORG_DSK_NO)</Set>
<Quote name="Batch_Cfg_CMB"/>
<Set>userid=$PARA.USERID</Set>
<Set>TAC_NO=$TAC_NO</Set>
<!--超网代发工资-->
<If condition="AND(IS_EQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,B))">
<Set>TX_COD=NTAGCSAI</Set>
<Set>trstyp=BYSA</Set><!--交易类型-->
<Set>trxrmk=$POSTSCRIPT</Set><!--交易摘要-->
<Set>sql_cmd=Qry_Export_CW</Set>
<Set>grp_nam=ntagcsaix2</Set>
<Set>busmod=$PARA.BUSMOD1</Set>
<Set>payacc=$tac_no</Set>
</If>
<!--超网代发其它-->
<ElseIf condition="AND(IS_EQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,N))">
<Set>TX_COD=NTAGCAPI</Set>
<Set>bustya=BYBK</Set><!--交易类型-->
<Set>trxrmk=$POSTSCRIPT</Set><!--交易摘要-->
<Set>sql_cmd=Qry_Export_CW</Set>
<Set>grp_nam=ntagcsaix2</Set>
<Set>busmod=$PARA.BUSMOD2</Set>
<Set>payacc=$tac_no</Set>
</ElseIf>
<!--代发工资-->
<ElseIf condition="AND(IS_NOEQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,B))">
<Set>TX_COD=NTAGCSAL</Set>
<Set>trstyp=BYSA</Set><!--交易类型-->
<Set>nusage=$POSTSCRIPT</Set><!--用途-->
<Set>sql_cmd=Qry_Export</Set>
<Set>grp_nam=ntagcdtly1</Set>
<Set>busmod=$PARA.BUSMOD1</Set><!--业务模式 接口查得-->
<Set>accnbr=$tac_no</Set><!--付款账号-->
</ElseIf>
<!--代发其它-->
<ElseIf condition="AND(IS_NOEQUAL_STRING($ROUT_FLG,SUPER),IS_EQUAL_STRING($TAC_TYP,N))">
<Set>TX_COD=NTAGCAPY</Set>
<Set>trstyp=BYBK</Set><!--交易类型-->
<Set>nusage=$POSTSCRIPT</Set><!--用途-->
<Set>sql_cmd=Qry_Export</Set>
<Set>grp_nam=ntagcdtly1</Set>
<Set>busmod=$PARA.BUSMOD2</Set>
<Set>accnbr=$tac_no</Set><!--付款账号-->
</ElseIf>
<Else>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=无当前通道</Set>
<Return/>
</Else>
<Set>begtag=Y</Set>
<Set>endtag=Y</Set>
<Set>reqnbr=</Set>
<Set>ttlamt=$BAT_ORN_AMT</Set><!--总金额-->
<Set>ttlcnt=$BAT_ORN_CNT</Set><!--总笔数-->
<Set>curamt=$BAT_ORN_AMT</Set><!--本次金额-->
<Set>curcnt=$BAT_ORN_CNT</Set><!--本次笔数-->
<Set>ttlnum=1</Set><!--总次数-->
<Set>ccynbr=10</Set>
<Set>bbknbr=$BR_NO</Set><!--分行号-->
<Set>ccymkt=0</Set><!--货币市场 0不分钞汇1 现钞2 现汇-->
<Set>yurref=$CORG_DSK_NO</Set><!--业务参考号 小批批次号-->
<!-- <Set>grtflg=Y</Set>--><!--网银审批标志-->
<!--业务数据初始化 -->
<Set>CORG_DSK_NO=$CORG_DSK_NO</Set>
<Set>CORG_MERC_ID=$CORG_MERC_ID</Set>
<Set>TACC_TM=$TACC_TM</Set>
<Set>TXN_TM=SUBSTR(GETDATETIME(),9,6)</Set>
<Set>BAT_TYP=$BAT_TYP</Set>
<Set>@MSG.TXNTYP=T</Set>
<Set>RSP_CD=STRCAT( , )</Set>
<Set>RSP_MSG=STRCAT( , )</Set>
<Set>MAX_CNT=$PARA.MAX_CNT</Set>
<Exec func="PUB:QueryInGroup" error="IGNORE">
<Arg name="SqlCmd" value="$sql_cmd"/>
<Arg name="RecordName" value="$grp_nam"/>
<Arg name="limit" value="$MAX_CNT"/>
</Exec>
<Switch expression="~RetCod">
<Case value="-1">
<Return/>
</Case>
<Case value="2">
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=无数据</Set>
<Return/>
</Case>
</Switch>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="$TX_COD"/> <!-- 交易发往银行 -->
<Arg name="ObjSvr" value="SCMBPAY1"/><!-- 服务名 -->
</Exec>
<Switch expression="~RetCod">
<Case value="1">
<!--第三方失败-->
<!--接收标志 U:预计 0:已确认,待发送 1:发送处理完成 2:发送处理失败 3:接收处理中 4:接收处理完成 5:接收处理失败 6:送盘失败待回盘确认 9:有待处理记录-->
<Set>BAT_STS=3</Set> <!--成功-->
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=发送超时</Set>
<Break/>
</Case>
<Case value="-1">
<Set>BAT_STS=3</Set>
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=发送超时</Set>
<Break/>
</Case>
<Case value="0"> <!--查询成功-->
<Set>RET_CODE=$resultcode</Set>
<If condition="IS_NOEQUAL_STRING($RET_CODE,SUC0000)">
<Set>BAT_STS=3</Set>
<Set>Rsp_Cd=$resultcode</Set>
<Set>TRsp_Msg=SUBSTR($resultmsg,1,100)</Set>
<Set>Rsp_Msg=SUBSTR($resultmsg,1,100)</Set>
<Set>TRSP_CD=$resultcode</Set>
<If condition="IS_EQUAL_STRING($RET_CODE,NCB1101)">
<Set>BAT_STS=2</Set>
<Set>BAT_FAL_CNT=$BAT_ORN_CNT</Set>
<Set>BAT_FAL_AMT=$BAT_ORN_AMT</Set>
<!-- 更新流水状态为发送处理完成 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdJnlStsF"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次流水处理状态失败</Set>
</If>
</If>
</If>
<Else>
<!--更新流水状态为发送处理成功-->
<Set>BAT_STS=1</Set>
<Set>Rsp_Cd=00</Set>
<Set>TRsp_Msg=批次提交成功</Set>
<Set>Rsp_Msg=$TRsp_Msg</Set>
<Set>TRSP_CD=$resultcode</Set>
</Else>
<Break/>
</Case>
<Default>
<!--第三方失败-->
<Set>BAT_STS=3</Set> <!--成功-->
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=交易发送超时</Set>
</Default>
</Switch>
<If condition="~RetCod!=0">
<Set>EVENT.DSK_NO=$DSK_NAM</Set>
<Set>EVENT.BAT_NO=$CORG_DSK_NO</Set>
<Set>EVENT.ERR_MSG=招行送盘通道返回异常!</Set>
<Set>EVT_TYP=EVT_BATCH_SEND_FAILURE</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
</If>
<!-- 更新流水状态为发送处理完成 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdJnlSts"/>
</Exec>
<!-- 更新批次状态 -->
<Set>CORG_JRN_NO=$reqnbr</Set><!--客户返回的流程实例号-->
<Quote name="UpdSendBatSts"/>
<!--提交事务-->
<Exec func="PUB:CommitWork"/>
<!--清理数据 -->
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>rd</Delete>
<Delete>RET_CODE</Delete>
<Delete>REQNBR</Delete>
</FlowCtrl>
</Transaction>
<!--获取工行批次回盘文件 -->
<Transaction code="getBatch_CMB" log_switch='1' desc="获取招行批次回盘文件">
<DynSentence name="UpdCUPS_DSK_NO">
<Sentence>
UPDATE CAPBATINF
SET BAT_STS=? ,
END_TM=? ,
END_DT=?,
BAT_SUC_AMT=?,
BAT_SUC_CNT=?,
BAT_FAL_AMT=?,
BAT_FAL_CNT=?,
RSP_CD = ?,
RSP_MSG = ?
WHERE ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO=?
AND BAT_STS=?
</Sentence>
<Fields>
BAT_STS|END_TM|END_DT|BAT_SUC_AMT|BAT_SUC_CNT|BAT_FAL_AMT|BAT_FAL_CNT|RSP_CD|RSP_MSG|OORD_DT|OCORG_NO|OCORG_DSK_NO|OBAT_STS|
</Fields>
</DynSentence>
<DynSentence name="UpdCMBTxnJnlFail"> <!--整批失败更新流水 -->
<Sentence>
UPDATE CAPTXNJNL A
SET
(TTXN_ST,TXN_STS,DSK_NAM_STS,TACC_DT,TACC_TM,TRSP_CD,TRSP_MSG,RSP_CD,RSP_MSG,CORG_JRN_NO,TM_SMP)
=
( SELECT 'F' TTXN_ST,
'F' TXN_STS,
'4',
?,
?,
?,
?,
?,
?,
' ' CORG_JRN_NO,
to_char(sysdate,'yyyymmddhh24miss') TM_SMP
from dual
)
WHERE
A.CORG_NO = 'CMB'
AND A.CORG_DSK_NO = ?
AND (A.TTXN_ST = 'U' OR
A.TTXN_ST = 'P')
AND ORD_DT=?
</Sentence>
<Fields>TACC_DT|TACC_TM|TRSP_CD|TRSP_MSG|RSP_CD|RSP_MSG|OCORG_DSK_NO|OORD_DT|</Fields>
</DynSentence>
<DynSentence name="UpdCMBTxnJnl"> <!--更新批扣流水 -->
<Sentence>
UPDATE CAPTXNJNL A
SET
(TTXN_ST,TXN_STS,DSK_NAM_STS,TACC_DT,TACC_TM,TRSP_CD,TRSP_MSG,rsp_cd,RSP_MSG,CORG_JRN_NO,TM_SMP)
=
( SELECT TTXN_ST TTXN_ST,
TTXN_ST TXN_STS,
'4',
?,
?,
ERR_COD,
ERR_DSP,
decode(TTXN_ST,'S','00',80) rsp_cd,
decode(TTXN_ST,'S','交易成功',ERR_DSP) RSP_MSG,
B.TRX_SEQ CORG_JRN_NO,
to_char(sysdate,'yyyymmddhh24miss') TM_SMP
FROM CAPCMBPERD B
WHERE B.TRX_SEQ = A.TRX_SEQ AND B.YUR_REF=A.CORG_DSK_NO
)
WHERE
A.CORG_NO = 'CMB'
AND A.CORG_DSK_NO = ?
AND (A.TTXN_ST = 'U' OR
A.TTXN_ST = 'P')
AND ORD_DT=?
</Sentence>
<Fields>TACC_DT|TACC_TM|OCORG_DSK_NO|OORD_DT|</Fields>
</DynSentence>
<DynSentence name="UpdDskInf">
<Sentence>
UPDATE CAPDSKINF
SET SUC_CNT=TO_NUMBER(NVL(TRIM(SUC_CNT),0))
+
TO_NUMBER(NVL(TRIM(?),0)),
SUC_AMT=TO_NUMBER(NVL(TRIM(SUC_AMT),0)) +
TO_NUMBER(NVL(TRIM(?),0)),
FAL_CNT=TO_NUMBER(NVL(TRIM(FAL_CNT),0)) +
TO_NUMBER(NVL(TRIM(?),0)),
FAL_AMT=TO_NUMBER(NVL(TRIM(FAL_AMT),0)) +
TO_NUMBER(NVL(TRIM(?),0))
WHERE DSK_NAM=?
</Sentence>
<Fields>BAT_SUC_CNT|BAT_SUC_AMT|BAT_FAL_CNT|BAT_FAL_AMT|ODSK_NAM
</Fields>
</DynSentence>
<DynSentence name="TotFai"> <!--统计失败笔数 -->
<Sentence>
SELECT COUNT(*) BAT_FAL_CNT,NVL(SUM(TXN_AMT),0) BAT_FAL_AMT
FROM CAPTXNJNL
WHERE ORD_DT = ? AND CORG_NO = ? AND CORG_DSK_NO = ?
AND TTXN_ST =
'F'
</Sentence>
<Fields>OORD_DT|CORG_NO|OCORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="TotSuc"> <!--统计成功笔数 -->
<Sentence>
SELECT COUNT(*) BAT_SUC_CNT,NVL(SUM(TXN_AMT),0) BAT_SUC_AMT
FROM CAPTXNJNL
WHERE ORD_DT = ? AND CORG_NO = ? AND CORG_DSK_NO = ?
AND TTXN_ST =
'S'
</Sentence>
<Fields>OORD_DT|CORG_NO|OCORG_DSK_NO</Fields>
</DynSentence>
<!--查询批次总比数总金额-->
<DynSentence name="QryBatAmt">
<Sentence>
SELECT COUNT(*) BAT_CNT,NVL(SUM(TXN_AMT),0) BAT_SUM FROM CAPTXNJNL
WHERE DSK_NAM=? AND ORD_DT = ? AND CORG_NO=? AND CORG_DSK_NO = ? AND DSK_NAM_STS='1' AND TXN_STS='U'
</Sentence>
<Fields>ODSK_NAM|OORD_DT|CORG_NO|OCORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="QryCAPCMBPERD"> <!-- 查询临时表批次记录状态为P的记录数 -->
<Sentence>
SELECT COUNT(*) AS UNDO_CNT FROM CAPCMBPERD WHERE TTXN_ST='P'
</Sentence>
</DynSentence>
<DynSentence name="DelCAPCMBPERD"> <!-- 导入临时表数据之前删除临时表数据 -->
<Sentence>
DELETE FROM CAPCMBPERD
</Sentence>
</DynSentence>
<DynSentence name="InitPRO_JRL"> <!--初始化PRO_JRL-->
<Sentence>
UPDATE CAPBATINF SET PRO_JRL ='0'
WHERE ORD_DT=? AND CORG_NO=? AND CORG_DSK_NO=? AND PRO_JRL='1'
</Sentence>
<Fields>OORD_DT|OCORG_NO|OCORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="UPDACCTINF">
<Sentence>
update CAPACCOUNTINF set ENABLED='0' where ACCT_NO=? and bank_code='CMB'
</Sentence>
<Fields>ACCT_NO|</Fields>
</DynSentence>
<DynSentence name="QRYCAPTXNJNL"> <!--查询批次信息-->
<Sentence>
SELECT TAC_TYP,ROUT_FLG,tac_no,TAC_NAM
FROM CAPTXNJNL
WHERE DSK_NAM=?
AND CORG_DSK_NO=?
and rownum=1
</Sentence>
<Fields>ODSK_NAM|OCORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="QRY_CAPBATINF_RSPCD"> <!--查询批次信息-->
<Sentence>
SELECT S_RSP_CD CHK_S_RSP_CD
FROM CAPBATINF
WHERE ORD_DT=?
AND CORG_DSK_NO=?
</Sentence>
<Fields>OORD_DT|OCORG_DSK_NO|</Fields>
</DynSentence>
<Function name="_before">
<Process>
<Exec func="PUB:DumpETF"/>
<Set>LockKey=STRCAT($OCORG_NO,$OCORG_DSK_NO)</Set>
<!-- 应用加锁,防止并发 -->
<Exec func="PUB:Lock">
<Arg name="RecKey" value="$LockKey" error="IGNORE"/>
<Arg name="TimOut" value="1800"/>
<Arg name="AutoUnlock" value="no"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=加锁失败</Set>
<Exit/>
</If>
<Set>IS_LOCKED=TRUE</Set>
</Process>
</Function>
<Function name="_after">
<Process>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="InitPRO_JRL"/>
</Exec>
<If condition="IS_EQUAL_STRING($IS_LOCKED,TRUE)">
<!--解锁-->
<Exec func="PUB:UnLock">
<Arg name="RecKey" value="$LockKey"/>
</Exec>
<Exec func="PUB:DumpETF"/>
</If>
</Process>
</Function>
<FlowCtrl>
<!--清理数据 -->
<Delete>RSPCOD</Delete>
<Delete>RESULTCODE</Delete>
<Delete>REQSTA</Delete>
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>TRSP_CD</Delete>
<Delete>TRSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REQNBR</Delete>
<Delete>RTNFLG</Delete>
<Delete>CORG_JRN_NO</Delete>
<Set>ORD_TYP=$OBAT_TYP</Set>
<Set>CORG_NO=CMB</Set>
<Quote name="Batch_Cfg_CMB"/>
<!--查询批次信息 获取业务类型-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRYCAPTXNJNL"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询批次流水表失败</Set>
<Return/>
</If>
<If condition="IS_EQUAL_STRING($TAC_TYP,B)">
<!--代发工资-->
<Set>buscod=N03010</Set>
</If>
<ElseIf condition="IS_EQUAL_STRING($TAC_TYP,N)">
<!--代发其它-->
<Set>buscod=N03020</Set>
</ElseIf>
<Else>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=无此路由</Set>
<Return/>
</Else>
<Set>bgndat=CALCDATE($END_DT,-,d,1)</Set><!--起始日期T-1-->
<Set>enddat=CALCDATE($END_DT,+,d,1)</Set><!--截止日期T+1-->
<Exec func="PUB:GetUniqueNo">
<Arg name="Name" value="fSeqno"/>
<Arg name="SeqNam" value="jrn_no_sequence"/>
<Arg name="Len" value="10"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=平台取流水号失败</Set>
<Return/>
</If>
<!--按业务参考号查询结果 -->
<Set>yurref=$OCORG_DSK_NO</Set>
<Set>TX_COD=NTAGCINY</Set><!--按业务参考号查询交易码-->
<Set>reqid=STRCAT(GETDATETIME(),$OCORG_DSK_NO)</Set>
<Set>userid=$PARA.USERID</Set>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="NTAGCINY"/>
<Arg name="ObjSvr" value="SCMBPAY1"/> <!-- 交易发往银行 -->
</Exec>
<If condition="~RetCod !=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询第三方失败</Set>
<If condition="~RetCod!=0">
<Set>EVENT.DSK_NO=$ODSK_NAM</Set>
<Set>EVENT.BAT_NO=$OCORG_DSK_NO</Set>
<Set>EVENT.ERR_MSG=招行回盘通道返回异常!</Set>
<Set>EVT_TYP=EVT_BATCH_BACK_FAILURE</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
</If>
<Return/>
</If>
<Else>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryBatAmt"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
<Set>rspcod=$rspcod</Set>
<If condition="IS_EQUAL_STRING($rspcod,A6A0587,WCPA105,WCPAS15)">
<!--账户透支 发送预警-->
<!--Set>EVENT.DRW_AC_BAL=0.01</Set>
<Set>EVENT.UDRW_AC_BAL=0.02</Set-->
<Set>EVENT.DSK_NO=$ODSK_NAM</Set>
<Set>EVENT.TITLE_NAME=$TAC_NAM</Set>
<Set>EVENT.AC_NO=$TAC_NO</Set>
<Set>EVENT.CORG_NO=$OCORG_NO</Set>
<Set>EVT_TYP=EVT_BALANCE_INSUFFICIENT</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
<Set>ACCT_NO=$TAC_NO</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPDACCTINF"/>
</Exec>
</If>
<!--概要查询通讯成功且第三方没有返回流程实例号则该笔批次没有进入第三方系统,判断整批失败-->
<If condition="OR(AND(IS_EQUAL_STRING($resultcode,SUC0000),ISNULL($reqsta)),IS_EQUAL_STRING($rspcod,A6A0587,WCPA105,A6T1208,H7T0558,WCPAS15))">
<If condition="IS_EQUAL_STRING($rspcod,A6A0587,WCPA105,WCPAS15)">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=付款账户余额不足</Set>
<Set>TRsp_Cd=$rspcod</Set>
<Set>TRsp_Msg=账户透支</Set>
</If>
<ElseIf condition="IS_EQUAL_STRING($rspcod,A6T1208,H7T0558)">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=账户被停止支付</Set>
<Set>TRsp_Cd=$rspcod</Set>
<Set>TRsp_Msg=账户止付</Set>
<Set>EVENT.DSK_NO=$ODSK_NAM</Set>
<Set>EVENT.TITLE_NAME=$TAC_NAM</Set>
<Set>EVENT.AC_NO=$TAC_NO</Set>
<Set>EVENT.CORG_NO=$OCORG_NO</Set>
<Set>EVT_TYP=EVT_PAYMENT_STOPPED</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
<Set>ACCT_NO=$TAC_NO</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPDACCTINF"/>
</Exec>
</ElseIf>
<Else>
<Set>TIME_TEMP= SUBSTR(CALCTIME(GETDATETIME(MMDDHHMISS),-,m,30),3,8)</Set>
<If condition="INTCMP($OSND_TIME,2,$TIME_TEMP)"> <!--时间间隔大于等于30分钟时认为该批次整批提交失败 否则继续查询-->
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=银行整批处理失败</Set>
<Set>TRsp_Cd= </Set>
<Set>TRsp_Msg= </Set>
</If>
<Else>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPBATINF_RSPCD"/>
</Exec>
<Set>CHK_S_RSP_CD=$CHK_S_RSP_CD</Set>
<If condition="IS_EQUAL_STRING($CHK_S_RSP_CD,80,00)">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=继续查询30分钟</Set>
<Return/>
</If>
<Else>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=银行整批处理失败</Set>
<Set>TRsp_Cd= </Set>
<Set>TRsp_Msg= </Set>
</Else>
</Else>
</Else>
<!--更新流水-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCMBTxnJnlFail"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新流水交易状态失败</Set>
<Return/>
</If>
<!--接收标志 U:预计 0:已确认,待发送 1:发送处理完成 2:发送处理失败 3:接收处理中 4:接收处理完成 5:接收处理失败 9:有待处理记录-->
<Set>BAT_STS=4</Set>
<Set>BAT_SUC_AMT=0</Set>
<Set>BAT_SUC_CNT=0</Set>
<Set>BAT_FAL_AMT=$BAT_SUM</Set>
<Set>BAT_FAL_CNT=$BAT_CNT</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次状态失败</Set>
<Return/>
</If>
<Exec func="PUB:CommitWork"/> <!--提交事务 -->
<If condition="IS_EQUAL_STRING($rspcod,A6T1208,H7T0558)"><!--不再查询明细信息 -->
<Return/>
</If>
</If>
<If condition="IS_NOEQUAL_STRING($reqsta,FIN)">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=第三方业务未完成</Set>
</If>
<Else>
<Set>TACC_DT=GETDATE()</Set> <!--交易日期-->
<Set>TACC_TM=GETDATETIME(HHMISS)</Set> <!--交易时间-->
<Set>REQNBR=$REQNBR</Set> <!--交易时间-->
<Set>CORG_JRN_NO=TRIM($REQNBR,both)</Set> <!--批次查询返回流水号-->
<!--批次成功和批次失败且实例流水号不为空时都去查询明细信息-->
<If condition="OR(IS_EQUAL_STRING($rtnflg,S),AND(IS_EQUAL_STRING($rtnflg,F),NOT(ISNULL($CORG_JRN_NO))))">
<!--业务成功 开始明细查询-->
<Set>TX_COD=NTAGDINF</Set><!--查询交易明细-->
<Set>reqnbr=$CORG_JRN_NO</Set>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="NTAGDINF"/>
<Arg name="ObjSvr" value="SCMBPAY1"/> <!-- 交易发往银行 -->
</Exec>
<!--Set>~RetCod=0</Set-->
<Switch expression="~RetCod">
<Case value="1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询第三方失败</Set>
<Break/>
</Case>
<Case value="-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询第三方失败</Set>
<Break/>
</Case>
<Case value="0">
<Exec func="PUB:DumpETF"/>
<!--导入临时表数据之前删除临时表数据 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="DelCAPCMBPERD"/>
</Exec>
<Set>req_nbr=$CORG_JRN_NO</Set>
<Set>yur_ref=$OCORG_DSK_NO</Set>
<Exec func="PUB:InsertRecord"><!--登记招行临时表-->
<Arg name="TblNam" value="CAPCMBPERD"/>
<Arg name="GrpNam" value="ntagcdtly1"/>
<Arg name="FldLst" value="req_nbr|yur_ref|"/>
</Exec>
<If condition="~RetCod!=0">
<Return/>
</If>
<!--更新流水状态 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCMBTxnJnl"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新流水交易状态失败</Set>
<Return/>
</If>
<!--查询临时表批次记录状态为P的记录数 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryCAPCMBPERD"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询临时表批次记录状态为P的记录数失败</Set>
<Return/>
</If>
<Set>UNDO_CNT=$UNDO_CNT</Set>
<!--统计成功,失败笔数 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="TotSuc"/>
</Exec>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="TotFai"/>
</Exec>
<Set>BAT_SUC_AMT=$BAT_SUC_AMT</Set>
<Set>BAT_SUC_CNT=$BAT_SUC_CNT</Set>
<Set>BAT_FAL_AMT=$BAT_FAL_AMT</Set>
<Set>BAT_FAL_CNT=$BAT_FAL_CNT</Set>
<If condition="$UNDO_CNT != 0">
<Set>BAT_STS=3</Set>
<Set>Rsp_Cd=00</Set>
<Set>Rsp_Msg=交易处理中...</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次状态失败</Set>
<Break/>
</If>
<Return/>
</If>
<!--更新文件信息 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdDskInf"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=累加更新接入批量信息表成功失败总笔数及总金额失败</Set>
<Break/>
</If>
<Set>Rsp_Cd=00</Set>
<Set>Rsp_Msg=批次处理完成</Set>
<Set>BAT_STS=4</Set> <!-- 接收处理完成 -->
<!--更新批次信息 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次为发送处理状态失败</Set>
<Break/>
</If>
<Exec func="PUB:CommitWork"/> <!--提交事务 -->
</Case>
</Switch>
</If>
<ElseIf condition="IS_EQUAL_STRING($rtnflg,F)">
<!--更新流水-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCMBTxnJnlFail"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新流水交易状态失败</Set>
<Return/>
</If>
<!--接收标志 U:预计 0:已确认,待发送 1:发送处理完成 2:发送处理失败 3:接收处理中 4:接收处理完成 5:接收处理失败 9:有待处理记录-->
<Set>BAT_STS=2</Set>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=交易整批处理失败</Set>
<Set>BAT_SUC_AMT=0</Set>
<Set>BAT_SUC_CNT=0</Set>
<Set>BAT_FAL_AMT=$BAT_SUM</Set>
<Set>BAT_FAL_CNT=$BAT_CNT</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdCUPS_DSK_NO"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次状态失败</Set>
<Return/>
</If>
<Exec func="PUB:CommitWork"/> <!--提交事务 -->
</ElseIf>
</Else>
</Else>
<!--提交事务-->
<Exec func="PUB:CommitWork"/>
<!--清理数据 -->
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>rd</Delete>
</FlowCtrl>
</Transaction>
<!--退票查询 -->
<Transaction code="QRY_CMBRFD" log_switch='1' desc="招行退票查询">
<DynSentence name="updRfd">
<Sentence>
update CAPCMBRFD set (MERC_ORD_NO,CAP_ORD_NO,TAC_NO,TAC_NAM,DSK_NAM)=
(select MERC_ORD_NO,CAP_ORD_NO,TAC_NO,TAC_NAM,DSK_NAM from CAPTXNJNL
where trx_seq=? and corg_dsk_no=? and CORG_NO='CMB')
where yur_ref=? and bth_dtl=?
</Sentence>
<Fields>BTH_DTL|yur_ref|yur_ref|BTH_DTL</Fields>
</DynSentence>
<DynSentence name="QRY_CAPCMBRFD">
<Sentence>
SELECT 'Y' YN FROM CAPCMBRFD WHERE YUR_REF=? AND BTH_DTL=? AND TRS_DAT=?
</Sentence>
<Fields>YUR_REF|BTH_DTL|TRS_DAT|</Fields>
</DynSentence>
<DynSentence name="QRY_CAPCMBRFD_OLDTXN">
<Sentence>
select 'Y' AS YN from CAPTXNJNL where trx_seq=? and corg_dsk_no=? and CORG_NO='CMB'
</Sentence>
<Fields>BTH_DTL|YUR_REF|</Fields>
</DynSentence>
<FlowCtrl>
<Delete>TRSP_CD</Delete>
<Delete>TRSP_MSG</Delete>
<Delete>rep_num</Delete>
<Delete>ntagdrfdz1_NUM</Delete>
<!--读取参数配置 -->
<Quote name="Batch_Cfg_CMB"/>
<!--获取序号 -->
<Quote name="GET_CUP_BAT_NO"/>
<Set>CORG_DSK_NO=STRCAT(GETDATETIME(),$CORG_DSK_NO)</Set>
<Set>bbknbr=$brNo</Set><!--分行号-->
<Set>accnbr=$acctNo</Set><!--对公账号-->
<Set>bgndat=CALCDATE(GETDATE(),-,d,10)</Set><!--起始日期T-1-->
<Set>enddat=GETDATE()</Set><!--交易结束日期-->
<Set>reqnbr=</Set><!--流程实例号-->
<Set>ctnkey=</Set><!--续传字段-->
<Set>TX_COD=NTAGDRFD</Set><!--退票查询交易码-->
<Set>reqid=STRCAT(GETDATETIME(),$CORG_DSK_NO)</Set>
<Set>userid=$PARA.USERID</Set>
<If condition="IS_EQUAL_STRING($ACCT_TYPE,B)">
<Set>trstyp=BYSA</Set><!--代发种类 工资-->
</If>
<ElseIf condition="IS_EQUAL_STRING($ACCT_TYPE,N)">
<Set>trstyp=BYBK</Set><!--代发种类 其它-->
</ElseIf>
<!--调用退票查询接口-->
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="NTAGDRFD"/>
<Arg name="ObjSvr" value="SCMBPAY1"/> <!-- 交易发往银行 -->
</Exec>
<If condition="~RetCod !=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询失败</Set>
<Return/>
</If>
<Else>
<Set>N=1</Set>
<Set>rep_num=$ntagdrfdz1_NUM</Set>
<While condition="INTCMP($N,2,$ntagdrfdz1_NUM)">
<Set>req_nbr=ntagdrfdz1[$N].req_nbr</Set>
<Set>YUR_REF=ntagdrfdz1[$N].yur_ref</Set>
<Set>BTH_DTL=ntagdrfdz1[$N].bth_dtl</Set>
<Set>eac_nbr=ntagdrfdz1[$N].eac_nbr</Set>
<Set>eac_nam=ntagdrfdz1[$N].eac_nam</Set>
<Set>trs_amt=ntagdrfdz1[$N].trs_amt</Set>
<Set>cpr_act=ntagdrfdz1[$N].cpr_act</Set>
<Set>txt_clt=ntagdrfdz1[$N].txt_clt</Set>
<Set>eac_bnm=ntagdrfdz1[$N].eac_bnm</Set>
<Set>eac_cty=ntagdrfdz1[$N].eac_cty</Set>
<Set>cpr_cnv=ntagdrfdz1[$N].cpr_cnv</Set>
<Set>trs_dat=ntagdrfdz1[$N].trs_dat</Set>
<Set>sts_cod=ntagdrfdz1[$N].sts_cod</Set>
<Set>rtn_cod=ntagdrfdz1[$N].rtn_cod</Set>
<Set>rtn_txt=ntagdrfdz1[$N].rtn_txt</Set>
<Set>rsv=ntagdrfdz1[$N].rsv</Set>
<Set>TM_SMP=GETDATETIME()</Set>
<!--查询退票信息是否已经入库-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPCMBRFD"/>
</Exec>
<If condition='~RetCod=-1'>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询失败</Set>
<Return/>
</If>
<ElseIf condition='~RetCod=2'>
<Exec func="PUB:InsertRecord" error="IGNORE"><!--登记招行临时表-->
<Arg name="TblNam" value="CAPCMBRFD"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=登记流水失败</Set>
<Return/>
</If>
<!--查询退票信息原交易是否存在-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPCMBRFD_OLDTXN"/>
</Exec>
<If condition="~RetCod=0">
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="updRfd"/>
</Exec>
</If>
<ElseIf condition='~RetCod=-1'>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=数据库执行错误</Set>
<Return/>
</ElseIf>
</ElseIf>
<Delete>req_nbr</Delete>
<Delete>YUR_REF</Delete>
<Delete>BTH_DTL</Delete>
<Delete>eac_nbr</Delete>
<Delete>eac_nam</Delete>
<Delete>trs_amt</Delete>
<Delete>cpr_act</Delete>
<Delete>txt_clt</Delete>
<Delete>eac_bnm</Delete>
<Delete>eac_cty</Delete>
<Delete>cpr_cnv</Delete>
<Delete>trs_dat</Delete>
<Delete>sts_cod</Delete>
<Delete>rtn_cod</Delete>
<Delete>rtn_txt</Delete>
<Delete>rsv</Delete>
<Set>N=ADD($N,1)</Set>
</While>
<Exec func="PUB:CommitWork"/> <!--提交事务 -->
<!--登记退票查询表-->
</Else>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
<!--心跳检查 -->
<Transaction code="HEARTBEAT_CMB" log_switch='0' desc="心跳检查">
<FlowCtrl>
<!--读取参数配置 -->
<Quote name="Batch_Cfg_CMB"/>
<Set>TX_COD=DCLISMOD</Set><!--查询交易码-->
<Set>reqid=STRCAT(GETDATETIME(),000000)</Set>
<Set>userid=$PARA.USERID</Set>
<Set>buscod=$buscod</Set>
<If condition="ISNULL($buscod)">
<Set>buscod=N03020</Set>
</If>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="DCLISMOD"/>
<Arg name="ObjSvr" value="SCMBPAY1"/>
</Exec>
<Set>RET_CODE=$resultcode</Set>
<If condition="IS_NOEQUAL_STRING($RET_CODE,SUC0000)">
<!--发送预警-->
<Set>EVENT.CORG_NO=CMB</Set>
<Set>EVENT.ERR_MSG=招行通道通讯异常</Set>
<Set>EVT_TYP=EVT_CHANNEL_COMMU_FAILURE</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT" />
<Arg name='Mode' value='NOTIFY'/>
</Exec>
</If>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
<Transaction code="TESTNTAGTLS_CMB" log_switch='1' desc="NTAGTLS2">
<FlowCtrl>
<Quote name="Batch_Cfg_CMB"/>
<Set>TX_COD=NTAGTLS2</Set><!--查询交易码-->
<Set>reqid=STRCAT(GETDATETIME(),000000)</Set>
<Set>userid=$PARA.USERID</Set>
<Set>buscod=$buscod</Set>
<If condition="ISNULL($buscod)">
<Set>buscod=N03020</Set>
</If>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="NTAGTLS2"/>
<Arg name="ObjSvr" value="SCMBPAY1"/>
</Exec>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
<Transaction code="TESTNTAGDINF_CMB" log_switch='1' desc="NTAGDINF">
<FlowCtrl>
<!--读取参数配置 -->
<Quote name="Batch_Cfg_CMB"/>
<Set>TX_COD=NTAGDINF</Set><!--查询交易码-->
<Set>reqid=STRCAT(GETDATETIME(),000000)</Set>
<Set>userid=$PARA.USERID</Set>
<Set>reqnbr=$reqnbr</Set>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="NTAGDINF"/>
<Arg name="ObjSvr" value="SCMBPAY1"/>
</Exec>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
</Tran>