Files
2021-01-12 22:04:24 +08:00

239 lines
9.1 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Application name="lps" trace="yes">
<!--换卡圈存冲正-->
<Transaction code="2141039" log_switch="1">
<!--查询换卡圈存记录-->
<DynSentence name="QRY_LPSTEMK_EMKAMT">
<Sentence>
SELECT TX_AMT EMK_AMT,ORD_NO,EMK_STS,POST_AC_DT
FROM LPSTEMK
WHERE SUB_AC=? AND POS_TRM=? AND POS_JRN=? AND TX_DT=? AND TX_TM=? AND EMK_TYP='P' AND EMK_STS='0'
</Sentence>
<Fields>SUB_AC|POS_TRM|POS_JRN|TX_DT|TX_TM|</Fields>
</DynSentence>
<!-- 查询用户用户号 -->
<DynSentence name="QRY_LPSTCRD_USRNO">
<Sentence>
SELECT USR_NO,CRD_EMK_SEQ PRE_EMK_SEQ,CRD_VER,MAIN_AC FROM LPSTCRD WHERE SUB_AC=? AND CRD_STS!='2'
</Sentence>
<Fields>SUB_AC|</Fields>
</DynSentence>
<!-- 更新圈存记录表处理结果 -->
<DynSentence name="UPD_LPSTEMK_EMKSTS">
<Sentence>
UPDATE LPSTEMK
SET EMK_STS=? ,PPD_RVS_DT=?,PPD_RVS_TM=?,TM_SMP=?
WHERE POS_TRM=? AND POS_TRM_SEQ=? AND POS_JRN=? AND TX_DT=? AND TX_TM=? AND SUB_AC=? AND EMK_STS!='4'
</Sentence>
<Fields>EMK_STS|GWA.TX_DT|GWA.TX_TM|SYS_TM_SMP|POS_TRM|POS_TRM_SEQ|POS_JRN|TX_DT|TX_TM|SUB_AC|</Fields>
</DynSentence>
<!-- 更新卡余额处理结果 -->
<DynSentence name="UPD_LPSTBAL_RSL">
<Sentence>
UPDATE LPSTBAL SET PROC_RSL=?,HLD_NO=?,PROC_DT=?,PROC_TM=?,TM_SMP=? WHERE TX_TYP='C' AND MAIN_AC=? AND ORD_NO=?
</Sentence>
<Fields>PROC_RSL|@O.M_UHD_OUT.HLD_NO|GWA.TX_DT|GWA.TX_TM|SYS_TM_SMP|MAIN_AC|ORD_NO|</Fields>
</DynSentence>
<!-- 更新卡片圈存序号 -->
<DynSentence name="UPD_LPSTCRD_EMKSEQ">
<Sentence>
UPDATE LPSTCRD SET CRD_EMK_SEQ=?,TM_SMP=? WHERE SUB_AC=?
</Sentence>
<Fields>CRD_EMK_SEQ|SYS_TM_SMP|SUB_AC|</Fields>
</DynSentence>
<FlowCtrl>
<!-- 金额类型转换 -->
<Set>TX_AMT=TOUPPER(ADDCHAR(DEC2HEX($TX_AMT),8,0,1))</Set>
<Set>REAL_TX_AMT=AMTSIMPLEFMT(HEX2DEC($TX_AMT))</Set>
<Set>REAL_CRD_BAL=AMTSIMPLEFMT(HEX2DEC($CRD_BAL))</Set>
<!-- 验证报文MAC -->
<Call package="LPS_PUB" function="CheckPOSTransactionMAC">
<Input>SUB_AC|RDM_NO1|CRD_BAL|TX_AMT|POS_TRM_ID|CRD_EMK_SEQ|MAC1|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000)">
<Set>~MSG_DAT=验证报文MAC失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 查询用户用户号 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_LPSTCRD_USRNO"/>
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20055"/>
<Arg name="MsgDat" value="用户尚未开通手机钱包"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001"/>
<Arg name="MsgDat" value="数据库操作出错"/>
</Exec>
<Return/>
</ElseIf>
<!--查询换卡圈存金额-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_LPSTEMK_EMKAMT"/>
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
<Arg name="MsgDat" value="原换卡圈存交易记录扣款失败,无需冲正"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001"/>
<Arg name="MsgDat" value="数据库操作出错"/>
</Exec>
<Return/>
</ElseIf>
<!--判断冲正金额与记录金额是否相等-->
<If condition="DOUBLECMP($EMK_AMT,4,$REAL_TX_AMT)">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20100"/>
<Arg name="MsgDat" value="冲正金额与原交易金额不相等"/>
</Exec>
<Return/>
</If>
<!--换卡圈存冲正账务处理 开始-->
<!--子账户存入冲正-->
<Set>S_ADC.OLD_APP_SEQ_NO=$SUB_AC</Set>
<Set>S_ADC.OLD_CAP_TYP=1</Set>
<Set>S_ADC.OLD_AMT=$REAL_TX_AMT</Set>
<Set>S_ADC.OLD_JRN_NO=$ORD_NO</Set>
<Set>S_ADC.OLD_AC_DT=$POST_AC_DT</Set>
<Exec func="ACM:PurseAccountDepositCancel">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="S_ADC"/>
<Arg name="_O_OUT_DAT" value="S_ADC_OUT"/>
</Exec>
<Exec func="PUB:DumpDs"/>
<If condition="NOT(IS_SUCC(@O.MSG_CD))"> <!--子账户存入冲正失败 -->
<Set>~MSG_DAT=子账户存入冲正失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 主账户支取冲正 -->
<Set>M_AWC.OLD_AC_NO=$MAIN_AC</Set>
<Set>M_AWC.OLD_CAP_TYP=1</Set>
<Set>M_AWC.OLD_AMT=$REAL_TX_AMT</Set>
<Set>M_AWC.OLD_JRN_NO=$ORD_NO</Set>
<Set>M_AWC.OLD_AC_DT=$POST_AC_DT</Set>
<Exec func="ACM:MainAccountWithdrawCancel">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="M_AWC"/>
<Arg name="_O_OUT_DAT" value="M_AWC_OUT"/>
</Exec>
<Exec func="PUB:DumpDs"/>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_DAT=主账户支取冲正失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 主账户冻结 -->
<Set>HAC_IN.AC_NO=$MAIN_AC</Set>
<Set>HAC_IN.CAP_TYP=1</Set>
<Set>HAC_IN.HLD_AMT=$REAL_TX_AMT</Set>
<Set>HAC_IN.HLD_CD=BD</Set>
<Set>HAC_IN.DESC=卡片换卡圈存</Set>
<Set>HAC_IN.ORD_TYP=05</Set>
<Set>HAC_IN.ORD_NO=$GWA.JRN_NO</Set>
<Set>HAC_IN.PAY_FLG=N</Set>
<Set>HAC_IN.TX_OPP_TYP=1</Set>
<Set>HAC_IN.TX_AMT=$REAL_TX_AMT</Set>
<Set>HAC_IN.VCH_NO_TYP=0</Set>
<Set>HAC_IN.VCH_NO=$GWA.JRN_NO</Set>
<Set>HAC_IN.TX_DT=$GWA.TX_DT</Set>
<Set>HAC_IN.TX_TM=$GWA.TX_TM</Set>
<Set>HAC_IN.TX_CD=$GWA.TX_CD</Set>
<Set>HAC_IN.TX_TYP=07</Set>
<Set>HAC_IN.BUS_TYP=HBD0</Set>
<Exec func="ACM:HoldAccount">
<Arg name="_I_GWA" value="GWA" />
<Arg name="_I_INP_DAT" value="HAC_IN" />
<Arg name="_O_OUT_DAT" value="M_UHD_OUT" />
</Exec>
<Exec func="PUB:DumpDS" />
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
</Exec>
<Return/>
</If>
<!-- 换卡圈存冲正账务处理 结束 -->
<!--更新圈存记录表状态为冲正-->
<Set>EMK_STS=1</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_LPSTEMK_EMKSTS"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20101"/>
<Arg name="MsgDat" value="更新原卡片圈存记录状态失败"/>
</Exec>
<Return/>
</If>
<!--更新卡余额处理状态以及冻结编号-->
<Set>PROC_RSL=C</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_LPSTBAL_RSL"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20098"/>
<Arg name="MsgDat" value="更新卡片余额信息失败"/>
</Exec>
<Return/>
</If>
<!--更新卡片联机交易序号-->
<Set>CRD_EMK_SEQ=ADDCHAR(DEC2HEX(SUB(HEX2DEC($PRE_EMK_SEQ),1)),4,0,1)</Set> <!--写卡失败圈存序号减一-->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_LPSTCRD_EMKSEQ"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20093"/>
<Arg name="MsgDat" value="更新卡片联机交易序号失败"/>
</Exec>
<Return/>
</If>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
</Exec>
</FlowCtrl>
</Transaction>
</Application>