最近的一个项目中,在对故障工单进行自动语音督办的时候,需要在某个时段对某种组合条件下的工单不督办。如在实时督办中,对所有区域告警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 fromdbo.BlackListwhere (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

View Code

这样,我们只需要设置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'

View Code

2)调用方法判定是否为黑名单

if (IVR.dbo.Get_isDoBlackList('11',2,2,'二级督办','207-121-00-800316','a11a','a11a','123')=0)begin

print '是黑名单,需要过滤,不督办'

end

else

begin

print '不是黑名单,无需过滤,督办'

end

*/

View Code

通过这种方法,我们可以实现通过设置一条记录,来增加一种组合条件的判定条件,从而在某个时段对某种组合条件下的工单不督办。

如有更好的方法,欢迎探讨和指导。(不经允许,请勿转载)

mysql 设置的黑名单_在SQL中实现多条件任意组合黑名单的方法相关推荐

  1. mysql版本链图解_图解 SQL 中各种连接 JOIN

    先用文字来捋一下思路,数据库操作中无非就是「增删查改」,其中「 查」用得最多且最复杂,变化多端.查询的时候,我们可以只是单表查询,也可以是多表连接查询,单表查询中的学问也很大,但限于篇幅,本次主要分享 ...

  2. mysql树状查询优化_解析SQL中树形分层数据的查询优化

    在数据查询中,从2008开始SQL Server提供了一个新的数据类型hierarchyid,专门用来操作层次型数据结构. hierarchyid 类型对层次结构树中有关单个节点的信息进行逻辑编码的方 ...

  3. mysql时间区间效率_对于sql中使用to_timestamp判断时间区间和不使用的效率对比及结论...

    关于日期函数TO_TIMESTAMP 拓展: date类型是Oracle常用的日期型变量,时间间隔是秒.两个日期型相减得到是两个时间的间隔,注意单位是"天". timestamp是 ...

  4. 报表下拉框多选查询及一般在sql中添加查询条件

    1.sql SELECT * FROM [销量] where 1=1 ${if(len(销售员1) == 2,"","and 销售员 in (" + 销售员1 ...

  5. excil mysql查询 条件_excel多条件查找 Excel中实现多条件查找的15种方法

    excel多条件查找 Excel中实现多条件查找的15种方法,平凡的世界平凡的你,努力学习使我们变得不平凡,今天要介绍的知识是excel多条件查找的相关知识,你准备好学习excel多条件查找 Exce ...

  6. fastreport.net 交叉表居中显示_浅析Sql中内连接、外连接、全连接、交叉连接的区别...

    外连接(out join) 外连接分为外左连接(left outer join)和外右连接(right outer join) 注释:left outer join 与 left join 等价, 一 ...

  7. mysql设置token有效期_记住我 token保存到数据库

    记住我 token保存到数据库 这里使用jpa+mysql org.springframework.boot spring-boot-starter-data-jpa mysql mysql-conn ...

  8. mysql 设置数据库只读_如何设置mysql数据库为只读

    直奔主题,mysql设置为只读后,无法增删改. 设置命令: mysql>set global read_only=1;    #1是只读,0是读写 mysql> show global v ...

  9. sql组合键设置外键_学习SQL:外键

    sql组合键设置外键 In the previous article, we talked about the primary key (PK). In this one, we'll check w ...

最新文章

  1. win10 anaconda 下pcl库的安装
  2. MYSQL中如何查看表结构命令_mysql查看表结构命令
  3. 还在用 Notepad++吗? 盘点五款更好用的文本编辑器
  4. ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法
  5. 组态王串口服务器虚拟串口,串口服务器USR-N520连接组态王设置步骤
  6. 孤读Paper——《FCOS: Fully Convolutional One-Stage Object Detection》
  7. Java NIO 和 IO的区别
  8. C语言库函数学习知识
  9. 小学计算机房荷载,资深暖通设计师总结的常用参数参考值,新手们都说感谢大神支招...
  10. #1.4股市预测数学的产生原因
  11. 关于5月份BCH硬分叉,这些你应该知道
  12. Attention Is All You Need
  13. win8 android 跑分,Windows 10和win8.1性能跑分测试结果曝光
  14. OCR目标识别(车辆VIN码识别效果)
  15. Flutter 热更新功能实现
  16. 原来自动驾驶离不开OpenStack
  17. stata foreach循环语句的使用
  18. SQL视图View的总结和使用
  19. 根据ip或者自动识别当前用户所在国家、地区、城市
  20. Pytorch 计算误判率,计算准确率,计算召回率

热门文章

  1. python 录屏_python实现录制全屏和选择区域录屏功能代码
  2. uniapp小程序仿抖音切换内容
  3. PPmoney基于Kubernetes的DevOps实践
  4. Linux被熊孩子攻破了?
  5. C#基于联通短信Sgip协议构建短信网关程序.net
  6. Casbin入选2022 Google编程之夏
  7. 七牛云融合CDN到底怎么配置?
  8. c++编程 设置桌面壁纸以及设置壁纸失效的解决办法
  9. 如何在区块链底层平台和应用场景中搭一个“桥梁”,他们推出了“中间件”
  10. oracle体育成绩字段,在Excel中利用自定义函数处理体育达标成绩