Files
2021-04-06 16:58:42 +08:00

312 lines
12 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Package>
<!-- 单笔代收付错误码转换 -->
<Function name="CAP_SIG_CSW">
<Input>CSW_TYP|CAP_TYP|CORG_NO|TRSP_CD|TRSP_MSG|</Input>
<Output>DST_RSP_CD|DST_RSP_MSG|DST_TXN_STS|</Output>
<DynSentence name="SleDftRspCd"> <!--默认错误码 -->
<Sentence>
SELECT RSP_CD DFT_RSP_CD,RSP_MSG DFT_RSP_MSG,'T' AS DST_TXN_STS FROM CAPCODEINF
WHERE RUL_TYP=?
AND CAP_TYP=?
AND IS_DFT='1'
</Sentence>
<Fields>RUL_TYP|CAP_TYP|</Fields>
</DynSentence>
<DynSentence name="QRYBYRSPCD"> <!--错误码匹配 -->
<Sentence>
SELECT DST_RSP_CD ,DST_RSP_MSG ,DST_TXN_STS FROM CAPCSWRULE
WHERE RUL_TYP=?
AND CAP_TYP=?
AND CORG_NO=?
AND CSW_TYP='0'
AND SRC_RSP_CD=?
AND ROWNUM='1'
</Sentence>
<Fields>RUL_TYP|CAP_TYP|CORG_NO|SRC_RSP_CD|</Fields>
</DynSentence>
<DynSentence name="QRYBYRSPMSG"> <!--错误信息完全匹配 -->
<Sentence>
SELECT DST_RSP_CD ,DST_RSP_MSG ,DST_TXN_STS FROM CAPCSWRULE
WHERE RUL_TYP=?
AND CAP_TYP=?
AND CORG_NO=?
AND CSW_TYP='1'
AND SRC_RSP_MSG=?
AND ROWNUM='1'
</Sentence>
<Fields>RUL_TYP|CAP_TYP|CORG_NO|SRC_RSP_MSG|</Fields>
</DynSentence>
<DynSentence name="QRYBYRSPMSGBLUR"> <!--错误信息模糊匹配 -->
<Sentence>
SELECT DST_RSP_CD ,DST_RSP_MSG ,DST_TXN_STS FROM CAPCSWRULE
WHERE RUL_TYP=?
AND CAP_TYP=?
AND CORG_NO=?
AND CSW_TYP='2'
AND ? LIKE '%'||SRC_RSP_MSG||'%'
AND ROWNUM='1'
</Sentence>
<Fields>RUL_TYP|CAP_TYP|CORG_NO|SRC_RSP_MSG|</Fields>
</DynSentence>
<Process>
<!-- 取出RTR_IN节点参数 -->
<Set>RUL_TYP=BIS</Set><!-- 转码规则类型 -->
<Set>SRC_RSP_CD=$TRSP_CD</Set><!-- 来源错误码 -->
<Set>SRC_RSP_MSG=$TRSP_MSG</Set><!-- 来源错误信息 -->
<!-- 预置默认错误码 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="SleDftRspCd" />
</Exec>
<!--错误码匹配 -->
<If condition="IS_EQUAL_STRING($CSW_TYP,0)">
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRYBYRSPCD" />
</Exec>
<If condition="~RetCod=2">
<Set>DST_RSP_CD=$DFT_RSP_CD</Set>
<Set>DST_RSP_MSG=$DFT_RSP_MSG</Set>
<Set>DST_TXN_STS=$DST_TXN_STS</Set>
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=数据库错误</Set>
<Return/>
</ElseIf>
</If>
<Else>
<!--错误信息完全匹配 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRYBYRSPMSG" />
</Exec>
<If condition="~RetCod=2">
<!--错误信息模糊匹配 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRYBYRSPMSGBLUR" />
</Exec>
<If condition="~RetCod=2">
<Set>DST_RSP_CD=$DFT_RSP_CD</Set>
<Set>DST_RSP_MSG=$DFT_RSP_MSG</Set>
<Set>DST_TXN_STS=$DST_TXN_STS</Set>
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=数据库错误</Set>
<Return/>
</ElseIf>
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=数据库错误</Set>
<Return/>
</ElseIf>
</Else>
</Process>
</Function>
<!-- 批量代收付错误码转换 -->
<Function name="CAP_BAT_CSW">
<Input>RUL_TYP|CAP_TYP|CORG_NO|CSW_TYP|ORD_DT|CORG_DSK_NO|</Input>
<Output></Output>
<DynSentence name="UpdRspCd">
<Sentence>
UPDATE CAPTXNJNL A
SET RSP_CD=''
WHERE A.ORD_DT=?
AND A.CORG_NO=?
AND A.CORG_DSK_NO=?
AND A.DSK_NAM_STS='4'
</Sentence>
<Fields>ORD_DT|CORG_NO|CORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="SleDftRspCd"> <!--默认错误码 -->
<Sentence>
SELECT RSP_CD DFT_RSP_CD,RSP_MSG DFT_RSP_MSG FROM CAPCODEINF
WHERE RUL_TYP=?
AND CAP_TYP=?
AND IS_DFT='1'
</Sentence>
<Fields>RUL_TYP|CAP_TYP|</Fields>
</DynSentence>
<DynSentence name="UpdRspCdByCd"> <!--以错误码匹配更新流水 -->
<Sentence>
UPDATE CAPTXNJNL A
SET (RSP_CD,RSP_MSG)
=(SELECT DST_RSP_CD,DST_RSP_MSG FROM CAPCSWRULE B
WHERE B.RUL_TYP=? AND B.CAP_TYP=? AND B.CORG_NO=A.CORG_NO AND CSW_TYP='0' AND B.SRC_RSP_CD=A.TRSP_CD AND ROWNUM='1')
WHERE A.ORD_DT=?
AND A.CORG_NO=?
AND A.CORG_DSK_NO=?
AND A.DSK_NAM_STS='4'
AND NVL(LENGTH(TRIM(A.RSP_CD)),0) = 0
</Sentence>
<Fields>RUL_TYP|CAP_TYP|ORD_DT|CORG_NO|CORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="UpdDftRspCd"> <!--更新默认错误码 -->
<Sentence>
UPDATE CAPTXNJNL A
SET RSP_CD=?,RSP_MSG=replace(SUBSTR(TRSP_MSG,1,100),'#','')
WHERE A.ORD_DT=?
AND A.CORG_NO=?
AND A.CORG_DSK_NO=?
AND A.DSK_NAM_STS='4'
AND NVL(LENGTH(TRIM(A.RSP_CD)),0) = 0
</Sentence>
<Fields>DFT_RSP_CD|ORD_DT|CORG_NO|CORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="UpdRspCdByMsg"> <!--以错误信息匹配更新流水 -->
<Sentence>
UPDATE CAPTXNJNL A
SET (RSP_CD,RSP_MSG)
=(SELECT DST_RSP_CD,DST_RSP_MSG FROM CAPCSWRULE B
WHERE B.RUL_TYP=? AND B.CAP_TYP=? AND B.CORG_NO=A.CORG_NO AND CSW_TYP='1' AND B.SRC_RSP_MSG=A.TRSP_MSG AND ROWNUM='1')
WHERE A.ORD_DT=?
AND A.CORG_NO=?
AND A.CORG_DSK_NO=?
AND A.DSK_NAM_STS='4'
AND NVL(LENGTH(TRIM(A.RSP_CD)),0) = 0
</Sentence>
<Fields>RUL_TYP|CAP_TYP|ORD_DT|CORG_NO|CORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="Cnt_UupdCt">
<Sentence>
SELECT COUNT(*) UupdCt FROM CAPTXNJNL
WHERE ORD_DT=?
AND CORG_NO=?
AND CORG_DSK_NO=?
AND DSK_NAM_STS='4'
AND NVL(LENGTH(TRIM(RSP_CD)),0) = 0
</Sentence>
<Fields>ORD_DT|CORG_NO|CORG_DSK_NO|</Fields>
</DynSentence>
<DynSentence name="SleSrcMsg"> <!--查询模糊错误信息 -->
<Sentence>
SELECT SRC_RSP_MSG FROM CAPCSWRULE
WHERE RUL_TYP=?
AND CAP_TYP=?
AND CORG_NO=?
AND CSW_TYP='2'
</Sentence>
<Fields>RUL_TYP|CAP_TYP|CORG_NO|</Fields>
</DynSentence>
<DynSentence name="UpdRspCdByMsg2"> <!--以错误信息匹配更新流水 -->
<Sentence>
UPDATE CAPTXNJNL A
SET (RSP_CD,RSP_MSG)
=(SELECT DST_RSP_CD,DST_RSP_MSG FROM CAPCSWRULE B
WHERE B.RUL_TYP=? AND B.CAP_TYP=? AND B.CORG_NO=A.CORG_NO AND B.SRC_RSP_MSG=?)
WHERE A.ORD_DT=?
AND A.CORG_NO=?
AND A.CORG_DSK_NO=?
AND A.DSK_NAM_STS='4'
AND NVL(LENGTH(TRIM(A.RSP_CD)),0) = 0
AND A.TRSP_MSG LIKE '%%s%'
</Sentence>
<Fields>RUL_TYP|CAP_TYP|SRC_RSP_MSG|ORD_DT|CORG_NO|CORG_DSK_NO|SRC_RSP_MSG|</Fields>
</DynSentence>
<Process>
<!-- 取出RTR_IN节点参数 -->
<Set>RUL_TYP=$RUL_TYP</Set><!-- 转码规则类型 -->
<Set>CAP_TYP=$CAP_TYP</Set><!-- 交易类型 -->
<Set>CORG_NO=$CORG_NO</Set><!-- 合作机构号 -->
<Set>CSW_TYP=$CSW_TYP</Set><!-- 匹配类型 -->
<Set>ORD_DT=$ORD_DT</Set>
<Set>CORG_DSK_NO=$CORG_DSK_NO</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdRspCd" />
</Exec>
<If condition="~RetCod!=0">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=更新流水错误码失败</Set>
<Return/>
</If>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="SleDftRspCd" />
</Exec>
<If condition="IS_EQUAL_STRING($CSW_TYP,0)"><!-- 错误码匹配 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdRspCdByCd" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=更新流水错误码失败</Set>
<Return/>
</If>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdDftRspCd" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=更新流水错误码失败</Set>
<Return/>
</If>
</If>
<Else>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdRspCdByMsg" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=更新流水错误码失败</Set>
<Return/>
</If>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="Cnt_UupdCt" />
</Exec>
<If condition="INTCMP($UupdCt,4,0)"><!-- 4!= -->
<Exec func="PUB:OpenCursor" error="IGNORE">
<Arg name="SqlCmd" value="SleSrcMsg"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=打开游标失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</If>
<While>
<Exec func="PUB:FetchCursor" error="IGNORE"/>
<If condition="~RetCod=2">
<Exec func="PUB:CloseCursor"/>
<Break/>
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=循环游标失败</Set>
<Exec func="PUB:RollbackWork"/>
<Return/>
</ElseIf>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdRspCdByMsg2" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=更新流水错误码失败</Set>
<Return/>
</If>
</While>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="Cnt_UupdCt" />
</Exec>
<If condition="INTCMP($UupdCt,4,0)"><!-- 4!= -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdDftRspCd" />
</Exec>
<If condition="~RetCod=-1">
<Set>Rsp_Cod=80</Set>
<Set>Rsp_Inf=更新流水错误码失败</Set>
<Return/>
</If>
</If>
</If>
</Else>
</Process>
</Function>
</Package>