355 lines
14 KiB
XML
355 lines
14 KiB
XML
<?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>
|