302 lines
12 KiB
XML
302 lines
12 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<Application name="lps" trace="yes">
|
|
|
|
<!--营业厅换卡登记-->
|
|
<Transaction code="2132040" log_switch="1">
|
|
<!-- 验证卡片合法性 -->
|
|
<DynSentence name="QRY_LPSTCRD_CRDSTS">
|
|
<Sentence>
|
|
SELECT CRD_STS,USR_NO,MAIN_AC,CRD_STSW,CRD_TYP,MBL_NO,CRD_VER
|
|
FROM LPSTCRD
|
|
WHERE SUB_AC=? FOR UPDATE
|
|
</Sentence>
|
|
<Fields>SUB_AC|</Fields>
|
|
</DynSentence>
|
|
|
|
<!-- 检查是否存在未确认信息 -->
|
|
<DynSentence name="CHK_LPSTEMK_UNVERIFY">
|
|
<Sentence>
|
|
SELECT 'Y' YN FROM LPSTEMK WHERE SUB_AC=? AND EMK_STS='0' AND LAST_EMK_CMD='1' AND EMK_TYP='S'
|
|
</Sentence>
|
|
<Fields>SUB_AC|</Fields>
|
|
</DynSentence>
|
|
|
|
<!-- 更新卡片状态 -->
|
|
<DynSentence name="UPD_LPSTCRD_STS">
|
|
<Sentence>
|
|
UPDATE LPSTCRD SET CRD_STS=?,CRD_STSW=?,TM_SMP=? WHERE SUB_AC=?
|
|
</Sentence>
|
|
<Fields>CRD_STS|CRD_STSW|SYS_TM_SMP|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_CRDSTS"/>
|
|
</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(SUBSTR($CRD_STSW,5,1),1)"> <!-- 用户为销户,暂停或透支状态 -->
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS20072"/>
|
|
<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))">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!--读取卡片圈存记录表-->
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="CHK_LPSTEMK_UNVERIFY"/>
|
|
</Exec>
|
|
<If condition="~RetCod=2">
|
|
<Set>~MSG_DAT=不存在未确认信息</Set>
|
|
</If>
|
|
<ElseIf condition="~RetCod=0">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS20057"/>
|
|
<Arg name="MsgDat" value="存在未确认信息不能换卡"/>
|
|
</Exec>
|
|
<Return/>
|
|
</ElseIf>
|
|
<Else>
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS00001"/>
|
|
<Arg name="MsgDat" value="数据库操作出错"/>
|
|
</Exec>
|
|
<Return/>
|
|
</Else>
|
|
<Set>CRD_BAL=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,$CRD_BAL)">
|
|
<!-- 加入灰名单 -->
|
|
<!--调用风控加入灰名单-->
|
|
<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=$CRD_BAL</Set>
|
|
<Set>RISK_DAT.TX_TYP=06</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>
|
|
|
|
|
|
<If condition="NOT(IS_EQUAL_DOUBLE($CRD_BAL,0.00))"> <!--卡片余额非0 进行账务处理-->
|
|
<!-- 账务处理开始 -->
|
|
<!-- 调用账户-钱包支出 -->
|
|
<Set>CRD_PAW.USR_NO=$USR_NO</Set>
|
|
<Set>CRD_PAW.APP_SEQ_NO=$SUB_AC</Set>
|
|
<Set>CRD_PAW.AC_TYP=101</Set>
|
|
<Set>CRD_PAW.CAP_TYP=1</Set> <!-- 现金种类 -->
|
|
<Set>CRD_PAW.AMT=$CRD_BAL</Set>
|
|
<Set>CRD_PAW.TX_CD=$GWA.TX_CD</Set>
|
|
<Set>CRD_PAW.C_TX_DT=$GWA.TX_DT</Set>
|
|
<Set>CRD_PAW.TX_TM=$GWA.TX_TM</Set>
|
|
<Set>CRD_PAW.ORD_NO=$GWA.JRN_NO</Set>
|
|
<Set>CRD_PAW.ORD_TYP=07</Set> <!--圈存类型-->
|
|
<Set>CRD_PAW.TX_TYP=07</Set> <!-- 反圈存 -->
|
|
<Set>CRD_PAW.BUS_TYP=HBD0</Set> <!-- 换卡待补登 -->
|
|
<Set>CRD_PAW.ORD_NO=$GWA.JRN_NO</Set>
|
|
|
|
|
|
<Exec func="ACM:PurseAccountWithdraw">
|
|
<Arg name="_I_GWA" value="GWA"/>
|
|
<Arg name="_I_INP_DAT" value="CRD_PAW"/>
|
|
<Arg name="_O_OUT_DAT" value="CRD_PAW_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>INP_DAT.MBL_NO=$MBL_NO</Set>
|
|
<Set>INP_DAT.CAP_TYP1=1</Set>
|
|
<Set>INP_DAT.HLD_AMT1=$CRD_BAL</Set>
|
|
<Set>INP_DAT.AMT1=$CRD_BAL</Set>
|
|
<Set>INP_DAT.HLD_CD=BD</Set> <!--待补登冻结-->
|
|
<Set>INP_DAT.TX_DT=$GWA.TX_DT</Set>
|
|
<Set>INP_DAT.TX_TM=$GWA.TX_TM</Set>
|
|
<Set>INP_DAT.TX_CD=$GWA.TX_CD</Set>
|
|
<Set>INP_DAT.ORD_NO=$GWA.JRN_NO</Set>
|
|
<Set>INP_DAT.ORD_TYP=07</Set> <!--圈存类型-->
|
|
<Set>INP_DAT.TX_TYP=07</Set> <!-- 反圈存 -->
|
|
<Set>INP_DAT.BUS_TYP=HBD0</Set> <!-- 换卡待补登 -->
|
|
<Exec func="ACM:UserHoldDeposit">
|
|
<Arg name="_I_GWA" value="GWA"/>
|
|
<Arg name="_I_INP_DAT" value="INP_DAT"/>
|
|
<Arg name="_O_OUT_DAT_1" value="MAIN_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>HLD_NO=@O.MAIN_UHD_OUT.HLD_NO</Set>
|
|
<If condition="ISNULL($HLD_NO)">
|
|
<Return/>
|
|
</If>
|
|
<Set>PROC_MOD=2</Set> <!-- 待补登 -->
|
|
<Set>PROC_RSL=U</Set> <!-- 初始状态 -->
|
|
<Set>TX_TYP=C</Set>
|
|
<Set>REG_DT=$GWA.TX_DT</Set>
|
|
<Set>REG_TM=$GWA.TX_TM</Set>
|
|
|
|
<Exec func="PUB:InsertRecord" error="IGNORE">
|
|
<Arg name="TblNam" value="LPSTBAL"/>
|
|
</Exec>
|
|
<If condition="~RetCod=1">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS20073"/>
|
|
<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>
|
|
|
|
<!-- 子账户销户 -->
|
|
<Set>CRD_STSW=STRCAT(01,SUBSTR($CRD_STSW,3,30))</Set> <!-- 卡片状态字为POS换卡 -->
|
|
<Call package="LPS_PUB" function="CancelOldSubAccount">
|
|
<Input>GWA|SUB_AC|CRD_STSW|</Input>
|
|
<Output>MSG_CD|</Output>
|
|
</Call>
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!-- 下行卡片去活指令 -->
|
|
<If condition="IS_EQUAL_STRING($CRD_VER,01)">
|
|
<Set>CMD_CD=17</Set>
|
|
<Set>SUB_CMD_CD=01</Set>
|
|
<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>
|
|
<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)">
|
|
<!--生成报文MAC失败-->
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
</If>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!--设置返回报文-->
|
|
<Set>BK_TXN_DAT=@O.BK_TXN_DAT</Set>
|
|
|
|
<!--下发钱包激活指令-->
|
|
<Set>SMS_CD=LPS800</Set>
|
|
<Call package="LPS_PUB" function="SendShortMessage"/>
|
|
</If>
|
|
|
|
<!-- 下发钱包注销短信 -->
|
|
<Set>SMS_CD=LPS002</Set>
|
|
<Call package="LPS_PUB" function="SendShortMessage"/>
|
|
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS00000"/>
|
|
</Exec>
|
|
|
|
</FlowCtrl>
|
|
</Transaction>
|
|
|
|
</Application>
|