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

396 lines
16 KiB
XML

<?xml version="1.0" encoding='UTF-8'?>
<Root>
<!-- DNF道具发放 -->
<Function name="IssDNF">
<Input>INP_DAT|GWA|</Input>
<Output>OUT_DAT|MSG_CD|MSG_DAT|</Output>
<!-- 查询奖品发放规则表 -->
<DynSentence name="QRY_MKMTPRZRULE">
<Sentence>
SELECT DISTINCT RM_NUM FROM MKMTPRZRULE
WHERE PRZ_TYP = ? AND EFF_DT &lt;= ? AND EXP_DT &gt;= ?
AND BEG_REF_AMT &lt;= ? AND END_REF_AMT &gt; ?
</Sentence>
<Fields>PRZ_TYP|TX_SYS_DT|TX_SYS_DT|PE_AMT|PE_AMT|</Fields>
</DynSentence>
<!-- 查询奖品发放规则表 -->
<DynSentence name="QRY_MKMTPRZRULE_RUL">
<Sentence>
SELECT * FROM MKMTPRZRULE
WHERE PRZ_TYP = ? AND EFF_DT &lt;= ? AND EXP_DT &gt;= ?
AND BEG_REF_AMT &lt;= ? AND END_REF_AMT &gt; ? AND PRZ_RUL_ID = ?
</Sentence>
<Fields>PRZ_TYP|TX_SYS_DT|TX_SYS_DT|PE_AMT|PE_AMT|PRZ_RUL_ID|</Fields>
</DynSentence>
<!-- 查询推荐号码本月已推荐他人缴话费次数 -->
<DynSentence name="QRY_MKMTRMPC_RMCNT">
<Sentence>
SELECT NVL(COUNT(*),0) AS NOW_RM_CNT FROM MKMTRMPC
WHERE RM_MBL_NO = ? AND IS_DNF_RM='1' AND TX_SYS_DT BETWEEN ? AND ?
</Sentence>
<Fields>RM_MBL_NO|MM_BEG_DT|MM_END_DT|</Fields>
</DynSentence>
<!-- 查询奖品发放总量 -->
<DynSentence name="QRY_MKMTPRIZE_RULCNT">
<Sentence>
SELECT NVL(COUNT(*),0) AS ISS_CNT
FROM MKMTPRIZE WHERE ISS_STS='1' AND PRZ_RUL_ID=? AND ISS_DT BETWEEN ? AND ?
</Sentence>
<Fields>PRZ_RUL_ID|EFF_DT|TX_SYS_DT|</Fields>
</DynSentence>
<!-- 更新中奖随机数 -->
<DynSentence name="UPD_MKMTPRZRULE">
<Sentence>
UPDATE MKMTPRZRULE SET RAD_NUM=? WHERE PRZ_RUL_ID = ?
</Sentence>
<Fields>RAD_NUM|PRZ_RUL_ID|</Fields>
</DynSentence>
<!-- 查询奖品存量 -->
<DynSentence name="QRY_MKMTPRIZE_CNT">
<Sentence>
SELECT NVL(COUNT(*),0) AS PRZ_CNT FROM MKMTPRIZE
WHERE PRZ_RUL_ID = ? AND ISS_STS = '0'
</Sentence>
<Fields>PRZ_RUL_ID|</Fields>
</DynSentence>
<!-- 查询推荐号码本月已推荐他人缴话费次数 -->
<DynSentence name="QRY_MKMTRMPC_DNFSTS">
<Sentence>
SELECT NVL(COUNT(*),0) AS DNF_RM_CNT FROM MKMTRMPC
WHERE RM_MBL_NO = ? AND IS_DNF_RM='1' AND TX_SYS_DT BETWEEN ? AND ? AND DNF_PRZ_STS = '0'
</Sentence>
<Fields>RM_MBL_NO|MM_BEG_DT|MM_END_DT|</Fields>
</DynSentence>
<!-- 更新推荐关系表 -->
<DynSentence name="UPD_MKMTRMPC">
<Sentence>
UPDATE MKMTRMPC SET DNF_PRZ_STS='1' WHERE RM_MBL_NO = ? AND IS_DNF_RM='1' AND DNF_PRZ_STS = '0' AND TX_SYS_DT BETWEEN ? AND ? AND ROWNUM &lt;= ?
</Sentence>
<Fields>RM_MBL_NO|MM_BEG_DT|MM_END_DT|RM_NUM|</Fields>
</DynSentence>
<!-- 查询奖品信息 -->
<DynSentence name="QRY_MKMTPRIZE">
<Sentence>
SELECT PRZ_CD,PRO_NM FROM MKMTPRIZE WHERE ISS_STS='0' AND PRZ_RUL_ID=? AND ROWNUM='1' FOR UPDATE
</Sentence>
<Fields>PRZ_RUL_ID|</Fields>
</DynSentence>
<!-- 更新奖品信息 -->
<DynSentence name="UPD_MKMTPRIZE">
<Sentence>
UPDATE MKMTPRIZE SET ISS_STS='1',MBL_NO=?,USR_NO=?,USR_PROV=?,
USR_CITY_NM=?,USR_CITY=?,ISS_DT=?,ISS_TM=?
WHERE ISS_STS='0'
AND PRZ_CD=?
AND PRZ_RUL_ID=?
</Sentence>
<Fields>RM_MBL_NO|USR_NO|USR_PROV|USR_CITY_NM|USR_CITY|TX_SYS_DT|TX_SYS_TM|PRZ_CD|PRZ_RUL_ID|</Fields>
</DynSentence>
<Process>
<Set>TX_SYS_DT=DELBOTHSPACE($INP_DAT.TX_SYS_DT)</Set> <!-- 交易日期 -->
<Set>TX_SYS_TM=DELBOTHSPACE($INP_DAT.TX_SYS_TM)</Set> <!-- 交易时间 -->
<Set>PE_AMT=DELBOTHSPACE($INP_DAT.PE_AMT)</Set> <!-- 缴费金额 -->
<Set>MM_BEG_DT=DELBOTHSPACE($INP_DAT.MM_BEG_DT)</Set> <!-- 月初 -->
<Set>MM_END_DT=DELBOTHSPACE($INP_DAT.MM_END_DT)</Set> <!-- 月末 -->
<Set>RM_MBL_NO=DELBOTHSPACE($INP_DAT.RM_MBL_NO)</Set> <!-- 推荐号码 -->
<Set>USR_NO=DELBOTHSPACE($INP_DAT.USR_NO)</Set>
<Set>USR_PROV=DELBOTHSPACE($INP_DAT.USR_PROV)</Set>
<Set>USR_CITY=DELBOTHSPACE($INP_DAT.USR_CITY)</Set>
<Set>USR_CITY_NM=DELBOTHSPACE($INP_DAT.USR_CITY_NM)</Set>
<Set>PRZ_TYP=DNF</Set> <!-- 奖品类型 -->
<!-- 查询奖品规则信息 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPRZRULE"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="MKM64013"/>
<Arg name="MsgDat" value="查询奖品规则信息失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="MKM64014"/>
<Arg name="MsgDat" value="没有符合发放要求的奖品"/>
</Exec>
<Return/>
</ElseIf>
<!-- 查询推荐号码本月已通过DNF链接推荐他人缴话费次数 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTRMPC_RMCNT"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60008"/>
<Arg name="MsgDat" value="查询推荐号码本月已推荐他人缴话费次数失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60009"/>
<Arg name="MsgDat" value="查询推荐号码本月已推荐他人缴话费次数找不到记录"/>
</Exec>
<Return/>
</ElseIf>
<Set>TMP_RM_NUM=DIV($NOW_RM_CNT,$RM_NUM)</Set>
<If condition="INTCMP($TMP_RM_NUM,lt,1)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60010"/>
<Arg name="MsgDat" value="推荐号码本月推荐他人缴话费的次数还不满足领取奖品的条件"/>
</Exec>
<Return/>
</If>
<ElseIf condition="INTCMP($TMP_RM_NUM,gt,5)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60010"/>
<Arg name="MsgDat" value="推荐号码本月推荐他人缴话费的次数还不满足领取奖品的条件"/>
</Exec>
<Return/>
</ElseIf>
<!-- 查询推荐号码本月已通过DNF链接推荐他人缴话费还未参与活动的次数 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTRMPC_DNFSTS"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60008"/>
<Arg name="MsgDat" value="查询推荐号码本月已推荐他人缴话费次数失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60009"/>
<Arg name="MsgDat" value="查询推荐号码本月已推荐他人缴话费次数找不到记录"/>
</Exec>
<Return/>
</ElseIf>
<If condition="INTCMP($DNF_RM_CNT,lt,$RM_NUM)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60010"/>
<Arg name="MsgDat" value="推荐号码本月推荐他人缴话费的次数还不满足领取奖品的条件"/>
</Exec>
<Return/>
</If>
<!-- 去掉降档发放的逻辑
<Set>CNT=0</Set>
<While condition="INTCMP($TMP_RM_NUM,ge,1)">
<Set>CNT=ADD($CNT,1)</Set>
-->
<Set>PRZ_RUL_ID=STRCAT(DNF,$TMP_RM_NUM)</Set> <!-- 拼奖品类型 -->
<!-- 查询奖品规则信息 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPRZRULE_RUL"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="MKM64013"/>
<Arg name="MsgDat" value="查询奖品规则信息失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64014"/>
<Arg name="MsgDat" value="没有符合发放要求的奖品"/>
</Exec>
<Return/>
</ElseIf>
<If condition="IS_EQUAL_INT($RAD_NUM,2)">
<Set>RAD_NUM=1</Set>
</If>
<Else>
<Set>RAD_NUM=ADD($RAD_NUM,1)</Set>
</Else>
<!--If condition="IS_EQUAL_STRING($CNT,1)"-->
<!-- 更新中奖随机数 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTPRZRULE"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64018"/>
<Arg name="MsgDat" value="更新中奖随机数失败"/>
</Exec>
<Return/>
</If>
<If condition="IS_NOEQUAL_STRING($RAD_NUM,2)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64022"/>
<Arg name="MsgDat" value="幸运数字未达到发放条件"/>
</Exec>
<!-- 更新推荐关系表 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTRMPC"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60011"/>
<Arg name="MsgDat" value="更新推荐关系表失败"/>
</Exec>
<Return/>
</If>
<Return/>
</If>
<!--/If-->
<!-- 查询奖品已发放总量 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPRIZE_RULCNT"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64016"/>
<Arg name="MsgDat" value="查询奖品已发放总量失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64016"/>
<Arg name="MsgDat" value="查询奖品已发放总量失败"/>
</Exec>
<Return/>
</ElseIf>
<Set>DT_NUM=DIFFDATE($EFF_DT,$TX_SYS_DT)</Set><!-- 计算系统日期与奖品发放生效日期之间的天数 -->
<Set>MUL_NUM=ADD($DT_NUM,1)</Set><!-- 相差天数加上今天 -->
<Set>MAX_CNT=MUL($DT_MAX_CNT,$MUL_NUM)</Set><!-- 计算目前允许发放的最大奖品数 -->
<If condition="INTCMP($ISS_CNT,ge,$MAX_CNT)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64017"/>
<Arg name="MsgDat" value="该时间段奖品已发放完毕"/>
</Exec>
<!-- 更新推荐关系表 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTRMPC"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60011"/>
<Arg name="MsgDat" value="更新推荐关系表失败"/>
</Exec>
<Return/>
</If>
<Return/>
<!--Set>TMP_RM_NUM=SUB($TMP_RM_NUM,1)</Set>
<Continue/-->
</If>
<!-- 查询该档次奖品的存量 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPRIZE_CNT"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64013"/>
<Arg name="MsgDat" value="查询奖品规则信息失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64014"/>
<Arg name="MsgDat" value="没有符合发放要求的奖品"/>
</Exec>
<Return/>
</ElseIf>
<If condition="INTCMP($PRZ_CNT,lt,1)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64020"/>
<Arg name="MsgDat" value="该奖品库存不足"/>
</Exec>
<Return/>
</If>
<!-- 去掉降档逻辑
<Else>
<Set>TMP_RM_NUM=SUB($TMP_RM_NUM,1)</Set>
</Else>
</While>
-->
<!-- 更新推荐关系表 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTRMPC"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60011"/>
<Arg name="MsgDat" value="更新推荐关系表失败"/>
</Exec>
<Return/>
</If>
<!-- 查询奖品信息 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPRIZE"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64019"/>
<Arg name="MsgDat" value="查询奖品信息失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64020"/>
<Arg name="MsgDat" value="该奖品库存不足"/>
</Exec>
<Return/>
</ElseIf>
<Set>MBL_NO=$RM_MBL_NO</Set>
<!-- 更新奖品信息表 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTPRIZE"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM64021"/>
<Arg name="MsgDat" value="更新奖品信息失败"/>
</Exec>
<Return/>
</If>
<Set>SMS_TMP_ID=MKM712</Set><!-- 短信模板ID -->
<Set>REP_VALS=STRCAT($PRO_NM,|,$PRZ_CD,|)</Set><!-- 短信参数 -->
<!--异步发送短信-->
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="0305010"/>
<Arg name='Mode' value='NOTIFY'/>
<Arg name="LogID" value="OMKMPUB1"/>
<Arg name="ObjSvr" value="OMKMPUB1"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM22039" />
<Arg name="MsgDat" value="短信发送失败"/>
</Exec>
<Return/>
</If>
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM00000"/>
<Arg name="MsgDat" value="交易成功"/>
</Exec>
</Process>
</Function>
</Root>