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

237 lines
10 KiB
XML

<?xml version="1.0" encoding='UTF-8'?>
<!-- 输入: -->
<!-- INP_DAT.MBL_NO (必输) -->
<!-- INP_DAT.BON_AMT(必输) -->
<!-- INP_DAT.MKT_ID (必输) -->
<!-- INP_DAT.PRD_ID (选输) -->
<!-- INP_DAT.ORD_NO (选输) -->
<Root>
<!--订单直减电子券的发放 -->
<Function name="Bons_IssBon">
<Input>INP_DAT|GWA|</Input>
<Output>OUT_DAT|MSG_CD|MSG_DAT|</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,C.ISS_DLY_CNT,C.LST_ISS_DT,C.ULT_CLR_DT,
B.OMBL_MAX_CNT AS ISSOMBL_MAX_CNT,B.PERD_TYP AS ISSPERD_TYP,B.PRED AS ISSPRED,B.ID_NO_FLG
FROM MKMTACT A,MKMTISS B,MKMTPINF C
WHERE C.MKT_ID = ?
HNULL(AND C.PRD_ID{2}= ?)
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 * 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 * FROM MKMTIUSR WHERE MKT_ID=B.MKT_ID AND ISS_ID=B.ISS_ID AND MBL_NO=?)))
AND A.MKT_STS='A'
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
AND A.MKT_HLD_FLG='0'
</Sentence>
<Fields>MKT_ID|PRD_ID|USR_PROV|USR_PROV|USR_CITY|USR_CITY_NM|MBL_NO|TX_SYS_DT|TX_SYS_DT|</Fields>
</DynSentence>
<Process>
<Set>MBL_NO=DELBOTHSPACE($INP_DAT.MBL_NO)</Set>
<Set>BOS_AMT=DELBOTHSPACE($INP_DAT.BON_AMT)</Set>
<Set>MKT_ID=DELBOTHSPACE($INP_DAT.MKT_ID)</Set>
<Set>PRD_ID=DELBOTHSPACE($INP_DAT.PRD_ID)</Set>
<Set>ORD_NO=DELBOTHSPACE($INP_DAT.ORD_NO)</Set>
<Set>SYS_CNL=$GWA.SYS_CNL</Set>
<Set>BUS_CNL=$GWA.BUS_CNL</Set>
<Set>TX_SYS_DT=$GWA.AC_DT</Set>
<Set>TX_SYS_TM=$GWA.TX_TM</Set>
<Set>CUR_DT=$GWA.AC_DT</Set>
<Set>CUR_TM=$GWA.AC_TM</Set>
<Set>ISS_BUS_CNL_ABBR=$BUS_CNL</Set>
<Set>TX_CD=$GWA.TX_CD</Set>
<Set>AC_DT=$GWA.AC_DT</Set>
<!-- 订单直减中流水号在远程那边取的是GWA.jrn_no中,为保流水表使用和发放的两条记录插入时主键不冲突。重取流水号 -->
<!-- 获取流水号 -->
<Exec func="PUB:GetJournalNo">
<Arg name="MOD_FLG" value="1" />
</Exec>
<Set>JRN_NO=$GWA.JRN_NO</Set>
<!--必输项检查-->
<If condition="OR(ISNULL($MBL_NO),ISNULL($BOS_AMT),ISNULL($MKT_ID),ISNULL($SYS_CNL),ISNULL($BUS_CNL))">
<Exec func="PUB:CmpSetMsg">
<!-- @msg必输项不能为空 -->
<Arg name="MsgCd" value="MKM22002"/>
<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>
<!-- @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>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="MKM00000" />
<Arg name="MsgDat" value="交易成功"/>
</Exec>
<Return/>
</If>
<Set>USR_NO=#ORD_RAT_USR_NO</Set>
<!--遍历该省下此营销业务类型的所有营销产品-->
<Exec func="PUB:OpenCursor">
<Arg name="SqlCmd" value="QRY_MKMTPINF"/>
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<If condition="~RetCod=-1">
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="MKM"/>
<Arg name="MsgDat" value="查询产品信息失败"/>
</Exec>
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<Return/>
</If>
<Set>CNT=0</Set> <!-- 统计张数信息 -->
<While>
<Exec func="PUB:FetchCursor" >
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<If condition="~RetCod=2"> <!--取值结束-->
<If condition="INTCMP($CNT,eq,0)">
<Exec func="PUB:CmpSetMsg">
<!-- @msg 未找到符合发放条件的券别信息 -->
<Arg name="MsgCd" value="MKM41248"/>
<Arg name="MsgDat" value="未找到符合发放条件的券别信息"/>
</Exec>
<Return />
</If>
<Exec func="PUB:CmpSetMsg">
<!-- @msg 交易成功 -->
<Arg name="MsgCd" value="MKM00000"/>
<Arg name="MsgDat" value="交易成功"/>
</Exec>
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<Break/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:CmpSetMsg">
<!-- @msg 获取下一笔记录失败 -->
<Arg name="MsgCd" value="MKM40134"/>
<Arg name="MsgDat" value="获取下一笔纪录失败"/>
</Exec>
<Exec func="PUB:CloseCursor">
<Arg name="CursorName" value="CURSOR_1"/>
</Exec>
<Return/>
</ElseIf>
<Set>CNT=ADD($CNT,1)</Set>
<!--计算营销工具发放金额,并检查发放总额、已发放数量-->
<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">
<Arg name="MsgCd" value="@O.MSG_CD"/>
<Arg name="MsgDat" value="@O.MSG_DAT"/>
</Exec>
<Return/>
</If>
<Set>CUR_AC_BAL=@O.CUR_AC_BAL</Set> <!--营销工具面额-->
<!--检查单一手机号最多领用张数-->
<Call function="CHK_OMblMaxCnt_REC" 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>
<Return/>
</If>
<!--生成红包编号,并登记相关信息-->
<Call function="ISSBONVCH_REC" package="MKM">
<Output>OUT_DAT|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>
<Exec func="PUB:CommitWork"/>
</While>
<Exec func="PUB:CmpSetMsg">
<!-- @msg 交易成功 -->
<Arg name="MsgCd" value="MKM00000" />
<Arg name="MsgDat" value="交易成功"/>
</Exec>
<Set>MSG_CD=MKM00000</Set>
<Exec func="PUB:DumpETF"/>
</Process>
</Function>
</Root>