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

287 lines
11 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Application name="lps" trace="yes">
<!--pos去活退订-->
<Transaction code="2130090" log_switch="1">
<DynSentence name="QRY_LPSTCRD_STSMBL"> <!--用应用序列号查询手机钱包卡的卡状态和手机号以及卡版本号-->
<Sentence>
SELECT MBL_NO,CRD_VER,CRD_STS,MAIN_AC,USR_NO
FROM LPSTCRD
WHERE SUB_AC=?
</Sentence>
<Fields>SUB_AC|</Fields>
</DynSentence>
<DynSentence name="QRY_LPSTEMK_INFO"> <!--用应用序列号查询圈存明细表是都存在未确认信息-->
<Sentence>
SELECT DISTINCT 'Y'
FROM LPSTEMK
WHERE SUB_AC=? and LAST_EMK_CMD='1' and EMK_STS='0' and EMK_TYP='S'
</Sentence>
<Fields>SUB_AC|</Fields>
</DynSentence>
<FlowCtrl>
<!-- 检查商户是否为营业厅 -->
<Call package="LPS_PUB" function="CheckMercTyp">
<Input>MERC_ID|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000)">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!--查询子账户是否存在及状态是否正常(钱包子账户注销组件件中对钱包卡的信息表及状态进行了查询)-->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_LPSTCRD_STSMBL" />
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20055"/>
<Arg name="MsgDat" value="用户未开通手机钱包"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS19999"/>
<Arg name="MsgDat" value="系统错误"/>
</Exec>
<Return/>
</ElseIf>
<!--判断子账户状态,如果子账户已销户,则直接下发销户的短信-->
<If condition="IS_EQUAL_STRING($CRD_STS,2)">
<Set>RSP_CD=00</Set>
<Goto>END</Goto>
</If>
<!--判断子账户状态-->
<If condition="AND(IS_NOEQUAL_STRING($CRD_STS,1),IS_NOEQUAL_STRING($CRD_STS,3))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20058"/>
<Arg name="MsgDat" value="子账户为预开户状态,交易失败"/>
</Exec>
<Return/>
</If>
<!--用应用序列号查询圈存明细表是否存在未确认信息-->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_LPSTEMK_INFO" />
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
</Exec>
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS19999"/>
<Arg name="MsgDat" value="系统错误"/>
</Exec>
<Set>RSP_CD=99</Set>
<Return/>
</ElseIf>
<ElseIf condition="~RetCod=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20057"/>
<Arg name="MsgDat" value="存在未确认信息,请先处理"/>
</Exec>
<Set>RSP_CD=99</Set>
<Return/>
</ElseIf>
<!--营业厅不是商户,所以暂不做商户信息及状态的检查-->
<If condition="ISNULL($TX_AMT)">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20061"/>
<Arg name="MsgDat" value="交易金额为空,上传报文出错"/>
</Exec>
<Set>RSP_CD=99</Set>
<Return/>
</If>
<Set>TX_AMT=AMTSIMPLEFMT($TX_AMT)</Set> <!--金额转化为十进制 -->
<!--查询平台记录卡片余额-->
<Set>CRD_QPB.SUB_AC=$SUB_AC</Set>
<Set>CRD_QPB.CAP_TYP=1</Set>
<Exec func="ACM_MNG:QueryPurseBalance">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="CRD_QPB"/>
<Arg name="_O_OUT_DAT" value="CRD_QPB_OUT"/>
</Exec>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!--平台记录余额小于卡片余额不允许换卡 -->
<If condition="DOUBLECMP(FSUB(@O.CRD_QPB_OUT.CUR_AC_BAL,@O.CRD_QPB_OUT.UAVA_BAL,2),1,$TX_AMT)">
<!-- 加入灰名单 -->
<!--调用风控加入灰名单-->
<Set>RISK_DAT.MBL_NO=$MBL_NO</Set>
<Set>RISK_DAT.RISK_SWITCH=G</Set>
<Set>RISK_DAT.RISK_RSN=ILLEGAL_CRD_BAL</Set> <!--卡片余额大于平台余额-->
<Set>RISK_DAT.RISK_TYPE=ILLEGAL_CRD</Set>
<Set>RISK_DAT.RISK_SEQ=$GWA.JRN_SEQ</Set>
<Set>RISK_DAT.TX_AMT=$TX_AMT</Set>
<Set>RISK_DAT.TX_TYP=02</Set> <!-- 消费 -->
<Call package="LPS_PUB" function="LpsRiskControl">
<Input>RISK_DAT|GWA|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWAAddMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
</If>
</If>
<!--如果钱包余额不为0,对余额进行处理-->
<If condition="DOUBLECMP($TX_AMT,4,0.00)">
<!--钱包账户的余额清零-->
<!--钱包账户支取-->
<Set>INP_DAT_PUR.USR_NO=$USR_NO</Set>
<Set>INP_DAT_PUR.APP_SEQ_NO=$SUB_AC</Set>
<Set>INP_DAT_PUR.TX_CD=2130090</Set>
<Set>INP_DAT_PUR.C_TX_DT=$GWA.TX_DT</Set>
<Set>INP_DAT_PUR.TX_TM=$GWA.TX_TM</Set>
<Set>INP_DAT_PUR.AC_TYP=101</Set>
<Set>INP_DAT_PUR.CAP_TYP=1</Set>
<Set>INP_DAT_PUR.AMT=$TX_AMT</Set>
<Set>INP_DAT_PUR.TX_TYP=07</Set> <!-- 反圈存 -->
<Set>INP_DAT_PUR.BUS_TYP=0701</Set>
<Set>INP_DAT_PUR.ORD_NO=$GWA.JRN_NO</Set>
<Set>INP_DAT_PUR.ORD_TYP=05</Set>
<Exec func="ACM:PurseAccountWithdraw">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="INP_DAT_PUR"/>
<Arg name="_O_OUT_DAT" value="OUT_DAT_PUR"/>
</Exec>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Set>RSP_CD=99</Set>
<Return/>
</If>
<!--主账户存入钱包余额相等的金额-->
<Set>INP_DAT_MAIN.AC_NO=$MAIN_AC</Set>
<Set>INP_DAT_MAIN.CAP_TYP=1</Set>
<Set>INP_DAT_MAIN.AMT=$TX_AMT</Set>
<Set>INP_DAT_MAIN.TX_CD=2130090</Set>
<Set>INP_DAT_MAIN.TX_DT=$GWA.TX_DT</Set>
<Set>INP_DAT_MAIN.TX_TM=$GWA.TX_TM</Set>
<Set>INP_DAT_MAIN.AC_TYP=100</Set>
<Set>INP_DAT_MAIN.TX_TYP=07</Set> <!-- 反圈存 -->
<Set>INP_DAT_MAIN.BUS_TYP=0701</Set>
<Set>INP_DAT_MAIN.MAX_CHK_FLG=N</Set> <!--主账户存入时,暂定最高限额不做检查 -->
<Set>INP_DAT_MAIN.ORD_NO=$GWA.JRN_NO</Set>
<Set>INP_DAT_MAIN.ORD_TYP=05</Set>
<Exec func="ACM:MainAccountDeposit"> <!--主账户存入-->
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="INP_DAT_MAIN"/>
<Arg name="_O_OUT_DAT" value="OUT_DAT_MAIN"/>
</Exec>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Set>RSP_CD=99</Set>
<Return/>
</If>
</If>
<!--手机钱包卡销户-->
<Call package="LPS_PUB" function="CancelSubAccount">
<Input>GWA|SUB_AC|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="IS_SUCC(@O.MSG_CD)">
<!--子账户销户成功-->
<Set>RSP_CD=00</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
</If>
<Else>
<!--子账户销户失败-->
<Set>RSP_CD=99</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</Else>
<Label>END</Label>
<!--下行报文组织-->
<Set>CMD_CD=17</Set>
<Set>SUB_CMD_CD=01</Set>
<If condition="STRCMP($RSP_CD,00)=0">
<Set>RSL_CD=00</Set>
</If>
<Else>
<Set>RSL_CD=01</Set>
</Else>
<Set>CRD_JRN_NO=00000000</Set>
<Call package="LPS_PUB" function="MessageBuild">
<Output>BK_TXN_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<If condition="IS_SUCC($GWA.MSG_CD)"> <!--报文组织失败-->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
</If>
<Set>RSP_CD=99</Set>
<Return/>
</If>
<!--生成报文MAC-->
<Call package="LPS_PUB" function="CreateMessageMAC">
<Input>SUB_AC|@O.BK_TXN_DAT|</Input>
<Output>BK_TXN_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<If condition="IS_SUCC($GWA.MSG_CD)">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
</If>
<Set>RSP_CD=99</Set>
<Return/>
</If>
<!--设置返回报文-->
<Set>BK_TXN_DAT=@O.BK_TXN_DAT</Set>
<!--下发钱包去活指令-->
<Set>SMS_CD=LPS800</Set>
<Call package="LPS_PUB" function="SendShortMessage"/>
<!--如果手机钱包去活成功,则短信通知用户-->
<If condition="STRCMP($RSP_CD,00)=0">
<Set>SMS_CD=LPS002</Set>
<Call package="LPS_PUB" function="SendShortMessage"/>
</If>
<!--返回成功-->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
</Exec>
</FlowCtrl>
</Transaction>
</Application>