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

750 lines
36 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Package>
<!-- BonBack_OrderRate-->
<!-- BON_INP_DAT-节点名称 -->
<!--输入参数:MKT_ID 活动编号 必输 -->
<!-- ORD_NO 订单编号 必输 -->
<!-- MBL_NO 用户手机号 必输 -->
<!-- MERC_ID 商户编号 必输 -->
<!-- MERC_ORD_NO 商户订单编号 必输 -->
<!-- RT_AMT 退款金额 -->
<!-- SYS_CNL 系统渠道 必输 -->
<!-- BUS_CNL 业务渠道 必输 -->
<!-- BON_OUT_DAT-节点名称 -->
<!-- RT_AMT 退款处理部分总额 以元为单位 -->
<!-- EXP_AMT 过期处理部分总额 以元为单位-->
<!-- 订单直减退款组件 -->
<Function name="BonBack_OrderRate">
<Input>BON_INP_DAT|GWA|</Input>
<Output>BON_OUT_DAT|MSG_CD|MSG_DAT|</Output>
<!-- 查询流水表红包消费订单金额 -->
<DynSentence name="QRY_MKMTJNL_SUM">
<Sentence>
SELECT NVL(SUM(CASE WHEN TX_STS='S' AND USE_TYP='1' AND RVS_TX_FLG='N' THEN DR_AMT + NVL(USR_DR_AMT,0) ELSE 0 END),0)
-NVL(SUM(CASE WHEN TX_STS='S' AND USE_TYP='3' AND RVS_TX_FLG='R' THEN RT_AMT + NVL(USR_RT_AMT,0) ELSE 0 END),0) AS TOT_DR_AMT
FROM MKMTJNL
WHERE MERC_ORD_NO = ?
AND ORD_NO=?
AND MERC_ID=?
AND MBL_NO=?
AND MKT_ID=?
AND PRD_TYP='0'
AND USR_NO=?
</Sentence>
<Fields>MERC_ORD_NO|ORD_NO|MERC_ID|MBL_NO|MKT_ID|USR_NO|</Fields>
</DynSentence>
<!-- 查询流水表红包消费记录,红包过期日期,活动结算周期方式 -->
<DynSentence name="QRY_MKMTJNL">
<Sentence>
SELECT A.*,B.EXP_DT,B.PRD_ID,C.CAP_TYP, B.CUR_AC_BAL
FROM MKMTJNL A,MKMTBON B,MKMTACT C
WHERE A.MERC_ORD_NO = ?
AND A.ORD_NO = ?
AND A.MERC_ID = ?
AND A.MBL_NO = ?
AND A.USR_NO = ?
AND A.TX_STS='S'
AND A.USE_TYP='1'
AND C.MKT_ID=?
AND RVS_TX_FLG='N'
AND A.BON_ID=B.BON_ID
AND A.MKT_ID=C.MKT_IDR
AND B.MKT_ID=C.MKT_ID
AND A.PRD_TYP='0'
AND (A.RT_TYP != 'RA' OR A.RT_TYP IS NULL)
ORDER BY B.EXP_DT DESC
FOR UPDATE
</Sentence>
<Fields>MERC_ORD_NO|ORD_NO|MERC_ID|MBL_NO|USR_NO|MKT_ID|</Fields>
</DynSentence>
<!-- 查询已部分退款的总额 -->
<DynSentence name="QRY_MKMTJNL_PARTBACK">
<Sentence>
SELECT NVL(SUM(RT_AMT),0) AS RP_AMT, NVL(SUM(USR_RT_AMT),0) AS USR_RP_AMT
FROM MKMTJNL
WHERE TX_STS='S'
AND USE_TYP='3'
AND RVS_TX_FLG='R'
AND USR_NO = ?
AND BON_ID = ?
AND MERC_ORD_NO = ?
AND ORD_NO = ?
</Sentence>
<Fields>USR_NO|BON_ID|MERC_ORD_NO|ORD_NO|</Fields>
</DynSentence>
<!--查询该红包对应商户的结算方式-->
<DynSentence name="QRY_MKMTMERC">
<Sentence>
SELECT DISTINCT A.STL_PERD_FLG FROM MKMTMERC A, PAYADM.MKMTMERCRL B
WHERE A.MKT_ID = ?
AND (
(A.IS_GRP='0' AND A.MERC_ID = ? AND B.MERC_GRP='0')
OR
(A.IS_GRP='1' AND B.MERC_ID=? AND A.MERC_ID=B.MERC_GRP AND B.MERC_GRP &lt;&gt; '0')
)
AND A.MERC_STS='A'
AND B.MERC_ID=?
</Sentence>
<Fields>MKT_ID|MERC_ID|MERC_ID|MERC_ID|</Fields>
</DynSentence>
<!-- 更新流水表红包消费记录 -->
<DynSentence name="UPD_MKMTJNL">
<Sentence>
UPDATE MKMTJNL SET RT_TYP = ?
WHERE MERC_ORD_NO = ?
AND ORD_NO=?
AND MERC_ID=?
AND MBL_NO=?
AND TX_STS='S'
AND USE_TYP='1'
AND RVS_TX_FLG='N'
AND BON_ID=?
AND JRN_NO=?
</Sentence>
<Fields>RT_TYP|MERC_ORD_NO|ORD_NO|MERC_ID|MBL_NO|BON_ID|JRN_NO|</Fields>
</DynSentence>
<!-- 更新抵价券表中余额、状态 -->
<DynSentence name="UPD_MKMTBON">
<Sentence>
UPDATE MKMTBON
SET CUR_AC_BAL = CUR_AC_BAL + ?,
CUR_USR_AC_BAL = CUR_USR_AC_BAL + ?,
TM_SMP = TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'),
BON_STS = ?
WHERE BON_ID=?
AND BON_AMT &gt;= CUR_AC_BAL + ?
AND BON_USR_AMT &gt;= NVL(CUR_USR_AC_BAL,0) + ?
</Sentence>
<Fields>JRN_RT_AMT|USR_RT_AMT|BON_STS|BON_ID|JRN_RT_AMT|USR_RT_AMT|</Fields>
</DynSentence>
<!-- 更新券别的已失效金额 -->
<DynSentence name="UPD_MKMTPINF">
<Sentence>
UPDATE MKMTPINF SET NULL_TOT_AMT=NULL_TOT_AMT+? WHERE PRD_ID = ?
</Sentence>
<Fields>JRN_RT_AMT|PRD_ID|</Fields>
</DynSentence>
<!-- 更新发行方的已失效金额 -->
<DynSentence name="UPD_MKMTISS">
<Sentence>
UPDATE MKMTISS SET NULL_TOT_AMT=NULL_TOT_AMT+? WHERE ISS_ID=? AND MKT_ID=?
</Sentence>
<Fields>JRN_RT_AMT|ISS_ID|MKT_ID|</Fields>
</DynSentence>
<!-- 更新活动的已失效金额 -->
<DynSentence name="UPD_MKMTACT">
<Sentence>
UPDATE MKMTACT SET NULL_TOT_AMT=NULL_TOT_AMT+? WHERE MKT_ID=?
</Sentence>
<Fields>JRN_RT_AMT|MKT_ID|</Fields>
</DynSentence>
<!-- 读取商户汇总信息表 -->
<DynSentence name="QRY_MKMTMSUM_INF">
<Sentence>
SELECT * FROM MKMTMSUM
WHERE MERC_ID=?
AND MKT_ID=?
AND CAP_TYP=?
AND CAP_ID_TYP=?
AND CAP_ID=?
AND PERD_END_DT=?
AND ISS_ID=?
</Sentence>
<Fields>MERC_ID|MKT_ID|CAP_TYP|CAP_ID_TYP|CAP_ID|MTH_END_DT|ISS_ID|</Fields>
</DynSentence>
<!-- 查询商户归属省市信息 -->
<DynSentence name="QRY_URMTMINF_MER">
<Sentence>
SELECT USR_NO AS MERC_USR_NO,MERC_CNM,MERC_PROV,MERC_CITY,MERC_CITY_NM
FROM URMTMINF
WHERE MERC_ID=?
</Sentence>
<Fields>MERC_ID|</Fields>
</DynSentence>
<!-- 更新商户汇总信息表 -->
<DynSentence name="UPD_MKMTMSUM_INF">
<Sentence>
UPDATE MKMTMSUM
SET LAST_AC_BAL = CUR_AC_BAL,
LAST_TX_BAL = LAST_TX_BAL,
CUR_AC_BAL = CUR_AC_BAL - ?,
CUR_TX_BAL = CUR_TX_BAL - ?,
UPD_DT = ?,
TM_SMP = ?,
TOT_RT_AMT = NVL(TOT_RT_AMT, 0) + ?,
TOT_REAL_RT_AMT = NVL(TOT_REAL_RT_AMT, 0) + ?
WHERE MERC_ID = ?
AND MKT_ID = ?
AND CAP_TYP = ?
AND CAP_ID_TYP = ?
AND CAP_ID = ?
AND PERD_END_DT = ?
AND ISS_ID = ?
</Sentence>
<Fields>RT_AMT|JRN_RT_AMT|MKM_AC_DT|TM_SMP|RT_AMT|JRN_RT_AMT|MERC_ID|MKT_ID|CAP_TYP|CAP_ID_TYP|CAP_ID|MTH_END_DT|ISS_ID|</Fields>
</DynSentence>
<!-- 查询出资方全称 -->
<DynSentence name="QRY_CMMTPCOP_NM">
<Sentence>
SELECT PROV_LNM FROM CMMTPCOP WHERE PROV_CD=?
</Sentence>
<Fields>CAP_ID|</Fields>
</DynSentence>
<Process>
<Set>MKM_AC_DT=$GWA.AC_DT</Set>
<Set>SYS_DT=$GWA.TX_DT</Set>
<Set>SYS_TM=$GWA.TX_TM</Set>
<Set>MERC_ID=DELBOTHSPACE($BON_INP_DAT.MERC_ID)</Set>
<Set>MERC_ORD_NO=DELBOTHSPACE($BON_INP_DAT.MERC_ORD_NO)</Set>
<Set>ORD_NO=DELBOTHSPACE($BON_INP_DAT.ORD_NO)</Set>
<Set>RT_AMT_SUM=DELBOTHSPACE($BON_INP_DAT.RT_AMT)</Set> <!-- 退款电子券金额 -->
<Set>MBL_NO=DELBOTHSPACE($BON_INP_DAT.MBL_NO)</Set>
<Set>SYS_CNL=DELBOTHSPACE($BON_INP_DAT.SYS_CNL)</Set>
<Set>BUS_CNL=DELBOTHSPACE($BON_INP_DAT.BUS_CNL)</Set>
<Set>MKT_ID=DELBOTHSPACE($BON_INP_DAT.MKT_ID)</Set>
<Set>RT_TX_CD=$GWA.TX_CD</Set>
<Set>RT_SYS_CNL=$GWA.SYS_CNL</Set>
<Set>RT_BUS_CNL=$GWA.BUS_CNL</Set>
<Set>TN_AMT=0</Set> <!-- T+N红包金额 -->
<Set>PROV_TN_AMT=0</Set> <!-- T+N省公司出资部分金额 -->
<Set>USR_TN_AMT=0</Set> <!-- T+N用户出资部分金额 -->
<Set>MM_AMT=0</Set> <!-- 月结红包金额 -->
<Set>RT_AMT_TMP=$RT_AMT_SUM</Set> <!-- 退回红包金额临时值 -->
<Set>EXP_AMT=0</Set> <!-- 退回的红包金额包含的已过期部分金额 -->
<Set>TOT_RT_AMT=0</Set> <!-- 月结红包总退款金额 -->
<If condition="DOUBLECMP($RT_AMT_SUM,le,0)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65001"/>
<Arg name="MsgDat" value="退回的红包金额不能小于等于0"/>
</Exec>
<Return/>
</If>
<!-- @add 2012-11-09 -->
<!-- 调用手机号段查询 -->
<Set>INP_DAT.MBL_NO=$MBL_NO</Set>
<Call function="GetMobilNoSegmentNew" package="URM">
<Input>INP_DAT</Input>
<Output>OUT_DAT|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>
<If condition="IS_SUCC(@O.MSG_CD)=1">
<If condition="IS_NOEQUAL_STRING(@O.OUT_DAT.MBL_FLG,1)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MSG_CD" value="MKM51070"/>
<Arg name="MSG_INF" value="营销工具暂不支持异网用户"/>
</Exec>
<Return/>
</If>
</If>
<!-- end -->
<!--调用查询手机号或内部用户号的组件-->
<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_NO=#ORD_RAT_USR_NO</Set>
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTJNL_SUM"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65002"/>
<Arg name="MsgDat" value="查询退款订单的红包消费总额失败"/>
</Exec>
<Return/>
</If>
<If condition="DOUBLECMP($TOT_DR_AMT,lt,$RT_AMT_SUM)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65003"/>
<Arg name="MsgDat" value="退回的红包金额不能大于订单中的红包消费金额"/>
</Exec>
<Return/>
</If>
<!-- 开启游标查询红包消费订单信息 -->
<Exec func="PUB:OpenCursor">
<Arg name="SqlCmd" value="QRY_MKMTJNL"/>
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65004"/>
<Arg name="MsgDat" value="轮询抵价券消费订单信息失败"/>
</Exec>
<Return/>
</If>
<While>
<!-- 取下一笔记录 -->
<Exec func="PUB:FetchCursor" error="IGNORE">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<Break/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65004"/>
<Arg name="MsgDat" value="轮询抵价券消费订单信息失败"/>
</Exec>
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<Return/>
</ElseIf>
<!-- 需退红包金额为0时,跳出循环 -->
<If condition="AMTCMP($RT_AMT_TMP,0)=0">
<Break/>
</If>
<!-- 获取已退款记录 -->
<If condition="IS_EQUAL_STRING($RT_TYP,RP)">
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTJNL_PARTBACK" />
</Exec>
<If condition="~RetCod!=0">
<Continue />
</If>
<!-- 新增字段空值异常特殊处理 -->
<If condition="ISNULL($USR_DR_AMT)">
<Set>USR_DR_AMT=0</Set>
</If>
<If condition="ISNULL($USR_RP_AMT)">
<Set>USR_RP_AMT=0</Set>
</If>
<Set>DR_AMT=FSUB($DR_AMT,$RP_AMT,2)</Set> <!-- 省公司出资部分实际消费金额 -->
<Set>USR_DR_AMT=FSUB($USR_DR_AMT,$USR_RP_AMT,2)</Set> <!-- 用户出资部分实际消费金额 -->
<Set>JRN_DR_AMT=FADD($DR_AMT,$USR_DR_AMT,2)</Set> <!-- 单笔流水实际消费金额 -->
</If>
<Else>
<!-- 新增字段空值异常特殊处理 -->
<If condition="ISNULL($USR_DR_AMT)">
<Set>USR_DR_AMT=0</Set>
</If>
<If condition="ISNULL($USR_RP_AMT)">
<Set>USR_RP_AMT=0</Set>
</If>
<Set>DR_AMT=$DR_AMT</Set> <!-- 省公司出资部分实际消费金额 -->
<Set>USR_DR_AMT=$USR_DR_AMT</Set> <!-- 用户出资部分实际消费金额 -->
<Set>JRN_DR_AMT=FADD($DR_AMT,$USR_DR_AMT,2)</Set> <!-- 单笔流水实际消费金额 -->
</Else>
<!-- 设置流水表单条记录的退货红包金额 -->
<If condition="DOUBLECMP($JRN_DR_AMT,gt,$RT_AMT_TMP)"> <!-- 部分退红包 -->
<Set>JRN_RT_AMT=$RT_AMT_TMP</Set> <!-- 退货红包金额 -->
<Set>RT_TYP=RP</Set> <!-- 部分退红包标志 -->
</If>
<Else> <!-- 全部退红包 -->
<Set>JRN_RT_AMT=$JRN_DR_AMT</Set>
<Set>RT_TYP=RA</Set> <!-- 全部退红包标志 -->
</Else>
<!-- 更新流水表原消费记录 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTJNL"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65005"/>
<Arg name="MsgDat" value="更新抵价券交易流水表失败"/>
</Exec>
<Return/>
</If>
<If condition="INTCMP($SYS_DT,gt,$EXP_DT)">
<Set>EXP_AMT=ADDAMT($EXP_AMT,$JRN_RT_AMT)</Set>
<Set>BON_STS=E</Set>
<!-- 更新券别表已失效金额 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTPINF"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65006"/>
<Arg name="MsgDat" value="更新券别表失败"/>
</Exec>
<Return/>
</If>
<!-- 更新发行方表已失效金额 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTISS"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65006"/>
<Arg name="MsgDat" value="更新发行方表失败"/>
</Exec>
<Return/>
</If>
<!-- 更新活动表已失效金额 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTACT"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65007"/>
<Arg name="MsgDat" value="更新活动表失败"/>
</Exec>
<Return/>
</If>
</If>
<Else>
<Set>BON_STS=A</Set>
</Else>
<!-- 更新抵价券 -->
<If condition="DOUBLECMP($USR_DR_AMT,ge,$JRN_RT_AMT)"> <!-- 优先退用户出资部分的金额 -->
<Set>USR_RT_AMT=$JRN_RT_AMT</Set>
</If>
<Else>
<Set>USR_RT_AMT=$USR_DR_AMT</Set>
</Else>
<Set>RT_AMT=FSUB($JRN_RT_AMT,$USR_RT_AMT,2)</Set> <!-- 省公司出资部分的退款金额 -->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTBON"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65008"/>
<Arg name="MsgDat" value="更新抵价券信息失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Continue />
</ElseIf>
<!--查询该商户的结算类型-->
<!--
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_MKMTMERC"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM60020"/>
<Arg name="MsgDat" value="不存在该商户的结算方式"/>
</Exec>
<Return/>
</If>
-->
<!-- 统计退货的T+N红包金额 -->
<If condition="$STL_PERD_FLG=1">
<Set>PROV_TN_AMT=FADD($PROV_TN_AMT,$RT_AMT,2)</Set>
<Set>USR_TN_AMT=FADD($USR_TN_AMT,$USR_RT_AMT,2)</Set>
<Set>TN_AMT=ADDAMT($USR_TN_AMT,$PROV_TN_AMT)</Set>
<Set>CUR_MON_FIR=$MKM_AC_DT</Set>
<Set>MTH_END_DT=$MKM_AC_DT</Set>
</If>
<!--统计退货的月结红包金额 -->
<Else>
<Set>MM_AMT=ADDAMT($MM_AMT,$RT_AMT)</Set>
<Set>CUR_MON_FIR=STRCAT(SUBSTR($MKM_AC_DT,1,6),01)</Set> <!-- 本月初 -->
<Set>CUR_NEXT_MON=CALCDATE($MKM_AC_DT,+,m,1)</Set>
<Set>CUR_NEXT_FIR=STRCAT(SUBSTR($CUR_NEXT_MON,1,6),01)</Set>
<Set>MTH_END_DT=CALCDATE($CUR_NEXT_FIR,-,d,1)</Set> <!-- 本月末 -->
</Else>
<Set>JRN_NO=$GWA.JRN_NO</Set>
<Set>TX_CD=$RT_TX_CD</Set>
<Set>BUS_ACP_CNL=$RT_BUS_CNL</Set>
<Set>SYS_CNL=$RT_SYS_CNL</Set>
<Set>OAC_DT=$TX_ACC_DT</Set>
<Set>TX_SYS_DT=$SYS_DT</Set>
<Set>TX_SYS_TM=$SYS_TM</Set>
<Set>TX_ACC_DT=$MKM_AC_DT</Set>
<Set>RVS_TX_FLG=R</Set>
<Set>TX_STS=S</Set>
<Set>USE_TYP=3</Set>
<Set>DR_AMT=0</Set>
<Set>USR_DR_AMT=0</Set>
<Set>RT_TYP=</Set>
<Set>CR_AMT=0</Set>
<Set>RT_AMT=$RT_AMT</Set>
<Set>USR_RT_AMT=$USR_RT_AMT</Set>
<Set>BON_BAL=ADDAMT($CUR_AC_BAL,$JRN_RT_AMT)</Set>
<Set>ORD_AMT=$RT_AMT_SUM</Set>
<Set>AC_DT=$MKM_AC_DT</Set>
<Set>TM_SMP=GETDATETIME()</Set>
<!-- 登记红包退回交易流水 -->
<Exec func="PUB:InsertRecord">
<Arg name="TblNam" value="MKMTJNL"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65009"/>
<Arg name="MsgDat" value="登记红包退回流水失败"/>
</Exec>
<Return/>
</If>
<!-- 更新商户汇总表 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_MKMTMSUM_INF"/>
</Exec>
<If condition="~RetCod=0">
<Set>TM_SMP=GETDATETIME()</Set>
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_MKMTMSUM_INF"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65010"/>
<Arg name="MsgDat" value="更新商户使用营销工具汇总表失败"/>
</Exec>
<Return/>
</If>
</If>
<ElseIf condition="~RetCod=2">
<!--查询出资方全称-->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_CMMTPCOP_NM"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65011"/>
<Arg name="MsgDat" value="查询出资方全称失败"/>
</Exec>
<Return/>
</If>
<Set>CAP_NM=$PROV_LNM</Set>
<!-- 查询商户归属省市信息 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_URMTMINF_MER"/>
</Exec>
<Set>MERC_PROV=$MERC_PROV</Set> <!--商户归属省-->
<Set>MERC_CITY=$MERC_CITY</Set> <!--商户归属市-->
<Set>INV_STS=0</Set> <!--待确定 发票状态 0-正常 1-冻结 2-已结算-->
<Set>LAST_AC_BAL=0</Set> <!--上日余额-->
<Set>LAST_TX_BAL=0</Set> <!--上日消费余额-->
<Set>CUR_AC_BAL=STRCAT(-,$RT_AMT)</Set> <!--当日待开发票部分余额-->
<Set>CUR_TX_BAL=STRCAT(-,$JRN_RT_AMT)</Set> <!--当前消费总结余(包含用户出资部分)-->
<Set>TOT_RT_AMT=$RT_AMT</Set> <!--待开发票部分退款总额 -->
<Set>TOT_REAL_RT_AMT=$JRN_RT_AMT</Set> <!--实际退款总额 (包含用户出资部分)-->
<Set>TOT_TX_AMT=0</Set> <!--当日交易额:这里不记,由日终批量记 -->
<Set>TOT_REAL_TX_AMT=0</Set> <!--当日实际交易额:这里不记,由日终批量记 -->
<Set>TXN_TOT_CNT=0</Set> <!--当日交易笔数-->
<Set>UPD_DT=$MKM_AC_DT</Set> <!--记帐日期-->
<Set>UPD_JRN=$GWA.JRN_NO</Set> <!--最后交易流水号-->
<Set>PERD_END_DT=$MTH_END_DT</Set>
<Set>PERD_BEG_DT=$CUR_MON_FIR</Set>
<Set>CLR_FLG=0</Set>
<If condition="$CAP_ID_TYP=0"> <!-- 移动出资设置发票标识 -->
<If condition="$CAP_TYP=3"> <!-- 资金类型为红包的要开发票 -->
<Set>IS_INV_FLG=Y</Set>
</If>
<Else>
<Set>IS_INV_FLG=N</Set>
</Else>
</If>
<Exec func="PUB:InsertRecord">
<Arg name="TblNam" value="MKMTMSUM"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65012"/>
<Arg name="MsgDat" value="登记商户使用营销工具汇总表失败"/>
</Exec>
<Return/>
</If>
</ElseIf>
<Else>
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM65013"/>
<Arg name="MsgDat" value="查询商户使用营销工具汇总表失败"/>
</Exec>
<Return/>
</Else>
<Set>RT_AMT_TMP=FSUB($RT_AMT_TMP,$JRN_RT_AMT,2)</Set>
</While>
<!-- 关闭游标 -->
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<!-- 查询商户归属省市信息 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_URMTMINF_MER"/>
</Exec>
<!-- 一点结算电子券需做账务处理 -->
<If condition="DOUBLECMP($TN_AMT,gt,0)">
<!--省公司出资的做记账处理: 贷记处理-->
<If condition="DOUBLECMP($PROV_TN_AMT,gt,0)">
<Set>INNER_DEPOSIT_IN.AC_CD=#IN_MKM_AC_CD3</Set> <!--账户代码-->
<Set>INNER_DEPOSIT_IN.AC_TYP=#IN_MKM_AC_TYP3</Set> <!--账户种类-->
<Set>INNER_DEPOSIT_IN.AC_NM= </Set> <!--账户名称-->
<Set>INNER_DEPOSIT_IN.CAP_TYP=1</Set> <!--资金种类 1-现金 2-充值卡-->
<Set>INNER_DEPOSIT_IN.AMT=$PROV_TN_AMT</Set> <!--支取金额-->
<Set>INNER_DEPOSIT_IN.TX_DT=$SYS_DT</Set> <!--原始交易日期-->
<Set>INNER_DEPOSIT_IN.TX_TM=$SYS_TM</Set> <!--原始交易时间-->
<Set>INNER_DEPOSIT_IN.TX_CD=$GWA.TX_CD</Set> <!--交易码-->
<Set>INNER_DEPOSIT_IN.TX_TYP=#PAY_TX_TYP</Set> <!--消费交易类型-->
<Set>INNER_DEPOSIT_IN.BUS_TYP=#PAY_BUS_TYP</Set> <!--业务类型-->
<Set>INNER_DEPOSIT_IN.TX_OPP_TYP=1</Set> <!--交易对手类型 0-用户 1-商户-->
<Set>INNER_DEPOSIT_IN.TX_OPP_CD=$MERC_USR_NO</Set> <!--交易对手编号,现场的该值为空-->
<Set>INNER_DEPOSIT_IN.ORD_TYP=00</Set> <!--订单类型-->
<Set>INNER_DEPOSIT_IN.ORD_NO=$GWA.JRN_NO</Set> <!--内部订单号,不存在取JRN_NO-->
<Set>INNER_DEPOSIT_IN.MERC_ID=$MERC_ID</Set> <!--入账商户编号-->
<Set>INNER_DEPOSIT_IN.TX_AMT=$ORD_AMT</Set> <!--对应原始金额-->
<Set>INNER_DEPOSIT_IN.VCH_NO_TYP=0</Set> <!--传票号类型 0-交易流水号-->
<Set>INNER_DEPOSIT_IN.VCH_NO=$GWA.JRN_NO</Set> <!--传票号-->
<Call function="InnerMkmDeposit" package="MKM">
<Input>INNER_DEPOSIT_IN|GWA|</Input>
<Output>INNER_DEPOSIT_OUT|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>
</If>
<!--用户出资的做记账处理: 贷记处理-->
<If condition="DOUBLECMP($USR_TN_AMT,gt,0)">
<Set>INNER_DEPOSIT_IN.AC_CD=#IN_MKM_AC_CD4</Set> <!--账户代码-->
<Set>INNER_DEPOSIT_IN.AC_TYP=#IN_MKM_AC_TYP4</Set> <!--账户种类-->
<Set>INNER_DEPOSIT_IN.AC_NM= </Set> <!--账户名称-->
<Set>INNER_DEPOSIT_IN.CAP_TYP=1</Set> <!--资金种类 1-现金 2-充值卡-->
<Set>INNER_DEPOSIT_IN.AMT=$USR_TN_AMT</Set> <!--支取金额-->
<Set>INNER_DEPOSIT_IN.TX_DT=$SYS_DT</Set> <!--原始交易日期-->
<Set>INNER_DEPOSIT_IN.TX_TM=$SYS_TM</Set> <!--原始交易时间-->
<Set>INNER_DEPOSIT_IN.TX_CD=$GWA.TX_CD</Set> <!--交易码-->
<Set>INNER_DEPOSIT_IN.TX_TYP=#PAY_TX_TYP</Set> <!--消费交易类型-->
<Set>INNER_DEPOSIT_IN.BUS_TYP=#PAY_BUS_TYP</Set> <!--业务类型-->
<Set>INNER_DEPOSIT_IN.TX_OPP_TYP=1</Set> <!--交易对手类型 0-用户 1-商户-->
<Set>INNER_DEPOSIT_IN.TX_OPP_CD=$MERC_USR_NO</Set> <!--交易对手编号,现场的该值为空-->
<Set>INNER_DEPOSIT_IN.ORD_TYP=00</Set> <!--订单类型-->
<Set>INNER_DEPOSIT_IN.ORD_NO=$GWA.JRN_NO</Set> <!--内部订单号,不存在取JRN_NO-->
<Set>INNER_DEPOSIT_IN.MERC_ID=$MERC_ID</Set> <!--入账商户编号-->
<Set>INNER_DEPOSIT_IN.TX_AMT=$ORD_AMT</Set> <!--对应原始金额-->
<Set>INNER_DEPOSIT_IN.VCH_NO_TYP=0</Set> <!--传票号类型 0-交易流水号-->
<Set>INNER_DEPOSIT_IN.VCH_NO=$GWA.JRN_NO</Set> <!--传票号-->
<Call function="InnerMkmDeposit" package="MKM">
<Input>INNER_DEPOSIT_IN|GWA|</Input>
<Output>INNER_DEPOSIT_OUT|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>
</If>
<!--Modify by Liuql 入账商户和扣款商户换成该交易商户的清分商户 beg-->
<Set>QMI_IN.MERC_ID=$MERC_ID</Set>
<Exec func="URM:QueryMerchInfo">
<Arg name="_I_INP_DAT" value="QMI_IN" />
<Arg name="_O_OUT_DAT" value="QMI_OUT" />
</Exec>
<If condition="NOT(IS_SUCC(@O.MSG_CD))"> <!--查询商户基本信息失败 -->
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
<Arg name="MsgDat" value="查询商户基本信息失败" />
</Exec>
<Return />
</If>
<Else>
<Set>CLR_MERC=@O.QMI_OUT.CLR_MERC</Set> <!-- 清算商户 -->
</Else>
<!--T+N红包当成商户现金实时退款 -->
<Set>MERCWITHDRAW_IN.USR_NO= </Set>
<Set>MERCWITHDRAW_IN.MERC_ID1=$CLR_MERC</Set>
<!--Modify by Liuql 入账商户和扣款商户换成该交易商户的清分商户 end-->
<Set>MERCWITHDRAW_IN.CAP_TYP1=1</Set>
<Set>MERCWITHDRAW_IN.AMT1=$TN_AMT</Set>
<Set>MERCWITHDRAW_IN.TX_DT=$SYS_DT</Set>
<Set>MERCWITHDRAW_IN.TX_CD=$GWA.TX_CD</Set>
<Set>MERCWITHDRAW_IN.TX_TM=$SYS_TM</Set>
<Set>MERCWITHDRAW_IN.TX_TYP=53</Set> <!-- 交易类型:53 红包退款 -->
<Set>MERCWITHDRAW_IN.BUS_TYP=#PAY_BUS_TYP</Set>
<Set>MERCWITHDRAW_IN.ORD_TYP=00</Set>
<Set>MERCWITHDRAW_IN.ORD_NO=$GWA.JRN_NO</Set>
<Set>MERCWITHDRAW_IN.VCH_NO_TYP=0</Set>
<Set>MERCWITHDRAW_IN.VCH_NO=$GWA.JRN_NO</Set>
<Set>MERCWITHDRAW_IN.BAL_OD_FLG=Y</Set>
<Set>MERCWITHDRAW_IN.TX_DESC=T+N红包退款</Set>
<Set>MERCWITHDRAW_IN.TX_OPP_TYP=0</Set>
<Set>MERCWITHDRAW_IN.TX_OPP_CD=$USR_NO</Set>
<Call function="InnerMercWithDraw" package="MKM">
<Input>MERCWITHDRAW_IN|GWA|</Input>
<Output>MERCWITHDRAW_OUT|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>
</If>
<Set>OUT_DAT.MM_AMT=$MM_AMT</Set>
<Set>OUT_DAT.TN_AMT=$TN_AMT</Set>
<Set>OUT_DAT.EXP_AMT=$EXP_AMT</Set>
<If condition="DOUBLECMP($EXP_AMT,gt,0)">
<Set>RT_AMT=FSUB($JRN_RT_AMT,$EXP_AMT,2)</Set>
</If>
<Set>BON_OUT_DAT.RT_AMT=$RT_AMT</Set>
<Exec func="PUB:CmpSetMsg">
<!-- @msg交易成功 -->
<Arg name="MsgCd" value="MKM00000"/>
<Arg name="MsgDat" value="交易成功"/>
</Exec>
</Process>
</Function>
</Package>