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

290 lines
14 KiB
XML

<?xml version="1.0" encoding='UTF-8'?>
<!--
================================================================================
修改时间 PLOG 修改人 备注
2010.12.21 P03629 gaopeng3 抵价券明细表中新增领用渠道BUS_CNL
================================================================================
-->
<Root>
<!--营销工具直连发放:BOSS, 省平台-->
<Function name="BonusIss_Direct_Invoke">
<Input>INP_DAT|GWA|</Input>
<Output>OUT_DAT|MSG_CD|</Output>
<!--直连发放时,查询产品信息-->
<DynSentence name="QRY_MKMTPINF">
<Sentence>
SELECT C.MKT_ID,C.PRD_ID,C.ISS_BUS_CNL,C.ISS_ORD_CAP_TYP,
C.PRD_TYP,C.BEG_REF_AMT,C.END_REF_AMT,C.ISS_BILL_AMT,
A.ISS_TOT_AMT AS ISS_TOT_AMT1,A.ISS_CUR_AMT AS ISS_CUR_AMT1,
B.ISS_TOT_AMT AS ISS_TOT_AMT2,B.ISS_CUR_AMT AS ISS_CUR_AMT2,
C.ISS_CUR_CNT,C.ISS_MAX_CNT,C.OMBL_MAX_CNT,C.PERD_TYP,C.PRED,
C.ISS_ID,C.PRD_NM,C.ISS_ID_TYP,A.CAP_ID_TYP,A.CAP_ID,
C.USE_BEG_REF_AMT,C.USE_END_REF_AMT,C.ISS_PCT,B.ISS_EFF_DT,
B.ISS_EXP_DT,C.CLR_TYP,C.DLY_TX_LMT,C.EFF_DT_CNT,C.ISS_DLY_LMT,
B.OMBL_MAX_CNT AS ISSOMBL_MAX_CNT,B.PERD_TYP AS ISSPERD_TYP,B.PRED AS ISSPRED,
C.ISS_DLY_CNT,C.LST_ISS_DT, C.ULT_CLR_DT,A.MKT_BON_FLG,C.ID_NO_FLG
FROM MKMTACT A,MKMTISS B,MKMTPINF C
WHERE C.MKT_ID=?
HNULL(AND C.PRD_ID{2}= ?)
AND C.TX_CD=?
AND (B.USR_LMT_TYP=0
OR (B.USR_LMT_TYP=1 AND B.ISS_PROV=?)
OR (B.USR_LMT_TYP=2 AND EXISTS(SELECT 'Y' FROM MKMTIAREA WHERE MKT_ID=B.MKT_ID AND ISS_ID=B.ISS_ID AND USR_PROV=? AND (USR_CITY='ALL' OR (USR_CITY=? AND USR_CITY_NM=?))))
OR (B.USR_LMT_TYP=3 AND EXISTS(SELECT 'Y' FROM MKMTIUSR WHERE MKT_ID=B.MKT_ID AND ISS_ID=B.ISS_ID AND MBL_NO=?)))
AND A.MKT_STS='A'
AND A.MKT_HLD_FLG='0'
AND B.ISS_EFF_DT &lt;=?
AND B.ISS_EXP_DT &gt;=?
AND C.MKT_ID=B.MKT_ID
AND C.ISS_ID=B.ISS_ID
AND C.MKT_ID=A.MKT_ID
</Sentence>
<Fields>MKT_ID|PRD_ID|TX_CD|USR_PROV|USR_PROV|USR_CITY|USR_CITY_NM|MBL_NO|CUR_DT|CUR_DT|</Fields>
</DynSentence>
<Process>
<Set>THD_JRN=DELBOTHSPACE($INP_DAT.THD_JRN)</Set> <!-- 渠道流水号 -->
<Set>MBL_NO=DELBOTHSPACE($INP_DAT.MBL_NO)</Set>
<Set>USR_NO=DELBOTHSPACE($INP_DAT.USR_NO)</Set>
<Set>BOS_AMT=DELBOTHSPACE($INP_DAT.CR_AMT)</Set>
<Set>MKT_ID=DELBOTHSPACE($INP_DAT.MKT_ID)</Set>
<Set>PRD_ID=DELBOTHSPACE($INP_DAT.PRD_ID)</Set>
<Set>SYS_CNL=DELBOTHSPACE($INP_DAT.SYS_CNL)</Set>
<Set>BUS_CNL=DELBOTHSPACE($INP_DAT.BUS_CNL)</Set>
<Set>CUR_DT=$GWA.TX_DT</Set>
<Set>CUR_TM=GETDATETIME(HHMISS)</Set>
<Set>JRN_NO=$GWA.JRN_NO</Set>
<Set>TX_CD=$GWA.TX_CD</Set>
<Set>AC_DT=$GWA.AC_DT</Set>
<Set>ISS_TYP=DELBOTHSPACE($INP_DAT.ISS_TYP)</Set>
<!--必输项检查-->
<If condition="ISNULL($BOS_AMT)">
<Exec func="PUB:CmpSetMsg">
<!-- @msg 红包面额不能为空 -->
<Arg name="MsgCd" value="MKM40131" />
<Arg name="MsgDat" value="红包面额不能为空"/>
</Exec>
<Return/>
</If>
<If condition="DOUBLECMP($BOS_AMT,le,0)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM41298"/>
<Arg name="MsgDat" value="红包金额非法"/>
</Exec>
<Return/>
</If>
<!--营销业务类型-->
<If condition="IS_EQUAL_STRING($ISS_TYP,PROV)">
<If condition="IS_NOEQUAL_STRING($TX_CD,0301025,0301040)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM40132" />
<Arg name="MsgDat" value="该营销业务类型不是直连发放"/>
</Exec>
<Return/>
</If>
</If>
<If condition="IS_EQUAL_STRING($ISS_TYP,BOSS)">
<If condition="IS_NOEQUAL_STRING($TX_CD,0301030)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM40132" />
<Arg name="MsgDat" value="该营销业务类型不是直连发放"/>
</Exec>
<Return/>
</If>
</If>
<If condition="IS_EQUAL_STRING($GWA.TX_CD,RRS0300130)">
<If condition="IS_NOEQUAL_STRING($TX_CD,RRS0300130)">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM40132" />
<Arg name="MsgDat" value="该营销业务类型不是直连发放"/>
</Exec>
<Return/>
</If>
</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">
<!-- @msg [{1}]-->
<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_PROV=@O.USR_PROV</Set>
<Set>USR_CITY=@O.USR_CITY</Set>
<Set>USR_CITY_NM=@O.USR_CITY_NM</Set>
<Set>USR_STS=@O.USR_STS</Set>
<!-- 对于销户、待销户的状态不再发放-->
<If condition="IS_EQUAL_STRING($USR_STS,1,3)">
<Exec func="PUB:CmpSetMsg">
<!-- @msg该用户当前状态无法发放红包 -->
<Arg name="MsgCd" value="MKM41257" />
<Arg name="MsgDat" value="该用户当前状态无法发放红包"/>
</Exec>
<Return/>
</If>
<!--直连发放时,查询产品信息-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_MKMTPINF"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM40133"/>
<Arg name="MsgDat" value="直连发放营销工具,查询产品信息失败"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=2">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM41248"/>
<Arg name="MsgDat" value="未找到符合发放条件的券别信息"/>
</Exec>
<Return/>
</ElseIf>
<!-- 启用交易完整性控制 -->
<Set>TRAN_ID=$GWA.JRN_NO</Set>
<Set>LOG_NO=$GWA.JRN_NO</Set>
<!-- 添加交易完整性控制相关字段信息 -->
<Set>REC_DAT.THD_JRN=$THD_JRN</Set>
<Set>REC_DAT.MBL_NO=$MBL_NO</Set>
<Set>REC_DAT.USR_NO=$USR_NO</Set>
<Set>REC_DAT.BOS_AMT=$BOS_AMT</Set>
<Set>REC_DAT.MKT_ID=$MKT_ID</Set>
<Set>REC_DAT.SYS_CNL=$SYS_CNL</Set>
<Set>REC_DAT.BUS_CNL=$BUS_CNL</Set>
<Set>REC_DAT.JRN_NO=$JRN_NO</Set>
<Set>REC_DAT.TX_CD=$TX_CD</Set>
<Set>REC_DAT.ISS_TYP=$ISS_TYP</Set>
<Set>REC_DAT.USR_PROV=$USR_PROV</Set>
<Set>REC_DAT.USR_CITY=$USR_CITY</Set>
<Set>REC_DAT.USR_CITY_NM=$USR_CITY_NM</Set>
<Set>REC_DAT.USR_STS=$USR_STS</Set>
<Set>REC_DAT.LST_ISS_DT=$LST_ISS_DT</Set>
<Set>REC_DAT.ISS_ID_TYP=$ISS_ID_TYP</Set>
<Set>REC_DAT.CAP_ID_TYP=$CAP_ID_TYP</Set>
<Set>REC_DAT.PRD_ID=$PRD_ID</Set>
<Set>REC_DAT.ISS_ID=$ISS_ID</Set>
<Set>REC_DAT.ISS_EFF_DT=$ISS_EFF_DT</Set>
<Set>REC_DAT.ISS_BUS_CNL=$ISS_BUS_CNL</Set>
<Set>REC_DAT.CAP_ID=$CAP_ID</Set>
<Set>REC_DAT.CLR_TYP=$CLR_TYP</Set>
<Set>REC_DAT.ISS_PCT=$ISS_PCT</Set>
<Set>REC_DAT.PRD_TYP=$PRD_TYP</Set>
<Set>REC_DAT.EFF_DT_CNT=$EFF_DT_CNT</Set>
<Set>REC_DAT.ULT_CLR_DT=$ULT_CLR_DT</Set>
<Set>REC_DAT.ISS_ORD_CAP_TYP=$ISS_ORD_CAP_TYP</Set>
<Set>REC_DAT.USE_END_REF_AMT=$USE_END_REF_AMT</Set>
<Set>REC_DAT.MKT_BON_FLG=$MKT_BON_FLG</Set>
<Set>REC_DAT.ISS_CUR_CNT=$ISS_CUR_CNT</Set>
<Set>REC_DAT.ISS_EXP_DT=$ISS_EXP_DT</Set>
<Set>REC_DAT.PRD_NM=$PRD_NM</Set>
<Set>REC_DAT.TRAN_ID=$TRAN_ID</Set>
<Set>REC_DAT.LOG_NO=$LOG_NO</Set>
<Exec func="PUB:ETF2XML">
<Arg name="GrpNam" value="REC_DAT" />
<Arg name="DstFld" value="ISS_DAT" />
</Exec>
<Exec func="PUB:TranBeginWork">
<Arg name="Code" value="0301027"/>
<Arg name="ObjSvr" value="OMKMPUB1"/>
<Arg name="TranTyp" value="crc"/> <!-- 事物类型 crc:冲正,rdo:重发 -->
<Arg name="Interval" value="30"/>
<Arg name="TimeOut" value="60"/>
<Arg name="MaxTms" value="10"/>
<Arg name="Data" value="$ISS_DAT"/>
<Arg name="Fields" value="AC_DT=GWA.AC_DT|SYS_TM=GWA.TX_TM|SUC_CLK=GWA.TX_TM|"/>
</Exec>
<!--计算营销工具发放金额,并检查发放总额、已发放数量-->
<Call function="CHK_ISS_VCH_AMT" package="MKM">
<Input>BOS_AMT|BAT_NO|BON_AMT|ORD_AMT|PRD_TYP|BEG_REF_AMT|END_REF_AMT|ISS_BILL_AMT|ISS_CUR_AMT1|ISS_TOT_AMT1|ISS_CUR_AMT2|ISS_TOT_AMT2|ISS_CUR_CNT|ISS_MAX_CNT|MERC_ID|ISS_DLY_LMT|ISS_DLY_CNT|LST_ISS_DT|CUR_DT|</Input>
<Output>MSG_CD|MSG_DAT|CUR_AC_BAL|</Output>
</Call>
<If condition="IS_SUCC(@O.MSG_CD)=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg [{1}] -->
<Arg name="MsgCd" value="@O.MSG_CD"/>
<Arg name="MsgDat" value="@O.MSG_DAT"/>
</Exec>
<!-- 检查不通过,事务撤销 -->
<Exec func="PUB:TranCommitWork">
<Arg name="TranTyp" value="crc"/> <!-- 事物类型 crc:冲正,rdo:重发 -->
<Arg name="AutoCommit" value="Y"/>
</Exec>
<Return/>
</If>
<Set>CUR_AC_BAL=@O.CUR_AC_BAL</Set> <!--营销工具面额-->
<!--检查单一手机号最多领用张数-->
<Call function="CHK_OMblMaxCnt_Direct" package="MKM">
<Input>MBL_NO|USR_NO|MKT_ID|ISS_ID|ISS_EFF_DT|ISS_EXP_DT|ISSOMBL_MAX_CNT|ISSPERD_TYP|ISSPRED|PRD_ID|OMBL_MAX_CNT|PERD_TYP|PRED|CUR_DT|ID_NO_FLG|</Input>
<Output>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>
<!-- 检查不通过,事务撤销 -->
<Exec func="PUB:TranCommitWork">
<Arg name="TranTyp" value="crc"/> <!-- 事物类型 crc:冲正,rdo:重发 -->
<Arg name="AutoCommit" value="Y"/>
</Exec>
<Return/>
</If>
<!-- 检查通过,需要进行后续发放处理 -->
<Exec func="PUB:TranRollbackWork">
<Arg name="TranTyp" value="crc"/> <!-- 事物类型 crc:冲正,rdo:重发 -->
<Arg name="AutoCommit" value="Y"/>
</Exec>
<Exec func="PUB:CmpSetMsg">
<!-- @msg 交易成功 -->
<Arg name="MsgCd" value="MKM00000" />
<Arg name="MsgDat" value="交易成功"/>
</Exec>
<Exec func="PUB:DumpETF"/>
</Process>
</Function>
</Root>