Files
ctg-app-ui/mkm/etc/pkg/MKM_IVRUserOrderBonusQuery_PKG.XML
2021-01-12 22:04:24 +08:00

222 lines
9.4 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Package>
<!-- IVRUserOrderBonusQuery-->
<!-- INP_DAT-节点名称 -->
<!-- 输入参数: MBL_NO 用户手机号 必输 -->
<!-- MERC_ID 商户编号 必输 -->
<!-- OUT_DAT-节点名称 -->
<!-- BON_TOT_BAL 电子券可用余额 以元为单位 -->
<!-- BON_USE_RAT 订单限制电子券使用比例 取值范围:1-100
若商户自定义参数不为空,以商户为准,否则已营销公共参数为准 -->
<!--指定商户可用电子券余额及电子券消费订单占比查询组件 -->
<Function name="IVRUserOrderBonusQuery">
<Input>INP_DAT|GWA|</Input>
<Output>OUT_DAT|MSG_CD|MSG_DAT|</Output>
<!--查询该商户类型-->
<DynSentence name="QRY_URMTMINF_TYP">
<Sentence>
SELECT MERC_TYP,MERC_PROV
FROM URMTMINF
WHERE MERC_ID=?
</Sentence>
<Fields>MERC_ID|</Fields>
</DynSentence>
<!--查询全局参数表中红包可用比例-->
<DynSentence name="QRY_MKMTPUBPRA">
<Sentence>
SELECT BON_USE_RAT,BON_USR_LOW,BON_USE_LMT
FROM MKMTPUBPRA
</Sentence>
</DynSentence>
<!-- 查询商户信息表中红包可使用 比例-->
<DynSentence name="QRY_URMTMINF_REBRAT">
<Sentence>
SELECT MKM_REB_RAT
FROM URMTMINF
WHERE MERC_ID = ?
</Sentence>
<Fields>MERC_ID|</Fields>
</DynSentence>
<!--查询用户在该商户可用红包余额-->
<DynSentence name="QRY_MKMTBON_BAL1">
<Sentence>
SELECT NVL(SUM(CUR_AC_BAL),0) AS BON_TOT_BAL
FROM MKMTBON A,MKMTISS B
WHERE (B.MERC_LMT_TYP='0'
OR (B.MERC_LMT_TYP='1' AND '1'=?)
OR (B.MERC_LMT_TYP='2' AND B.ISS_PROV=?)
OR (B.MERC_LMT_TYP='3' AND EXISTS (SELECT X.* FROM MKMTMERC X,PAYADM.MKMTMERCRL Y WHERE X.MKT_ID=A.MKT_ID AND X.ISS_ID=A.ISS_ID AND X.PRD_ID=A.PRD_ID
AND ((X.IS_GRP='0' AND X.MERC_ID = ? AND Y.MERC_GRP='0') OR (X.IS_GRP='1' AND Y.MERC_ID=? AND X.MERC_ID=Y.MERC_GRP AND Y.MERC_GRP &lt;&gt; '0')) AND X.MERC_STS='A' AND Y.MERC_ID=?)))
AND A.BON_STS='A'
AND A.EFF_DT &lt;=?
AND A.EXP_DT &gt;=?
AND A.PRD_TYP='0'
AND A.USR_NO=?
AND A.MKT_ID=B.MKT_ID
AND A.ISS_ID=B.ISS_ID
</Sentence>
<Fields>MERC_TYP1|MERC_PROV|MERC_ID|MERC_ID|MERC_ID|SYS_DT|SYS_DT|USR_NO|</Fields>
</DynSentence>
<Process>
<Set>MBL_NO=DELBOTHSPACE($INP_DAT.MBL_NO)</Set>
<Set>MERC_ID=DELBOTHSPACE($INP_DAT.MERC_ID)</Set>
<Set>BUS_CNL=DELBOTHSPACE($GWA.BUS_CNL)</Set>
<Set>SYS_DT=$GWA.AC_DT</Set>
<Set>CNT_LMT=#BON_USE_CNT</Set> <!-- 单笔可以使用的营销工具个数限制 -->
<!--必输项检查-->
<If condition="ISNULL($MBL_NO)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM10232"/>
<Arg name="MsgDat" value="用户手机号不能为空"/>
</Exec>
<Return/>
</If>
<If condition="ISNULL($MERC_ID)">
<Exec func="PUB:CmpSetMsg">
<!-- @msg 商户编号不能为空 -->
<Arg name="MsgCd" value="MKM20200"/>
<Arg name="MsgDat" value="商户编号不能为空"/>
</Exec>
<Return/>
</If>
<!--根据手机号查询内部号-->
<Call function="Query_MBLNO_USRNO" package="MKM">
<Input>MBL_NO|USR_NO|</Input>
<Output>MSG_CD|MSG_DAT|MBL_NO|USR_NO|USR_PROV|USR_CITY|USR_CITY_NM|USR_STS|</Output>
</Call>
<If condition="IS_SUCC(@O.MSG_CD)=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
<Arg name="MsgDat" value="@O.MSG_DAT"/>
</Exec>
<Return/>
</If>
<Set>MBL_NO=@O.MBL_NO</Set>
<Set>USR_NO=@O.USR_NO</Set>
<Set>USR_STS=@O.USR_STS</Set>
<!-- 对于销户、待销户的状态不可以使用-->
<If condition="IS_EQUAL_STRING($USR_STS,1,3)">
<Set>OUT_DAT.BON_TOT_AMT=0</Set>
<Exec func="PUB:CmpSetMsg">
<!-- @msg交易成功 -->
<Arg name="MsgCd" value="MKM00000" />
<Arg name="MsgDat" value="交易成功"/>
</Exec>
<Return/>
</If>
<!-- 获取业务渠道在状态字中的位置 -->
<If condition="NOT(ISNULL($BUS_CNL))">
<Call function="QueryBusSts" package="MKM">
<Input>BUS_CNL|</Input>
<Output>BUS_CNL_POS|MSG_CD|</Output>
</Call>
<If condition="IS_SUCC(@O.MSG_CD)=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
<Arg name="MsgDat" value="@O.MSG_DAT"/>
</Exec>
<Return/>
</If>
<Set>BUS_CNL_POS=@O.BUS_CNL_POS</Set>
</If>
<Else>
<Set>BUS_CNL_POS=999</Set>
</Else>
<!--查询该商户类型-->
<Exec func="PUB:ReadRecord" >
<Arg name="SqlCmd" value="QRY_URMTMINF_TYP"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg不存在该商户 -->
<Arg name="MsgCd" value="MKM20210"/>
<Arg name="MsgDat" value="不存在该商户"/>
</Exec>
<Return/>
</If>
<If condition="OR(IS_EQUAL_STRING($MERC_TYP,1),IS_EQUAL_STRING($MERC_TYP,2))">
<Set>MERC_TYP1=1</Set> <!--全网商户-->
</If>
<ElseIf condition="OR(IS_EQUAL_STRING($MERC_TYP,3),IS_EQUAL_STRING($MERC_TYP,4))">
<Set>MERC_TYP1=2</Set> <!--本省商户-->
</ElseIf>
<!--查询商户信息中红包可使用比例-->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_URMTMINF_REBRAT"/>
</Exec>
<If condition="~RetCod=2">
<!-- 查询全局参数表中红包使用比例 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPUBPRA"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg未找到红包比例信息 -->
<Arg name="MsgCd" value="MKM20315"/>
<Arg name="MsgDat" value="未找到红包比例信息"/>
</Exec>
<Return/>
</If>
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<!-- @msg未找到红包比例信息 -->
<Arg name="MsgCd" value="MKM20315"/>
<Arg name="MsgDat" value="未找到红包比例信息"/>
</Exec>
<Return/>
</ElseIf>
<!-- 查询全局参数表中红包使用比例 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPUBPRA"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg未找到红包比例信息 -->
<Arg name="MsgCd" value="MKM20315"/>
<Arg name="MsgDat" value="未找到红包比例信息"/>
</Exec>
<Return/>
</If>
<!-- 若商户订单红包占比有效,则按商户参数执行 -->
<Set>MKM_REB_RAT=DELBOTHSPACE($MKM_REB_RAT)</Set>
<If condition="NOT(ISNULL($MKM_REB_RAT))">
<If condition="INTCMP($MKM_REB_RAT,le,100)">
<Set>BON_USE_RAT=$MKM_REB_RAT</Set>
</If>
</If>
<Else>
<Set>BON_USE_RAT=DELBOTHSPACE($BON_USE_RAT)</Set>
</Else>
<!--查询该用户在该商户可用红包总额-->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTBON_BAL1"/>
</Exec>
<If condition="~RetCod=2">
<Set>OUT_DAT.BON_TOT_BAL=0</Set>
</If>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<!-- @msg未找到该用户在该商户可用红包 -->
<Arg name="MsgCd" value="MKM20315"/>
<Arg name="MsgDat" value="未找到该用户在该商户可用红包"/>
</Exec>
<Return/>
</If>
<Set>OUT_DAT.BON_TOT_BAL=$BON_TOT_BAL</Set>
<Set>OUT_DAT.BON_USE_RAT=$BON_USE_RAT</Set>
<Exec func="PUB:CmpSetMsg">
<!-- @msg交易成功 -->
<Arg name="MsgCd" value="MKM00000"/>
<Arg name="MsgDat" value="交易成功"/>
</Exec>
</Process>
</Function>
</Package>