Files
2021-08-25 15:04:43 +08:00

289 lines
12 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!--
==============================================================
交易名称:事务推送机制处理
创建日期:20210127
==============================================================
-->
<Tran>
<!--事件处理 -->
<Transaction code="PUSH_EVENT" log_switch='1' desc="">
<DynSentence name="QRY_CAPEVTRLR">
<Sentence>
SELECT *
FROM CAPEVTRLR
WHERE EVT_TYP= ?
AND RLR_STS='0'
</Sentence>
<Fields>EVT_TYP|</Fields>
</DynSentence>
<DynSentence name="QRY_CAPSMSLST">
<Sentence>
SELECT *
FROM CAPSMSLST
WHERE EVT_TYP= ?
AND ROL_TYP= ?
AND RLR_STS='0'
</Sentence>
<Fields>EVT_TYP|ROL_TYP|</Fields>
</DynSentence>
<DynSentence name="QRY_SMSTTMPS_MAL"> <!--查询邮件或短信模版及相关参数-->
<Sentence>
SELECT A.SM_TYP,A.SMS_CLS,A.SMS_MO,A.SMS_TMP,A.REP_FLD,A.ID_KEY,A.PSW_FLG
FROM SMSTTMPS A
WHERE A.SMS_CD=?
</Sentence>
<Fields>SMS_CD|</Fields>
</DynSentence>
<FlowCtrl>
<Set>EVT_TYP=$EVT_TYP</Set> <!-- 事务类型 -->
<!-- 查询预警规则表CAPEVTRLR -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_CAPEVTRLR"/>
<Arg name="GrpNam" value="EVT"/>
</Exec>
<If condition="~RetCod!=0">
<!-- @msg 读取数据库{1}失败 -->
<Exec func="PUB:CmpSetMsg">
<Arg name="MsgCd" value="PWM90100"/><!--错误码待定 999999999-->
</Exec>
<Return/>
</If>
<Set>SMS_CD=$EVT.MAL_TPL</Set>
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_SMSTTMPS_MAL"/>
</Exec>
<If condition="~RetCod&lt;0">
<Set>Rsp_Cd=80</Set>
<Set>Rsp_Msg="查询模板失败"</Set>
<Break/>
</If>
<Set>AC_DT=GETDATE()</Set>
<!--Exec func="PUB:DumpETF"/-->
<!-- 设置短信模版变量 -->
<Set>IND1=\[</Set>
<Set>IND2=\]</Set>
<Set>IND3=\$</Set>
<Set>IND4=STRCAT($IND1,$IND3,$IND2)</Set>
<!--替换邮件模版中的变量,组织下发邮件内容-->
<Exec func="SMS:ReplaceWithSMSTemplate">
<Arg name="template" value="$SMS_TMP"/> <!--邮件模版-->
<Arg name="repl" value="$IND4"/> <!--变量符号-->
<Arg name="text" value="$REP_FLD"/> <!--变量列表-->
<Arg name="objNam" value="SMS_INF"/> <!--邮件内容-->
</Exec>
<Set>ALERT_NAME=$EVT.EVT_TYP</Set>
<Set>SUMMARY=$EVT.EVT_DSC</Set>
<Set>SMS_INF=STRCAT($SMS_INF,"(",instance=,@SYS.ics.sys.nodeid,;time=,GETDATETIME(yyyy-MM-dd HH:mm:ss),")")</Set>
<Set>DESCRIPTION=$SMS_INF</Set>
<Exec func="PUB:CallThirdComm" error="IGNORE">
<Arg name="HTxnCd" value="alert" />
<Arg name="ObjSvr" value="SCAALERT" /> <!-- 发往监控系统告警 -->
</Exec>
<Set>EVT.IS_SND_MERC=$EVT.IS_SND_MERC</Set> <!-- 是否发送给商户 已废止 -->
<Set>EVT.IS_SND_DEV=$EVT.IS_SND_DEV</Set> <!-- 是否发送开发 -->
<Set>EVT.IS_SND_BUS=$EVT.IS_SND_BUS</Set> <!-- 是否发送给业务 -->
<Set>EVT.IS_SND_OPR=$EVT.IS_SND_OPR</Set> <!-- 是否发送给运营 -->
<Set>EVT.IS_SND_OTH=$EVT.IS_SND_OTH</Set> <!-- 是否发送给其他人-->
<Set>EVT.IS_SND_SMS=$EVT.IS_SND_SMS</Set> <!-- 发送短信 -->
<Set>EVT.IS_SND_MAL=$EVT.IS_SND_MAL</Set> <!-- 发送邮件 -->
<Set>EVT.SMS_TPL=$EVT.SMS_TPL</Set> <!-- 短信模板 -->
<Set>EVT.MAL_TPL=$EVT.SMS_TPL</Set> <!-- 邮件模板 短信邮件用一个模板 -->
<!--是否发送商户邮件 已废止-->
<!--是否给开发发送预警 短信 或 邮件-->
<If condition="IS_EQUAL_STRING($EVT.IS_SND_DEV,Y)">
<Set>ROL_TYP=DEV</Set><!--角色类型 MERC:商户 DEV:开发 BUS:业务 OPR:运维 OTH:其他人-->
<Exec func="PUB:QueryInGroup" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPSMSLST"/>
<Arg name="RecordName" value="MAL_DEV"/>
</Exec>
<If condition="~RetCod=0">
<Set>N=0</Set>
<Set>DEV_NUM=0</Set>
<Set>DEV_NUM=$REC_NUM</Set>
<While condition="INTCMP($N,1,$DEV_NUM)">
<Set>N=ADD($N,1)</Set>
<Set>EVENT.ROL_NAM=MAL_DEV[$N].ROL_NAM</Set> <!-- 角色姓名 -->
<Set>EVENT.MOB_TEL=MAL_DEV[$N].MOB_TEL</Set> <!-- 手机号码 -->
<Set>EVENT.MAL_ADR=MAL_DEV[$N].MAL_ADR</Set> <!-- 邮箱 -->
<Set>EVENT.EVT_DSC=$EVT.EVT_DSC</Set>
<Set>EVENT.SMS_CD=$EVT.MAL_TPL</Set>
<Set>EVENT.IS_SND_SMS=$EVT.IS_SND_SMS</Set>
<Set>EVENT.IS_SND_MAL=$EVT.IS_SND_MAL</Set>
<Set>EVENT.SMS_INF=$SMS_INF</Set>
<!--调用短信发送-->
<Call package="SMS_PUB" function="SEND_MAL">
<Input>EVENT|</Input>
<Output>Rsp_Cd|Rsp_Msg</Output>
</Call>
</While>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="MAL_DEV"/>
</Exec>
<Delete>DEV_NUM</Delete>
<Delete>REC_NUM</Delete>
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="CAP00021"/>
<Arg name="MsgDat" value="数据库错误"/>
</Exec>
<Return/>
</ElseIf>
</If>
<!--是否给业务发送邮件-->
<If condition="IS_EQUAL_STRING($EVT.IS_SND_BUS,Y)">
<Set>ROL_TYP=BUS</Set><!--角色类型 MERC:商户 DEV:开发 BUS:业务 OPR:运维 OTH:其他人-->
<Exec func="PUB:QueryInGroup" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPSMSLST"/>
<Arg name="RecordName" value="MAL_BUS"/>
</Exec>
<If condition="~RetCod=0">
<Set>N=0</Set>
<Set>BUS_NUM=0</Set>
<Set>BUS_NUM=$REC_NUM</Set>
<While condition="INTCMP($N,1,$BUS_NUM)">
<Set>N=ADD($N,1)</Set>
<Set>EVENT.ROL_NAM=MAL_BUS[$N].ROL_NAM</Set> <!-- 角色姓名 -->
<Set>EVENT.MOB_TEL=MAL_BUS[$N].MOB_TEL</Set> <!-- 手机号码 -->
<Set>EVENT.MAL_ADR=MAL_BUS[$N].MAL_ADR</Set> <!-- 邮箱 -->
<Set>EVENT.EVT_DSC=$EVT.EVT_DSC</Set>
<Set>EVENT.SMS_CD=$EVT.MAL_TPL</Set>
<Set>EVENT.IS_SND_SMS=$EVT.IS_SND_SMS</Set>
<Set>EVENT.IS_SND_MAL=$EVT.IS_SND_MAL</Set>
<Set>EVENT.SMS_INF=$SMS_INF</Set>
<!--调用短信发送-->
<Call package="SMS_PUB" function="SEND_MAL">
<Input>EVENT|</Input>
<Output>Rsp_Cd|Rsp_Msg</Output>
</Call>
</While>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="MAL_BUS"/>
</Exec>
<Delete>BUS_NUM</Delete>
<Delete>REC_NUM</Delete>
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="CAP00021"/>
<Arg name="MsgDat" value="数据库错误"/>
</Exec>
<Return/>
</ElseIf>
</If>
<!--是否给运维发送邮件和短信-->
<If condition="IS_EQUAL_STRING($EVT.IS_SND_OPR,Y)">
<Set>ROL_TYP=OPR</Set><!--角色类型 MERC:商户 DEV:开发 BUS:业务 OPR:运维 OTH:其他人-->
<Exec func="PUB:QueryInGroup" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPSMSLST"/>
<Arg name="RecordName" value="MAL_OPR"/>
</Exec>
<If condition="~RetCod=0">
<Set>N=0</Set>
<Set>OPR_NUM=0</Set>
<Set>OPR_NUM=$REC_NUM</Set>
<While condition="INTCMP($N,1,$OPR_NUM)">
<Set>N=ADD($N,1)</Set>
<Set>EVENT.ROL_NAM=MAL_OPR[$N].ROL_NAM</Set> <!-- 角色姓名 -->
<Set>EVENT.MOB_TEL=MAL_OPR[$N].MOB_TEL</Set> <!-- 手机号码 -->
<Set>EVENT.MAL_ADR=MAL_OPR[$N].MAL_ADR</Set> <!-- 邮箱 -->
<Set>EVENT.EVT_DSC=$EVT.EVT_DSC</Set>
<Set>EVENT.SMS_CD=$EVT.MAL_TPL</Set>
<Set>EVENT.IS_SND_SMS=$EVT.IS_SND_SMS</Set>
<Set>EVENT.IS_SND_MAL=$EVT.IS_SND_MAL</Set>
<Set>EVENT.SMS_INF=$SMS_INF</Set>
<!--调用短信发送-->
<Call package="SMS_PUB" function="SEND_MAL">
<Input>EVENT|</Input>
<Output>Rsp_Cd|Rsp_Msg</Output>
</Call>
</While>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="MAL_OPR"/>
</Exec>
<Delete>OPR_NUM</Delete>
<Delete>REC_NUM</Delete>
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="CAP00021"/>
<Arg name="MsgDat" value="数据库错误"/>
</Exec>
<Return/>
</ElseIf>
</If>
<!--是否给其他人发送邮件或邮件-->
<If condition="IS_EQUAL_STRING($EVT.IS_SND_OTH,Y)">
<Set>ROL_TYP=OTH</Set><!--角色类型 MERC:商户 DEV:开发 BUS:业务 OPR:运维 OTH:其他人-->
<Exec func="PUB:QueryInGroup" error="IGNORE">
<Arg name="SqlCmd" value="QRY_CAPSMSLST"/>
<Arg name="RecordName" value="MAL_OTH"/>
</Exec>
<If condition="~RetCod=0">
<Set>N=0</Set>
<Set>OTH_NUM=0</Set>
<Set>OTH_NUM=$REC_NUM</Set>
<While condition="INTCMP($N,1,$OTH_NUM)">
<Set>N=ADD($N,1)</Set>
<Set>EVENT.ROL_NAM=MAL_OTH[$N].ROL_NAM</Set> <!-- 角色姓名 -->
<Set>EVENT.MOB_TEL=MAL_OTH[$N].MOB_TEL</Set> <!-- 手机号码 -->
<Set>EVENT.MAL_ADR=MAL_OTH[$N].MAL_ADR</Set> <!-- 邮箱 -->
<Set>EVENT.EVT_DSC=$EVT.EVT_DSC</Set>
<Set>EVENT.SMS_CD=$EVT.MAL_TPL</Set>
<Set>EVENT.IS_SND_SMS=$EVT.IS_SND_SMS</Set>
<Set>EVENT.IS_SND_MAL=$EVT.IS_SND_MAL</Set>
<Set>EVENT.SMS_INF=$SMS_INF</Set>
<!--调用短信发送-->
<Call package="SMS_PUB" function="SEND_MAL">
<Input>EVENT|</Input>
<Output>Rsp_Cd|Rsp_Msg</Output>
</Call>
</While>
<Exec func="PUB:DeleteGroup" error="IGNORE">
<Arg name="GroupName" value="MAL_OTH"/>
</Exec>
<Delete>OTH_NUM</Delete>
<Delete>REC_NUM</Delete>
</If>
<ElseIf condition="~RetCod=-1">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="CAP00021"/>
<Arg name="MsgDat" value="数据库错误"/>
</Exec>
<Return/>
</ElseIf>
</If>
<Set>MSG_CD=$Rsp_Cd</Set>
</FlowCtrl>
</Transaction>
</Tran>