Files
2021-01-12 23:30:48 +08:00

748 lines
37 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'?>
<Application name="CAP" trace="yes">
<Transaction code="abc_check" log_switch="1" desc="农行对账主交易">
<Function name="_before">
<Process>
<Set>CK_LOCK=CAP_HXBCK_LOCK</Set>
<!-- 应用加锁,防止并发 -->
<Exec func="PUB:Lock" error="IGNORE">
<Arg name="RecKey" value="$CK_LOCK" />
<Arg name="TimOut" value="300" />
<Arg name="AutoUnlock" value="Yes" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Msg=加锁失败 </Set>
<Return />
</If>
</Process>
</Function>
<Function name="_after">
<Process>
<!-- 解锁处理 -->
<Exec func="PUB:UnLock">
<Arg name="RecKey" value="$CK_LOCK" />
</Exec>
</Process>
</Function>
<DynSentence name="QRY_PWMTCKCT"><!-- 对账总控表查询 -->
<Sentence>
SELECT CHK_FIL_STS AS CHK_STS
FROM PWMTCKCT
WHERE COP_BUS_TYP = ? AND
RUT_CORG = ? AND
CHK_FIL_DT = ?
</Sentence>
<Fields>BUS_TYP|RUT_CORG|CHK_FIL_DT|</Fields>
</DynSentence>
<DynSentence name="DEL_PWMTCKCT"><!-- 删除总控表中记录 -->
<Sentence>
DELETE
FROM PWMTCKCT
WHERE RUT_CORG = ? AND
CHK_FIL_DT = ? AND
COP_BUS_TYP = ?
</Sentence>
<Fields>RUT_CORG|CHK_FIL_DT|BUS_TYP|</Fields>
</DynSentence>
<DynSentence name="DEL_CAPCHKABC"><!-- 清空对账文件记录表 -->
<Sentence>
DELETE
FROM CAPCHKABC
</Sentence>
</DynSentence>
<DynSentence name="UPD_PWMTCKCT_STS"><!-- 更新总控表中对账状态 -->
<Sentence>
UPDATE PWMTCKCT
SET CHK_FIL_STS = ? ,
CHK_END_TM = ?
WHERE CHK_BAT_NO = ?
</Sentence>
<Fields>CHK_FIL_STS|CHK_END_TM|CHK_BAT_NO|</Fields>
</DynSentence>
<!-- 更新状态:1-对账成功 -->
<DynSentence name="UPD_CAPTXNJNL_MCH"><!-- 更新 T、T-1、T+1 日我方对账成功的流水记录的对账状态 -->
<Sentence>
UPDATE CAPTXNJNL a
SET a.CHK_STS = '1'
WHERE a.AC_DT >= ? AND
a.CHK_STS = '0' AND
a.TXN_MOD = '99' AND
a.CORG_NO = ? AND
a.TXN_STS IN ( 'S' , 'T' ) AND
a.ORD_TYP = ? AND
EXISTS ( SELECT 1
FROM CAPCHKABC b
WHERE b.TERMSERNUM = a.CAP_ORD_NO AND
b.TxType = a.ORD_TYP AND
b.AMOUNT = a.TXN_AMT
)
</Sentence>
<Fields>CHK_DT_YED|RUT_CORG|BUS_TYP|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCHKABC_MCH"><!-- 更新 T 日对方对账成功的流水记录的对账状态 -->
<Sentence>
UPDATE CAPCHKABC a
SET a.CHK_STS = '1'
WHERE a.TxType = ? AND
EXISTS ( SELECT 1
FROM CAPTXNJNL b
WHERE b.AC_DT >= ? AND
b.TXN_MOD = '99' AND
b.CHK_STS = '1' AND
b.CORG_NO = ? AND
b.TXN_STS IN ( 'S' , 'T' ) AND
b.ORD_TYP = a.TxType AND
b.CAP_ORD_NO = a.TERMSERNUM
)
</Sentence>
<Fields>BUS_TYP|CHK_DT_YED|RUT_CORG|</Fields>
</DynSentence>
<!-- 入差错表:4-关键信息不符 -->
<DynSentence name="INS_CAPTXNJNL_ERR"><!-- T-1、T 和 T+1 日我方关键信息不符的流水记录入差错表 -->
<Sentence>
INSERT INTO PWMTCKER ( RUT_CORG , COP_BUS_TYP , ERR_KEY_ID , CHK_ERR_DT ,
CHK_ERR_TM , CHK_BAT_NO , TX_CD , CHK_TYP ,
CHK_ERR_TYP , ERR_STS , PAY_TX_AMT , OLD_TX_DT ,
OLD_JRN_NO , OLD_ORD_NO , OLD_CORG_KEY
)
SELECT ? AS RUT_CORG , ORD_TYP AS COP_BUS_TYP , 'LCL' || CAP_ORD_NO AS ERR_KEY_ID ,
? AS CHK_ERR_DT , ? AS CHK_ERR_TM , ? AS CHK_BAT_NO ,
? AS TX_CD , '1' AS CHK_TYP , '4' AS CHK_ERR_TYP , '0' AS ERR_STS ,
TXN_AMT AS PAY_TX_AMT , AC_DT AS OLD_TX_DT , JRN_NO AS OLD_JRN_NO ,
CAP_ORD_NO AS OLD_ORD_NO , CAP_ORD_NO AS OLD_CORG_KEY
FROM CAPTXNJNL
WHERE AC_DT >= ? AND
CHK_STS = '0' AND
TXN_MOD = '99' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ? AND
CAP_ORD_NO IN ( SELECT TERMSERNUM
FROM CAPCHKABC
WHERE CHK_STS = '0' AND
TxType = ?
)
</Sentence>
<Fields>RUT_CORG|CHK_ERR_DT|CHK_ERR_TM|CHK_BAT_NO|TX_CD|CHK_DT_YED|RUT_CORG|BUS_TYP|BUS_TYP|</Fields>
</DynSentence>
<!-- 统计:存疑转差错 -->
<DynSentence name="CNT_CHKABC_DBTERR"><!-- 统计 T-1 日我方存疑转差错的流水记录总金额及总笔数 -->
<Sentence>
SELECT COUNT( * ) AS SUM_DBTERR_CNT ,
NVL( SUM( TXN_AMT ) , 0 ) AS SUM_DBTERR_AMT
FROM CAPTXNJNL
WHERE AC_DT = ? AND
CHK_STS = '0' AND
TXN_MOD = '99' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ?
</Sentence>
<Fields>CHK_DT_YED|RUT_CORG|BUS_TYP|</Fields>
</DynSentence>
<!-- 统计:关键信息不符 -->
<DynSentence name="CNT_CAPTXNJNL_ERR"><!-- 统计 T、T-1、T+1 日我方关键信息不符的流水记录的总金额及总笔数 -->
<Sentence>
SELECT COUNT( * ) AS SUM_ERR_CNT ,
NVL( SUM( TXN_AMT ) , 0 ) AS SUM_ERR_AMT
FROM CAPTXNJNL
WHERE AC_DT >= ? AND
CHK_STS = '0' AND
TXN_MOD = '99' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ? AND
CAP_ORD_NO IN ( SELECT TERMSERNUM
FROM CAPCHKABC
WHERE CHK_STS = '0' AND
TxType = ?
)
</Sentence>
<Fields>CHK_DT_YED|RUT_CORG|BUS_TYP|BUS_TYP|</Fields>
</DynSentence>
<!-- 更新状态:4-关键信息不符 -->
<DynSentence name="UPD_CAPTXNJNL_ERR"><!-- 更新 T、T-1、T+1 日我方关键信息不符的流水记录的对账状态 -->
<Sentence>
UPDATE CAPTXNJNL
SET CHK_STS = '4'
WHERE AC_DT >= ? AND
CHK_STS = '0' AND
TXN_MOD = '99' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ? AND
CAP_ORD_NO IN ( SELECT TERMSERNUM
FROM CAPCHKABC
WHERE CHK_STS = '0' AND
TxType = ?
)
</Sentence>
<Fields>CHK_DT_YED|RUT_CORG|BUS_TYP|BUS_TYP|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCHKABC_ERR"><!-- 更新 T 日对方关键信息不符的流水记录的对账状态 -->
<Sentence>
UPDATE CAPCHKABC a
SET a.CHK_STS = '4'
WHERE TxType = ? AND
EXISTS ( SELECT 1
FROM CAPTXNJNL b
WHERE b.AC_DT >= ? AND
b.TXN_MOD = '99' AND
b.CHK_STS = '4' AND
b.CORG_NO = ? AND
b.ORD_TYP = a.TxType AND
b.TXN_STS IN ( 'S' , 'T' ) AND
b.CAP_ORD_NO = a.TERMSERNUM
)
</Sentence>
<Fields>BUS_TYP|CHK_DT_YED|RUT_CORG|</Fields>
</DynSentence>
<!-- 入差错表[我方]:2-我方有对方无 -->
<DynSentence name="INS_CAPTXNJNL_MOR"><!-- T-1 日我方有对方无的流水记录入差错表 -->
<Sentence>
INSERT INTO PWMTCKER ( RUT_CORG , COP_BUS_TYP , ERR_KEY_ID , CHK_ERR_DT ,
CHK_ERR_TM , CHK_BAT_NO , TX_CD , CHK_TYP ,
CHK_ERR_TYP , ERR_STS , PAY_TX_AMT , OLD_TX_DT ,
OLD_JRN_NO , OLD_ORD_NO , OLD_CORG_KEY
)
SELECT ? AS RUT_CORG , ORD_TYP AS COP_BUS_TYP , 'LCL' || CAP_ORD_NO AS ERR_KEY_ID ,
? AS CHK_ERR_DT , ? AS CHK_ERR_TM , ? AS CHK_BAT_NO , ? AS TX_CD , '1' AS CHK_TYP ,
CASE ORD_TYP WHEN '11' THEN '3' ELSE '2' END AS CHK_ERR_TYP , '0' AS ERR_STS ,
TXN_AMT AS PAY_TX_AMT , AC_DT AS OLD_TX_DT , JRN_NO AS OLD_JRN_NO ,
CAP_ORD_NO AS OLD_ORD_NO , CAP_ORD_NO AS OLD_CORG_KEY
FROM CAPTXNJNL
WHERE AC_DT = ? AND
CHK_STS = '0' AND
TXN_MOD = '99' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ?
</Sentence>
<Fields>RUT_CORG|CHK_ERR_DT|CHK_ERR_TM|CHK_BAT_NO|TX_CD|CHK_DT_YED|RUT_CORG|BUS_TYP|</Fields>
</DynSentence>
<!-- 入差错表[对方]:4-关键信息不符 2-对方有我方无 记录状态未知 -->
<!--DynSentence name="INS_CAPCHKABC_NOSUC"><T 日对方非对账成功且交易状态不为失败的流水记录入差错表>
<Sentence>
INSERT INTO PWMTCKER ( RUT_CORG , COP_BUS_TYP , ERR_KEY_ID , CHK_ERR_DT ,
CHK_ERR_TM , CHK_BAT_NO , TX_CD , CHK_TYP ,
CHK_ERR_TYP , ERR_STS , FIL_TX_AMT
)
SELECT ? AS RUT_CORG , TxType AS COP_BUS_TYP , 'THD' || TERMSERNUM AS ERR_KEY_ID ,
? AS CHK_ERR_DT , ? AS CHK_ERR_TM , ? AS CHK_BAT_NO , ? AS TX_CD , '1' AS CHK_TYP ,
CASE WHEN CHK_STS='0' THEN
CASE WHEN TxType='11' THEN '2' ELSE '3' END
WHEN CHK_STS='4' THEN '4' END AS CHK_ERR_TYP , '0' AS ERR_STS ,
AMOUNT AS FIL_TX_AMT
FROM CAPCHKABC
WHERE CHK_STS != '1' AND
TxType = ? AND
Status != '1'
</Sentence>
<Fields>RUT_CORG|CHK_ERR_DT|CHK_ERR_TM|CHK_BAT_NO|TX_CD|BUS_TYP|</Fields>
</DynSentence-->
<!-- 统计:我方有对方无 -->
<DynSentence name="CNT_CAPTXNJNL_LCLMOR"><!-- 统计 T-1 日我方有对方无的流水记录总金额及总笔数 -->
<Sentence>
SELECT COUNT( * ) AS SUM_LCLMOR_CNT ,
NVL( SUM( TXN_AMT ) , 0 ) AS SUM_LCLMOR_AMT
FROM CAPTXNJNL
WHERE TXN_MOD = '99' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ? AND
CHK_STS = '0' AND
AC_DT = ?
</Sentence>
<Fields>RUT_CORG|BUS_TYP|CHK_DT_YED|</Fields>
</DynSentence>
<!-- 更新对账状态:2-我方有对方无 -->
<DynSentence name="UPD_CAPTXNJNL_MOR"><!-- 更新 T-1 日我方有对方无的流水记录的对账状态 -->
<Sentence>
UPDATE CAPTXNJNL
SET CHK_STS = '2'
WHERE AC_DT = ? AND
CHK_STS = '0' AND
TXN_MOD = '99' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ?
</Sentence>
<Fields>CHK_DT_YED|RUT_CORG|BUS_TYP|</Fields>
</DynSentence>
<!-- 统计:存疑 -->
<DynSentence name="CNT_CHKABC_DOUBTAMT"><!-- 统计 T 日我方存疑的流水记录的总金额及总笔数 -->
<Sentence>
SELECT COUNT( * ) AS SUM_DOUBT_CNT ,
NVL( SUM( TXN_AMT ) , 0 ) AS SUM_DOUBT_AMT
FROM CAPTXNJNL
WHERE AC_DT = ? AND
TXN_MOD = '99' AND
CHK_STS = '0' AND
CORG_NO = ? AND
TXN_STS IN ( 'S' , 'T' ) AND
ORD_TYP = ?
</Sentence>
<Fields>CHK_FIL_DT|RUT_CORG|BUS_TYP|</Fields>
</DynSentence>
<!-- 统计:对方有我方无 -->
<DynSentence name="CNT_CAPCHKABC_THDMOR"><!-- 统计 T 日对方有我方无的流水记录的总金额及总笔数 -->
<Sentence>
SELECT COUNT( * ) AS SUM_THDMOR_CNT ,
NVL( SUM( AMOUNT ) , 0 ) AS SUM_THDMOR_AMT
FROM CAPCHKABC
WHERE CHK_STS = '0' AND
TxType = ?
</Sentence>
<Fields>BUS_TYP|</Fields>
</DynSentence>
<!-- 统计:对账文件 -->
<DynSentence name="CNT_CHKABC_TOTAMT"><!-- 统计对账文件的总金额及总笔数 -->
<Sentence>
SELECT COUNT( * ) AS SUM_FIL_CNT ,
NVL( SUM( AMOUNT ) , 0 ) AS SUM_FIL_AMT
FROM CAPCHKABC
WHERE TxType = ?
</Sentence>
<Fields>BUS_TYP|</Fields>
</DynSentence>
<!-- 统计:平帐 -->
<DynSentence name="CNT_CHKABC_MCHAMT"><!-- 统计平帐的流水记录的总金额及总笔数 -->
<Sentence>
SELECT COUNT( * ) AS SUM_MCH_CNT ,
NVL( SUM( AMOUNT ) , 0 ) AS SUM_MCH_AMT
FROM CAPCHKABC
WHERE CHK_STS = '1' AND
TxType = ?
</Sentence>
<Fields>BUS_TYP|</Fields>
</DynSentence>
<!-- 更新主控中统计 -->
<DynSentence name="UPD_PWMTCKCT_TOTAMT"><!-- 更新对账主控表中的统计金额及总笔数 -->
<Sentence>
UPDATE PWMTCKCT
SET FIL_TOT_AMT = ? , FIL_TOT_CNT = ? ,
TOT_MCH_AMT = ? , TOT_MCH_CNT = ? ,
ERR_TOT_AMT = ? , ERR_TOT_CNT = ? ,
LONG_AMT = ? , LONG_CNT = ? ,
SHORT_AMT = ? , SHORT_CNT = ? ,
DOUBT_AMT = ? , DOUBT_CNT = ? ,
DBT_ERR_AMT = ? , DBT_ERR_CNT = ? ,
CHK_FIL_STS = ? , CHK_END_TM = ?
WHERE CHK_BAT_NO = ?
</Sentence>
<Fields>FIL_TOT_AMT|FIL_TOT_CNT|TOT_MCH_AMT|TOT_MCH_CNT|ERR_TOT_AMT|ERR_TOT_CNT|LONG_AMT|LONG_CNT|SHORT_AMT|SHORT_CNT|DOUBT_AMT|DOUBT_CNT|DBT_ERR_AMT|DBT_ERR_CNT|CHK_FIL_STS|CHK_END_TM|CHK_BAT_NO|</Fields>
</DynSentence>
<FlowCtrl>
<!-- 输入参数检查 -->
<Quote name="Input_Check" />
<!-- 交易初始化 -->
<Exec func="PUB:InitGWA" error="IGNORE" />
<If condition="~RetCod!=0">
<Set>Rsp_Msg=交易初始化失败 </Set>
<Return />
</If>
<Exec func="PUB:BeginWork" /><!-- 开始事务 -->
<!-- 变量初始化 -->
<If condition="ISNULL($CHK_DAT)">
<Set>CHK_FIL_DT=CALCDATE($GWA.AC_DT,-,d,1)</Set> <!-- 对账文件日期(T 日) -->
</If>
<Else>
<Set>CHK_FIL_DT=$CHK_DAT</Set> <!-- 对账文件日期(T 日) -->
</Else>
<Set>BUS_TYP=$BUS_TYP</Set> <!-- 业务类型 11:代收 12:代付 -->
<Set>RUT_CORG=ABC</Set> <!-- 路径合作机构号 -->
<Set>CHK_BEG_TM=GETDATETIME(HHMISS)</Set> <!-- 对账开始时间 -->
<Set>CHK_DT_YED=CALCDATE($CHK_FIL_DT,-,d,1)</Set> <!-- T-1 日日期 -->
<Set>CHK_ERR_DT=$GWA.AC_DT</Set> <!-- 差错创建日期 -->
<Set>TX_CD=$GWA.TX_CD</Set> <!-- 交易码 -->
<!-- 查询对账总控表 -->
<Exec func="PUB:ReadRecord" error="IGNORE" desc="查询记录">
<Arg name="SqlCmd" value="QRY_PWMTCKCT" />
</Exec>
<If condition="~RetCod=0">
<If condition="INTCMP($CHK_STS,3,4)">
<!-- 已成功对账,退出交易 -->
<Set>Rsp_Msg=STRCAT([,$CHK_FIL_DT,],日已成功对账,交易退出 )</Set>
<Return />
</If>
<Else>
<Exec func="PUB:ExecSql" error="IGNORE" desc="删除记录">
<Arg name="SqlCmd" value="DEL_PWMTCKCT" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Msg=删除对账主控表中记录失败 </Set>
<Return />
</If>
</Else>
</If>
<ElseIf condition="~RetCod=-1">
<Set>Rsp_Msg=查询对账总控表失败 </Set>
<Return />
</ElseIf>
<!-- 对账文件路径设置 -->
<Quote name="ABC_CFG"/> <!-- 获取农业银行参数 -->
<Set>FIL_NM=STRCAT($MerchantNo,_,$BusCode,_,$CHK_FIL_DT,.txt)</Set>
<Set>FIL_DIR=STRCAT(GETENV(HWORKDIR),/dat/cap/recv/ABC/)</Set>
<Set>FIL_PATH=STRCAT($FIL_DIR,$FIL_NM)</Set>
<!-- 检查对账文件 -->
<Exec func="PUB:IsValidFile" error="IGNORE" desc="检查文件">
<Arg name="FileName" value="$FIL_PATH" />
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=机构对账文件不存在 </Set>
<Return />
</If>
<!-- 获取用于组成对账批次号的序号 -->
<Exec func="PUB:GetUniqueNo" desc="获取序号">
<Arg name="Name" value="PWMSEQ" />
<Arg name="SeqNam" value="ck_sequence" />
<Arg name="Len" value="8" />
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=获取批次号的序号失败 </Set>
<Return/>
</If>
<Set>CHK_BAT_NO=STRCAT($CHK_DAT,$PWMSEQ)</Set><!-- 对账批次号 -->
<!-- 登记对账总控表,对账状态为 1:文件已获取 -->
<Set>PWMTCKCT.CHK_BAT_NO=$CHK_BAT_NO</Set> <!-- 对账批次号 -->
<Set>PWMTCKCT.RUT_CORG=$RUT_CORG</Set> <!-- 路径合作机构号 -->
<Set>PWMTCKCT.COP_BUS_TYP=$BUS_TYP</Set> <!-- 合作业务类型 11:代收 12:代付 -->
<Set>PWMTCKCT.CHK_FIL_DT=$CHK_FIL_DT</Set> <!-- 路径合作机构对账文件日期 -->
<Set>PWMTCKCT.FIL_DT_SEQ=01</Set> <!-- 对账文件日期序号 -->
<Set>PWMTCKCT.CHK_FIL_NM=$FIL_NM</Set> <!-- 对账文件名称 -->
<Set>PWMTCKCT.FILE_RCV_DT=$GWA.AC_DT</Set> <!-- 对账文件获取日期 -->
<Set>PWMTCKCT.CHK_TYP=1</Set> <!-- 对账类型 -->
<Set>PWMTCKCT.CHK_BEG_TM=$CHK_BEG_TM</Set> <!-- 对账开始时间 -->
<Set>PWMTCKCT.CHK_END_TM=GETDATETIME(HHMISS)</Set> <!-- 对账结束时间 -->
<Set>PWMTCKCT.AC_DT=$GWA.AC_DT</Set> <!-- 会计日期 -->
<Set>PWMTCKCT.CHK_DT=$CHK_FIL_DT</Set> <!-- 对账日期 -->
<Set>PWMTCKCT.OTHER_INF=CAP1</Set> <!-- 用于存储类型 -->
<Set>PWMTCKCT.CHK_FIL_STS=1</Set> <!-- 对账状态 1:文件已获取 -->
<Set>PWMTCKCT.CHK_SRV=OCAPCHK1</Set> <!-- 服务名 -->
<Set>PWMTCKCT.CHK_TX_CD=$GWA.TX_CD</Set> <!-- 交易码 -->
<Set>PWMTCKCT.TM_SMP=GETDATETIME()</Set> <!-- 时间戳 -->
<Exec func="PUB:InsertRecord" error="IGNORE" desc="登记总控">
<Arg name="TblNam" value="PWMTCKCT" />
<Arg name="GrpNam" value="PWMTCKCT" />
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=登记对账总控表失败 </Set>
<Return />
</If>
<!-- 清空对账文件记录表 -->
<Exec func="PUB:ExecSql" error="IGNORE" desc="删除记录">
<Arg name="SqlCmd" value="DEL_CAPCHKABC" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" /><!-- 回滚事务 -->
<Set>Rsp_Msg=清空对账文件记录表失败 </Set>
<Return />
</If>
<!-- 导入机构对账文件到数据库表 -->
<Exec func="PUB:ImportToDB" error="IGNORE" desc="导入文件">
<Arg name="FormatName" value="ABCCHKFMT" />
<Arg name="FileName" value="$FIL_PATH" />
<Arg name="TableName" value="CAPCHKABC" />
</Exec>
<If condition="~RetCod=1">
<Exec func="PUB:RollBackWork" /><!-- 回滚事务 -->
<Set>Rsp_Msg=导入机构对账文件到数据库表失败-主键冲突 </Set>
<Return />
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" /><!-- 回滚事务 -->
<Set>Rsp_Msg=导入机构对账文件到数据库表失败 </Set>
<Return />
</ElseIf>
<!-- 更新对账总控表对账状态 -->
<Set>CHK_FIL_STS=2</Set> <!-- 对账状态 2:文件已入库 -->
<Set>CHK_END_TM=GETDATETIME(HHMISS)</Set> <!-- 对账结束时间 -->
<Quote name="UpdateStatus" />
<!-- 统计变量初始化 -->
<Set>SUM_FIL_CNT=0</Set>
<Set>SUM_FIL_AMT=0</Set>
<Set>SUM_MCH_CNT=0</Set>
<Set>SUM_MCH_AMT=0</Set>
<Set>SUM_ERR_CNT=0</Set>
<Set>SUM_ERR_AMT=0</Set>
<Set>SUM_LONG_CNT=0</Set>
<Set>SUM_LONG_AMT=0</Set>
<Set>SUM_SHORT_CNT=0</Set>
<Set>SUM_SHORT_AMT=0</Set>
<Set>SUM_DOUBT_CNT=0</Set>
<Set>SUM_DOUBT_AMT=0</Set>
<Set>SUM_DBTERR_CNT=0</Set>
<Set>SUM_DBTERR_AMT=0</Set>
<!-- 更新 T、T-1、T+1 日[我方]成功对账的流水记录的对账状态为 1:对账成功 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPTXNJNL_MCH" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=更新我方成功对账的流水记录的对账状态失败 </Set>
<Return />
</If>
<!-- 更新 T 日[对方]成功对账的流水记录的对账状态为 1:对账成功 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPCHKABC_MCH" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=更新对方成功对账的流水记录的对账状态失败 </Set>
<Return />
</If>
<!-- T-1、T 和 T+1 日[我方]关键信息不符的流水记录入差错表 -->
<Set>CHK_ERR_TM=GETDATETIME(HHMISS)</Set> <!-- 差错创建时间 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="INS_CAPTXNJNL_ERR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=我方对账关键信息不符的流水记录入差错表失败 </Set>
<Return />
</If>
<ElseIf condition="~RetCod=1">
<Set>RspMsg=我方对账关键信息不符的流水记录重复入差错表-忽略 </Set>
</ElseIf>
<!-- 统计 T-1 日[我方]存疑转差错的流水记录的总金额及总笔数 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="CNT_CHKABC_DBTERR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=统计我方存疑转差错的流水记录的总金额及总笔数失败 </Set>
<Return />
</If>
<!-- 统计 T、T-1、T+1 日[我方]关键信息不符的流水记录的总金额及总笔数 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="CNT_CAPTXNJNL_ERR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=统计我方关键信息不符的流水记录的总金额及总笔数失败 </Set>
<Return />
</If>
<!-- 更新 T、T-1、T+1 日[我方]关键信息不符的流水记录的对账状态为 4:关键信息不符 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPTXNJNL_ERR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=更新我方存在关键信息不符的流水记录的对账状态失败 </Set>
<Return />
</If>
<!-- 更新 T 日[对方]关键信息不符的流水记录的对账状态为 4:关键信息不符 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPCHKABC_ERR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=更新对方存在关键信息不符的流水记录的对账状态失败 </Set>
<Return />
</If>
<!-- T-1 日[我方有对方无]的流水记录入差错表 -->
<Set>CHK_ERR_TM=GETDATETIME(HHMISS)</Set> <!-- 差错创建时间 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="INS_CAPTXNJNL_MOR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=我方有对方无的流水记录入差错表失败 </Set>
<Return />
</If>
<ElseIf condition="~RetCod=1">
<Set>RspMsg=我方有对方无的流水记录重复入差错表-忽略 </Set>
</ElseIf>
<!-- T 日[对方]非对账成功且交易状态不为失败的流水记录入差错表 -->
<!--Set>CHK_ERR_TM=GETDATETIME(HHMISS)</Set> <差错创建时间 >
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="INS_CAPCHKABC_NOSUC" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=对方非对账成功且交易状态不为失败的流水记录入差错表失败 </Set>
<Return />
</If>
<ElseIf condition="~RetCod=1">
<Set>RspMsg=对方非对账成功且交易状态不为失败的流水记录重复入差错表-忽略 </Set>
</ElseIf-->
<!-- 统计 T-1 日[我方有对方无]的流水记录的总金额及总笔数 -->
<Exec func="PUB:ReadRecord" error="IGNORE" desc="统计">
<Arg name="SqlCmd" value="CNT_CAPTXNJNL_LCLMOR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=统计我方有对方无的流水记录的总金额及总笔数失败 </Set>
<Return />
</If>
<!-- 更新 T-1 日[我方有对方无]的流水记录的对账状态为 2:我方有对方无 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPTXNJNL_MOR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=更新我方有对方无的流水记录的对账状态失败 </Set>
<Return />
</If>
<!-- 统计 T 日[我方]存疑的流水记录的总金额及总笔数 -->
<Exec func="PUB:ReadRecord" error="IGNORE" desc="统计">
<Arg name="SqlCmd" value="CNT_CHKABC_DOUBTAMT" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=统计我方存疑的流水记录的总金额及总笔数失败 </Set>
<Return />
</If>
<!-- 统计 T 日[对方]有我方无的流水记录的总金额及总笔数 -->
<Exec func="PUB:ReadRecord" error="IGNORE" desc="统计">
<Arg name="SqlCmd" value="CNT_CAPCHKABC_THDMOR" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=统计对方有我方无的流水记录的总金额及总笔数失败 </Set>
<Return />
</If>
<!-- 对账文件总金额及总笔数统计 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="CNT_CHKABC_TOTAMT" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=统计对账文件总金额及总笔数失败 </Set>
<Return />
</If>
<!-- 平帐的流水记录的总金额及总笔数统计 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="CNT_CHKABC_MCHAMT" />
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=统计平帐的流水记录的总金额及总笔数失败 </Set>
<Return />
</If>
<!-- ====================== 更新对账总控表中统计的金额及笔数 ====================== -->
<Set>CHK_BAT_NO=$CHK_BAT_NO</Set> <!-- 对账批次号 -->
<Set>FIL_TOT_AMT=$SUM_FIL_AMT</Set> <!-- 对账文件总金额 -->
<Set>FIL_TOT_CNT=$SUM_FIL_CNT</Set> <!-- 对账文件总笔数 -->
<Set>TOT_MCH_AMT=$SUM_MCH_AMT</Set> <!-- 平帐总金额 -->
<Set>TOT_MCH_CNT=$SUM_MCH_CNT</Set> <!-- 平帐总笔数 -->
<Set>ERR_TOT_AMT=$SUM_ERR_AMT</Set> <!-- 差错总笔数 -->
<Set>ERR_TOT_CNT=$SUM_ERR_CNT</Set> <!-- 差错总笔数 -->
<If condition="INTCMP($BUS_TYP,3,11)"><!-- 代收 -->
<Set>LONG_AMT=$SUM_THDMOR_AMT</Set> <!-- 长款总金额 -->
<Set>LONG_CNT=$SUM_THDMOR_CNT</Set> <!-- 长款总笔数 -->
<Set>SHORT_AMT=$SUM_LCLMOR_AMT</Set> <!-- 短款总金额 -->
<Set>SHORT_CNT=$SUM_LCLMOR_CNT</Set> <!-- 短款总笔数 -->
</If>
<Else><!-- 代付 -->
<Set>LONG_AMT=$SUM_LCLMOR_AMT</Set> <!-- 长款总金额 -->
<Set>LONG_CNT=$SUM_LCLMOR_CNT</Set> <!-- 长款总笔数 -->
<Set>SHORT_AMT=$SUM_THDMOR_AMT</Set> <!-- 短款总金额 -->
<Set>SHORT_CNT=$SUM_THDMOR_CNT</Set> <!-- 短款总笔数 -->
</Else>
<Set>DOUBT_AMT=$SUM_DOUBT_AMT</Set> <!-- 存疑金额 -->
<Set>DOUBT_CNT=$SUM_DOUBT_CNT</Set> <!-- 存疑笔数 -->
<Set>DBT_ERR_AMT=$SUM_DBTERR_AMT</Set> <!-- 存疑转差错金额 -->
<Set>DBT_ERR_CNT=$SUM_DBTERR_CNT</Set> <!-- 存疑转差错笔数 -->
<Set>CHK_FIL_STS=4</Set> <!-- 对账状态 4:对账结束 -->
<Set>CHK_END_TM=GETDATETIME(HHMISS)</Set> <!-- 对账结束时间 -->
<Exec func="PUB:ExecSql" error="IGNORE" desc="更新对账总控表">
<Arg name="SqlCmd" value="UPD_PWMTCKCT_TOTAMT" />
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:RollBackWork" />
<Set>Rsp_Msg=更新对账主控表中统计金额及笔数失败 </Set>
<Return />
</If>
<Exec func="PUB:CommitWork" /><!-- 提交事务 -->
</FlowCtrl>
</Transaction>
<Transaction code="abc_getfile" log_switch="1" desc="农业银行获取对账文件">
<FlowCtrl>
<!-- 如果输入的对账日期不为空,判断对账日期格式是否正确 -->
<If condition="NOT(ISNULL($CHK_DAT))">
<If condition="INTCMP(CHECKDATE($CHK_DAT),4,0)">
<Set>Rsp_Msg=输入对账日期格式不正确 </Set>
<Return />
</If>
</If>
<!-- 交易初始化 -->
<Exec func="PUB:InitGWA" error="IGNORE" />
<If condition="~RetCod!=0">
<Set>Rsp_Msg=交易初始化失败 </Set>
<Return />
</If>
<!-- 对账日期 -->
<If condition="ISNULL($CHK_DAT)">
<Set>CHK_FIL_DT=CALCDATE($GWA.AC_DT,-,d,1)</Set>
</If>
<Else>
<Set>CHK_FIL_DT=$CHK_DAT</Set>
</Else>
<Set>TXN_DT=GETDATETIME()</Set> <!-- 交易时间 -->
<Quote name="Check_Cfg_ABC"/> <!-- 获取农业银行参数 -->
<!--到农行获取对账文件-->
<Set>LOCAL_USR=$PARA.LOCAL_USR</Set>
<Set>LOCAL_TYP=sftp</Set>
<Set>LOCAL_DIR=STRCAT(GETENV(WORKDIR),/dat/cap/recv/ABC)</Set>
<Set>REMOTE_IP=$PARA.REMOTE_IP</Set>
<Set>REMOTE_USR=$PARA.REMOTE_USR</Set>
<Set>REMOTE_PWD=$PARA.REMOTE_PWD</Set>
<Set>REMOTE_TYP=$PARA.REMOTE_TYP</Set>
<Set>REMOTE_DIR=$PARA.REMOTE_DIR</Set>
<Set>FTP_MOD=get</Set>
<Set>FIL_NAM=STRCAT($MerchantNo,_,$BusCode,_,$CHK_FIL_DT,.txt)</Set>
<Exec func="PUB:CallThirdComm">
<Arg name="HTxnCd" value="100005"/>
<Arg name="ObjSvr" value="S.FILSVR"/>
</Exec>
</FlowCtrl>
</Transaction>
</Application>