明细对账单补偿机制

This commit is contained in:
Alawn
2023-05-26 14:29:37 +08:00
parent 7fb53cf469
commit 6e1fff4ed2
+277 -8
View File
@@ -65,7 +65,7 @@
</Sentence>
<Fields>ACC_NBR|TRS_DAT|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCMBHIJNL_RFDSKNO"> <!--更新7日内隔日退款流水批次信息 -->
<Sentence>
UPDATE CAPCMBHIJNL A
@@ -75,11 +75,11 @@
NVL((SELECT DSK_NAM
FROM CAPBATINF B
WHERE B.CORG_DSK_NO=A.YUR_REF
),' ')
),' ')
WHERE ACC_NBR=? AND TRS_DAT BETWEEN ? AND ? AND A.YUR_REF!=' ' AND TRS_COD='AGRD' AND DSK_NAM=' '
</Sentence>
<Fields>ACC_NBR|RF_TRS_DAT|TRS_DAT|</Fields>
</DynSentence>
</DynSentence>
<FlowCtrl>
<Delete>TRSP_CD</Delete>
<Delete>TRSP_MSG</Delete>
@@ -248,7 +248,7 @@
<Return/>
</If>
<Set>RF_TRS_DAT=CALCDATE($TRS_DAT,-,d,7)</Set>
<Set>RF_TRS_DAT=CALCDATE($TRS_DAT,-,d,7)</Set>
<!--根据小批号关联流水更新隔日退款交易大批号-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPCMBHIJNL_RFDSKNO"/>
@@ -993,19 +993,19 @@
<DynSentence name="UPD_CAPCMBHIJNL">
<Sentence>
UPDATE CAPCMBHIJNL
SET BIL_RPT_STS='1',BIL_SND_TM=?,BIL_PRT_ID=?,BIL_TOT_CNT=?
SET BIL_RPT_STS='1',BIL_SND_TM=?,BIL_SND_DT=?,BIL_PRT_ID=?,BIL_TOT_CNT=?
WHERE ACC_NBR=? AND TRS_DAT=? AND REF_NBR=? AND BIL_RPT_STS='0'
</Sentence>
<Fields>BIL_SND_TM|BIL_PRT_ID|BIL_TOT_CNT|ACC_NBR|TRS_DAT|REF_NBR|</Fields>
<Fields>BIL_SND_TM|CHK_DAT_TMP|BIL_PRT_ID|BIL_TOT_CNT|ACC_NBR|TRS_DAT|REF_NBR|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCMBHIJNL_FAIL">
<Sentence>
UPDATE CAPCMBHIJNL
SET BIL_RPT_STS='5',BIL_SND_TM=?
SET BIL_RPT_STS='5',BIL_SND_TM=?,BIL_SND_DT=?
WHERE ACC_NBR=? AND TRS_DAT=? AND REF_NBR=? AND BIL_RPT_STS='0'
</Sentence>
<Fields>BIL_SND_TM|ACC_NBR|TRS_DAT|REF_NBR|</Fields>
<Fields>BIL_SND_TM|CHK_DAT_TMP|ACC_NBR|TRS_DAT|REF_NBR|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCMBJNLTOT">
@@ -2324,4 +2324,273 @@
</FlowCtrl>
</Transaction>
<!-- 补偿交易 招行代发明细对账单获取 并上传-->
<Transaction code="REGET_CMBBILL" log_switch='1' timeout="3600" desc="招行明细对账单申请">
<Attributes>
<Attribute name="nodatabase" value="2"/> <!--数据库长连接-->
</Attributes>
<!-- 待补充 申请后两分钟再进行文件查询下载-->
<DynSentence name="QRY_CAPCMBHIJNL_INF">
<Sentence>
SELECT ACC_NBR,TRS_DAT,YUR_REF,REF_NBR,BIL_PRT_ID
FROM CAPCMBHIJNL
WHERE ACC_NBR=? AND TRS_DAT=? AND (BIL_SND_TM &lt;=?) AND BIL_RPT_STS='1'
</Sentence>
<Fields>ACC_NBR|TRS_DAT|C_SND_TIME|</Fields>
</DynSentence>
<DynSentence name="QRY_CAPCMBHIJNL_CNT">
<Sentence>
SELECT COUNT(*) UNCONT
FROM CAPCMBHIJNL
WHERE ACC_NBR=? AND TRS_DAT=? AND BIL_RPT_STS='1'
</Sentence>
<Fields>ACC_NBR|TRS_DAT|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCMBHIJNL">
<Sentence>
UPDATE CAPCMBHIJNL
SET BIL_RPT_STS='4',BIL_GET_TM=?,BIL_FIL_NAM=?,BIL_FIL_URL=?,BIL_FIL_ID=?,BIL_PRT_URL=?
WHERE ACC_NBR=? AND TRS_DAT=? AND REF_NBR=? AND BIL_RPT_STS='1'
</Sentence>
<Fields>BIL_GET_TM|BIL_FIL_NAM|BIL_FIL_URL|BIL_FIL_ID|BIL_PRT_URL|ACC_NBR|TRS_DAT|REF_NBR|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCMBJNLTOT">
<Sentence>
UPDATE CAPCMBJNLTOT
SET BIL_STS='4'
WHERE ACC_NBR=? AND TRS_DAT=? AND BIL_STS='1'
</Sentence>
<Fields>ACC_NBR|TRS_DAT|</Fields>
</DynSentence>
<DynSentence name="UPD_CAPCMBHIJNL_REBILSTS">
<Sentence>
UPDATE CAPCMBHIJNL
SET BIL_RPT_STS='0'
WHERE ACC_NBR=? AND TRS_DAT=? AND REF_NBR=? AND BIL_RPT_STS='1'
</Sentence>
<Fields>ACC_NBR|TRS_DAT|REF_NBR|</Fields>
</DynSentence>
<Function name="_before">
<Process>
<Exec func="PUB:DumpETF"/>
<Set>LockKey=STRCAT($TXN_CD,$ACC_NBR)</Set>
<!-- 应用加锁,防止并发 -->
<Exec func="PUB:Lock" error="IGNORE">
<Arg name="RecKey" value="$LockKey" error="IGNORE"/>
<Arg name="TimOut" value="600" />
<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" error="IGNORE">
<Arg name="RecKey" value="$LockKey" />
</Exec>
<Exec func="PUB:DumpETF"/>
</If>
</Process>
</Function>
<FlowCtrl>
<Delete>TRSP_CD</Delete>
<Delete>TRSP_MSG</Delete>
<Quote name="Batch_Cfg_CMB"/>
<Set>ACC_NBR=$ACC_NBR</Set>
<Set>trs_dat=$trs_dat</Set>
<Set>CHK_DAT_TMP=GETDATE()</Set>
<Set>CHK_DAT=CALCDATE($CHK_DAT_TMP,-,d,1)</Set>
<If condition="ISNULL($trs_dat)">
<Set>trs_dat=$CHK_DAT</Set>
</If>
<If condition="ISNULL($SND_TIME_INTERVAL)">
<Set>SND_TIME_INTERVAL=2</Set>
</If>
<Set>C_SND_TIME=CALCTIME(GETDATETIME(MMDDHHMISS),-,m,$SND_TIME_INTERVAL)</Set>
<!--读取需要获取文件地址 -->
<Exec func="PUB:OpenCursor" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPCMBHIJNL_INF"/>
<Arg name="CursorName" value="CURSOR_2"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=游标查询失败</Set>
<Return/>
</If>
<While>
<Exec func="PUB:FetchCursor" error="IGNORE">
<Arg name="CursorName" value="CURSOR_2"/>
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:CloseCursor" error="IGNORE">
<Arg name="CursorName" value="CURSOR_2"/>
</Exec>
<Break/>
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=循环游标失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</ElseIf>
<Delete>RESULTCODE</Delete>
<Delete>RESULTMSG</Delete>
<Delete>fileurl</Delete>
<Delete>fintim</Delete>
<Set>TM_SMP=GETDATETIME()</Set>
<Set>BIL_GET_TM=$TM_SMP</Set>
<Set>TX_COD=DCTASKID</Set><!--查询交易码-->
<Set>reqid=STRCAT($TM_SMP,002,$YUR_REF)</Set>
<Set>taskid=$BIL_PRT_ID</Set>
<Set>userid=$PARA.USERID</Set>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="$TX_COD"/>
<Arg name="ObjSvr" value="SCMBPAY2"/>
</Exec>
<If condition="~RetCod !=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=获取文件失败</Set>
<Return/>
</If>
<Set>RESULTCODE=$RESULTCODE</Set>
<If condition="ISNULL($RESULTCODE)">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=$RESULTMSG</Set>
<Return/>
</If>
<ElseIf condition="IS_NOEQUAL_STRING($RESULTCODE,SUC0000)">
<If condition="IS_NOEQUAL_STRING($RESULTCODE,PRTASYNC)">
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPCMBHIJNL_REBILSTS"/>
</Exec>
<Exec func="PUB:CommitWork"/>
</If>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=$RESULTMSG</Set>
<Return/>
</ElseIf>
<Set>FIL_URL=$fileurl</Set>
<Set>FIN_TIM=$fintim</Set>
<Set>BIL_PRT_URL=$FIL_URL</Set>
<If condition="ISNULL($FIL_URL)">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=查询结果异常继续下一笔</Set>
<Continue/>
</If>
<Set>FIL_DIR=STRCAT(/home/capadm/dat/receipt/cmb,/,$TRS_DAT,/,$ACC_NBR,/)</Set>
<Set>BIL_FIL_NAM=STRCAT($ACC_NBR,_,$TRS_DAT,_,$YUR_REF,.,zip)</Set>
<Set>SHELL_NAME=STRCAT(/home/capadm/app/cap/etc/common/shell/,downloadCMBBILL.sh)</Set>
<Exec func="PUB:SystemAndWait" error="IGNORE">
<Arg name="cmd" value="$SHELL_NAME"/>
<Arg name="FILE_URL" value="$FIL_URL"/>
<Arg name="FILE_PATH" value="$FIL_DIR"/>
<Arg name="FILE_NAME" value="$BIL_FIL_NAM"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=下载文件失败</Set>
<Exec func="PUB:RollbackWork" />
<Return/>
</If>
<Set>FILE_NAME=STRCAT($FIL_DIR,$BIL_FIL_NAM)</Set>
<Call package="UPLOAD_FILE" function="UPLOAD_FILE">
</Call>
<Set>BIL_FIL_URL=$OUT_DAT.FILE_URL</Set>
<Set>BIL_FIL_ID=$OUT_DAT.FILE_ID</Set>
<If condition="ISNULL($BIL_FIL_URL)">
<Set>UPD_FLG=0</Set>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=文件上传失败进行下一笔</Set>
<Continue/>
</If>
<ElseIf condition="ISNULL($BIL_FIL_ID)">
<Set>UPD_FLG=0</Set>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=文件上传失败进行下一笔</Set>
<Continue/>
</ElseIf>
<!--更新明细对账单信息-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPCMBHIJNL"/>
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=更新数据失败</Set>
<Return/>
</If>
<Exec func="PUB:CommitWork"/>
</While>
<Exec func="PUB:CloseCursor" error="IGNORE"> <!-- 关闭游标 -->
<Arg name="CursorName" value="CURSOR_2"/>
</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="QRY_CAPCMBHIJNL_CNT"/>
</Exec>
<If condition='~RetCod!=0'>
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=数据库错误</Set>
<Return/>
</If>
<!--判断账户当日 回单是否已经发送成功,如果成功则更新状态为全部发送,否则不进行更新-->
<If condition="IS_EQUAL_STRING($UNCONT,0)">
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_CAPCMBJNLTOT"/>
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg=登记明细信息表失败</Set>
<Exec func="PUB:RollbackWork" />
<Return/>
</If>
</If>
<Exec func="PUB:CommitWork"/>
<Delete>TRS_DAT</Delete>
<Delete>ACC_NBR</Delete>
<!-- 交易成功 -->
<Set>RSP_CD=00</Set>
<Set>RSP_MSG=交易成功</Set>
</FlowCtrl>
</Transaction>
</Tran>