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

296 lines
12 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Package>
<!--单个发放营销工具(IssBon_Single)-->
<Function name="IssBonSingle">
<Output>OUT_DAT|MSG_CD|MSG_DAT|</Output>
<!--查询全局参数表中红包使用比例-->
<DynSentence name="QRY_MKMTPUBPRA">
<Sentence>
SELECT BON_USE_RAT,BON_USE_LMT,BON_USR_LOW
FROM MKMTPUBPRA
</Sentence>
</DynSentence>
<!-- 每日发放数量重新计数情况 -->
<DynSentence name="UPD_MKMTPINF_DLY1">
<Sentence>
UPDATE MKMTPINF
SET ISS_DLY_CNT = 1,
LST_ISS_DT = ?,
ISS_CUR_CNT = ISS_CUR_CNT+1,
TM_SMP = ?
WHERE PRD_ID = ?
AND (CASE WHEN ISS_MAX_CNT = '0' THEN 999999999999 ELSE ISS_MAX_CNT END) &gt;= ISS_CUR_CNT + 1
</Sentence>
<Fields>CUR_DT|TM_SMT_CUR|PRD_ID|</Fields>
</DynSentence>
<!-- 每日发放数量累加计数情况 -->
<DynSentence name="UPD_MKMTPINF_DLY2">
<Sentence>
UPDATE MKMTPINF
SET ISS_DLY_CNT = ISS_DLY_CNT+1,
ISS_CUR_CNT = ISS_CUR_CNT+1,
TM_SMP = ?
WHERE PRD_ID = ?
AND (CASE WHEN ISS_MAX_CNT = '0' THEN 999999999999 ELSE ISS_MAX_CNT END) &gt;= ISS_CUR_CNT + 1
AND (CASE WHEN ISS_DLY_LMT = '0' THEN 999999999999 ELSE ISS_DLY_LMT END) &gt;= ISS_DLY_CNT + 1
</Sentence>
<Fields>TM_SMT_CUR|PRD_ID|</Fields>
</DynSentence>
<!-- 登记积分兑换表 -->
<DynSentence name="INSERT_MKMTPOIEXG_RECORD">
<Sentence>
INSERT INTO
MKMTPOIEXG (JRN_NO, BON_ID, MKT_ID, ISS_ID, PRD_ID, SYS_CNL, MBL_NO, USR_NO, USR_PROV, USR_CITY,
POI_TYP, POI_NUM, EXG_BON_AMT, TX_SYS_DT, TX_SYS_TM, TX_STS, CHK_STS, TX_TYP_FLG, CHK_AC_DT, BOS_JRN_NO,
BOS_TXN_TM, CITY_CD, SUB_BUS_TYP, TM_SMP)
VALUES (?, ?, ?, ?, ?, 'CMPAY', ?, ?, ?, ?,
'', '', ?, ?, ?, 'S', '1', '0', ?, SUBSTR(?,3,16),
'', ?, '0', TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'))
</Sentence>
<Fields>JRN_NO|BON_ID|MKT_ID|ISS_ID|PRD_ID|MBL_NO|USR_NO|USR_PROV|USR_CITY|BON_AMT|TX_SYS_DT|TX_SYS_TM|TX_ACC_DT|JRN_NO|USR_CITY|</Fields>
</DynSentence>
<!-- 查询活动发放总额 -->
<DynSentence name="QRY_MKMTACT_AMT">
<Sentence>
SELECT 'Y' FROM MKMTACT
WHERE MKT_ID = ?
AND ISS_TOT_AMT &gt;= ISS_CUR_AMT + ?
</Sentence>
<Fields>MKT_ID|BON_AMT|</Fields>
</DynSentence>
<Process>
<!--登记抵价券明细表-->
<Set>BON_NM=$PRD_NM</Set>
<Set>ISS_TYP=$ISS_ID_TYP</Set>
<Set>BON_STS=A</Set>
<Set>USR_MBL_NO=$MBL_NO</Set>
<If condition="AND(DOUBLECMP($BOS_AMT,4,0),NOT(ISNULL(DELBOTHSPACE($BOS_AMT))))">
<Set>BON_AMT=$BOS_AMT</Set>
</If>
<!-- 批量发放金额 -->
<ElseIf condition="AND(DOUBLECMP($BON_AMT,4,0),NOT(ISNULL(DELBOTHSPACE($BON_AMT))))">
<Set>BON_AMT=$BON_AMT</Set>
</ElseIf>
<Else>
<Set>BON_AMT=$ISS_BILL_AMT</Set>
</Else>
<Set>LAST_AC_BAL=$BON_AMT</Set>
<Set>CUR_AC_BAL=$BON_AMT</Set>
<Set>SAV_TYP=0</Set>
<Set>ISS_DT=$CUR_DT</Set>
<Set>ISS_TM=$CUR_TM</Set>
<!--计算生效日期-->
<Set>EFF_DT1=CALCDATE($ISS_DT,+,d,$EFF_DT_CNT)</Set>
<!--取较大值-->
<If condition="STRCMP($EFF_DT1,$ISS_EFF_DT) &gt; 0">
<Set>EFF_DT=$EFF_DT1</Set>
</If>
<Else>
<Set>EFF_DT=$ISS_EFF_DT</Set>
</Else>
<!--计算清理日期CLR_DT-->
<If condition="$CLR_TYP=0">
<Set>CLR_DT=$ULT_CLR_DT</Set>
</If>
<Else>
<Set>CLR_TYP1=SUB($CLR_TYP,1)</Set> <!-- 当日清理 -->
<Set>CLR_DT=CALCDATE($EFF_DT,+,d,$CLR_TYP1)</Set>
<!-- 取清理日期和券的最终清理日期中较小值 -->
<If condition="STRCMP($ULT_CLR_DT,$CLR_DT) &lt; 0">
<Set>CLR_DT=$ULT_CLR_DT</Set>
</If>
</Else>
<!--计算失效日期-->
<Set>EXP_DT=$CLR_DT</Set>
<!--生成红包编号-->
<Exec func="MKM:GetSeqNo" error="IGNORE" >
<Arg name="len" value="9" />
</Exec>
<Set>BON_ID=$SEQ_NO</Set>
<Set>BON_ID=STRCAT($MKT_ID,$BON_ID)</Set>
<Exec func="MKM:HiCalUtil" error="IGNORE">
<Arg name="srcVal" value="$BON_ID"/>
<Arg name="dstFld" value="BON_ID"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg生成红包编号失败 -->
<Arg name="MsgCd" value="MKM20304"/>
<Arg name="MsgDat" value="生成红包编号失败"/>
</Exec>
<Return/>
</If>
<!--红包情况-->
<If condition="$PRD_TYP=0">
<!--查询红包使用比例-->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTPUBPRA"/>
</Exec>
<Set>USE_ORD_RAT=$BON_USE_RAT</Set>
<Set>USE_BEG_REF_AMT=$BON_USR_LOW</Set>
<Set>USE_END_REF_AMT=0</Set>
<Set>BON_RAT=0</Set>
</If>
<!--代金券情况-->
<ElseIf condition="$PRD_TYP=1">
<Set>USE_ORD_RAT=0</Set>
<Set>BON_RAT=0</Set>
</ElseIf>
<!--折扣券情况-->
<ElseIf condition="$PRD_TYP=2">
<Set>BON_RAT=$ISS_PCT</Set> <!--折扣比例-->
</ElseIf>
<Set>ISS_BUS_CNL_ABBR=$BUS_CNL</Set> <!--领用渠道-->
<Set>IS_TRANS=0</Set>
<Set>UPD_JRN=$JRN_NO</Set>
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="MKMTBON"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg登记抵价券明细表失败 -->
<Arg name="MsgCd" value="MKM20803"/>
<Arg name="MsgDat" value="登记抵价券明细表失败"/>
</Exec>
<Return/>
</If>
<!--登记营销流水表-->
<Set>RSP_CD=MKM00000</Set>
<Set>BUS_ACP_CNL=$BUS_CNL</Set>
<!--设置返回信息码类型RTN_MSC_TYP-->
<Set>RTN_MSC_TYP=N</Set>
<Set>TX_SYS_DT=$GWA.TX_DT</Set>
<Set>TX_SYS_TM=$GWA.TX_TM</Set>
<Set>TX_ACC_DT=$GWA.AC_DT</Set> <!--交易记账日期-->
<Set>RVS_TX_FLG=N</Set>
<Set>TX_STS=S</Set>
<!--调用组件查询出资方名称-->
<Set>MP_ID_TYP=$CAP_ID_TYP</Set>
<Set>MP_ID=$CAP_ID</Set>
<Call function="QueryMerProvName" package="MKM">
<Input>MP_ID_TYP|MP_ID|</Input>
<Output>MP_NM|MERC_PROV|MERC_CITY|MERC_CITY_NM|MSG_CD|MSG_DAT|</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>CAP_NM=@O.MP_NM</Set> <!--出资方名称-->
<Set>USE_TYP=0</Set>
<Set>CR_AMT=$BON_AMT</Set>
<Set>BON_BAL=$CUR_AC_BAL</Set>
<Set>REAL_MERC_ID=$MERC_ID</Set>
<Set>REAL_MERC_NM=$MERC_CNM</Set>
<Set>VCH_NO_TYP=0</Set>
<Set>VCH_NO=$JRN_NO</Set>
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="MKMTJNL"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg登记流水信息失败 -->
<Arg name="MsgCd" value="MKM22003"/>
<Arg name="MsgDat" value="登记流水信息失败"/>
</Exec>
<Return/>
</If>
<!-- 若非湖南省积分活动,登记积分兑换表 -->
<If condition="AND(IS_EQUAL_STRING($MKT_BON_FLG,1), IS_NOEQUAL_STRING($USR_PROV,18))">
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="INSERT_MKMTPOIEXG_RECORD" />
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg登记流水信息失败 -->
<Arg name="MsgCd" value="MKM22003"/>
<Arg name="MsgDat" value="登记流水信息失败"/>
</Exec>
<Return/>
</If>
<Exec func="PUB:InvokeService" error="IGNORE">
<Arg name="ServiceName" value="0302092"/>
<Arg name='Mode' value='NOTIFY'/>
<Arg name="LogID" value="OMKMPUB1"/>
<Arg name="ObjSvr" value="OMKMPUB1"/>
</Exec>
</If>
<!-- 更新营销券别表中的每日已发放数量、时间戳,此处不区分代金券与红包,检查数量时根据是否配置发行总数判断 -->
<Set>TM_SMT_CUR=GETDATETIME()</Set> <!-- 本次发放时间戳 -->
<!-- 上笔发放时期与当前发放日期不同,则每日发放数量重新计数 -->
<If condition="IS_NOEQUAL_STRING($LST_ISS_DT,$CUR_DT)">
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_MKMTPINF_DLY1"/>
</Exec>
<If condition="RetCod=2">
<Exec func="PUB:CmpSetMsg">
<!-- @msg 券别剩余发放金额不足 -->
<Arg name="MsgCd" value="MKM41324"/>
<Arg name="MsgDat" value="券别剩余发放金额不足"/>
</Exec>
<Exec func="PUB:RollbackWork" />
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg更新活动已发行额度失败 -->
<Arg name="MsgCd" value="MKM20703"/>
<Arg name="MsgDat" value="更新活动已发行额度失败"/>
</Exec>
<Return/>
</ElseIf>
</If>
<Else>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_MKMTPINF_DLY2"/>
</Exec>
<If condition="RetCod=2">
<Exec func="PUB:CmpSetMsg">
<!-- @msg 券别剩余发放金额不足 -->
<Arg name="MsgCd" value="MKM41324"/>
<Arg name="MsgDat" value="券别剩余发放金额不足"/>
</Exec>
<Exec func="PUB:RollbackWork" />
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg更新活动已发行额度失败 -->
<Arg name="MsgCd" value="MKM20703"/>
<Arg name="MsgDat" value="更新活动已发行额度失败"/>
</Exec>
<Return/>
</ElseIf>
</Else>
<!-- 输出参数,通知省平台调用 -->
<Set>OUT_DAT.CR_AMT=$CR_AMT</Set>
<Set>OUT_DAT.BON_ID=$BON_ID</Set>
<Set>OUT_DAT.EFF_DT=$EFF_DT</Set>
<Set>OUT_DAT.EXP_DT=$EXP_DT</Set>
<Set>OUT_DAT.ISS_ID=$ISS_ID</Set>
<Set>OUT_DAT.ISS_TYP=$ISS_TYP</Set>
<Set>OUT_DAT.PRD_TYP=$PRD_TYP</Set>
<Set>OUT_DAT.PRD_NM=$PRD_NM</Set>
<Exec func="PUB:CmpSetMsg">
<!-- @msg交易成功 -->
<Arg name="MsgCd" value="MKM00000"/>
<Arg name="MsgDat" value="交易成功"/>
</Exec>
</Process>
</Function>
</Package>