Структура таблиц номерного плана

В статье описана структура таблиц, описывающих внутренний номерной план

Информация о внутреннем номерном плане содержится в 4 таблицах: A_NumberPlan, A_NumberPlanAction, A_Rules, A_RuleRecords.

Ниже подробно описаны основные поля каждой таблицы

[A_NumberPlan] - справочник номеров
[ID] - идентификатор номера
[Prefix] - номер

[A_NumberPlanAction] - таблица действий по конкретному номеру
[ID] [uniqueidentifier] - идентификатор записи
[NumID] [uniqueidentifier] - идентификатор номера из таблицы A_NumberPlan
[NumType] [int] - тип номера:
{ 0 - стандартный, 1 - специальный, 2 - быстрый, 3 - IVR, 4 - экстренный }
[ExtraType] [int] - дополнительный тип для служебных номеров:
{ 1 - флэш, 2 - город, 3 - АТС, 4 - перехват, 9 - SipHotline }
[ExtraID] [uniqueidentifier] - ссылка на правило звонка (для стандартных номеров)

[A_Rules] - правило стандартного номера
[ID] [uniqueidentifier] - идентификатор записи
[Name] [nvarchar] (500) - название правила
[Type] [int] - тип правила(режим вызова абонента)

[A_RuleRecords] - объекты правила
[ID] [uniqueidentifier] - идентификатор записи
[InnerAddressType] - тип объекта правила:
{ 0 - пользователь, 1 - линия, 2 - номер, 3 - внутренний сип-поток, 4 - внешний номер }
[StartTime] [int]- время начала реагирования
[FinishTime] [int]- время окончания реагирования
[RuleID] [uniqueidentifier] - идентификатор правила
[ReactID] [uniqueidentifier] - идентификатор объекта (id пользователя, id линии, id номера)
[Account] [nvarchar] (100) - внешний номер

Связи между таблицами:

[A_NumberPlan].[ID] <-> [A_NumberPlanAction].[NumID]
[A_NumberPlanAction].[ExtraID] <-> [A_Rules].[ID]
[A_Rules].[ID] <-> [A_RuleRecords].[RuleID]

Рассмотрим несколько часто встречающихся задач на получение информации из этих таблиц:

  1. По идентификатору пользователя найти его внутренний номер. 
    Т.е. необходимо найти те номера, в правиле которых содержится 1 объект и этот объект нужный нам пользователь

    @userid - параметр, содержащий идентификатор пользователя

    SELECT TOP 1 np.Prefix FROM A_NumberPlan np
    INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID AND npa.ExtraId IN
    (SELECT RuleID FROM A_RuleRecords
    WHERE reactid=@userid AND InnerAddressType=0
    AND RuleID IN
    (SELECT RuleID FROM A_RuleRecords
    GROUP BY RuleID HAVING COUNT(*)=1))
    ORDER BY np.Prefix

  2. По номеру линии найти все номера (включая групповые), содержащие эту линию

    @linenum - параметр, содержащий номер линии

    SELECT np.Prefix FROM A_NumberPlan np 
    INNER JOIN A_NumberPlanAction npa ON np.ID=npa.NumID AND npa.ExtraId IN 
    (SELECT RuleID FROM A_RuleRecords 
    WHERE reactid=(select id from dbo.A_View_ServerLinesAll where systemnum=@linenum)
    AND InnerAddressType=1)
    ORDER BY np.Prefix

    Номерной план, номер, пользователь

    Комментарии

    168

    ooo Альфа-Эко


    13 февраля 201213:41

      169

      ooo Альфа-Эко


      13 февраля 201213:41

        173

        ИП Пантюшина


        16 февраля 201214:56

        Опечатка: ExtraID вместо ExtraType

        [A_NumberPlanAction].[ExtraType] <-> [A_Rules].[ID]

          192

          Шалавин Дмитрий


          11 марта 201212:47

          Спасибо, исправил.

            220

            ООО "Первый Контактный Центр"


            3 мая 201207:01

            Какая процедура в MS SQL добавляет внутренний номер?

              Новое сообщение

              Прикрепить файлы

              Написать