Files
2021-01-12 23:30:48 +08:00

831 lines
35 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<FrontTab>
<!--删除关键域避免重复-->
<Macro name="DeleMercFields">
<Delete>MERC_ID</Delete>
<Delete>MERC_TYP</Delete>
<Delete>MERC_NAM</Delete>
</Macro>
<!--计算商户交易金额及手续费-->
<Macro name="CalcMercAmtFee">
<!--代收商户计算交易金额、手续费及交易净额-->
<Quote name="CalcRecMercAmtFee"/>
<!--判断该商户交易总金额是否为0-->
<If condition="DOUBLECMP($TO_MERC_AMT,4,0)">
<!--计算商户的代收的交易金额、手续费及交易净额-->
<Quote name="InsertCapStlReg"/>
<!--判断手续费是否空-->
<If condition="IS_EQUAL_STRING($FEE_PERD_UNIT,NULL)">
<Delete>FEE_PERD_UNIT</Delete>
<Delete>FEE_PERD_NUM</Delete>
</If>
<!--计算商户的代收的交易金额、手续费-->
<Quote name="InsertCapStlFee"/>
</If>
<!--删除关键域-->
<Delete>TO_MERC_AMT</Delete>
<Delete>TO_MERC_SUCC_CNT</Delete>
<Delete>TO_MERC_FEE_AMT</Delete>
<Delete>TO_MERC_STL_AMT</Delete>
<!--代付商户计算交易金额、手续费及交易净额-->
<Quote name="CalcPayMercAmtFee"/>
<!--判断该商户交易总金额是否为0-->
<If condition="DOUBLECMP($TO_MERC_AMT,4,0)">
<!--计算商户的代收代付的交易金额、手续费及交易净额-->
<Quote name="InsertCapStlReg"/>
<!--判断手续费是否空-->
<If condition="IS_EQUAL_STRING($FEE_PERD_UNIT,NULL)">
<Delete>FEE_PERD_UNIT</Delete>
<Delete>FEE_PERD_NUM</Delete>
</If>
<!--计算商户的代收的交易金额、手续费-->
<Quote name="InsertCapStlFee"/>
</If>
<!--删除关键域-->
<Delete>TO_MERC_AMT</Delete>
<Delete>TO_MERC_SUCC_CNT</Delete>
<Delete>TO_MERC_FEE_AMT</Delete>
<Delete>TO_MERC_STL_AMT</Delete>
<!--更新商户下一个结算日期-->
<Quote name="UpdMercNextStlDate"/>
</Macro>
<!--代收商户计算交易金额、手续费及交易净额-->
<Macro name="CalcRecMercAmtFee">
<!-- 支付类型 11:代收 -->
<Set>PAY_TYP=11</Set>
<!-- 订单类型 11:代收 -->
<Set>ORD_TYP=11</Set>
<!-- 计算代收的商户交易金额、手续费及交易净额 -->
<Call package="MERC" function="CAL_STLMOD_0_MERC_AMT_FEE_FUNC">
<Input>GWA|ORD_TYP|PAY_TYP|STL_DT|STL_MOD|STL_PERD|STL_DAY|STL_DAY_BIT|STL_TRF_DAYS|NEXT_STL_DT|MERC_ID|MERC_TYP|MERC_NAM|</Input>
<Output>MSG_CD|STL_STT_DT|STL_END_DT|MERC_SUCC_CNT|MERC_AMT|MERC_FEE_AMT|MERC_STL_AMT|MERC_FEE_CAL_MTH|MERC_FEE_MOD|</Output>
</Call>
<!--记录不存在-->
<If condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),22222)">
<!--清算开始日期-->
<Set>STL_STT_DT=@O.STL_STT_DT</Set>
<!--清算结束日期-->
<Set>STL_END_DT=@O.STL_END_DT</Set>
<!--代收成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代收交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代收手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<!--代收商户净额-->
<Set>TO_MERC_STL_AMT=@O.MERC_STL_AMT</Set>
<!--计费方法-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--计费方法-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<Set>Rsp_Cd=222222</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代收商户在清算明细表无数据,无需计算手续费)</Set>
</If>
<ElseIf condition="AND(IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000),IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),11111))">
<Set>MSG=@O.MSG_CD</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代收商户计算手续费失败)</Set>
<Continue/>
</ElseIf>
<ElseIf condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),11111)">
<!--清算开始日期-->
<Set>STL_STT_DT=@O.STL_STT_DT</Set>
<!--清算结束日期-->
<Set>STL_END_DT=@O.STL_END_DT</Set>
<!--代收成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代收交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代收手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<!--代收商户净额-->
<Set>TO_MERC_STL_AMT=@O.MERC_STL_AMT</Set>
<!--计费方法-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--计费方法-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<Set>Rsp_Cd=222222</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代收商户在商户服务费费率表没有记录,无需计算手续费)</Set>
</ElseIf>
<Else>
<!--清算开始日期-->
<Set>STL_STT_DT=@O.STL_STT_DT</Set>
<!--清算结束日期-->
<Set>STL_END_DT=@O.STL_END_DT</Set>
<!--代收成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代收交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代收手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<!--代收商户净额-->
<Set>TO_MERC_STL_AMT=@O.MERC_STL_AMT</Set>
<!--计费方法-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--计费方法-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<Set>Rsp_Cd=000000</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代收商户计算代收商户手续费成功)</Set>
</Else>
</Macro>
<!--代付商户计算交易金额、手续费及交易净额-->
<Macro name="CalcPayMercAmtFee">
<!-- 支付类型 12:代付 -->
<Set>PAY_TYP=12</Set>
<!-- 订单类型 12:代付 -->
<Set>ORD_TYP=12</Set>
<!-- 计算代付的商户交易金额、手续费及交易净额 -->
<Call package="MERC" function="CAL_STLMOD_0_MERC_AMT_FEE_FUNC">
<Input>GWA|ORD_TYP|PAY_TYP|STL_DT|STL_MOD|STL_PERD|STL_DAY|STL_DAY_BIT|STL_TRF_DAYS|NEXT_STL_DT|MERC_ID|MERC_TYP|MERC_NAM|</Input>
<Output>MSG_CD|STL_STT_DT|STL_END_DT|MERC_SUCC_CNT|MERC_AMT|MERC_FEE_AMT|MERC_STL_AMT|MERC_FEE_CAL_MTH|MERC_FEE_MOD|</Output>
</Call>
<!--记录不存在-->
<If condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),22222)">
<!--清算开始日期-->
<Set>STL_STT_DT=@O.STL_STT_DT</Set>
<!--清算结束日期-->
<Set>STL_END_DT=@O.STL_END_DT</Set>
<!--代付成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代付交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代付手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<!--代付商户净额-->
<Set>TO_MERC_STL_AMT=@O.MERC_STL_AMT</Set>
<!--收费方式-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--计费方法-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<Set>Rsp_Cd=222222</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代付商户清算明细表无数据,无需计算手续费)</Set>
</If>
<ElseIf condition="AND(IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000),IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),11111))">
<Set>MSG=@O.MSG_CD</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代付商户计算代收商户手续费失败)</Set>
<!--更新系统清算控制表-->
<Set>MERC_CLR_STS=2</Set>
<Quote name="UpdMercCapDayCtl"/>
<Return/>
</ElseIf>
<ElseIf condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),11111)">
<!--清算开始日期-->
<Set>STL_STT_DT=@O.STL_STT_DT</Set>
<!--清算结束日期-->
<Set>STL_END_DT=@O.STL_END_DT</Set>
<!--代付成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代付交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代付手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<!--代付商户净额-->
<Set>TO_MERC_STL_AMT=@O.MERC_STL_AMT</Set>
<!--收费方式-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--计费方法-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<Set>Rsp_Cd=222222</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代付商户在商户服务费费率表没有记录,无需计算手续费)</Set>
</ElseIf>
<Else>
<!--清算开始日期-->
<Set>STL_STT_DT=@O.STL_STT_DT</Set>
<!--清算结束日期-->
<Set>STL_END_DT=@O.STL_END_DT</Set>
<!--代付成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代付交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代付手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<!--代付商户净额-->
<Set>TO_MERC_STL_AMT=@O.MERC_STL_AMT</Set>
<!--收费方式-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--计费方法-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<Set>Rsp_Cd=000000</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,代付商户计算代收商户手续费成功)</Set>
</Else>
</Macro>
<!--计算商户的代收代付的总交易金额、手续费及交易净额-->
<Macro name="InsertCapStlReg">
<!--收支两条线,不插入手续费-->
<If condition="IS_EQUAL_STRING($STL_MOD,1)">
<!--商户手续费-->
<Set>TO_MERC_FEE_AMT=0</Set>
</If>
<!--代收代付商户清算登记表-->
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="CAPSTLREG"/>
</Exec>
<If condition="~RetCod = -1">
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,商户对应的,$PAY_TYP,插入代收代付商户清算登记表CAPSTLREG表失败)</Set>
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="STL99999"/>
<Arg name="MsgDat" value="插入代收代付商户清算登记表CAPSTLREG表失败"/>
</Exec>
<!--更新系统清算控制表-->
<Set>MERC_CLR_STS=2</Set>
<Quote name="UpdMercCapDayCtl"/>
<Return/>
</If>
</Macro>
<!--更新商户下一个结算日期-->
<Macro name="UpdMercNextStlDate">
<!-- 计算商户下一个结算日期 -->
<!--结算周期 0:日 1:周 2:旬 3:月 4:季 5:半年 6:年 7:指定日-->
<Set>INP_STL.STL_PERD=$STL_PERD</Set>
<!-- 结算日 -->
<Set>INP_STL.STL_DAY=$STL_DAY</Set>
<!--结算日标识位 -->
<Set>INP_STL.STL_DAT_FLG=$STL_DAY_BIT</Set>
<!-- 联机批量标识 Y:批量 -->
<Set>INP_STL.BAT_FLG=Y</Set>
<!-- 计算下一计算日 -->
<Exec func="URM:CalculateSTLDate">
<Arg name="_I_INP_DAT" value="INP_STL" />
<Arg name="_O_OUT_DAT" value="OUT_STL" />
</Exec>
<If condition="~RetCod!=0">
<!--@msg 计算商户结算日失败 -->
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=计算商户结算日失败</Set>
<Continue/>
</If>
<If condition='IS_SUCC(@O.MSG_CD)=0'>
<Set>MSG_CD=@O.MSG_CD</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=计算商户结算日失败,错误码为$MSG_CD</Set>
<Continue/>
</If>
<!-- 下一结算日 -->
<Set>NEXT_STL_DT=@O.OUT_STL.STL_DT</Set>
<!-- 上一结算日 -->
<Set>LAST_STL_DT=$STL_DT</Set>
<!-- 更新商户结算信息-->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_URMTMSTL" />
</Exec>
<If condition="~RetCod!=0">
<Set>TBNM=URMTMSTL</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=STRCAT($TBNM,更新失败)</Set>
<Continue/>
</If>
<Delete>NEXT_STL_DT</Delete>
</Macro>
<!--收支两条线代收代付手续费到期日计算-->
<Macro name="IsStlMod1MercFeeStlDate">
<!--代收商户手续费到达手续费清算日-->
<Quote name="IsStlMod1RecMercFeeStlDate"/>
<!--手续费收费周期单位,字段非空,需要计算收取的手续费-->
<If condition="IS_NOEQUAL_STRING($FEE_PERD_UNIT,NULL)">
<!--计算代收商户手续费-->
<Quote name="CalcStlMod1RecMercFee"/>
<!--判断该商户交易总金额是否为0-->
<If condition="DOUBLECMP($TO_MERC_AMT,4,0)">
<!--计算商户的代收的交易金额、手续费及交易净额-->
<Quote name="InsertCapStlFee"/>
</If>
<!--删除关键域-->
<Delete>TO_MERC_SUCC_CNT</Delete>
<Delete>TO_MERC_FEE_AMT</Delete>
<Delete>TO_MERC_AMT</Delete>
<!--更新代收商户下一个手续费结算日期-->
<!--Quote name="UpdStlMod1RecMercNextFeeDate"/-->
</If>
<Else>
<Set>Rsp_Msg=STRCAT($MERC_ID,手续费率为空或者清算数据无记录)</Set>
</Else>
<!--代付商户手续费到达手续费清算日-->
<Quote name="IsStlMod1PayMercFeeStlDate"/>
<!--手续费收费周期单位 字段非空-->
<If condition="IS_NOEQUAL_STRING($FEE_PERD_UNIT,NULL)">
<!--计算代付商户手续费-->
<Quote name="CalcStlMod1PayMercFee"/>
<!--判断该商户交易总金额是否为0-->
<If condition="DOUBLECMP($TO_MERC_AMT,4,0)">
<!--计算商户的代付的交易金额、手续费及交易净额-->
<Quote name="InsertCapStlFee"/>
</If>
<!--删除关键域-->
<Delete>TO_MERC_SUCC_CNT</Delete>
<Delete>TO_MERC_FEE_AMT</Delete>
<Delete>TO_MERC_AMT</Delete>
<!--更新代付商户下一个手续费结算日期-->
<!--Quote name="UpdStlMod1PayMercNextFeeDate"/-->
</If>
<Else>
<Set>Rsp_Msg=STRCAT($MERC_ID,手续费率为空或者清算数据无记录)</Set>
</Else>
</Macro>
<!--判断代收商户是否到达手续费结算日期-->
<Macro name="IsStlMod1RecMercFeeStlDate">
<Set>Rsp_Msg=STRCAT($MERC_ID,判断代收手续费是否到了收费日期)</Set>
<!--判断代收商户是否到达手续费结算日期-->
<!--11 代收-->
<!-- 支付类型 11:代收 -->
<Set>PAY_TYP=11</Set>
<!-- 订单类型 11:代收 -->
<Set>ORD_TYP=11</Set>
<!--查询收支两条线对应商户费率-->
<Call package="MERC" function="IS_STLMOD_1_MERC_NEXT_FEE_DATE_FUNC">
<Input>GWA|ORD_TYP|PAY_TYP|STL_DT|STL_MOD|MERC_ID|MERC_TYP|MERC_NAM|</Input>
<Output>MSG_CD|FEE_PERD_UNIT|FEE_PERD_NUM|MERC_FEE_MOD|MERC_FEE_CAL_MTH|NEXT_FEE_DT|</Output>
</Call>
<!--手续费到了结算日期-->
<If condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000)">
<Set>Rsp_Cd=000000</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代收的收支两条线商户已经到了收费日期)</Set>
<!--手续费收费周期单位 0: 年 1: 月 2: 日-->
<Set>FEE_PERD_UNIT=@O.FEE_PERD_UNIT</Set>
<!--手续费收费同期数量-->
<Set>FEE_PERD_NUM=@O.FEE_PERD_NUM</Set>
<!--代收收费方式 0:不收取 1:实时单笔收取 2:单笔计算、按周期收取 3:按周期汇总计算并收取-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--1:按固定金额收取 2:按金额固定百分比收取-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<!--手续费的下一个结算日-->
<Set>NEXT_FEE_DT=@O.NEXT_FEE_DT</Set>
</If>
<ElseIf condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),11111)">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代收的收支两条线商户在商户服务费费率表没有记录)</Set>
<!--手续费收费周期单位 0: 年 1: 月 2: 日-->
<Set>FEE_PERD_UNIT=@O.FEE_PERD_UNIT</Set>
<!--手续费收费同期数量-->
<Set>FEE_PERD_NUM=@O.FEE_PERD_NUM</Set>
<!--代收收费方式 0:不收取 1:实时单笔收取 2:单笔计算、按周期收取 3:按周期汇总计算并收取-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--1:按固定金额收取 2:按金额固定百分比收取-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<!--手续费的下一个结算日-->
<Set>NEXT_FEE_DT=@O.NEXT_FEE_DT</Set>
<!--代收成功笔数-->
<Set>TO_MERC_SUCC_CNT=0</Set>
<!--代收交易金额-->
<Set>TO_MERC_AMT=0</Set>
<!--代收手续费金额-->
<Set>TO_MERC_FEE_AMT=0</Set>
</ElseIf>
<ElseIf condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),22222)">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代收的收支两条线商户没有到收费日期)</Set>
<!--手续费收费周期单位 0: 年 1: 月 2: 日-->
<Set>FEE_PERD_UNIT=@O.FEE_PERD_UNIT</Set>
<!--手续费收费同期数量-->
<Set>FEE_PERD_NUM=@O.FEE_PERD_NUM</Set>
<!--代收收费方式 0:不收取 1:实时单笔收取 2:单笔计算、按周期收取 3:按周期汇总计算并收取-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--1:按固定金额收取 2:按金额固定百分比收取-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<!--手续费的下一个结算日-->
<Set>NEXT_FEE_DT=@O.NEXT_FEE_DT</Set>
<!--代收成功笔数-->
<Set>TO_MERC_SUCC_CNT=0</Set>
<!--代收交易金额-->
<Set>TO_MERC_AMT=0</Set>
<!--代收手续费金额-->
<Set>TO_MERC_FEE_AMT=0</Set>
</ElseIf>
<Else>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=查询代收的收支两条线对应商户费率失败</Set>
<Continue/>
</Else>
</Macro>
<!--收支两条线代收商户计算手续费-->
<Macro name="CalcStlMod1RecMercFee">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代收的收支两条线商户开始计算代收商户手续费)</Set>
<!-- 支付类型 11:代收 -->
<Set>PAY_TYP=11</Set>
<!-- 订单类型 11:代收 -->
<Set>ORD_TYP=11</Set>
<Set>MERC_FEE_MOD=$MERC_FEE_MOD</Set>
<!-- 计算代收的商户手续费 -->
<Call package="MERC" function="CAL_STLMOD_1_MERC_FEE_FUNC">
<Input>GWA|ORD_TYP|PAY_TYP|STL_DT|STL_MOD|NEXT_FEE_DT|MERC_ID|MERC_TYP|MERC_NAM|MERC_FEE_MOD|</Input>
<Output>MSG_CD|MERC_SUCC_CNT|MERC_AMT|MERC_FEE_AMT|</Output>
</Call>
<!--记录不存在-->
<If condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),22222)">
<!--代收成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代收交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代收手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<Set>Rsp_Cd=222222</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代收商户清算明细表无数据,无需计算手续费)</Set>
</If>
<ElseIf condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000)">
<Set>MSG=@O.MSG_CD</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=计算代收商户手续费失败</Set>
<!--更新系统清算控制表-->
<Set>MERC_CLR_STS=2</Set>
<Quote name="UpdMercCapDayCtl"/>
<Return/>
</ElseIf>
<Else>
<!--代收成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代收交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代收手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,计算商户手续费成功)</Set>
</Else>
</Macro>
<!--更新代收商户下一个手续费结算日期-->
<Macro name="UpdStlMod1RecMercNextFeeDate">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,更新代收商户下一个手续费结算日期)</Set>
<!--计算手续费的下一个结算日,按日-->
<If condition="INTCMP($FEE_PERD_UNIT,3,2)">
<Set>NEXT_FEE_DT=CALCDATE($NEXT_FEE_DT,+,d,$FEE_PERD_NUM)</Set>
</If>
<!--计算手续费的下一个结算日,按月-->
<ElseIf condition="INTCMP($FEE_PERD_UNIT,3,2)">
<Set>NEXT_FEE_DT=CALCDATE($NEXT_FEE_DT,+,m,$FEE_PERD_NUM)</Set>
</ElseIf>
<!--计算手续费的下一个结算日,按年-->
<ElseIf condition="INTCMP($FEE_PERD_UNIT,3,2)">
<Set>NEXT_FEE_DT=CALCDATE($NEXT_FEE_DT,+,y,$FEE_PERD_NUM)</Set>
</ElseIf>
<Else>
<!--@msg 计算商户结算日失败 -->
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=计算代收手续费率下一个收费日期失败</Set>
<Continue/>
</Else>
<!-- 更新商户手续费率-->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_URMTMFEE" />
</Exec>
<If condition="~RetCod!=0">
<Set>TBNM=URMTMFEE</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=$TBNM</Set>
<Continue/>
</If>
<Delete>NEXT_FEE_DT</Delete>
</Macro>
<!--判断代付商户是否到达手续费结算日期-->
<Macro name="IsStlMod1PayMercFeeStlDate">
<Set>Rsp_Msg=STRCAT($MERC_ID,判断代付手续费是否到了收费日期)</Set>
<!-- 订单支付类型 1:普通直接支付 11:代收 12:代付 -->
<Set>PAY_TYP=12</Set>
<!-- 订单类型 00:远程消费 01:充值 02:提现 08:转账 11:代收 12:代付 -->
<Set>ORD_TYP=12</Set>
<!--查询收支两条线对应商户费率-->
<Call package="MERC" function="IS_STLMOD_1_MERC_NEXT_FEE_DATE_FUNC">
<Input>GWA|ORD_TYP|PAY_TYP|STL_DT|STL_MOD|MERC_ID|MERC_TYP|MERC_NAM|</Input>
<Output>MSG_CD|FEE_PERD_UNIT|FEE_PERD_NUM|MERC_FEE_MOD|MERC_FEE_CAL_MTH|NEXT_FEE_DT|</Output>
</Call>
<!--手续费到了结算日期-->
<If condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000)">
<Set>Rsp_Cd=000000</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代付的收支两条线商户已经到了收费日期)</Set>
<!--手续费收费周期单位 0: 年 1: 月 2: 日-->
<Set>FEE_PERD_UNIT=@O.FEE_PERD_UNIT</Set>
<!--手续费收费同期数量-->
<Set>FEE_PERD_NUM=@O.FEE_PERD_NUM</Set>
<!--代付收费方式 0:不收取 1:实时单笔收取 2:单笔计算、按周期收取 3:按周期汇总计算并收取-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--1:按固定金额收取 2:按金额固定百分比收取-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<!--手续费的下一个结算日-->
<Set>NEXT_FEE_DT=@O.NEXT_FEE_DT</Set>
</If>
<ElseIf condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),11111)">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代付的收支两条线商户在商户服务费费率表没有记录)</Set>
<!--手续费收费周期单位 0: 年 1: 月 2: 日-->
<Set>FEE_PERD_UNIT=@O.FEE_PERD_UNIT</Set>
<!--手续费收费同期数量-->
<Set>FEE_PERD_NUM=@O.FEE_PERD_NUM</Set>
<!--代付收费方式 0:不收取 1:实时单笔收取 2:单笔计算、按周期收取 3:按周期汇总计算并收取-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--1:按固定金额收取 2:按金额固定百分比收取-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<!--手续费的下一个结算日-->
<Set>NEXT_FEE_DT=@O.NEXT_FEE_DT</Set>
<!--代付成功笔数-->
<Set>TO_MERC_SUCC_CNT=0</Set>
<!--代付交易金额-->
<Set>TO_MERC_AMT=0</Set>
<!--代付手续费金额-->
<Set>TO_MERC_FEE_AMT=0</Set>
</ElseIf>
<ElseIf condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),22222)">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代付的收支两条线商户没有到收费日期)</Set>
<!--手续费收费周期单位 0: 年 1: 月 2: 日-->
<Set>FEE_PERD_UNIT=@O.FEE_PERD_UNIT</Set>
<!--手续费收费同期数量-->
<Set>FEE_PERD_NUM=@O.FEE_PERD_NUM</Set>
<!--代付收费方式 0:不收取 1:实时单笔收取 2:单笔计算、按周期收取 3:按周期汇总计算并收取-->
<Set>MERC_FEE_MOD=@O.MERC_FEE_MOD</Set>
<!--1:按固定金额收取 2:按金额固定百分比收取-->
<Set>MERC_FEE_CAL_MTH=@O.MERC_FEE_CAL_MTH</Set>
<!--手续费的下一个结算日-->
<Set>NEXT_FEE_DT=@O.NEXT_FEE_DT</Set>
<!--代付成功笔数-->
<Set>TO_MERC_SUCC_CNT=0</Set>
<!--代付交易金额-->
<Set>TO_MERC_AMT=0</Set>
<!--代付手续费金额-->
<Set>TO_MERC_FEE_AMT=0</Set>
</ElseIf>
<Else>
<Set>MSG=@O.MSG_CD</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=查询代付的收支两条线对应商户费率失败</Set>
<Return/>
</Else>
</Macro>
<!--收支两条线代付商户计算手续费-->
<Macro name="CalcStlMod1PayMercFee">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代收的收支两条线商户开始计算代收商户手续费)</Set>
<!-- 支付类型 12:代付 -->
<Set>PAY_TYP=12</Set>
<!-- 订单类型 12:代付 -->
<Set>ORD_TYP=12</Set>
<Set>MERC_FEE_MOD=$MERC_FEE_MOD</Set>
<!-- 计算代付的商户手续费 -->
<Call package="MERC" function="CAL_STLMOD_1_MERC_FEE_FUNC">
<Input>GWA|ORD_TYP|PAY_TYP|STL_DT|STL_MOD|NEXT_FEE_DT|MERC_ID|MERC_TYP|MERC_NAM|MERC_FEE_MOD|</Input>
<Output>MSG_CD|MERC_SUCC_CNT|MERC_AMT|MERC_FEE_AMT|</Output>
</Call>
<!--记录不存在-->
<If condition="IS_EQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),22222)">
<!--代付成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代付交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代付手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<Set>Rsp_Cd=222222</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,代收商户清算明细表无数据,无需计算手续费)</Set>
</If>
<ElseIf condition="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000)">
<Set>MSG=@O.MSG_CD</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=计算代付商户手续费失败</Set>
<!--更新系统清算控制表-->
<Set>MERC_CLR_STS=2</Set>
<Quote name="UpdMercCapDayCtl"/>
<Return/>
</ElseIf>
<Else>
<!--代付成功笔数-->
<Set>TO_MERC_SUCC_CNT=@O.MERC_SUCC_CNT</Set>
<!--代付交易金额-->
<Set>TO_MERC_AMT=@O.MERC_AMT</Set>
<!--代付手续费金额-->
<Set>TO_MERC_FEE_AMT=@O.MERC_FEE_AMT</Set>
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,计算商户手续费成功)</Set>
</Else>
</Macro>
<!--更新代付商户下一个手续费结算日期-->
<Macro name="UpdStlMod1PayMercNextFeeDate">
<Set>Rsp_Msg=STRCAT($MERC_ID,对应的收付类型, $PAY_TYP,更新代付商户下一个手续费结算日期)</Set>
<!--计算手续费的下一个结算日,按日-->
<If condition="INTCMP($FEE_PERD_UNIT,3,2)">
<Set>NEXT_FEE_DT=CALCDATE($NEXT_FEE_DT,+,d,$FEE_PERD_NUM)</Set>
</If>
<!--计算手续费的下一个结算日,按月-->
<ElseIf condition="INTCMP($FEE_PERD_UNIT,3,2)">
<Set>NEXT_FEE_DT=CALCDATE($NEXT_FEE_DT,+,m,$FEE_PERD_NUM)</Set>
</ElseIf>
<!--计算手续费的下一个结算日,按年-->
<ElseIf condition="INTCMP($FEE_PERD_UNIT,3,2)">
<Set>NEXT_FEE_DT=CALCDATE($NEXT_FEE_DT,+,y,$FEE_PERD_NUM)</Set>
</ElseIf>
<Else>
<!--@msg 计算商户结算日失败 -->
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=计算代收手续费率下一个收费日期失败</Set>
<Continue/>
</Else>
<!-- 更新商户手续费率-->
<Exec func="PUB:ExecSql">
<Arg name="SqlCmd" value="UPD_URMTMFEE" />
</Exec>
<If condition="~RetCod!=0">
<Set>TBNM=URMTMFEE</Set>
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=$TBNM</Set>
<Continue/>
</If>
<Delete>NEXT_FEE_DT</Delete>
</Macro>
<!--计算商户的代收代付的交易金额、手续费及交易净额-->
<Macro name="InsertCapStlFee">
<Set>FEE_STL_DT=$STL_DT</Set>
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="CAPSTLFEE"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="STL99999"/>
<Arg name="MsgDat" value="插入CAPSTLFEE表失败"/>
</Exec>
<!--更新系统清算控制表-->
<Set>MERC_CLR_STS=2</Set>
<Quote name="UpdMercCapDayCtl"/>
<Return/>
</If>
</Macro>
<Macro name="UpdMercCapDayCtl">
<Set>MERC_END_TM=GETDATETIME(HHMISS)</Set>
<!--更新系统清算控制表-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_MERCSTS_CAPDAYCTL"/>
</Exec>
<If condition="~RetCod != 0">
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=更新系统清分控制表失败</Set>
<Return/>
</If>
<Else>
<Set>Rsp_Cd=000000</Set>
<Set>Rsp_Msg=更新系统清分控制表成功</Set>
<Exec func="PUB:GWAAddMsg">
<Arg name="MsgCd" value="STL00000" />
</Exec>
</Else>
</Macro>
<Macro name="CalcMercAmtFee_BEN">
<Set>STL_STT_DT=$STL_DT</Set>
<!-- 计算协议付款日 = 当前会计日期 + 结算划款天数 -->
<Set>STL_END_DT=CALCDATE($STL_DT,+,d,$STL_TRF_DAYS)</Set>
<Delete>MERC_FEE_MOD</Delete>
<Delete>MERC_FEE_CAL_MTH</Delete>
<!-- 支付类型 11:代收 -->
<Set>PAY_TYP=11</Set>
<!-- 订单类型 11:代收 -->
<Set>ORD_TYP=11</Set>
<!--代收商户计算交易金额、手续费及交易净额-->
<!--根据对应订单类型查询代收代付商户清算明细表(手续费已清分)-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QrySUMJnl_BEN"/>
</Exec>
<If condition="~RetCod=2">
<Set>TO_MERC_SUCC_CNT=0</Set> <!-- 交易成功笔数 -->
<Set>TO_MERC_AMT=0</Set> <!-- 商户总金额-->
<Set>TO_MERC_FEE_AMT=0</Set> <!-- 商户手续费 -->
<Set>TO_MERC_STL_AMT=0</Set> <!-- 商户结算金额 -->
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=系统错误</Set>
<Return/>
</ElseIf>
<Else>
<Set>TO_MERC_STL_AMT=$TO_MERC_AMT</Set> <!-- 商户结算金额-->
<Set>MERC_CLR_FLG=1</Set>
<Set>MERC_CLR_DT=$GWA.AC_DT</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdSUMJnl_BEN"/>
</Exec>
<If condition="~RetCod = -1">
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=更新清分表失败</Set>
<Return/>
</If>
</Else>
<!--判断该商户交易总金额是否为0-->
<If condition="DOUBLECMP($TO_MERC_AMT,4,0)">
<!--计算商户的代收的交易金额、手续费及交易净额-->
<Quote name="InsertCapStlReg"/>
</If>
<!--删除关键域-->
<Delete>TO_MERC_AMT</Delete>
<Delete>TO_MERC_SUCC_CNT</Delete>
<Delete>TO_MERC_FEE_AMT</Delete>
<Delete>TO_MERC_STL_AMT</Delete>
<!-- 支付类型 11:代付 -->
<Set>PAY_TYP=12</Set>
<!-- 订单类型 11:代付 -->
<Set>ORD_TYP=12</Set>
<!--代收商户计算交易金额、手续费及交易净额-->
<!--根据对应订单类型查询代收代付商户清算明细表(手续费已清分)-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QrySUMJnl_BEN"/>
</Exec>
<If condition="~RetCod=2">
<Set>TO_MERC_SUCC_CNT=0</Set> <!-- 交易成功笔数 -->
<Set>TO_MERC_AMT=0</Set> <!-- 商户总金额-->
<Set>TO_MERC_FEE_AMT=0</Set> <!-- 商户手续费 -->
<Set>TO_MERC_STL_AMT=0</Set> <!-- 商户结算金额 -->
</If>
<ElseIf condition="~RetCod!=0">
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=系统错误</Set>
<Return/>
</ElseIf>
<Else>
<Set>TO_MERC_STL_AMT=$TO_MERC_AMT</Set> <!-- 商户结算金额-->
<Set>MERC_CLR_FLG=1</Set>
<Set>MERC_CLR_DT=$GWA.AC_DT</Set>
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UpdSUMJnl_BEN"/>
</Exec>
<If condition="~RetCod = -1">
<Set>Rsp_Cd=999999</Set>
<Set>Rsp_Msg=更新清分表失败</Set>
<Return/>
</If>
</Else>
<!--判断该商户交易总金额是否为0-->
<If condition="DOUBLECMP($TO_MERC_AMT,4,0)">
<!--计算商户的代收的交易金额、手续费及交易净额-->
<Quote name="InsertCapStlReg"/>
</If>
<!--删除关键域-->
<Delete>TO_MERC_AMT</Delete>
<Delete>TO_MERC_SUCC_CNT</Delete>
<Delete>TO_MERC_FEE_AMT</Delete>
<Delete>TO_MERC_STL_AMT</Delete>
<!--更新商户下一个结算日期-->
<Quote name="UpdMercNextStlDate"/>
</Macro>
</FrontTab>