关键词:
最近的一个项目中,在对故障工单进行自动语音督办的时候,需要在某个时段对某种组合条件下的工单不督办。如在实时督办中,对所有区域告警ID为“FF--1057361341”工单,白天不督办,但夜间需督办;在受理督办中,对某个指定区域告警ID为“207-121-00-800316”的,白天督办,夜间无需督办。
为了保障督办的及时性,我们采用的是任务驱动的方式。即生成任务,根据任务去判定采用什么督办模式。如下图:
那么为了实现某个时段对某种组合条件下的工单不督办的功能,我们只需要在生成督办任务后,逐个判断是否满足条件A,B,C,如下图。但每次增加一个条件的时候,我们都必须修改和发布系统。同时判断条件很多时,效率极其低下。
于是,我们想到了“黑名单”,把某种特定的条件组合,设计成“黑名单”。我们只需要判断此工单是否在黑名单中,如果在,则不督办,如下图。但对于不同的组合条件,需要设计不同的黑名单表,且没增加一种条件时,需要修改和发布系统。
那么,怎么才能实现一个黑名单,能够满足不同组合条件的变化情况。我们设计以下黑名单表BlackList。
字段 |
类型 |
说明 |
F_Id |
int |
自动编号 |
F_Area |
Varchar(50) |
区域名称 |
F_ClassID |
int |
督办类别ID |
F_TimeSlot |
Int |
督办时间段 |
F_Mark |
Varchar(100) |
网管告警ID |
F_Grede |
Varchar(100) |
处理级别 |
F_Class1 |
Varchar(100) |
一级分类 |
F_Class2 |
Varchar(100) |
二级分类 |
F_Class3 |
Varchar(100) |
三级分类 |
然后,我们提供一个Get_isDoBlackList函数,用于判定此任务工单是否存在于黑名单表中,如果存在0,否则返回1,代码如下:
--创建判断黑名单的函数 create function [MM].[dbo].[Get_isDoBlackList] ( @Area varchar(50), --区域 @ClassID int, --督办类型编号 @TimeSlot int, --执行时间段,白天(-23点)为1,夜间为2; @Grade varchar(50), --工单级别 @Mark varchar(50), --告警ID @Class1 varchar(50), --一级分类 @Class2 varchar(50), --二级分类 @Class3 varchar(50) --三级分类 ) /* 功能描述:查询当前需要督办的任务工单是否在黑名单表BlackList中有配置, 如果有就返回,否则返回 创建者:ldh 创建时间:2016/6/30 */ returns int as begin declare @rt int if not exists( select F_mark from dbo.BlackList where (F_Area=@Area or F_Area=‘all‘) and (F_ClassID=@ClassID or F_ClassID=0) and (F_Grade=@Grade or F_Grade=‘all‘) and (F_MARk=@Mark or F_MARk=‘all‘) and F_TimeSlot=@TimeSlot and (F_Class1=@Class1 or F_Class1=‘all‘) and (F_Class2=@Class2 or F_Class2=‘all‘) and (F_Class3=@Class3 or F_Class3=‘all‘) ) begin set @rt= 1 end else begin set @rt= 0 end return @rt end
这样,我们只需要设置BlackList中的记录,根据记录中的值来判定是否启用此字段为条件。对于int型字段,当设置为0时,表示适应所有条件,即忽略此判定条件,否则,设置到此字段的值作为判断条件。对于Varchar类型的字段,all表示适应所有规则,即忽略此判定条件,否则,设置到此字段的值作为判断条件。当然,前提是我们知道不会出现0和all值。
我么根据以下代码来验证我们的方法和思路:
1)设置黑名单记录
--设置黑名单记录 INSERT INTO [IVR].[dbo].[t_r_EomsBlackList]([F_Area],[F_ClassID],[F_TimeSlot], [F_Grade],[F_Mark],[F_Class1],[F_Class2],[F_Class3]) select ‘all‘,2,2,‘all‘,‘208-069-00-300008‘,‘all‘,‘all‘,‘all‘ union select ‘all‘,2,2,‘all‘,‘208-121-00-800030‘,‘all‘,‘all‘,‘all‘ union select ‘all‘,2,2,‘all‘,‘207-121-00-800316‘,‘all‘,‘all‘,‘all‘ union select ‘all‘,1,1,‘all‘,‘FF--1057361341‘,‘all‘,‘all‘,‘all‘
2)调用方法判定是否为黑名单
if (IVR.dbo.Get_isDoBlackList(‘11‘,2,2,‘二级督办‘,‘207-121-00-800316‘,‘a11a‘,‘a11a‘,‘123‘)=0) begin print ‘是黑名单,需要过滤,不督办‘ end else begin print ‘不是黑名单,无需过滤,督办‘ end */
通过这种方法,我们可以实现通过设置一条记录,来增加一种组合条件的判定条件,从而在某个时段对某种组合条件下的工单不督办。
如有更好的方法,欢迎探讨和指导。(不经允许,请勿转载)
在python中实现多分支选择结构的较好方法是
参考技术A(A.ifB.if-elseC.if-elif-else)。C8.下列语句执行后的输出是(if2:)。CD.if嵌套)。DB.notx)。DB.x-6>5B.2<xandx<=10D... 查看详情
如何在gridview中实现多选
GridView实现跨页多选,参考如下:JS前台://GridView中实现多选效果function CheckAllC(oCheckbox) var GridView1 = document.getElementById(\'gvDataList\'); for (i = 1; i < gvDataList.rows.length; i++) GridView1.rows[i].cells[0].getEleme... 查看详情
如何在 PostgreSQL 中实现多对多关系?
】如何在PostgreSQL中实现多对多关系?【英文标题】:Howtoimplementamany-to-manyrelationshipinPostgreSQL?【发布时间】:2012-04-0502:14:21【问题描述】:我相信标题是不言自明的。如何在PostgreSQL中创建表结构以建立多对多关系。我的例子:Pro... 查看详情
如何在 laravel 护照中实现多身份验证
】如何在laravel护照中实现多身份验证【英文标题】:howtoimplementmultiauthinlaravelpassport【发布时间】:2018-09-0120:51:57【问题描述】:我有两个用户admin/user我想验证这两个用户的api,它适用于一个用户,但不适用于管理员看看我尝试... 查看详情
在 MFC 中实现多线程以更新外部函数可访问的内部字典
】在MFC中实现多线程以更新外部函数可访问的内部字典【英文标题】:ImplementingMultithreadinginMFCtoupdateaninternaldictionaryaccessiblebyoutsidefunctions【发布时间】:2011-12-2017:54:15【问题描述】:我正在使用C++和MFC创建一个应用程序,该应用... 查看详情
请问如何在delphi中实现多选打印功能!
参考技术A标签打印请问如安在delphi中实现多选打印功能!具体的情况是:DBgrid傍边有很多字段,有很多记录请求做到:第一步,记录的若干是动态的,但要能选择记录打印,数量不限。第二步,字段有很多,再上一步的基本上... 查看详情
如何在 Firebase 身份验证中实现多用户帐户登录和切换?
】如何在Firebase身份验证中实现多用户帐户登录和切换?【英文标题】:HowdoIwantimplementmultipleuseraccountloginandswitchinginFirebaseAuthentication?【发布时间】:2018-05-0713:08:55【问题描述】:在GmailAndroid应用中,您可以在用户帐户视图上滑... 查看详情
使用消息传递接口在 Python 中实现多处理 [关闭]
】使用消息传递接口在Python中实现多处理[关闭]【英文标题】:ImplementmultiprocessinginPythonwithamessagepassinginterface[closed]【发布时间】:2021-03-1204:49:55【问题描述】:我正在尝试将一些JavaScript代码转换为Python,但是JavaScript以异步方式... 查看详情
在 iPad App 中实现多用户聊天
】在iPadApp中实现多用户聊天【英文标题】:ImplementingmultiuserchatiniPadApp【发布时间】:2015-06-1717:04:05【问题描述】:我有一个iPad应用程序。我打算给它添加一个群聊功能。这意味着1)用户可以创建或加入群组2)可以向其他登录该... 查看详情
java示例代码_在Java中实现多线程池
java示例代码_在Java中实现多线程池 查看详情
我可以使用优化实验在 Anylogic 中实现多目标优化问题吗?
】我可以使用优化实验在Anylogic中实现多目标优化问题吗?【英文标题】:CanIimplementamultiobjectiveoptimizationprobleminAnylogicusingoptimizationexperiment?【发布时间】:2021-02-1517:06:14【问题描述】:我正在尝试在Anylogic中使用基于Anylogic代理... 查看详情
java中实现多线程的两种方式(代码片段)
Java中对于对于多线程的实现主要提供了两种方法继承Thread()类实现Runnable接口接下来从这两个方面进行说明相关知识。继承Thread()类写一个类直接继承Thread()类,然后重写Thread()类的run()方法,调用其start()方法即可启动线程... 查看详情
如何在 C 中实现多分支树结构
】如何在C中实现多分支树结构【英文标题】:HowtoimplementamultibranchtreestructureinC【发布时间】:2011-08-2713:14:14【问题描述】:我很久没有用C写代码了。我正在尝试做一棵多叶树。我正在尝试将C#trie实现转换为C,以便使用CUDA在GPU... 查看详情
我应该如何在角度材料中实现多项选择选项?
】我应该如何在角度材料中实现多项选择选项?【英文标题】:HowamIsupposedtoimplementmultipleselectoptioninangular-material?【发布时间】:2015-04-2317:22:12【问题描述】:我已经检查了文档和演示,但是唉!!我还没有找到任何关于使用angul... 查看详情
如何在angular js中实现多路由
】如何在angularjs中实现多路由【英文标题】:Howtoachievemultipleroutinginangularjs【发布时间】:2018-11-2223:10:07【问题描述】:我在AngularJS中练习routing。到目前为止,我已经研究了2页路由,但现在我想实现3页路由。(function()\'usestrict\';... 查看详情
如何使用 Java Spring 在 MySql 中实现多租户 [关闭]
】如何使用JavaSpring在MySql中实现多租户[关闭]【英文标题】:HowcanIachievemultitenancyinMySqlbyusingJavaSpring[closed]【发布时间】:2018-02-2605:13:48【问题描述】:如何使用MySqlJavaSpring最佳实践实现多租户,并建议使用任何其他数据库代替MyS... 查看详情
系统运维系列之java中实现多线程的方式补充
1介绍接本专题博客之系统运维系列之java中实现多线程的方式上篇博客提到多线程使用的4种方式,分别是:实现方式1:继承Thread类,重写该类的run方法;实现方式2:实现Runnable接口,并重写该接口的run... 查看详情
使用一条sql语句进行不同的搜索组合
...-05-0113:15:12【问题描述】:我是SQL新手,我在我的Java程序中实现了这个搜索方法,它从1到5个文本字段中获取搜索输入并搜索满足搜索条件的对象。4个数据库列在一个表中,但1个在另一个表中,我可以在搜索中加入。问题是这... 查看详情