306 lines
13 KiB
XML
306 lines
13 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<Tran>
|
|
<Transaction code="BAT_GET_DISK_RESULT" log_switch='1' desc="获取批量回盘">
|
|
<DynSentence name="QryBatLst">
|
|
<Sentence>
|
|
select DSK_NAM,RCV_DT||RCV_TM from capdskinf a where dsk_sts = '1' and ord_dt >= ? and (dsk_nam,0) in
|
|
(select dsk_nam,sum(case when bat_sts not in ('4', '2') then 1 else 0 end) notfinal from capbatinf
|
|
where ord_dt = a.ord_dt and dsk_nam = a.DSK_NAM group by dsk_nam having sum(case when bat_sts not in ('4', '2') then 1 else 0 end) = 0)
|
|
union all select DSK_NAM ,RCV_DT||RCV_TM from CAPDSKINF a where a.dsk_sts = '9' and ORD_DT >= ?
|
|
order by 2 asc
|
|
</Sentence>
|
|
<Fields>DT_BEFER|DT_BEFER|</Fields>
|
|
</DynSentence>
|
|
<DynSentence name="UpdCapdskinf">
|
|
<Sentence>
|
|
UPDATE CAPDSKINF SET dsk_sts = '4',
|
|
END_DT=?,
|
|
END_TM=?,
|
|
MD5_RESULT=?,
|
|
FILE_ID_RESULT=?
|
|
WHERE DSK_NAM = ?
|
|
AND dsk_sts in ('1','9')
|
|
</Sentence>
|
|
<Fields>END_DT|END_TM|MD5_RESULT|FILE_ID|DSK_NAM|</Fields>
|
|
</DynSentence>
|
|
<DynSentence name="UpdCapdskinf2">
|
|
<Sentence>
|
|
UPDATE CAPDSKINF SET
|
|
SUC_CNT = ?,
|
|
SUC_AMT = ?,
|
|
FAL_CNT = ?,
|
|
FAL_AMT = ?
|
|
WHERE DSK_NAM = ?
|
|
AND dsk_sts in ('1','9')
|
|
</Sentence>
|
|
<Fields>SUC_CNT|SUC_AMT|FAL_CNT|FAL_AMT|DSK_NAM|</Fields>
|
|
</DynSentence>
|
|
<DynSentence name="QRY_CAPDSKINF_DSK_NAM">
|
|
<Sentence>
|
|
SELECT DSK_NO,DSK_STS,ORD_DT,END_DT,END_TM ,ORN_CNT ,ORN_AMT,SUC_CNT,SUC_AMT,FAL_CNT,FAL_AMT,
|
|
FILE_ID_RESULT,MD5_RESULT,CUSTOMER_ID,DISK_DESC DISK_MESSAGE,TM_SMP FROM CAPDSKINF
|
|
WHERE dsk_sts in ('1','9') and DSK_NAM = ? for update skip locked
|
|
</Sentence>
|
|
<Fields>DSK_NAM|</Fields>
|
|
</DynSentence>
|
|
<DynSentence name="SUM_CAPTXNJNL">
|
|
<Sentence>
|
|
select sum(SUCC_TXN_CNT) SUCC_TXN_CNT,
|
|
sum(SUCC_TXN_AMT)*100 SUCC_TXN_AMT,
|
|
sum(FAIL_TXN_CNT) FAIL_TXN_CNT,
|
|
sum(FAIL_TXN_AMT)*100 FAIL_TXN_AMT
|
|
from (select
|
|
(case when TXN_STS = 'S' then 1 else 0 end) SUCC_TXN_CNT,
|
|
(case when TXN_STS = 'S' then TXN_AMT else 0 end) SUCC_TXN_AMT,
|
|
(case when TXN_STS = 'F' then 1 else 0 end) FAIL_TXN_CNT,
|
|
(case when TXN_STS = 'F' then TXN_AMT else 0 end) FAIL_TXN_AMT
|
|
from CAPTXNJNL WHERE DSK_NAM = ? AND ORD_DT = ?)
|
|
</Sentence>
|
|
<Fields>DSK_NAM|ORD_DT|</Fields>
|
|
</DynSentence>
|
|
<Function name="_before">
|
|
<Process>
|
|
<!-- 应用加锁,防止并发 -->
|
|
<!--Set>LockKey=BAT_GET_DISK_RESULT</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>
|
|
<!--If condition="IS_EQUAL_STRING($IS_LOCKED,TRUE)"-->
|
|
<!--解锁-->
|
|
<!--Exec func="PUB:UnLock">
|
|
<Arg name="RecKey" value="$LockKey"/>
|
|
</Exec>
|
|
</If-->
|
|
</Process>
|
|
</Function>
|
|
|
|
<FlowCtrl>
|
|
<Quote name="Init_CAP01"/> <!--交易初始化-->
|
|
<Set>DT_BEFER=CALCDATE(GETDATE(),-,d,7)</Set>
|
|
|
|
<Exec func="PUB:QueryInGroup" error="IGNORE" desc="查询待处理交易">
|
|
<Arg name="SqlCmd" value="QryBatLst" /> <!-- SQL -->
|
|
<Arg name="Limit" value="20" /> <!-- 每页多少行 -->
|
|
<Arg name="RecordName" value="REC" />
|
|
</Exec>
|
|
<If condition="~RetCod=2">
|
|
<Return/>
|
|
</If>
|
|
<ElseIf condition="~RetCod<0">
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg=查询数据库错误</Set>
|
|
<Return/>
|
|
</ElseIf>
|
|
|
|
<Set>RecNo=0</Set>
|
|
<Set>FLG=0</Set>
|
|
<While condition="INTCMP($RecNo,1,$REC_NUM)">
|
|
<Set>RecNo=ADD($RecNo,1)</Set>
|
|
<Set>DSK_NAM=$REC[_$RecNo].DSK_NAM</Set>
|
|
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QRY_CAPDSKINF_DSK_NAM"/>
|
|
</Exec>
|
|
<If condition="~RetCod=2">
|
|
<Continue />
|
|
</If>
|
|
<ElseIf condition="~RetCod=0">
|
|
<Set>FLG=1</Set>
|
|
<Break/>
|
|
</ElseIf>
|
|
<Else>
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg=查询数据库错误</Set>
|
|
<Return/>
|
|
</Else>
|
|
</While>
|
|
|
|
<If condition="IS_EQUAL_STRING($FLG,0)">
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg=无需要处理的记录</Set>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!--获取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="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="SUM_CAPTXNJNL"/>
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg=数据库错误</Set>
|
|
<Break/>
|
|
</If>
|
|
|
|
<Set>ORN_AMT1=AMTPOWER($ORN_AMT,2)</Set>
|
|
<Set>ORN_AMT2=ADD($SUCC_TXN_AMT,$FAIL_TXN_AMT)</Set>
|
|
<Set>ORN_CNT2=ADD($SUCC_TXN_CNT,$FAIL_TXN_CNT)</Set>
|
|
<If condition="OR(INTCMP($ORN_AMT1,4,$ORN_AMT2),INTCMP($ORN_CNT,4,$ORN_CNT2))">
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg=批次未完成</Set>
|
|
<Break/>
|
|
</If>
|
|
<Else>
|
|
<Set>SUC_CNT=$SUCC_TXN_CNT</Set>
|
|
<Set>SUC_AMT=FDIV($SUCC_TXN_AMT,100,2)</Set>
|
|
<Set>FAL_CNT=$FAIL_TXN_CNT</Set>
|
|
<Set>FAL_AMT=FDIV($FAIL_TXN_AMT,100,2)</Set>
|
|
</Else>
|
|
|
|
<!--更新批次状态为已完成(终态)-->
|
|
<Exec func="PUB:ExecSql" error="IGNORE">
|
|
<Arg name="SqlCmd" value="UpdCapdskinf2"/>
|
|
</Exec>
|
|
<If condition="~RetCod<0">
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg="数据库错误"</Set>
|
|
<Break/>
|
|
</If>
|
|
|
|
<!--所有参数由节点RTR_IN传进路由-->
|
|
<Set>RTR_IN.DSK_NAM=$DSK_NAM</Set>
|
|
<!--生成文件-->
|
|
<Call package="DISKRESULLT" function="GET_DISK_RESULT_FILE">
|
|
<Input>RTR_IN</Input>
|
|
<Output>MSG_CD|RTR_OUT</Output>
|
|
</Call>
|
|
<If condition="SUBSTR(@O.MSG_CD,4,5)!=00000">
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg=文件生成失败</Set>
|
|
<Break/>
|
|
</If>
|
|
<Set>MD5_RESULT=@O.RTR_OUT.MD5</Set>
|
|
<Set>ZIP_FIL_NAME=@O.RTR_OUT.ZIP_FIL_NAME</Set><!--压缩文件-->
|
|
<Set>END_TM=GETDATETIME(HHMISS)</Set> <!-- 交易时间 -->
|
|
<Set>END_DT=GETDATE()</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>
|
|
<Set>EVENT.DSK_NO=$DSK_NAM</Set>
|
|
<Set>EVENT.ERR_MSG=文件上传失败</Set>
|
|
<Set>EVENT.FID=$ZIP_FIL_NAME</Set>
|
|
<Set>EVT_TYP=EVT_DFS_UPLOAD_FAILURE</Set>
|
|
<Exec func="PUB:InvokeService" error="IGNORE">
|
|
<Arg name="ServiceName" value="PUSH_EVENT"/>
|
|
<Arg name='Mode' value='NOTIFY'/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!--更新批次状态为已完成(终态)-->
|
|
<Exec func="PUB:ExecSql" error="IGNORE">
|
|
<Arg name="SqlCmd" value="UpdCapdskinf"/>
|
|
</Exec>
|
|
<If condition="~RetCod<0">
|
|
<Set>Rsp_Cd=80</Set>
|
|
<Set>Rsp_Msg="数据库错误"</Set>
|
|
<Break/>
|
|
</If>
|
|
<Set>DSK_STS=4</Set>
|
|
<Exec func="PUB:CommitWork"/>
|
|
|
|
<!--调用HRO送盘接口-->
|
|
|
|
<Set>DISK_NO=$DSK_NO</Set>
|
|
<If condition="IS_EQUAL_STRING($DSK_STS,9)">
|
|
<Set>DISK_STS=4</Set>
|
|
</If>
|
|
<ElseIf condition="IS_EQUAL_STRING($DSK_STS,4)">
|
|
<Set>DISK_STS=3</Set>
|
|
</ElseIf>
|
|
<Else>
|
|
<Set>DISK_STS=2</Set>
|
|
</Else>
|
|
<Set>DISK_MESSAGE=$DISK_MESSAGE</Set>
|
|
<Set>LAST_DATE=SUBSTR($TM_SMP,0,8)</Set>
|
|
<Set>LAST_TIME=SUBSTR($TM_SMP,9,6)</Set>
|
|
<Set>TOTAL_COUNT=$ORN_CNT</Set>
|
|
<Set>TOTAL_AMOUNT=FMUL($ORN_AMT,100,0)</Set>
|
|
<Set>SUCC_COUNT=$SUC_CNT</Set>
|
|
<Set>SUCC_AMOUNT=FMUL($SUC_AMT,100,0)</Set>
|
|
<Set>FAIL_COUNT=$FAL_CNT</Set>
|
|
<Set>FAIL_AMOUNT=FMUL($FAL_AMT,100,0)</Set>
|
|
<Set>FILE_PATH=$FILE_ID</Set>
|
|
<Set>MD5=$MD5_RESULT</Set>
|
|
|
|
<!--风控累计金额去除失败的部分-->
|
|
<Set>TXN_DT=$ORD_DT</Set>
|
|
<Set>TXN_AMT=FDIV($FAIL_AMOUNT,100,2)</Set>
|
|
<Set>TXN_COUNT=$FAIL_COUNT</Set>
|
|
<Set>CUSTOMER_ID=$CUSTOMER_ID</Set>
|
|
<Call package="SUMLMTRLR" function="DEL_SUMLMTRLR">
|
|
<Input>TXN_DT|TXN_AMT|TXN_COUNT|CUSTOMER_ID</Input>
|
|
<Output>MSG_CD|RTR_OUT</Output>
|
|
</Call>
|
|
<!--调用HRO送盘接口-->
|
|
<Exec func="PUB:CallThirdComm" error="IGNORE">
|
|
<Arg name="HTxnCd" value="diskNotify"/>
|
|
<Arg name="ObjSvr" value="SCAHRO3"/>
|
|
</Exec>
|
|
|
|
<!--删除关键域避免重复-->
|
|
<Delete>DISK_NO</Delete>
|
|
<Delete>DISK_STS</Delete>
|
|
<Delete>DISK_MESSAGE</Delete>
|
|
<Delete>LAST_DATE</Delete>
|
|
<Delete>LAST_TIME</Delete>
|
|
<Delete>TOTAL_COUNT</Delete>
|
|
<Delete>TOTAL_AMOUNT</Delete>
|
|
<Delete>SUCC_COUNT=</Delete>
|
|
<Delete>SUCC_AMOUNT</Delete>
|
|
<Delete>FAIL_COUNT</Delete>
|
|
<Delete>FAIL_AMOUNT</Delete>
|
|
<Delete>FILE_PATH</Delete>
|
|
<Delete>MD5</Delete>
|
|
<Delete>MD5_RESULT</Delete>
|
|
<Delete>END_TM</Delete>
|
|
<Delete>END_DT</Delete>
|
|
<Delete>OUT_DAT</Delete>
|
|
|
|
|
|
<Set>Rsp_Cd=00</Set>
|
|
<Set>Rsp_Msg=交易成功</Set>
|
|
</FlowCtrl>
|
|
</Transaction>
|
|
</Tran>
|