This commit is contained in:
2021-06-11 10:43:57 +08:00
parent c8b9279649
commit 98f0dc9be7
-977
View File
@@ -1,977 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Tran>
<Transaction code="initBatch_ICBC" log_switch='1' desc="生成工行批次">
<Quote name="SQL_RcvConfirm" />
<DynSentence name="QryBatCnt"><!-- 查询该批次有多少记录 -->
<Sentence>
SELECT COUNT(*) BAT_CNT 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' AND ROWNUM &lt;= ?
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|TXN_MOD|MAX_CNT</Fields>
</DynSentence>
<DynSentence name="UpdDskNo">
<Sentence>
UPDATE CAPTXNJNL SET CORG_DSK_NO = ?
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' AND ROWNUM &lt;= ?
</Sentence>
<Fields>CORG_DSK_NO|DSK_NAM|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="InitTxnJnl"> <!--初始化流水信息(第三方交易码,批次号)-->
<Sentence>
UPDATE CAPTXNJNL SET TXN_CD = '204020', TTXN_CD = ?
WHERE DSK_NAM=? AND ORD_DT = ? AND CORG_NO=? AND CORG_DSK_NO = ? AND DSK_NAM_STS='0' AND TXN_STS='U'
</Sentence>
<Fields>TTXN_CD|DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="UpdBatVerSts">
<Sentence>
UPDATE CAPBATINF SET BAT_VER_STS= '1'
WHERE DSK_NAM=? AND ORD_DT = ? AND CORG_NO=? AND CORG_DSK_NO = ?
</Sentence>
<Fields>DSK_NAM|ORD_DT|CORG_NO|CORG_DSK_NO</Fields>
</DynSentence>
<DynSentence name="UpdAccVerSts">
<Sentence>
UPDATE CAPTXNJNL SET ACC_VER_STS= 'S'
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>
<FlowCtrl>
<!--清理数据 -->
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Exec func="PUB:DumpETF" />
<!--读取参数配置 -->
<Quote name="Batch_Cfg_ICBC" />
<!--设置机构编号(工行) -->
<Set>CORG_NO=ICBC</Set>
<Set>MAX_CNT=$PARA.MAX_CNT</Set>
<!--查询合作机构检查-->
<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>
<While>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QryBatCnt" />
</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>
<!--更新批次号-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdDskNo"/>
</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>
<If condition="IS_EQUAL_STRING($TXN_MOD,02)"> <!--代付 BAT_STS 状态待确认-->
<Set>BAT_STS=U</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdAccVerSts"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新批次号失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
</If>
<Else>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=业务类型有误</Set>
<Exec func="PUB:RollbackWork" />
<Return />
</Else>
<Set>BAT_ORN_AMT=$BAT_SUM</Set>
<Set>BAT_ORN_CNT=$BAT_CNT</Set>
<!--根据汇路进行不同处理 -->
<!--帐户类型 -->
<Set>TTXN_CD=PAYPERCOL_BAT</Set> <!--批量5000对私代付接口 PAYPER -->
<Set>CORG_FIL_NAM=STRCAT(ICBCDF_DS,GETDATETIME(YYMMDD),$CORG_DSK_NO)
</Set>
<Set>CORG_FIL_NAM=STRCAT(ICBCDF_DG,GETDATETIME(YYMMDD),$CORG_DSK_NO)
</Set>
<!--初始化流水信息 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="InitTxnJnl" />
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=初始化流水信息失败</Set>
<Exec func="PUB:RollbackWork" />
<Return />
</If>
<Set>CORG_MERC_ID=$MERC_ID</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"/>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdBatVerSts"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新批次帐户验证状态失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
</While>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
<!--发送工行批次交易 -->
<Transaction code="sendBatch_ICBC" 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'
</Sentence>
<Fields>CORG_DSK_NO|ORD_DT|</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 = ?
WHERE
ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO=?
AND AC_DT=?
AND BAT_STS='0'
</Sentence>
<Fields>BAT_STS|RSP_CD|RSP_MSG|ORD_DT|CORG_NO|CORG_DSK_NO|AC_DT
</Fields>
</DynSentence>
<DynSentence name="Qry_Export"> <!--代付查询需要打包的记录 -->
<Sentence>
SELECT TAC_NO AS PayAccNo,TAC_NAM AS PayAccNameCN,POSTSCRIPT AS UseCN,'%s' AS ReimburseNo,'%s' AS ReimburseNum,
'%s' AS StartDate,'%s' AS StartTime,'%s' AS PayAccNameEN,'%s' AS RecAccNameEN,'%s' AS ReqReserved1,
'%s' AS ReqReserved2,'%s' AS ERPSqn,'%s' AS BusCode,'%s' AS ERPcheckno,'%s' AS CrvouhType,
'%s' AS CrvouhName,'%s' AS CrvouhNo,'%s' AS ReqReserved3,'%s' AS ReqReserved4,'%s' AS Ref,CAP_ORD_NO AS iSeqno,AC_NO AS RecAccNo,
CUS_NAM AS RecAccNameCN,'102' AS RecICBCCode,LBNK_NO AS RecBankNo,'001' AS CurrType,
TXN_AMT * 100 AS PayAmt,POSTSCRIPT AS PostScript,POSTSCRIPT AS Summary,CAP_ORD_NO AS Oref,'%s' AS RecCityName,
'%s' AS RecBankName,'%s' AS UseCode,'%s' AS EnSummary,decode(ROUT_FLG,'SUPER','3','LARGE','1','SMALL','2') AS PayType
FROM CAPTXNJNL
WHERE DSK_NAM=?
AND CORG_NO = ?
AND CORG_DSK_NO = ?
AND ORD_DT=?
AND TXN_MOD=?
AND DSK_NAM_STS='0'
AND TXN_STS='U'
</Sentence>
<Fields>ReimburseNo|ReimburseNum|StartDate|StartTime|PayAccNameEN|RecAccNameEN|ReqReserved1|ReqReserved2|ERPSqn|BusCode|ERPcheckno|CrvouhType|CrvouhName|CrvouhNo|ReqReserved3|ReqReserved4|Ref|RecCityName|RecBankName|UseCode|EnSummary|DSK_NAM|CORG_NO|CORG_DSK_NO|ORD_DT|TXN_MOD|</Fields>
</DynSentence>
<DynSentence name="QryBatVerSts"><!--查询批次户名验证状态-->
<Sentence>
SELECT BAT_VER_STS FROM CAPBATINF
WHERE ORD_DT=? AND CORG_NO=? AND CORG_DSK_NO=? AND AC_DT=? AND BAT_STS='0'
</Sentence>
<Fields>ORD_DT|CORG_NO|CORG_DSK_NO|AC_DT</Fields>
</DynSentence>
<DynSentence name="UpdBatVerSts"><!--更新批次户名验证状态-->
<Sentence>
UPDATE CAPBATINF SET BAT_VER_STS = ?
WHERE ORD_DT=? AND CORG_NO=? AND CORG_DSK_NO=? AND AC_DT=? AND BAT_STS='0'
</Sentence>
<Fields>BAT_VER_STS|ORD_DT|CORG_NO|CORG_DSK_NO|AC_DT</Fields>
</DynSentence>
<DynSentence name="CountUndo">
<Sentence>
SELECT COUNT(*) UNDO_CNT FROM CAPSIGINF A
WHERE (A.SIG_STS = 'U' OR A.SIG_STS = 'P') AND
TRIM(CORG_NO)||TRIM(CRD_NO)||TRIM(CUS_NAM) IN (
SELECT TRIM(CORG_NO)||TRIM(CRD_NO)||TRIM(CUS_NAM) FROM CAPTXNJNL B
WHERE ORD_DT=? AND B.CORG_NO='ICBC' AND CORG_DSK_NO=?)
</Sentence>
<Fields>ORD_DT|CORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="DEL_CAPSIGINF">
<Sentence>
DELETE FROM CAPSIGINF A
WHERE A.SIG_STS = 'F' AND
TRIM(CORG_NO)||TRIM(CRD_NO)||TRIM(CUS_NAM) IN (
SELECT TRIM(CORG_NO)||TRIM(CRD_NO)||TRIM(CUS_NAM) FROM CAPTXNJNL B
WHERE ORD_DT=? AND B.CORG_NO='ICBC' AND CORG_DSK_NO=? AND TXN_STS='F')
</Sentence>
<Fields>ORD_DT|CORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="CntBatCnt"> <!--统计明细总金额总笔数-->
<Sentence>
SELECT SUM(TXN_AMT) AS BatAmt,COUNT(*) AS BatCnt
FROM CAPTXNJNL
WHERE DSK_NAM=? AND CORG_NO = ? AND CORG_DSK_NO = ? AND ORD_DT=?
AND TXN_MOD=? 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="InitPRO_JRL"> <!--初始化PRO_JRL-->
<Sentence>
UPDATE CAPBATINF SET PRO_JRL ='0'
WHERE ORD_DT=? AND CORG_NO=? AND CORG_DSK_NO=? AND AC_DT=? AND PRO_JRL='1'
</Sentence>
<Fields>ORD_DT|CORG_NO|CORG_DSK_NO|AC_DT|</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>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>rd</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="QryBatVerSts"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询数据库出错</Set>
<Return/>
</If>
<If condition="IS_EQUAL_STRING($BAT_VER_STS,1)"><!-- 查询签约成功,发送批次 -->
<Set>BatCnt=$BAT_ORN_CNT</Set>
<Set>BatAmt=$BAT_ORN_AMT</Set>
<Delete>REC</Delete>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="REC"/>
</Exec>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="rd"/>
</Exec>
<!--读取参数配置 -->
<Set>TXN_DT=GETDATE()</Set>
<Set>TXN_TM=GETDATETIME(HHMISS)</Set>
<Set>SignTime=STRCAT(GETDATETIME(),000)</Set> <!--签名时间 必输项 字符 17 格式是yyyyMMddHHmmssSSS-->
<Quote name="Batch_Cfg_ICBC" />
<Set>StartDate=GETDATE()</Set>
<Set>StartTime=GETDATETIME(HHMISS)</Set>
<Set>RecICBCCode=102</Set>
<Set>MAX_CNT=$PARA.MAX_CNT</Set>
<!--帐户类型 -->
<Set>BAT_SEQ=0</Set>
<Set>TTXNSERVICE=PAYPERCOL</Set> <!--交易代码 必输项 字符 10 PAYPER -->
<Set>TTXNSERVICE1=PAYPERCOL_BAT</Set> <!--交易代码 必输项 10 PAYPER -->
<Set>QryExport=Qry_Export</Set> <!--代付需要发往工行的数据 -->
<!--Set>UseCN=保险理赔</Set--> <!--该字段取值从流水表中获取 待确认 -->
<Set>ICBC_CYC_CD=001</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>CIS=$GRP_CIS</Set> <!--集团CIS号 必输项 字符 60 客户注册时的归属编码(发卡机构代码) -->
<Set>Bank_Code=102</Set> <!--归属银行编号 必输项 长度为3 客户注册时的归属单位 -->
<Set>TranDate=GETDATE()</Set> <!--交易日期 必输项 字符 8 ERP系统产生的交易日期,格式是yyyyMMdd -->
<Set>TranTime=STRCAT(GETDATETIME(HHMISS),000)</Set> <!--交易时间 必输项 字符 12 字符 8 ERP系统产生的交易时间,格式如HHmmssSSS,精确到毫秒; -->
<Set>fSeqno=$CORG_DSK_NO</Set> <!--指令包序列号 必输项 字符 35 字符 8 ERP系统产生的指令包序列号,一个集团永远不能重复; -->
<Set>OnlBatF=1</Set> <!--联机批量标志 选输项 数字 1 1:联机 -->
<Set>SettleMode=0</Set> <!--入账方式 必输项 数字 1 2:并笔入账 0:逐笔记账 该字段接口已经删除 待确认-->
<Set>TotalNum=$BatCnt</Set> <!--总笔数 必输项 数字 6 指令包内的指令笔数 -->
<Set>TotalAmt=AMTPOWER($BatAmt,2)</Set> <!--总金额 必输项 数字 20 无正负号,不带小数点,以分作单位 -->
<Set>RECNUM=1</Set>
<Set>@MSG.CERTFIL=</Set>
<Set>@MSG.BANKCODE=$ATTACH_NO</Set>
<Set>@MSG.GROUPCIS=$GRP_CIS</Set>
<Set>@MSG.CERTID=$CERD_ID</Set>
<Set>@MSG.PACKAGEID=$CORG_DSK_NO</Set>
<Set>@MSG.TRANSCODE=$TTXNSERVICE</Set>
<Set>TransCode=@MSG.TRANSCODE</Set>
<Set>CIS=@MSG.GROUPCIS</Set>
<Set>PackageID=@MSG.PACKAGEID</Set>
<Set>ID=@MSG.CERTID</Set>
<Set>PackageID=@MSG.CERTID</Set>
<Set>ReimburseNo=STRCAT( , )</Set>
<Set>ReimburseNum=STRCAT( , )</Set>
<Set>StartDate=STRCAT( , )</Set>
<Set>StartTime=STRCAT( , )</Set>
<Set>PayAccNameEN=STRCAT( , )</Set>
<Set>RecAccNameEN=STRCAT( , )</Set>
<Set>ReqReserved1=STRCAT( , )</Set> <!--请求备用字段1 选输项 字符 100 备用,目前无意义 -->
<Set>ReqReserved2=STRCAT( , )</Set> <!--请求备用字段2 选输项 字符 100 备用,目前无意义 -->
<Set>ERPSqn=STRCAT( , )</Set>
<Set>BusCode=STRCAT( , )</Set>
<Set>ERPcheckno=STRCAT( , )</Set>
<Set>CrvouhType=STRCAT( , )</Set>
<Set>CrvouhName=STRCAT( , )</Set>
<Set>CrvouhNo=STRCAT( , )</Set>
<Set>ReqReserved3=STRCAT( , )</Set>
<Set>ReqReserved4=STRCAT( , )</Set>
<Set>RecCityName=STRCAT( , )</Set>
<Set>RecBankName=STRCAT( , )</Set>
<Set>UseCode=STRCAT( , )</Set>
<Set>EnSummary=STRCAT( , )</Set>
<Set>Ref=STRCAT( , )</Set>
<Exec func="PUB:QueryInGroup" error="IGNORE">
<Arg name="SqlCmd" value="$QryExport"/>
<Arg name="RecordName" value="REC"/>
<Arg name="limit" value="$MAX_CNT"/>
</Exec>
<If condition="~RetCod=-1">
<Return />
</If>
<!-- 通过原子函数获取正确的前置机信息 获取通信信息模式 待确认-->
<Exec func="ROUTE:GETROUTEBANPAR" error="IGNORE">
<Arg name="BANKCODE" value="ICBC" />
</Exec>
<Set>@MSG.CERTID=$CERD_ID</Set>
<Set>ID=@MSG.CERTID</Set>
<If condition="~RetCod != 0">
<Return />
</If>
<Else>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="$TTXNSERVICE1"/> <!-- 交易发往银行 -->
<Arg name="ObjSvr" value="SICBCCPY2"/><!-- 服务名 -->
</Exec>
<Switch expression="~RetCod">
<Case value="1">
<!--第三方失败-->
<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="3">
<Set>BAT_STS=2</Set>
<Set>RSP_CD=$TRSP_CD</Set>
<Set>RSP_MSG=$TRSP_MSG</Set>
<!--更新流水状态为处理-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdJnlSts"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次状态失败</Set>
</If>
<!-- 执行批付解冻 该流程已删除 待确认-->
<Break/>
</Case>
<Case value="0"> <!--查询成功-->
<!--更新流水状态为发送处理成功-->
<Set>BAT_STS=1</Set>
<Set>Rsp_Cd=$TRsp_Cd</Set>
<Set>TRsp_Msg=交易成功</Set>
<Set>Rsp_Msg=$TRsp_Msg</Set>
<!-- 更新流水状态为发送处理完成 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdJnlSts"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新该批次流水处理状态失败</Set>
</If>
<Break/>
</Case>
<Default>
<!--第三方失败-->
<Set>BAT_STS=3</Set> <!--成功-->
<Set>RSP_CD=80</Set>
<Set>RSP_MSG=交易发送成功</Set>
</Default>
</Switch>
<!-- 更新批次状态 -->
<Quote name="UpdSendBatSts" />
</Else>
</If>
<!--提交事务-->
<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="getBatch_ICBC" 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 AC_DT=?
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|OAC_DT|OBAT_STS|
</Fields>
</DynSentence>
<DynSentence name="UpdBatErrMsg"> <!--更新批次错误信息 -->
<Sentence>
UPDATE CAPBATINF
SET RSP_CD=? ,
RSP_MSG=?
WHERE ORD_DT=?
AND
CORG_NO=?
AND CORG_DSK_NO=?
AND AC_DT=?
</Sentence>
<Fields>RSP_CD|RSP_MSG|OORD_DT|OCORG_NO|OCORG_DSK_NO|OAC_DT</Fields>
</DynSentence>
<DynSentence name="UpdICBCTxnJnl"> <!--更新批扣流水 -->
<Sentence>
UPDATE CAPTXNJNL A
SET
(TTXN_ST,TXN_STS,DSK_NAM_STS,TACC_DT,TACC_TM,TRSP_CD,TRSP_MSG,RSP_MSG)
=
( SELECT TTXN_ST TTXN_ST,
TTXN_ST TXN_STS,
'4',
?,
?,
TRSP_CD,
TRSP_MSG,
TRSP_MSG
FROM CAPICBCPERD B
WHERE B.QRYISEQNO = A.CAP_ORD_NO
)
WHERE
A.CORG_NO = 'ICBC'
AND A.CORG_DSK_NO = ?
AND (A.TTXN_ST = 'U' OR
A.TTXN_ST = 'P')
</Sentence>
<Fields>TACC_DT|TACC_TM|OCORG_DSK_NO</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="QryExport"> <!--查询请求回盘所需的记录 -->
<Sentence>
SELECT ROWNUM,t.*
FROM CAPTXNJNL t
WHERE DSK_NAM='%s'
AND
CORG_NO = '%s'
AND CORG_DSK_NO = '%s'
AND ORD_DT='%s'
AND
DSK_NAM_STS='1'
AND TXN_STS='U'
</Sentence>
<Fields>ODSK_NAM|OCORG_NO|OCORG_DSK_NO|OORD_DT|</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="QryCAPICBCPERD"> <!-- 查询临时表批次记录状态为P的记录数 -->
<Sentence>
SELECT COUNT(*) AS UNDO_CNT FROM CAPICBCPERD WHERE Result
in
('0','1','2','3','4','5','9','10','95')
</Sentence>
</DynSentence>
<DynSentence name="DelCAPICBCPERD"> <!-- 导入临时表数据之前删除临时表数据 -->
<Sentence>
DELETE FROM CAPICBCPERD
</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 AC_DT=? AND PRO_JRL='1'
</Sentence>
<Fields>OORD_DT|OCORG_NO|OCORG_DSK_NO|OAC_DT|</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>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>rd</Delete>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="rd"/>
</Exec>
<!--导入临时表数据之前删除临时表数据 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="DelCAPICBCPERD" />
</Exec>
<Exec func="PUB:DumpETF" />
<Set>ORD_TYP=$OBAT_TYP</Set>
<Quote name="Batch_Cfg_ICBC" />
<Quote name="GET_ICBC_CAP_ORD_NO" /> <!--取银联订单号 -->
<Set>TXN_DT=GETDATE()</Set>
<Set>TXN_TM=GETDATETIME(HHMISS)</Set> <!--交易时间 -->
<Set>TACC_DT=$TXN_DT</Set>
<Set>TACC_TM=$TXN_TM</Set>
<Set>MerchantNo=$OCORG_MERC_ID</Set> <!--商户编号 -->
<Set>TermId=0000000000000000000</Set> <!--终端号 -->
<Set>FileName=$OCORG_FIL_NAM</Set> <!--文件名 -->
<Quote name="GET_JRN_NO" /> <!--取交易流水号 -->
<Set>trnId=$JRN_NO</Set>
<Set>payType=0</Set> <!--支付类型0:支付1:代发工资2:费用报销 -->
<Set>ORN_JRN_NO=$OCORG_DSK_NO</Set> <!--原批次号 -->
<Set>END_TM=GETDATETIME(HHMISS)</Set>
<Set>END_DT=GETDATE()</Set>
<Set>BAT_SUC_AMT=0</Set>
<Set>BAT_SUC_CNT=0</Set>
<Set>BAT_FAL_CNT=0</Set>
<Set>BAT_FAL_AMT=0</Set>
<Set>RSP_CD=STRCAT( , )</Set>
<Set>RSP_MSG=STRCAT( , )</Set>
<Set>CORG_NO=$OCORG_NO</Set>
<!--第三方数据拼接-->
<Set>TTXNSERVICE=QPAYPER</Set>
<Set>AC_TYP_FMT=BatICBCRSPPAYPERFmt01</Set>
<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>fSeqno=STRCAT(SUBSTR($AC_DT,3,6),$fSeqno)</Set>
<Set>@MSG.BANKCODE=$ATTACH_NO</Set>
<Set>@MSG.GROUPCIS=$GRP_CIS</Set>
<Set>@MSG.CERTID=$CERD_ID</Set>
<Set>@MSG.PACKAGEID=$fSeqno</Set>
<Set>@MSG.TRANSCODE=$TTXNSERVICE</Set>
<Set>@MSG.TXNTYP=Q</Set>
<Set>TransCode=@MSG.TRANSCODE</Set>
<Set>CIS=@MSG.GROUPCIS</Set>
<Set>Bank_Code=@MSG.BANKCODE</Set> <!-- 联行行号3位 -->
<Set>ID=@MSG.CERTID</Set>
<Set>TranDate=$TXN_DT</Set>
<Set>TranTime=$TXN_TM</Set>
<Set>QryfSeqno=$ORN_JRN_NO</Set>
<Set>QrySerialNo=STRCAT( , )</Set>
<Set>ReqReserved1=STRCAT( , )</Set>
<Set>ReqReserved2=STRCAT( , )</Set>
<!-- 通过原子函数获取正确的前置机信息 待确认 获取方式-->
<Exec func="ROUTE:GETROUTEBANPAR" error="IGNORE">
<Arg name="BANKCODE" value="ICBC" />
</Exec>
<Set>@MSG.CERTID=$CERD_ID</Set>
<Set>ID=@MSG.CERTID</Set>
<If condition="~RetCod != 0">
<Return/>
</If>
<Else>
<!--调用批量结果回盘文件查询接口 -->
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="$TTXNSERVICE" />
<Arg name="ObjSvr" value="SICBCCPY2" /> <!-- 交易发往银行 -->
</Exec>
<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="3">
<Set>RSP_CD=$TRSP_CD</Set>
<Set>RSP_MSG=$TRSP_MSG</Set>
<If condition="IS_EQUAL_STRING($TRSP_CD,BIB008,D0055)"> <!--交易请求已受理,处理中-->
<Set>BAT_STS=3</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>
</If>
<Else> <!--其他错误-->
<Set>BAT_STS=5</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>
<!-- 代付交易失败需要解冻 该部分已经废止 待确认-->
</Else>
<Break/>
</Case>
<Case value="0">
<Exec func="PUB:InsertRecord"><!--登记工行临时表-->
<Arg name="TblNam" value="CAPICBCPERD" />
<Arg name="GrpNam" value="rd" />
</Exec>
<If condition="~RetCod!=0">
<Return />
</If>
<!--更新流水状态 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdICBCTxnJnl" />
</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="QryCAPICBCPERD" />
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询临时表批次记录状态为P的记录数失败</Set>
<Return />
</If>
<Set>UNDO_CNT=$UNDO_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: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>
<!--更新文件信息 -->
<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" /> <!--提交事务 -->
<Set>TXN_MOD_FLG=$OBAT_TYP</Set>
<Set>CAP_TYP=CAP_PAY_BAT</Set>
<Set>RUL_TYP=BIS</Set><!-- 转码规则类型 -->
<Set>CAP_TYP=$CAP_TYP</Set><!-- 交易类型 -->
<Set>CORG_NO=$OCORG_NO</Set><!-- 合作机构号 -->
<Set>CSW_TYP=0</Set><!-- 匹配类型 -->
<Set>ORD_DT=$OORD_DT</Set>
<Set>CORG_DSK_NO=$OCORG_DSK_NO</Set>
<Call package="CSW" function="CAP_BAT_CSW">
<Input>RUL_TYP|CAP_TYP|CORG_NO|CSW_TYP|ORD_DT|CORG_DSK_NO|</Input>
<Output></Output>
</Call>
</Case>
<Default>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=系统错误</Set>
<Break/>
</Default>
</Switch>
<!--提交事务-->
<Exec func="PUB:CommitWork"/>
<!--清理数据 -->
<Delete>RSP_CD</Delete>
<Delete>RSP_MSG</Delete>
<Delete>SUM</Delete>
<Delete>REC</Delete>
<Delete>rd</Delete>
</Else>
</FlowCtrl>
</Transaction>
</Tran>