Файл: Автоматизация обработки обращений в службу технической поддержки в ООО «РТ-Информ».pdf
Добавлен: 01.04.2023
Просмотров: 485
Скачиваний: 2
Рисунок 5. Дерево фу нкций
Сценарий диалога формируется на основе дерева функций. В разработанной системе сценарий построен по иерархическому принципу. Работа начинается с вызова главной кнопочной формы, на которой присутствует 4 пунктов меню:
- Справочник;
- Заявка;
- Клиент;
- Отчеты;
- Выход.
Сценарий диалога приведен на рисунке 6.
Рисунок 6. С ценарий ди алога
-
- Характеристика базы данных
ER-модель представляет собой логическую структуру информации об объектах системы. Компонентами ER-модели являются сущности (объекты) и отношения (связи между объектами). Объект имеет множество реализаций или экземпляров. Экземпляр объекта образуется совокупностью конкретных значений реквизитов и должен однозначно определяться, т.е. идентифицироваться значением ключа объекта, который состоит из одного или нескольких ключевых реквизитов.
Сущности могут быть зависимыми и независимыми. Сущность является независимой, если каждый экземпляр ее может быть однозначно идентифицирован без определения ее отношений с другими сущностями. Однозначная идентификация экземпляра зависимой сущности зависит от отношений с другими сущностями.
Для отображения отношений между сущностями используются связи. Связи существуют, если экземпляры сущностей логически взаимосвязаны.
Схема базы данных представлена на рисунке 7.
Описание таблиц представлено на рисунках ниже.
Рисунок 8 Таблица Клиент
Рисунок 9 Таблица Заявка
Рисунок 10 Таблица Статус
Рисунок 11 Таблица Справочник Причина обращения
Рисунок 12 Таблица Справочник дополнительных услуг
Рисунок 13. Схема данных.
-
- Структурная схема пакета (дерево вызова программных модулей)
Рисунок 14. Структурная схема пакета ИС
Описание программных модулей приведено в пункте 3.4 Описание программных модулей.
-
- Описание программных модулей
Программная система состоит из следующих уровней: клиент; сервер приложений; сервер базы данных.
Клиент — это интерфейсный компонент, который представляет первый уровень, собственно приложение для конечного пользователя. Первый уровень не имеет прямых связей с базой данных и бизнес-логики.
Сервер приложений располагается на втором уровне. На втором уровне сосредоточена большая часть бизнес-логики.
Сервер базы данных обеспечивает хранение данных и выносится на третий уровень.
Сервер приложений
Сервер приложений разработан при помощи технологии Delphi XE2 DataSnap. Передача данных между клиентом и сервером осуществляется через протокол TCP.
Сервер приложений взаимодействует с базой данных через СУБД Microsoft SQL Express. Подключение к базе данных выполняется через технологию ADO.
В структуре сервера можно выделить две основные части: Модуль управления сервером (TdmServer) и модуль предоставления данных (TdssmRemoteData). Описание модулей приведено ниже.
Таблица 2 Структура сервера приложений
|
№ |
Название модуля |
Описание |
Функции |
|
1 |
TdmServer |
Содержит компоненты для подключения к системе управления базами данных (через ADO) и компоненты для организации сервера приложений (передача данных выполняется через протокол TCP). Также содержит в своем составе модуль для получения рекомендаций по заявкам. |
Подключение к СУБД. Управление сервером приложений (установка соединений с клиентскими приложениями, аутентификация пользователей, передача данных клиентам). Выдача рекомендаций. |
|
2 |
TdssmRemoteData |
Модуль системы, который определяет доступные клиенту данные и функциональность системы. Экземпляр данного модуля создается для каждого подключенного клиента. |
Авторизация. Предоставление данных; Предоставление функциональности; |
При инициализации данного модуля автоматически выполняется инициализация соединения с базой данных. Параметры соединения содержаться в файле Params.ini. Если соединение с базой данных по каким-то причинам не удалось установить, то сервер выдаст сообщение о невозможности дальнейшей работы, т.е. успешное подключение к базе данных обязательное условии запуска сервера.
Как уже отмечалось, сервер передает данные по протоколу TCP (за это отвечает компонент DSTCPServerTransport). Потому, для сервера должен быть задан порт прослушивания. В нашем случае он имеет значение 5000.
При подключении, на сервере создается отдельный поток. Клиент в обязательном порядке передает данные для аутентификации (логин и пароль), проверку которых выполняет компонент DSAuthenticationManager.
В случае успешного прохождения процедуры аутентификации, для передачи данных между сервером и клиентом, DSServer создаст интерфейс взаимодействия. Этим интерфейсом является экземпляр класса TdssmRemoteData.
В случае ошибки аутентификации сервер вызывает исключение и уничтожает поток, который был создан для данного подключения.
Таблица 3 Описание класса «TdmServer»
|
Область видимости |
Поле/метод |
Описание |
|
public |
adoConnection: TADOConnection; |
Компонент, отмечающий за соединение с базой данных через технологию ADO. |
|
DSServer: TDSServer; |
Компонент, организующий работу сервера DataSnap. |
|
|
DSTCPServerTransport: TDSTCPServerTransport; |
Компонент передачи данных между сервером и клиентом. |
|
|
DSServerClass: TDSServerClass; |
Компонент, определяющий класс, функциональность которого будет доступна подключенным к серверу клиентам. |
|
|
DSAuthenticationManager: TDSAuthenticationManager; |
Менеджер аутентификации. |
|
|
RecommendationController : TRecommendationController; |
Компонент для получения рекомендаций. |
|
|
function GetUserKey (Login, Password : String; var Blocked : Boolean) : Integer; |
Функция для получения идентификатора пользователя по его логину и паролю. |
Интерфейс взаимодействия
Как было сказано выше, экземпляр класса TdssmRemoteData создается после успешной аутентификации и служит для предоставления клиентскому приложению определенных данных и функциональности сервера.
Цепочка передачи данных между клиентом и сервером выглядит так:
- Компонент подключения к БД (TADOConnection);
- Набор данных (TADOTable или TADOQuery);
- Провайдер набора данных (TDataSetProvider);
- Компонент клиентского соединения (TSQLConnection);
- Клиентский компонент соединения с провайдером данных (TDSProviderConnection);
- Клиентский набор данных (TClientDataSet).
Пункты 1, 2, 3 – выполняются на стороне сервера, а пункты 4, 5, 6 – на стороне клиента. Компоненты класса TDataSetProvider служат для определения прав доступа и настройки параметров передачи данных клиенту. В его настройках можно указать такие параметры как: доступность набора данных для клиента, режим «только чтение», запрет редактирования, запрет вставки, запрет удаления и т.д.
Таблица 4 Описание класса «TdssmRemoteData»
|
Область видимости |
Поле/метод |
Описание |
|---|---|---|
|
private |
itRequest: TADOTable; |
Внутренний набор данных «Заявка». Используется сервером для редактирования данных таблицы «Заявка». |
|
FCurrentUserKey : Integer; |
Идентификатор пользователя. |
|
|
FCurrentUserTypeKey : Integer; |
Идентификатор типа пользователя. |
|
|
FDate1 : TDateTime; |
Дата начала периода (для периодических отчетов). |
|
|
FDate2 : TDateTime; |
Дата окончания периода (для периодических отчетов). |
|
|
procedure GetAccess (UserTypeID : Integer); |
Метод настройки прав доступа для пользователя (в зависимости от его типа). |
|
|
procedure AccesDenied; |
Метод вызова исключения в случае отсутствии доступа. |
|
|
public |
qUserInfo: TADOQuery; |
Набор данных «Информация о пользователе» (доступен всем пользователям прошедшим аутентификацию). |
|
dspUserInfo: TDataSetProvider; |
Провайдер набора данных qUserInfo. |
|
|
tFunction: TADOTable; |
Набор данных «Должность» (доступен пользователям из группы «Администраторы»). |
|
|
dspFunction: TDataSetProvider; |
Провайдер набора данных tFunction. |
|
|
dspDepartment: TDataSetProvider; |
Провайдер набора данных tDepartment. |
|
|
tUserType: TADOTable; |
Набор данных «Тип пользователя» (доступен пользователям из группы «Администраторы»). |
|
|
dspUserType: TDataSetProvider; |
Провайдер набора данных tUserType. |
|
|
tUser: TADOTable; |
Набор данных «Пользователь» (доступен пользователям из группы «Администраторы»). |
|
|
dspUser: TDataSetProvider; |
Провайдер набора данных tUser. |
|
|
tOpenRequest: TADOTable; |
Набор данных «Открытые заявки» (доступен пользователям из группы «Администраторы»). |
|
|
dspOpenRequest: TDataSetProvider; |
Провайдер набора данных tOpenRequest. |
|
|
tClosedRequest: TADOTable; |
Набор данных «Закрытые заявки» (доступен пользователям из группы «Администраторы»). |
|
|
dspClosedRequest: TDataSetProvider; |
Провайдер набора данных tClosedRequest. |
|
|
tArchive: TADOTable; |
Набор данных «Архив» (доступен пользователям из группы «Администраторы»). |
|
|
dspArchive: TDataSetProvider; |
Провайдер набора данных tArchive. |
|
|
tParams: TADOTable; |
Набор данных «Параметры» (доступен пользователям из группы «Администраторы»). |
|
|
dspParams: TDataSetProvider; |
Провайдер набора данных tParams. |
|
|
tDefectCount: TADOTable; |
Набор данных «Количество неисправностей» (доступен пользователям из группы «Администраторы»). |
|
|
dspDefectCount: TDataSetProvider; |
Провайдер набора данных tDefectCount. |
|
|
cdsYearReport: TClientDataSet; |
Набор данных «Годовой отчет» (доступен пользователям из группы «Администраторы»). |
|
|
dspYearReport: TDataSetProvider; |
Провайдер набора данных cdsYearReport. |
|
|
qRequestClose: TADOQuery; |
Набор данных «Отчет по закрытым заявкам» (доступен пользователям из группы «Администраторы»). |
|
|
dspRequestClose: TDataSetProvider; |
Провайдер набора данных qRequestClose. |
|
|
qRequestOpen: TADOQuery; |
Набор данных «Отчет по открытым заявкам» (доступен пользователям из группы «Администраторы»). |
|
|
dspRequestOpen: TDataSetProvider; |
Провайдер набора данных qRequestOpen. |
|
|
tRequest: TADOQuery; |
Набор данных «Заявка» (доступен пользователям из группы «Администраторы»). |
|
|
dspRequest: TDataSetProvider; |
Провайдер набора данных tRequest. |
|
|
procedure RequestAdd (DefectID : Integer; Info : String); |
Метод добавления заявки (доступен всем пользователям прошедшим аутентификацию). |
|
|
procedure RequestEdit (RequestID : Integer; Info : String; Date : TDateTime; V1 : Double; V2 : Double; WorkInfo : String; UserFailure : Boolean); |
Метод редактирования заявки (доступен пользователям из группы «Администраторы»). |
|
|
procedure RequestClose (RequestID : Integer; Info : String; Date : TDateTime; V1 : Double; V2 : Double; WorkInfo : String; UserFailure : Boolean); |
Метод закрытия заявки (доступен пользователям из группы «Администраторы»). |
|
|
procedure RequestReopen (RequestID : Integer); |
Метод перевода закрытой заявки в открытую (доступен пользователям из группы «Администраторы»). |
|
|
procedure RequestToArchive (RequestID : Integer); |
Метод перевода закрытой заявки в архив (доступен пользователям из группы «Администраторы»). |
|
|
procedure CreateYearReport (Date : TDateTime); |
Метод для создания годового отчета (доступен пользователям из группы «Администраторы»). |
|
|
procedure SetDates (Date1, Date2 : TDateTime); |
Метод, необходимый для создания отчетов за период (доступен пользователям из группы «Администраторы»). |
|
|
procedure DeleteAllRequest (Psw : string); |
Метод очистки базы данных (доступен пользователям из группы «Администраторы»). Перед выполнением очистки выполняется проверка пользовательского пароля. |
|
|
function GetDate : TDateTime; |
Метод получения системного времени сервера (доступен всем пользователям прошедшим аутентификацию). |
|
|
function GetCurrentUserTypeKey : Integer; |
Метод получения идентификатора пользователя (доступен всем пользователям прошедшим аутентификацию). |
|
|
function GetRecommendation (RequestID : Integer) : String; |
Метод получения рекомендации по указанному идентификатору заявки (доступен пользователям из группы «Администраторы»). |
Класс TRecommendationController выполняет функции по вычислению и систематизации показателей, а также их анализ, после чего формирует сообщение для пользователя.
Таблица 5 Описание класса «TRecommendationController»
|
Область видимости |
Поле/метод |
Описание |
|
private |
Connection : TADOConnection; |
Ссылка на компонент соединения с базой данных. |
|
Request : TRequest; |
Объект, отвечающий за вычисление информации по заявкам. |
|
|
ZLimit : Integer; |
Пороговое значение для Z-массива. |
|
|
PLimit : Integer; |
Пороговое значение для P-массива. |
|
|
NSize : Integer; |
Размерность N-массива. |
|
|
ZSize : Integer; |
Размерность Z-массива. |
|
|
PSize : Integer; |
Размерность P-массива. |
|
|
N : array of Double; |
Массив допустимых пределов; |
|
|
Z : array of Double; |
Массив показателей, который отражает ненадежность устройства. |
|
|
P : array of Double; |
Массив показателей, который отражает некомпетентность пользователя. |
|
|
List : TStringList; |
Рекомендации. |
|
|
function GetQuery (SQL : String) : TADOQuery; |
Метод для получения результатов произвольного запроса к БД. |
|
|
procedure LoadN (DefectID : Integer); |
Метод загрузки массива допустимых пределов. |
|
|
procedure LoadRequest (RequestID : Integer); |
Метод загрузка информации о заявке. |
|
|
procedure LoadZ; |
Метод вычисления Z-массива. |
|
|
procedure LoadP; |
Метод вычисления P-массива. |
|
|
procedure LoadParams; |
Метод загрузки параметров; |
|
|
procedure GetResults; |
Метод анализа Z и P массивов. |
|
|
public |
constructor Create (Connection : TADOConnection); |
Конструктор класса. |
|
destructor Destroy; |
Деструктор класса. |
|
|
function GetRecommendation (RequestID : Integer) : String; |
Функция получения рекомендации по выбранной заявке. |
Модуль описания заявки
Данный модуль создается при инициализации модуля выдачи рекомендаций «TRecommendationController» и служит для получения данных об интересующей нас заявке и расчете показателей, характеризующих её.
При анализе неисправности нам необходимо учитывать предыдущий накопленный опыт её возникновения, средства, расходуемые для её устранения. Все эти требования реализуются в классе TRequest.
Таблица 6 Описание класса «TRequest»
|
Область видимости |
Поле/метод |
Описание |
|---|---|---|
|
private |
Loaded : Boolean |
Указывает на то, что в экземпляре класса уже загружены данные об интересующей нас заявке. |
|
Connection : TADOConnection; |
Ссылка на компонент соединения с базой данных. |
|
|
Request : TADOQuery; |
Запрос к базе данных, который содержит данные, о загруженной заявке. |
|
|
function GetQuery (SQL : String) : TADOQuery; |
Функция для получения результатов произвольного запроса к БД. |
|
|
function GetSimilarRequest (Date1, Date2 : TDateTime; Where : String = '') : TADOQuery; |
Функция для получения списка заявок за период, которые равны по типу неисправности с рассматриваемой заявкой. |
|
|
procedure TestLoaded; |
Функция создает исключение, если заявка не была загружена. |
|
|
public |
constructor Create (Connection : TADOConnection); |
Конструктор класса. |
|
destructor Destroy; |
Деструктор класса. |
|
|
procedure Load (RequestID : Integer); |
Метод для загрузки информации по заданной заявке. |
|
|
procedure Clear; |
Метод для очистки данных. |
|
|
function GetDefectID : Integer; |
Метод получения кода неисправности загруженной заявки. |
|
|
function GetUserID : Integer; |
Метод получения кода пользователя, который добавил заявку. |
|
|
function GetCostOfRepairs : Double; |
Метод получения стоимости ремонта для загруженной заявки. |
|
|
function GetCostOfSpareParts : Double; |
Метод получения стоимости запчастей для загруженной заявки. |
|
|
function GetDateOfRegistration : TDateTime; |
Получить дату регистрации загруженной заявки. |
|
|
function GetDefectCountFormMonth : Integer; |
Метод вычисления количества заявок за месяц (от текущей даты), тип которых соответствует типу загруженной заявки. |
|
|
function GetDefectCountForm6Month : Integer; |
Метод вычисления количества заявок за шесть месяцев (от текущей даты), тип которых соответствует типу загруженной заявки. |
|
|
function GetDefectCountForm12Month : Integer; |
Метод вычисления количества заявок за двенадцать месяцев (от текущей даты), тип которых соответствует типу загруженной заявки. |
|
|
function GetDefectCashSumForm12Month : Double; |
Метод вычисления количества средств потраченных на устранения подобных неисправности за двенадцать месяцев (от текущей даты). |
|
|
function GetUserFailureDefectCountForm3Month : Integer; |
Метод вычисления количества подобных неисправностей по вине пользователя (за три месяца от текущей даты), который добавил текущую заявку. |
|
|
function GetUserFailureDefectCountForm6Month : Integer; |
Метод вычисления количества подобных неисправностей по вине пользователя (за шесть месяцев от текущей даты), который добавил текущую заявку. |
|
|
function GetUserFailureDefectCashSumForm12Month : Double; |
Метод вычисления количества средств потраченных на устранения подобных неисправности за двенадцать месяцев (от текущей даты) по вине пользователя. |
Клиент
Основой клиентской части является модуль TdmData. Модуль выполняет следующие функции: соединение с сервером; управление предоставленными сервером наборами данных; получение доступа к функциональности сервера (создание проекции интерфейса взаимодействия «TdssmRemoteData»).
Для подключения к серверу используется компонент SQLConnection. В качестве параметров подключения мы указываем: тип подключения (DataSnap); IP-адрес сервера; порт подключения (5000); протокол взаимодействия (в нашем случае TCP); логин и пароль пользователя.
Для доступа к функциональности и данным сервера используется специальный компонент DSProviderConnection, который необходим для подключения клиентского набора данных (TClientDataSet) к провайдеру набора данных (TDataSetDrovider).
После успешного подключения к серверу выполняется активация доступных наборов данных (открытие набора данных).
После открытия набора пользователь может редактировать набор данных через визуальные компоненты (такие как TDBGrid, TDBEdit, TDBMemo, TDBImage, TDBNavigator и т.д.), разработанные специально для работы с базами данных. Но визуальные компоненты подключаются не напрямую к клиентскому набору данных, а используют специальный «посредник» (объект класса TDataSource) который призван унифицировать использование визуальных компонентов с различными типами наборов данных.
Клиент также получает доступ к интерфейсу взаимодействия сервера TdssmRemoteData. На стороне клиента, через компонент DSProviderConnection, создается «проекция» класса TdssmRemoteData, в которую входят все методы серверного класса со спецификатором public. Класс «проекция» инициализируется сразу после подключения клиента к серверу.
Таблица 7 Описание класса «TdmData»
|
Область видимости |
Поле/метод |
Описание |
|---|---|---|
|
public |
SQLConnection: TSQLConnection; |
Компонент соединения с сервером приложений; |
|
DSProviderConnection: TDSProviderConnection; |
Компонент соединения с |
|
|
cdsUserInfo: TADOQuery; |
Клиентский набор данных «Информация о пользователе». |
|
|
dsUserInfo: TDataSetProvider; |
Посредник набора данных cdsUserInfo. |
|
|
cdsFunction: TADOTable; |
Клиентский набор данных «Должность». |
|
|
dsFunction: TDataSetProvider; |
Посредник набора данных cdsFunction. |
|
|
cdsDefect: TADOTable; |
Клиентский набор данных «Неисправность». |
|
|
dsDefect: TDataSetProvider; |
Посредник набора данных cdsDefect. |
|
|
cdsDepartment: TADOTable; |
Клиентский набор данных «Отделение». |
|
|
dsDepartment: TDataSetProvider; |
Посредник набора данных cdsDepartment. |
|
|
cdsUserType: TADOTable; |
Клиентский набор данных «Тип пользователя». |
|
|
dsUserType: TDataSetProvider; |
Посредник набора данных cdsUserType. |
|
|
cdsUser: TADOTable; |
Клиентский набор данных «Пользователь». |
|
|
dsUser: TDataSetProvider; |
Посредник набора данных cdsUser. |
|
|
cdsOpenRequest: TADOTable; |
Клиентский набор данных «Открытые заявки». |
|
|
dsOpenRequest: TDataSetProvider; |
Посредник набора данных cdsOpenRequest. |
|
|
cdsClosedRequest: TADOTable; |
Клиентский набор данных «Закрытые заявки». |
|
|
dsClosedRequest: TDataSetProvider; |
Посредник набора данных cdsClosedRequest. |
|
|
cdsArchive: TADOTable; |
Клиентский набор данных «Архив». |
|
|
dsArchive: TDataSetProvider; |
Посредник набора данных cdsArchive. |
|
|
cdsParams: TADOTable; |
Клиентский набор данных «Параметры». |
|
|
dsParams: TDataSetProvider; |
Посредник набора данных cdsParams. |
|
|
cdsDefectCount: TADOTable; |
Клиентский набор данных «Количество неисправностей». |
|
|
dsDefectCount: TDataSetProvider; |
Посредник набора данных cdsDefectCount. |
|
|
cdsYearReport: TClientDataSet; |
Клиентский набор данных «Годовой отчет». |
|
|
dsYearReport: TDataSetProvider; |
Посредник набора данных cdsYearReport. |
|
|
cdsReportRequestClose: TADOQuery; |
Клиентский набор данных «Отчет по закрытым заявкам». |
|
|
dsReportRequestClose: TDataSetProvider; |
Посредник набора данных cdsRequestClose. |
|
|
cdsReportRequestOpen: TADOQuery; |
Клиентский набор данных «Отчет по открытым заявкам». |
|
|
dsReportRequestOpen: TDataSetProvider; |
Посредник набора данных cdsRequestOpen. |
|
|
cdsRequest: TADOQuery; |
Клиентский набор данных «Заявка». |
|
|
dsRequest: TDataSetProvider; |
Посредник набора данных cdsRequest. |