Files
2021-06-03 15:50:17 +08:00

267 lines
12 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Tran>
<Transaction code="HRO_CHK" log_switch='1' desc="HRO对账">
<DynSentence name="QRY_CAPTXNJNL">
<Sentence>
select DSK_NO DISK_NO,ORD_DT APPLY_DATE,AC_TYP ACCT_TYPE,AC_NO ACCT_NO,CUS_NAM ACCT_NAME,CAP_ORD_NO
TRANS_ID,TACC_DT,
MERC_ORD_NO REF_ID,CORG_JRN_NO BANK_REF_ID, TXN_AMT AMOUNT,BNK_TYP BANK_TYPE,POSTSCRIPT,
TAC_NO PAYER_ACCT_NO,TAC_NAM PAYER_ACCT_NAME, CORG_NO ORG_NO,'' REMARK ,
TXN_STS TRANS_STS,RSP_MSG RESP_MESSAGE
from CAPTXNJNL t where TACC_DT = '%s' AND TXN_STS = 'S' order by to_number(MERC_ORD_NO)
</Sentence>
<Fields>CHK_DAT|</Fields>
</DynSentence>
<DynSentence name="QRY_CAPHROCHK">
<Sentence>
SELECT
CHK_BAT_NO,CHK_FIL_STS
FROM CAPHROCHK
WHERE
RUT_CORG='HRO' AND COP_BUS_TYP = '12' AND CHK_FIL_DT = ?
</Sentence>
<Fields>CHK_DAT|</Fields>
</DynSentence>
<DynSentence name="SUM_CAPTXNJNL">
<Sentence>
select nvl(sum(succ_num),0) SUCC_COUNT,nvl(sum(succ_amt),0) SUCC_AMOUNT,
nvl(sum(fail_num),0) FAIL_COUNT,nvl(sum(fail_amt),0) FAIL_AMOUNT,
nvl(sum(TXN_AMT),0) TOTAL_AMOUNT,nvl(sum(TXN_NUM),0) TOTAL_COUNT
from (
select (case when TXN_STS in ('S','R') then 1 else 0 end) succ_num,
(case when TXN_STS in ('S','R') then TXN_AMT else 0 end) succ_amt,
(case when TXN_STS = 'F' then 1 else 0 end) fail_num,
(case when TXN_STS = 'F' then TXN_AMT else 0 end) fail_amt,
TXN_AMT,1 TXN_NUM
from CAPTXNJNL where ORD_DT = ?)
</Sentence>
<Fields>CHK_DAT|</Fields>
</DynSentence>
<DynSentence name="QRY_CAPTXNJNL_DOUBT">
<Sentence>
select count(1) DOUBT_NUM
from CAPTXNJNL where ORD_DT = ? and TXN_STS not in ('S','F','R')
</Sentence>
<Fields>CHK_DAT|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPHROCHK">
<Sentence>
update CAPHROCHK set FIL_TOT_AMT = ? ,FIL_TOT_CNT = ?,FIL_SUCC_AMT = ?,FIL_SUCC_CNT = ?,
FIL_FAIL_AMT = ?,FIL_FAIL_CNT = ?,CHK_FIL_STS = '4',CHK_FIL_NM = ?,MD5 = ?,CHK_END_TM = ?
where CHK_BAT_NO = ?
</Sentence>
<Fields>
TOTAL_AMOUNT|TOTAL_COUNT|SUCC_AMOUNT|SUCC_COUNT|FAIL_AMOUNT|FAIL_COUNT|FILE_ID|MD5|CHK_END_TM|CHK_BAT_NO|
</Fields>
</DynSentence>
<Function name="_after">
<Process>
<If condition="IS_NOEQUAL_STRING($Rsp_Cd,00)">
<Set>EVENT.CHK_DT=$CHK_DAT</Set>
<Set>EVENT.ERR_MSG=$Rsp_Msg</Set>
<Set>EVT_TYP=RECONCILIATION_FAILURE</Set>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="PUSH_EVENT"/>
<Arg name='Mode' value='NOTIFY'/>
</Exec>
</If>
</Process>
</Function>
<FlowCtrl>
<Quote name="Init_CAP01"/> <!--交易初始化-->
<If condition="ISNULL($CHK_DAT)=1">
<Set>CHK_DAT=CALCDATE($CRE_DT,-,d,1)</Set>
</If>
<!--检查上日对账是否完成-->
<!--查询总控表,无记录则生成-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPHROCHK"/>
</Exec>
<If condition="~RetCod=2">
<!-- 获取用于组成对账批次号的序号 -->
<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><!-- 对账批次号 -->
<!-- 登记对账总控表,对账状态为 0 :待获取文件 -->
<Set>CAPHROCHK.CHK_BAT_NO=$CHK_BAT_NO</Set> <!-- 对账批次号 -->
<Set>CAPHROCHK.RUT_CORG=HRO</Set> <!-- 路径合作机构号 -->
<Set>CAPHROCHK.COP_BUS_TYP=12</Set> <!-- 合作业务类型 11:代收 12:代付 -->
<Set>CAPHROCHK.CHK_FIL_DT=$CHK_DAT</Set> <!-- 路径合作机构对账文件日期 -->
<Set>CAPHROCHK.FIL_DT_SEQ=01</Set> <!-- 对账文件日期序号 -->
<Set>CAPHROCHK.FILE_RCV_DT=$GWA.AC_DT</Set> <!-- 对账文件日期 -->
<Set>CAPHROCHK.CHK_TYP=1</Set> <!-- 对账类型 -->
<Set>CAPHROCHK.CHK_BEG_TM=GETDATETIME(HHMISS)</Set> <!-- 对账开始时间 -->
<Set>CAPHROCHK.AC_DT=$GWA.AC_DT</Set> <!-- 会计日期 -->
<Set>CAPHROCHK.CHK_DT=$CHK_DAT</Set> <!-- 对账日期 -->
<Set>CAPHROCHK.CHK_FIL_STS=0</Set> <!-- 对账状态 0:待获取文件 -->
<Set>CAPHROCHK.CHK_SRV=OCAPCHK1</Set> <!-- 服务名 -->
<Set>CAPHROCHK.CHK_TX_CD=$GWA.TX_CD</Set> <!-- 交易码 -->
<Set>CAPHROCHK.TM_SMP=GETDATETIME()</Set> <!-- 时间戳 -->
<Exec func="PUB:InsertRecord" error="IGNORE" desc="登记总控">
<Arg name="TblNam" value="CAPHROCHK"/>
<Arg name="GrpNam" value="CAPHROCHK"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:RollBackWork"/>
<Set>Rsp_Msg=登记对账总控表失败</Set>
<Return/>
</If>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg"><!-- @msg 对账批次不存在 -->
<Arg name="MsgCd" value="PWM90001"/>
</Exec>
<Return/>
</ElseIf>
<!--CHK_FLG:强制对账标志 Y-强制重新对账并生成文件 -->
<If condition="AND(IS_EQUAL_STRING($CHK_FIL_STS,4),IS_NOEQUAL_STRING($CHK_FLG,Y))">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=对账已完成,无法重复对账</Set>
<Return/>
</If>
<!--判断是否所有交易都为终态-->
<!--<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPTXNJNL_DOUBT" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Msg=数据库异常 </Set>
<Return />
</If>
<If condition="IS_NOEQUAL_STRING($DOUBT_NUM,0)">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=存在非终态交易,无法生成对账文件</Set>
<Return />
</If>-->
<!--统计汇总信息-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="SUM_CAPTXNJNL"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=数据库异常</Set>
<Return/>
</If>
<!--生成文件-->
<Set>SRC_FIL_PATH=STRCAT(GETENV(WORKDIR),/dat/cap/chk/)</Set>
<Set>SRC_FIL_NAM=STRCAT($SRC_FIL_PATH,$CHK_DAT,/,$CHK_BAT_NO)</Set>
<Set>FIL_CMD=STRCAT("cd ",$SRC_FIL_PATH," ",\46\46," mkdir ",$CHK_DAT)
</Set>
<Exec func="PUB:SystemAndWait" error="IGNORE">
<Arg name="cmd" value="$FIL_CMD"/>
<Arg name="FIL_NM" value=""/>
</Exec>
<!--导出文件-->
<Exec func="PUB:ExportFromDB">
<Arg name="FormatName" value="HroFmt03"/>
<Arg name="FileName" value="$SRC_FIL_NAM"/>
<Arg name="TableName" value="CAPTXNJNL"/>
<Arg name="SqlName" value="QRY_CAPTXNJNL"/>
</Exec>
<If condition="~RetCod&lt;0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=生成文件失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="CAP88888"/>
</Exec>
<Return/>
</If>
<!--文件压缩-->
<Set>ZIP_FIL_NAME=STRCAT($SRC_FIL_NAM,.zip)</Set>
<Exec func="PUB:PARAM_GRP_GET" error="IGNORE">
<Arg name="ParamNam" value="CAPPARAMTER"/>
<Arg name="KeyNam" value="FIL_ZIP_PWD"/>
<Arg name="GrpNam" value="PWD"/>
</Exec>
<Set>FIL_PWD=$PWD.P_VALUES</Set>
<Exec func="CTG:zip">
<Arg name="srcFileName" value="$SRC_FIL_NAM"/>
<Arg name="zipFileName" value="$ZIP_FIL_NAME"/>
<Arg name="password" value="$FIL_PWD"/>
</Exec>
<!--判断文件是否存在-->
<Exec func="PUB:IsValidFile" error="IGNORE">
<Arg name="FileName" value="$ZIP_FIL_NAME"/>
</Exec>
<If condition="OR( INTCMP($FIL_BYT,3,0), INTCMP(~RetCod,4,0) )">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=文件压缩失败</Set>
<Return/>
</If>
<!--生成MD5值-->
<Exec func="ENC:EncryptFilByMD5" error="IGNORE">
<Arg name="fileName" value="$ZIP_FIL_NAME"/>
<Arg name="nodeName" value="BSIG_VAL"/>
</Exec>
<Set>MD5=$BSIG_VAL</Set><!--文件校验值-->
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="AGW00000"/>
</Exec>
<!--签到,获取TOKEN-->
<!--获取TOKEN-->
<Exec func="PUB:PARAM_GRP_GET" error="IGNORE">
<Arg name="ParamNam" value="CAPPARAMTER"/>
<Arg name="KeyNam" value="FIL_TOKEN"/>
<Arg name="GrpNam" value="CLOUD_SHIELD"/>
</Exec>
<Set>FIL_TOKEN=$CLOUD_SHIELD.P_VALUES</Set>
<Exec func="PUB:PARAM_GRP_GET" error="IGNORE">
<Arg name="ParamNam" value="CAPPARAMTER"/>
<Arg name="KeyNam" value="FIL_TOKEN_URL"/>
<Arg name="GrpNam" value="URL"/>
</Exec>
<Set>FIL_TOKEN_URL=$URL.P_VALUES</Set>
<!--调用文件上传接口-->
<Exec func="CTG:uploadFile">
<Arg name="token" value="$FIL_TOKEN"/>
<Arg name="url" value="$FIL_TOKEN_URL"/>
<Arg name="filePath" value="$ZIP_FIL_NAME"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg="系统异常"</Set>
<Break/>
</If>
<Set>FILE_ID=$OUT_DAT.FILE_ID</Set>
<If condition="ISNULL($FILE_ID)=1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=送盘文件上传失败</Set>
<Return/>
</If>
<Set>CHK_END_TM=GETDATETIME(HHMISS)</Set> <!-- 对账结束时间 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPHROCHK"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg="更新数据库失败"</Set>
<Return/>
</If>
<Set>Rsp_Cd=00</Set>
<Set>Rsp_Msg=交易成功</Set>
</FlowCtrl>
</Transaction>
</Tran>