在SQL中實現多條件任意組合黑名單的方法

來源:互聯網
上載者:User

標籤:

    最近的一個項目中,在對故障工單進行自動語音督辦的時候,需要在某個時段對某種組合條件下的工單不督辦。如在即時督辦中,對所有地區警示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 intasbegin  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
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‘unionselect ‘all‘,2,2,‘all‘,‘208-121-00-800030‘,‘all‘,‘all‘,‘all‘unionselect ‘all‘,2,2,‘all‘,‘207-121-00-800316‘,‘all‘,‘all‘,‘all‘unionselect ‘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 ‘是黑名單,需要過濾,不督辦‘endelsebegin  print ‘不是黑名單,無需過濾,督辦‘end*/
View Code

    通過這種方法,我們可以實現通過設定一條記錄,來增加一種組合條件的判定條件,從而在某個時段對某種組合條件下的工單不督辦。
    如有更好的方法,歡迎探討和指導。(不經允許,請勿轉載)

 

在SQL中實現多條件任意組合黑名單的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.