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

355 lines
14 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version='1.0' encoding='UTF-8'?>
<Application name="lps" trace="yes">
<!--消费撤销(POS)-->
<Transaction code="2111010" log_switch="1">
<!-- 验证卡片合法性 -->
<DynSentence name="CHK_LPSTCRD_INFO">
<Sentence>
SELECT CRD_EMK_SEQ PRE_EMK_SEQ,CRD_TX_SEQ PRE_TX_SEQ,CRD_STS,USR_NO,MAIN_AC,CRD_STSW,MBL_NO
FROM LPSTCRD
WHERE SUB_AC=?
</Sentence>
<Fields>SUB_AC|</Fields>
</DynSentence>
<!-- 查询此笔订单是否已经清分 -->
<DynSentence name="QRY_LPSTOFP_RSL">
<Sentence>
SELECT PROC_RSL
FROM LPSTOFP
WHERE SUB_AC=? AND MERC_ID=? AND POS_TRM=? AND POS_TRM_SEQ=? AND POS_JRN=? AND TRM_TX_DT=? AND TRM_TX_TM=?
</Sentence>
<Fields>SUB_AC|OCSM_MERC|OCSM_POS_TRM|POS_TRM_SEQ|OCSM_POS_JRN|OCSM_TRM_DT|OCSM_TRM_TM|</Fields>
</DynSentence>
<!-- 更新消费撤销记录状态 -->
<DynSentence name="UPD_LPSTRVS_BILSTS">
<Sentence>
UPDATE LPSTRVS SET BIL_STS=?,TM_SMP=?,MSG_CD='LPS00000' WHERE JRN_NO=?
</Sentence>
<Fields>BIL_STS|SYS_TM_SMP|JRN_NO|</Fields>
</DynSentence>
<!-- 更新消费撤销记录具体错误信息码 -->
<DynSentence name="UPD_LPSTRVS_MSGCD">
<Sentence>
UPDATE LPSTRVS SET MSG_CD=?,TM_SMP=? WHERE JRN_NO=?
</Sentence>
<Fields>GWA.MSG_CD|SYS_TM_SMP|JRN_NO|</Fields>
</DynSentence>
<!-- 检查此笔订单是否平台已记录并且撤销成功 -->
<DynSentence name="CHK_LPSTRVS_INFO">
<Sentence>
SELECT JRN_NO
FROM LPSTRVS
WHERE SUB_AC=? AND OCSM_MERC=? AND OCSM_POS_TRM=? AND OCSM_POS_JRN=? AND OCSM_TRM_DT=? AND OCSM_TRM_TM=? AND RVS_FLG='C' AND BIL_STS='1'
</Sentence>
<Fields>SUB_AC|OCSM_MERC|OCSM_POS_TRM|OCSM_POS_JRN|OCSM_TRM_DT|OCSM_TRM_TM|</Fields>
</DynSentence>
<FlowCtrl>
<!--验证交易TAC-->
<If condition="NOT(ISNULL($TAC_BLOCK))">
<Set>TAC_CRD_OWN_FLG=SUBSTR($TAC_BLOCK,1,16)</Set>
<Set>TAC_MK_IDX=SUBSTR($TAC_BLOCK,17,2)</Set>
<Set>TAC_MK_VER=SUBSTR($TAC_BLOCK,19,2)</Set>
<Set>TAC=SUBSTR($TAC_BLOCK,21,8)</Set>
<Set>TAC_AMT=SUBSTR($TAC_BLOCK,29,8)</Set>
<Set>TAC_POS_TX_TYP=SUBSTR($TAC_BLOCK,37,2)</Set>
<Set>TAC_OCSM_TRM=SUBSTR($TAC_BLOCK,39,12)</Set>
<Set>TAC_OCSM_TRM_SEQ=SUBSTR($TAC_BLOCK,51,8)</Set>
<Set>TAC_OTX_DT=SUBSTR($TAC_BLOCK,59,8)</Set>
<Set>TAC_OTX_TM=SUBSTR($TAC_BLOCK,67,6)</Set>
<Set>TAC_CRD_BAL=SUBSTR($TAC_BLOCK,73,8)</Set>
<!-- 验证交易TAC -->
<Call package="LPS_PUB" function="CheckTransactionTAC">
<Input>SUB_AC|TAC_AMT|TAC_POS_TX_TYP|TAC_OCSM_TRM|TAC_OCSM_TRM_SEQ|TAC_OTX_DT|TAC_OTX_TM|TAC|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))"> <!-- 生成交易TAC失败 -->
<Set>~MSG_DAT=生成交易TAC失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
</If>
<!-- 比对交易金额是否正确 -->
<Set>REAL_AMT=AMTSIMPLEFMT(HEX2DEC($TAC_AMT))</Set>
<If condition="DOUBLECMP(AMTSIMPLEFMT($TX_AMT),4,$REAL_AMT)"> <!-- 交易金额与撤销金额不相等 -->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20096"/>
<Arg name="MsgDat" value="原始金额不正确"/>
</Exec>
<Return/>
</If>
<!-- 判断卡片合法性 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="CHK_LPSTCRD_INFO"/>
</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>
<!-- 验证卡片合法性 -->
<If condition="IS_EQUAL_STRING($CRD_STS,2)"> <!-- 卡片状态为销户 -->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20055"/>
<Arg name="MsgDat" value="用户未开通手机钱包"/>
</Exec>
<Return/>
</If>
<!--用户-商户状态查询-->
<Set>INP_DAT.MERC_ID=$OCSM_MERC</Set>
<Set>INP_DAT.MERC_TX_TYP=07</Set>
<Set>INP_DAT.TX_CD=$GWA.TX_CD</Set>
<Set>INP_DAT.MERC_CAP_TYP=1</Set>
<Call package="URM_PUB" function="CHK_MER_STS">
<Input>INP_DAT|GWA|</Input>
<Output>OUT_DAT|MSG_CD|</Output>
</Call>
<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>CBL_IN.USR_NO=@O.OUT_DAT.USR_NO</Set>
<Set>CBL_IN.TX_TYP=20</Set> <!-- 退货 -->
<Exec func="RRC:ChkBlackLst">
<Arg name="_I_INP_DAT" value="CBL_IN"/>
<Arg name="_O_OUT_DAT" value="CBL_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"/>
<Arg name="MsgDat" value="商户黑名单检查失败"/>
</Exec>
<Return/>
</If>
<!-- 用户状态检查 -->
<!--用户-用户状态检查-->
<Set>INP_DAT.MBLNO_OR_LOGID=$MBL_NO</Set>
<Set>INP_DAT.TX_CD=$GWA.TX_CD</Set>
<Call package="URM_PUB" function="CHK_USER_STS">
<Input>INP_DAT|</Input>
<Output>OUT_DAT|MSG_CD|</Output>
</Call>
<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>
<!-- 检查该笔消费撤销记录是否已经进行清分 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_LPSTOFP_RSL"/>
</Exec>
<If condition="~RetCod=2"> <!-- 平台无记录(脱机消费还未上传) -->
<Set>~MSG_DAT=平台无记录,此笔消费文件还未上传</Set>
</If>
<ElseIf condition="~RetCod=0">
<If condition="IS_EQUAL_STRING($PROC_RSL,00)"> <!-- 已清分成功 -->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20076"/>
<Arg name="MsgDat" value="此笔消费已完成,不能进行撤销"/>
</Exec>
<Retrun/>
</If>
</ElseIf>
<Else>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001"/>
<Arg name="MsgDat" value="数据库操作失败"/>
</Exec>
<Return/>
</Else>
<!--查询消费撤销记录是否已经进行-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="CHK_LPSTRVS_INFO"/>
</Exec>
<If condition="~RetCod=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
<Arg name="MsgDat" value="此笔交易已完成撤销"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod!=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001"/>
<Arg name="MsgDat" value="数据库操作失败"/>
</Exec>
<Return/>
</ElseIf>
<!-- 查询商户基本信息 -->
<Set>QMI_IN.MERC_ID=$OCSM_MERC</Set>
<Exec func="URM:QueryMerchInfo">
<Arg name="_I_INP_DAT" value="QMI_IN"/>
<Arg name="_O_OUT_DAT" value="QMI_OUT"/>
</Exec>
<If condition="NOT(IS_SUCC(@O.MSG_CD))"> <!-- 查询商户信息失败 -->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 登记消费撤销记录表 -->
<!-- 消费撤销参数 -->
<Set>JRN_NO=$GWA.JRN_NO</Set>
<Set>MERC_ID=$OCSM_MERC</Set>
<Set>TX_DT=$GWA.TX_DT</Set>
<Set>TX_TM=$GWA.TX_TM</Set>
<Set>TRM_TX_DT=$OCSM_TRM_DT</Set>
<Set>TRM_TX_TM=$OCSM_TRM_TM</Set>
<Set>RVS_FLG=C</Set> <!-- 消费撤销 -->
<Set>BIL_STS=2</Set> <!-- 撤销初登记为失败状态 -->
<Set>CLR_STS=0</Set> <!-- 记录清分状态为未清分 -->
<Set>AC_DT=$GWA.AC_DT</Set> <!-- 清分会计日期 -->
<Set>OCSM_TRM=$TAC_OCSM_TRM</Set> <!-- 原终端机编号 -->
<Set>OCSM_TRM_LOG=$TAC_OCSM_TRM_SEQ</Set> <!-- 原终端机交易序号 -->
<Set>CRD_BAL=AMTSIMPLEFMT(HEX2DEC($TAC_CRD_BAL))</Set> <!-- 卡片交易余额 -->
<Set>TX_AMT=AMTSIMPLEFMT($TX_AMT)</Set>
<Set>OTX_AMT=$TX_AMT</Set> <!-- 原交易金额 -->
<Set>MSG_CD=LPS99999</Set>
<!-- 商户信息参数 -->
<Set>MERC_ABBR=@O.QMI_OUT.MERC_ABBR</Set> <!-- 商户简称 -->
<Set>CLR_MERC=@O.QMI_OUT.CLR_MERC</Set> <!-- 清算商户号 -->
<Set>MERC_PROV=@O.QMI_OUT.MERC_PROV</Set> <!-- 商户归属省 -->
<Set>MERC_CITY=@O.QMI_OUT.MERC_CITY</Set> <!-- 商户归属市 -->
<Set>MERC_CITY_NM=@O.QMI_OUT.MERC_CITY_NM</Set> <!-- 商户归属市名称 -->
<Set>TXN_ATTR=2</Set> <!-- 交易属性 0:完整收款 1 非完整 2完整退货 -->
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="LPSTRVS"/>
</Exec>
<If condition="~RetCod=1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20077"/>
<Arg name="MsgDat" value="已进行过该笔消费撤销"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=0">
<Set>~MSG_DAT=登记撤销记录表成功</Set>
</ElseIf>
<Else>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001"/>
<Arg name="MsgDat" value="数据库操作出错"/>
</Exec>
<Return/>
</Else>
<Exec func="PUB:CommitWork"/>
<!-- 账务处理-开始 -->
<!-- 调用账户-子账户支出 -->
<Set>S_PAW.USR_NO=$USR_NO</Set>
<Set>S_PAW.APP_SEQ_NO=$SUB_AC</Set>
<Set>S_PAW.CAP_TYP=1</Set>
<Set>S_PAW.AC_TYP=101</Set>
<Set>S_PAW.AMT=$OTX_AMT</Set>
<Set>S_PAW.ORD_TYP=05</Set>
<Set>S_PAW.TX_OPP_NO=$MAIN_AC</Set>
<Set>S_PAW.TX_OPP_TYP=0</Set>
<Set>S_PAW.TX_CD=2111010</Set>
<Set>S_PAW.TX_TYP=19</Set> <!-- 消费撤销 -->
<Set>S_PAW.BUS_TYP=0051</Set>
<Set>S_PAW.ORD_NO=$GWA.JRN_NO</Set>
<Exec func="ACM:PurseAccountWithdraw">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="S_PAW"/>
<Arg name="_O_OUT_DAT" value="S_PAW_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>
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_LPSTRVS_MSGCD"/>
</Exec>>
<Return/>
</If>
<!-- 调用账户-主账户存入 -->
<Set>M_MAD.AC_NO=$MAIN_AC</Set>
<Set>M_MAD.CAP_TYP=1</Set>
<Set>M_MAD.AMT=$OTX_AMT</Set>
<Set>M_MAD.ORD_TYP=05</Set>
<Set>M_MAD.TX_OPP_NO=$SUB_AC</Set>
<Set>M_MAD.MAX_CHK_FLG=N</Set> <!--主账户存入时,暂定最高限额不做检查 -->
<Set>M_MAD.TX_OPP_TYP=0</Set>
<Set>M_MAD.TX_CD=2111010</Set>
<Set>M_MAD.TX_TYP=19</Set> <!-- 消费撤销 -->
<Set>M_MAD.BUS_TYP=0051</Set>
<Set>M_MAD.ORD_NO=$GWA.JRN_NO</Set>
<Exec func="ACM:MainAccountDeposit">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="M_MAD"/>
<Arg name="_O_OUT_DAT" value="M_MAD_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>
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_LPSTRVS_MSGCD"/>
</Exec>>
<Return/>
</If>
<!-- 账务处理-结束 -->
<Set>BIL_STS=1</Set> <!-- 撤销成功 -->
<!-- 更新消费撤销记录状态 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_LPSTRVS_BILSTS"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20078"/>
<Arg name="MsgDat" value="更新消费撤销记录状态失败"/>
</Exec>
<Return/>
</If>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
</Exec>
</FlowCtrl>
</Transaction>
</Application>