Файл: Автоматизация обработки обращений в службу технической поддержки в ООО «РТ-Информ».pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 257

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Рисунок 5. Дерево фу нкций

Сценарий диалога формируется на основе дерева функций. В разработанной системе сценарий построен по иерархическому принципу. Работа начинается с вызова главной кнопочной формы, на которой присутствует 4 пунктов меню:

  • Справочник;
  • Заявка;
  • Клиент;
  • Отчеты;
  • Выход.

Сценарий диалога приведен на рисунке 6.

Рисунок 6. С ценарий ди алога

    1. Характеристика базы данных

ER-модель представляет собой логическую структуру информации об объектах системы. Компонентами ER-модели являются сущности (объекты) и отношения (связи между объектами). Объект имеет множество реализаций или экземпляров. Экземпляр объекта образуется совокупностью конкретных значений реквизитов и должен однозначно определяться, т.е. идентифицироваться значением ключа объекта, который состоит из одного или нескольких ключевых реквизитов.

Сущности могут быть зависимыми и независимыми. Сущность является независимой, если каждый экземпляр ее может быть однозначно идентифицирован без определения ее отношений с другими сущностями. Однозначная идентификация экземпляра зависимой сущности зависит от отношений с другими сущностями.

Для отображения отношений между сущностями используются связи. Связи существуют, если экземпляры сущностей логически взаимосвязаны.

Схема базы данных представлена на рисунке 7.

Описание таблиц представлено на рисунках ниже.

Рисунок 8 Таблица Клиент

Рисунок 9 Таблица Заявка

Рисунок 10 Таблица Статус

Рисунок 11 Таблица Справочник Причина обращения

Рисунок 12 Таблица Справочник дополнительных услуг

Рисунок 13. Схема данных.

    1. Структурная схема пакета (дерево вызова программных модулей)

Рисунок 14. Структурная схема пакета ИС

Описание программных модулей приведено в пункте 3.4 Описание программных модулей.

    1. Описание программных модулей

Программная система состоит из следующих уровней: клиент; сервер приложений; сервер базы данных.

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

Сервер приложений располагается на втором уровне. На втором уровне сосредоточена большая часть бизнес-логики.

Сервер базы данных обеспечивает хранение данных и выносится на третий уровень.

Сервер приложений

Сервер приложений разработан при помощи технологии 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 создается после успешной аутентификации и служит для предоставления клиентскому приложению определенных данных и функциональности сервера.

Цепочка передачи данных между клиентом и сервером выглядит так:

  1. Компонент подключения к БД (TADOConnection);
  2. Набор данных (TADOTable или TADOQuery);
  3. Провайдер набора данных (TDataSetProvider);
  4. Компонент клиентского соединения (TSQLConnection);
  5. Клиентский компонент соединения с провайдером данных (TDSProviderConnection);
  6. Клиентский набор данных (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.