Проектирование и разработка системы обработки данных, получаемых ФГУП "Почта России" от ОАО "Ростелеком"

Описание формата и структуры входных и выходных файлов. Выбор языка программирования и Perl модуля для генерации документов в формате pdf. Валидация почтового адреса. Процесс создания алгоритма обработки данных. Структура штрихкодового идентификатора.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 04.11.2015
Размер файла 1,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

2. Считается сумма символов, расположенных в четных позициях числа.

3. Суммируются результаты пунктов 1 и 2.

4. Вычисляется минимальное число, которое необходимо прибавить к результату из пункта 3, чтобы получить сумму, кратную 10. Получившееся число и будет контрольным разрядом. (Например, после выполнения пункта 3, получилось число 27, значит контрольный разряд 3). Если результат в пункте 3 кратен 10, то контрольное число 0.

Коды ШПИ будем хранить в отдельной таблице в базе данных. Необходимо разработать также программу для генерации кодов ШПИ по введенному пользователем диапазону, проверки контрольной цифры, и внесения диапазона кодов ШПИ в базу данных.

Входные данные:

· Xml файл с данными клиентов, упакованный в архив формата zip.

· Таблица в БД с кодами ШПИ.

· Таблица в БД, хранящая соответствие почтового индекса региону

Выходные данные:

· AFP файл, содержащий почтовые отправления для печати

· ZIP архив с электронными списками для прогрузки в ПО «Партионная Почта»

· XML файл, содержащий id клиента и присвоенный ему ШПИ. Файл ежедневно направляется клиенту

· Акт приема-передачи данных для передачи печатных файлов на производство

Списки для прогрузки в ПО Партионная Почта будут автоматически рассылаться из программы по e-mail. Готовые файлы печати должны также автоматически загружаться на ФТП сервер компании, после чего должно приходить письмо-уведомление начальнику цеха и системным администраторам о готовности файлов к печати, также содержащее акт приема-передачи. Акт приема-передачи должен содержать в табличном виде все файлы для печати, количество страниц в каждом файле, количество отправлений, размер отправлений и тип печати (односторонняя/двухсторонняя).

4.2 Многопоточная обработка данных в Perl

Для Perl есть несколько вариантов реализации многопоточной обработки данных. Рассмотрим основные способы.

4.2.1 Fork

Для создания потомков процесса Perl использует системный вызов fork. Обычно он используется совместно с exec. Функция exec выполняет команду, переданную ей в аргументах, и завершает свою работу после выполнения. Вызов fork возвращает undef (неопределенное значение) в случае неудачи, иначе в родительском процессе он возвращает ненулевое значение, а в процессе-потомке нуль. При вызове функции fork создается процесс-потомок, который копирует все данные от родительского процесса. Новый процесс получает своё собственное адресное пространство и начинает существовать независимо от родителя. Такое ветвление процессов - широко распространённая практика в многозадачных средах, способных выполнять сразу несколько потоков команд. Но ветвление - не единственный способ воспользоваться преимуществами многопоточности.

4.2.2 Threads

Другой подход - создание нитей (threads). При стандартном fork-подходе одно отдельное адресное пространство обрабатывается одним потоком команд. Но нет никаких принципиальных ограничений на количество потоков команд, работающих в одном адресном пространстве, поэтому потоки и принято называть нитями. Нити позволяют операционной системе выполнять программу сразу на нескольких процессорах или продолжать выполнение одной нити, пока другая ожидает ввода/вывода, сетевого соединения или других событий. Подобные возможности доступны и при fork-ветвлении, но нити дают некоторое дополнительное преимущество перед ветвлением. Во-первых, при переключении между нитями системе не приходится менять контекст задачи. Во-вторых, передача данных между нитями происходит гораздо проще, чем между отдельными процессами, благодаря общей памяти.

Поддержка нитей в программе включается при подключении модуля threads командой use threads. Для успешного подключения threads, требуется, чтобы Perl был собран с поддержкой многопоточности, иначе интерпертатор выведет сообщение об ошибке.

При использовании threads часто происходят утечки памяти, отработавшие процессы не освобождают память, причем отловить эти утечки часто очень трудно. Также использование threads требует больше памяти, чем fork.

4.2.3 Специализированные модули для параллельного выполнения процессов

В CPAN есть несколько модулей, предназначенных для параллельного выполнения процессов. Все они в той или иной степени являются надстройками над fork или threads и позволяют несущественно облегчить работу по распараллеливанию процессов.

Но есть отдельный модуль под названием AnyEvent::Fork. В описании модуля сказано, что работа с потоками через этот модуль, быстрее, чем запуск fork+exec. Также модуль позволяет автоматически отслеживать завершившиеся процессы, имеет возможность передачи параметров в выполняемые потоки. В модуле есть функция, определяющая количество процессоров в системе.

Для параллельного выполнения процессов в данном проекте используем модуль AnyEvent::Fork.

4.3 Описание основных модулей системы

4.3.1 Модуль F103

Модуль предназначен для создания бумажных и электронных списков по форме 103. Бумажный список - это список в формате pdf, который прикрепляется в конце каждого печатного файла. Модуль написан с применением объектно-ориентированного подхода. Глобальные переменные, значения которых используются по умолчанию, перечислены в таблице 10.

Таблица 1010 - Глобальные переменные модуля F103

Переменная

Значение

Описание

$RPO_CAT

'Заказное письмо'

Категория отправления

$WEIGHT

0.02

Вес отправления

$PRICE_REGISTERED_LETTER

35.00

Цена отправления

$xsl_f103

'/home/vrag/perl/Modules/f103.xsl'

Путь к файлу, содержащему xsl схему

$temp_dir

'/var/tmp/rostelecom'

Временная папка для хранения файлов

Для создания объекта класса F103, вызывается конструктор (функция new). Параметры, принимаемые конструктором, перечислены в таблице 11.

Таблица 1111 - Параметры конструктора модуля F103

Аргумент

Обязательный/Значение по умолчанию

Описание

-lists_num

Обязательный

Номер списка

-sender

Обязательный

Наименование клиента

-ops

Необязательный/«»

Наименование отделения почтовой связи, осуществляющего приемку отправлений

-dir

Обязательный

Директория, в которую будет сохранен файл

-price

Необязательный/значение переменной $PRICE_REGISTERED_LETTER

Цена отправления

-weight

Необязательный/

Вес отправления, по умолчанию вес отправления до 3-х вложений

-rpo_cat

Необязательный/«Заказное письмо»

Категория почтового отправления

Пример вызова конструктора:

$F103 = F103::new (-sender => 'ОАО Ростелеком', -list_num => 2, -ops => 'ОПС 140961 МР АСЦ',);

В случае успешного выполнения возвращается 1, в случае неудачи 0.

Создание бумажного списка

Метод: generate_f103

Функция получает на вход массив хэшей с данными и трансформирует его в XML файл. Функция также производит подсчет общего количетсва стоимости отправлений, общий вес, производит перевод сумм в текстовое представление (сумма прописью). Pdf файл создается XSLT процессором Apache Fop, данные берутся из XML файла (генерируемый функцией generate_f103), а схема трансформации данных из XSL файла.

XSLT (Extensible Stylesheet Language for Transformations, расширяемый язык стилей для преобразований) официально рекомендован комитетом W3C (World Wide Web Consortium). Он представляет гибкие, мощные средства для преобразования XML-документов в другие форматы, например в документ HTML, другой документ XML, файл PDF (Portable Document Format) [18].

Схема генерации файла с использованием XSLT процессора выбрана из-за того, что в PDF модулях для Perl нет возможности генерации в файлах pdf таблиц с динамическими данными, т.е. модули предоставляют возможность вывода текста в pdf по определенным координатам, а возможность вывода текста в определенную ячейку таблицы отсутсвует. На языке XSLT 1.0 была написана схема генерации данных f103.xsl. Модуль на Perl создает xml файл с данными формы 103, который вместе с xsl схемой подаётся на вход Apache FOP. Apache FOP производит трансформацию данных согласно схеме xsl и на выходе создает pdf файл.

Общая блок-схема алгоритма представлена на рисунке 4.

Параметры вызова функции перечислены в таблице 12.

Таблица 1212 - Параметры вызова функции generate_f103

Аргумент

Обязательный/Значение по умолчанию

Описание

-dir

Обязательный

Директория, в которую будет сохранен файл

-data

Обязательный

Ссылка на массив хэшей с данными об отправлениях. Ключи хэша:

barcode

zip

name

address

Возвращаемое значение: Массив (Полный путь к сгенерированному файлу, статус).

Действие при ошибке: Вывод сообщения об ошибке и возврат 0.

Пример вызова функции:

$f103 - >generate_f103 (-dir => $TEMP_DIR, -data => $DATA);

Создание электронного списка

Рисунок 44 - Схема работы функции generate_f103

Метод: generate_ini

Функция осуществляет создание 2-х файлов:

· txt файл, который содержит в каждой строке информацию об одном отправлении (ШПИ, почтовый индекс, вес, цена, адрес получателя);

· ini файл, содержащий итоговую информацию обо всех отправлениях, перечисленных в txt файле (суммарный вес отправлений, суммарная цена, ИНН отправителя, дата отправки и т.д..)

Оба файла помещаются в архив формата zip с удалением исходных файлов. Схема работы функции показана на рисунке 5.

Параметры вызова функции перечислены в таблице 13.

Возвращаемое значение: Массив (Полный путь к сгенерированному файлу, статус).

Действие при ошибке: Вывод сообщения об ошибке и возврат 0.

Рисунок 55 - Схема работы функции generate_ini

Таблица 1313 - Параметры вызова функции generate_ini

Аргумент

Обязательный/Значение по умолчанию

Описание

-inn

Обязательный

ИНН клиента

-dir

Обязательный

Директория, в которую будет сохранен файл

-data

Обязательный

Ссылка на массив хэшей с данными об отправлениях. Ключи хэша:

barcode

zip

area

city

weight

price

Пример вызова функции:

$f103->generate_ini_new (-inn => $inn, -dir => $OUTPUT_DIR, -data => $DATA);

4.3.2 Модуль AddressInfo

Модуль предназначен для валидации почтового адреса и разбора его на составляющие части. Модуль написан в ООП стиле и содержит конструктор (фунция new) и несколько функций для доступа к данным. Для валидации данных необходимо создать объект класса AddressInfo, вызовом конструктора, в параметрах конструктора передается адрес, который необходимо провалидировать. Пример создания объекта

my $addr = AddressInfo::new ('Адрес для валидации');

В случае успешного выполнения, функция вернет 1 и присвоит ссылку на объект класса AddressInfo переменной $addr. В случае ошибки, функция возвращает 0. Для получения информации об адресе, необходимо вызвать метод get_info. Все методы класса AddressInfo перечислены в таблице 14.

Таблица 1414 - Методы класса AddressInfo

Название метода

Параметры

Возвращаемое значение

Описание

new

address - адрес для валидации

$self - ссылка на объект класса AddressInfo

Конструктор класса

get_info

-

1 - в случае успешного выполнения

0 - в случае ошибки

Метод получения информации об адресе

status

-

1 - в случае успешной валидации адреса

0 - при невозможности восстановить адрес

Метод, возвращающий статус валидации адреса

source_address

-

Адрес до валидации

Метод, возвращающий исходный адрес, до валидации

post_index

-

Почтовый индекс после валидации, 0 - при ошибке валидации

Метод, возвращающий только почтовый индекс, если его удалось получить, иначе возвращает 0

post_index_write

post_index - почтовый индекс

-

Метод, записывающий почтовый индекс, переданный в параметрах вызова, в свойства объекта. Private метод для использования внутри класса.

post_address

-

Строка, содержащая почтовый адрес после валидации, 0 - при ошибке валидации

Метод, возвращающий почтовый адрес в форме, соответствующей требованиям почтовых правил

address_hash

-

Сссылка на хэш, содержащий почтовый адрес после валидации, 0 - при ошибке валидации

Метод, возвращающий разобранный на составляющие части адрес в виде хэша (ключи: region, area, city, street)

error

-

Сообщение об ошибке, 0 - в случае отсутствия ошибок

Метод, возвращающий сообщение об ошибке, если она произошла, иначе возвращает 0

Основным методом класса является метод get_info, остальные методы, являются методами-акцессорами, т.е. предоставляют доступ к свойствам класса и не выполняют никаких функций. Поэтому описывать будем только алгоритм метода get_info

Метод get_info

При вызове данного метода, на сервер валидации адресов отправляется запрос с адресом, который требуется проверить. В ответ сервис возвращает 2 переменных статуса (код правильности адреса и код полноты адреса). Если код правильности адреса равен GOOD UNDEF_05 UNDEF_06, а код полноты VALIDATED NOT_VALIDATED_HAS_UNPARSED_PARTS NOT_VALIDATED_HAS_ASSUMPTION NOT_VALIDATED_HAS_

NO_KLADR_RECORD, то адрес считается валидированным. Метод заносит в хэш основные поля адреса, возвращенные сервером и возвращает 1. В случае если адрес не удалось валидировать, метод возвращает 0. Блок-схема метода представлена на рисунке 6.

Рисунок 66 - Структурная схема метода get_info

4.3.3 Модуль ScpUpload

Модуль предназначен для загрузки одного файла на сервер с доступом по протоколу ssh. Модуль содержит глобальную переменную $SERVER (адрес сервера, на который производится загрузка), которая имеет значение по умолчанию '62.176.2.49'. Модуль содержит единственную функцию scp_upload. Параметры вызова функции перечислены в таблице 15.

Таблица 1515 - Параметры вызова функции scp_upload

Аргумент

Обязательный/Значение по умолчанию

Описание

-fname

Обязательный

Полный путь к файлу на локальном ПК, который требуется загрузить на сервер

-rdir

Обязательный

Папка на удаленном сервере, в которую производится загрузка. Папка должна быть создана заранее, при отсутствии папки на сервере, выводится ошибка

-server

Необязательный/$SERVER

Адрес сервера куда производится загрузка файлов

-subdir

Необязательный

Поддиректория, в которую требуется осуществить загрузку. При ее отсутствии, создается на сервере

Структурная схема функции scp_upload представлена на рисунке 7.

Рисунок 77 - Структурная схема функции scp_upload

4.3.4 Модуль APP

Модуль предназначен для создания акта приема-передачи в формате Microsoft Excel 2003 (.xls). Модуль содержит 2 функции, видимые снаружи: create_app, send_app.

Функция create_app

Функция предназначена для непосредственного создания Акта приема-перадачи в виде файла в формате xls. В функцию передается массив хэшей с данными, где один элемент массива содержит одну строку в таблице Акта приема-передачи. Для создания файла в формате Microsoft Excel 2003, функция использует модуль Spreadsheet::WriteExcel 2.40.

В случае успешного выполнения функция возвращает полный путь к созданному файлу, в случае ошибки - 0. Параметры вызова функции перечислены в таблице 16.

Таблица 1616 - Параметры вызова функции create_app

Аргумент

Обязательный/ Значение по умолчанию

Описание

-dataref

Обязательный

Ссылка на массив хешей с данными для акта приема-передачи. Ключи хэша

filename - имя файла в таблице

type - формат страницы (необязательный)

sheets_count - количество листов

sends_count - количество отправлений

-dir

Необязательный/ Текущая директория

Полный путь к папке для записи файла

-company

Необязательный/''

Название клиента-отправителя писем

-region

Необязательный/no

Флаг, указывающий, надо ли указать название региона в имени файла. Номер региона берется из папки, переданной в аргументе -dir

-short_ company_name

Необязательный/''

Краткое название компании, указывается в имени файла, содержащего АПП

-type

Необязательный/'А4 «Симплекс»'

Тип бумаги. Если в хэше, в данных (аргумент -dataref) передан параметр type, то используется он в качестве формата страницы

-num

Необязательный/ Номер дня в году

Номер акта приема-передачи. Используется в имени файла и в теле акта

Структурная схема функции create_app представлена на рисунке 8.

Рисунок 88 - Структурная схема функции create_app

Функция send_app

Функция позволяет отправить акт приема-передачи по e-mail. Функция представляет собой упрощенный интерфейс к модулю SendMail. Параметры вызова функции представлены в таблице 17.

Таблица 1717 - Параметры вызова функции send_app

Аргумент

Обязательный/ Значение по умолчанию

Описание

-mail_rcpt

Обязательный

Получатель письма, несколько получателей разделяются символом ';'

-subj

Обязательный

Тема письма

-msg

Обязательный

Тело письма

-app_fname

Обязательный

Путь к файлу, который требуется вложить в письмо

В случае успешного выполнения, функция возвращает 1, иначе - 0. Так как алгоритм простой, блок-схему можно не показывать.

4.3.5 Модуль SendMail

Модуль предназначен для отправки письма по электронной почте, с вложением файла или без вложений. Последняя рабочая версия модуля: 1.10. Модуль написан с применением объектно-ориентированного подхода и состоит из конструктора и метода send. Также модуль содержит несколько вспомогательных функций, которые недоступны снаружи и предназначены для работы основной функции send. Учетные данные, использующиеся для подключения к серверу хранятся в глобальных переменных, которые перечислены в таблице 18.

Таблица 1818 - Глобальные переменные модуля SendMail

Имя переменной

Значение по умолчанию

$SERVER

'10.132.0.40'

$MAILBOX

'p.andryushin@cgppost.ru'

$MAIL_LOGIN

'pavel.andryushin'

$MAIL_PWD

'***********'

Переопределить параметры по умолчанию можно с помощью функции set_param:

SendMail::send_param (-server => '8.8.8.5', -mailbox => 'new@mail.ru', -login => 'admin', -password => 'admin');

Для создания объекта класса SendMail необходимо вызвать конструктор new и передать в него свойства объекта. Пример создания объекта

my $mail = SendMail::new (-email => 'receipt@mail.com', -subj => «Тема письма», -body => «Сообщение», -attachment => [array_ref]); где

· -email Получатель пиьма

· -subj Тема письма

· -body Тело письма

· -attachment Ссылка на массив, содержащий пути к файлам, которые требуется прикрепить к письму.

Для выполнения отправки письма, необходимо вызвать метод send

$mail -> send();

Метод send

Вызов данного метода производит отправку письма. При удачном выполнении, метод возвращает 1. При возникновении ошибки, метод возвращает 0 и записывает сообщение об ошибке в переменную класса. Получить сообщение об ошибке можно вызовом метода error

$mail->error();

Для отправки письма через электронную почту, модуль использует протокол SMTP, как наиболее просто реализуемый. Общение с сервером происходит через модуль IO::Socket, который позволяет открывать подключение к удаленному серверу и осуществлять прием и передачу данных на/с сервера.

Структурная схема метода send представлена на рисунке 9.

Рисунок 99 - Структурная схема метода send

4.3.6 Модуль Pdf2Afp

Модуль предназначен для конвертирования из формата pdf или формата xsl-fo в формат afp. Для конвертирования модуль использует внешнюю программу cpmill. Есть версия утилиты cpmill под Linux и под Windows. Для Linux утилиты cpmill лицензирован только входной формат pdf, поэтому для конвертации из формата xsl-fo необходимо использовать Windows версию утилиты cpmill. Windows версия утилиты запускается через утилиту wine (эмуляция Windows программ в Linux системах). Модуль содержит одну основную функцию, доступную снаружи - pdf2afp.

Функция pdf2afp

В функцию необходимо передать 4 параметра в таком порядке:

1. Путь к pdf файлу

2. Путь к afp файлу

3. Название formdefinition для afp файла

4. Тип утилиты (wine или linux)

Если в функцию передано другое количество параметров, функция выведет сообщение об ошибке.

Структурная схема функции представлена на рисунке 10.

Рисунок 1010 - Структурная схема функции pdf2afp

Функция возвращает 1 при успешном завершении, 0 при ошибке. Пример вызова функции:

pdf2afp ('/home/test/test.pdf', '/home/test/test.afp', 'F1N20010', 'wine');

Модуль PDF_Features

Модуль содержит в себе основные функции для работы с pdf файлами, такие как:

· collect - представляет возможность собрать несколько pdf документов в один файл

· draw_address вывод адресного блока на документе pdf

· draw_barcode вывод кода ШПИ по стандартам Почты России на документе pdf

Функция draw_address использует для вывода адресной информации 3 шрифта в формате TrueType (Times New Roman, Times New Roman Bold, Arial Bold). Шрифты располагаются в папке «/opt/perl/fonts», полный путь к ним задан в глобальных переменных модуля ($times_font_file, $times_b_font_file, $arialb_font_file).

Функция collect

Функция собирает несколько документов в формате pdf в один. Выходной файл задается параметром -fname, список файлов, которые требуется объеденить передаются параметром -array или параметром -pdf_dir. Также можно задать параметр -unlink, тогда, после сборки файлов в один, исходные документы будут удалены. Все параметры перечислены в таб. 19.

Таблица 1919 - Параметры функции collect

Аргумент

Обязательный/ Значение по умолчанию

Описание

-fname

Обязательный

Полный путь к файлу, в который будут собраны исходные документы

-array

Обязательный

Ссылка на массив, содержащая пути к исходным файлам, которые надо объединить

-pdf_dir

Путь к папке, содержащей файлы pdf. При указании данного параметра, в качестве исходных документов будут выбраны все файлы с расширением .pdf в папке -pdf_dir

-unlink

Необязательный/0

Если принимает любое значение, кроме 0, то после объединения, исходные документы будут удалены

Пример вызова функции collect

collect (-fname => 'collect.pdf', -array => $pdf_array, -unlink => 1);

Структурная схема функции представлена на рисунке 11.

Рисунок 1111 - Структурная схема функции collect

Функция draw_address_block

Функция позволяет вывести на объект класса PDF::API2 адресный блок по стандартам Почты России. Координаты расположения адресного блока могут задаваться в параметрах вызова функции. Адресное поле выводится шрифтом Times New Roman, размером 10пт. Индекс выводится шрифтом Arial Bold 13 кегля. Если адресное поле или поле отправителя не умещаются на одной строке, то они разбиваются на несколько строк с помощью функции splits, разбиение строки на подстроки производится по символам (' ', ',', '.'). По умолчанию адресный блок выводится в координатах для листа формата А4, складываемого Z-фальцем, отправляемого в конверте С65. Внешний вид адресного блока, получаемого при помощи функции draw_address_block, представлен на рисунке 12.

Рисунок 1212 - Адресный блок, получаемый функцией draw_address_block

Параметры вызова функции draw_address перечислены в таблице 20.

Таблица 2020 - Аргументы вызова функции draw_address

Аргумент

Обязательный/ Значение по умолчанию

Описание

-page

Обязательный

Объект страницы класса PDF::API2

-pdf

Обязательный

Объект документа класса PDF::API2

-x

Необязательный /125mm

Значение координаты х для размещения адресного блока

-y

Необязательный /239.3mm

Значение координаты y для размещения адресного блока

-fio

Необязательный /''

Поле адресования «Кому»

-address

Обязательный

Поле адреса «Куда»

-post_index

Обязательный

Поле индекса

Структурная схема функции представлена на рисунке 13.

Рисунок 1313 - Структурная схема функции draw_address_block

Пример вызова функции:

draw_address_block (

-pdf => $pdf,

-page => $page,

-fio => $data->{fio},

-address => $data->{address},

'-x'=> $x,

'-y'=> $y,

-post_index => $data->{post_index},

);

Функция draw_barcode

Функция осуществляет вывод на документ pdf ШПИ кода по стандартам Почты России. Сверху над штрих-кодом выводится надпись «Почта России», справа - буквы «З/П», что означает заказное письмо. Снизу, под штрих-кодом выводится цифровое представление штрих-кода, при этом штрих-код разбивается на группы \d{6} \d{2} \d{5} \d{1}. Пять цифр в штрих-коде, представляющих собой номер по порядку, выделяются полужирным начертанием шрифта. Внешний вид штрих-кода, получаемого функцией draw_barcode представлен на рисунке 14.

Рисунок 1414 - Штрих-код, генерируемый функцией draw_barcode

Штрих-код должен содержать строго 14 цифр, в функции выполняется проверка переданного значения на соответствие данному требованию, если переданное значение имеет другое количество цифр или содержит буквы или другие символы, то функция выводит сообщение об ошибке и возвращает значение 0.

Параметры вызова функции draw_barcode перечислены в таблице 21.

Таблица 2121 - Параметры вызова функции draw_barcode

Аргумент

Обязательный/Значение по умолчанию

Описание

-page

Обязательный

Объект страницы класса PDF::API2

-pdf

Обязательный

Объект документа класса PDF::API2

-x

Необязательный /115mm

Значение координаты х для размещения адресного блока

-y

Необязательный /245mm

Значение координаты y для размещения адресного блока

-shpi

Обязательный

Числовое представление штрих-кода отправления

Структурная схема функции представлена на рисунке 15.

Рисунок 1515 - Структурная схема функции draw_barcode

Пример вызова функции draw_barcode:

draw_barcode (

-pdf=> $pdf,

-page=> $page,

'-x' => $x - 10/mm,

'-y'=> $y + 5.7/mm,

-shpi=> $data->{shpi},

) ;

4.3.7 Модуль Rostelecom

Модуль содержит основные функции для обработки отправлений только для клиента ОАО «Ростелеком». Модуль написан в объектно-ориентированном стиле и содержит конструктор (метод new) и несколько методов для обработки данных. В случае возникновения ошибки методы записывают сообщение об ошибке в объект класса, и возвращают значение 0. После каждого выполнения метода необходимо проверять возвращаемое значение и, если оно равно 0, вызвать метод error() для получения сообщения об ошибке. При успешном выполнении, методы возвращают 1.

В глобальных переменных модуля хранится информация для подключения к базе данных, а также путь к шрифтам в формате True Type (.ttf), которые используются для нанесения персонализации на макеты. Для переопределения хранящегося в глобальных переменных значения, в модуле есть функция set_param. Значения глобальных переменных и параметры вызова функции set_param представлены в таблице 22.

Таблица 2222 - Значения глобальных переменных и параметры вызова функции set_param

Глобальная переменная

Значение по умолчанию

Параметр функции set_param для переопределения значения

Описание переменной

$DB->{login}

'rostelecom'

-db_login

Имя пользователя БД

$DB->{password}

'4574yr4yreyre'

-db_password

Пароль от БД

$DB->{host}

'127.0.0.1'

-db_host

Адрес сервера БД

$DB->{name}

'rostelecom'

-db_name

Имя БД

$TEMP_DIR

'/var/tmp/rostelecom'

-temp_dir

Путь к временной папке для хранения временныхфайлов во время работы программы

$FONT_FILE

'/opt/perl/font/Times_New_Roman.ttf'

-font_file

Путь к шрифту Times New Roman

$FONT_B_FILE

'/opt/perl/font/Times_New_Roman_bold.ttf'

-font_b_file

Путь к шрифту Times New Roman Bold

$ARIAL_FONT_FILE

'/opt/perl/font/ARICYR.ttf'

-arial_font_file

Путь к шрифту Arial

$ARIAL_FONT_B_FILE

'/opt/perl/font/ARICYRB.ttf'

-arial_font_b_file

Путь к шрифту Arial Bold

Методы модуля Rostelecom и их описание представлены ниже.

Конструктор

В качестве конструктора используется метод new. Конструктор создает объект класса Rostelecom. В случае успешного выполнения, конструктор возвращает ссылку на объект класса Rostelecom, в случае ошибки, в стандартный поток ошибок (STDERR) выводится сообщение об ошибке и возвращается значение 0. Параметры конструктора перечислены в таб. 23.

Таблица 2323 - Параметры вызова конструктора класса Rostelecom

Аргумент

Обязательный/Значение по умолчанию

Описание

-output_dir

Обязательный

Полный путь к папке, в которую будут складываться выходные файлы

-template

Обязательный

Полный путь к файлу - макету отправления (в формате pdf). При передачи параметра, конструктор проверяет существование файла и доступ к нему. Если файл не существует, выводится сообщение об ошибке.

-cpus

Необязательный /4

Количество потоков для обработки данных

-company

Необязательный /'ОАО «Ростелеком»'

Название компании

-inn

7707049388

ИНН клиента

-short_ company_name

Необязательный /'RTK'

Короткое название компании латинскими буквами (импользуется в имени файла АПП)

-write_log

Необязательный

Путь к файлу для ведения журнала

-write_error

Необязательный

Путь к файлу для записи ошибок в работе модуля

Конструктор, при создании объекта, также производит подключение к БД и сохраняет ссылку на подключение в объекте класса Rostelecom. Ссылка на подключение используется во всех функциях, где в объекте класса производится обращение к БД. Пример вызова конструктора:

Rostelecom->new (-output_dir => $OUTPUT_DIR, -template => $TEMPLATE, -company => $company, -inn => 77777, -short_company_name => 'RTK_test');

Функция db_connect

Функция осуществляет подключение к БД MySQL при помощи модуля DBI, устанавливает кодировку UTF-8 для всех обращений к БД и возвращает ссылку на подключение. Данные для подключения к БД, такие как: сервер БД, имя пользователя, пароль, имя БД; функция берет из глобальной ссылки на хэш $DB.

Метод read_data

Метод принимает на вход файл в формате XML, производит его чтение и разбор, и сохраняет считанные данные в ообъекте класса Rostelecom. Чтение данных из файла XML производится при помощи модуля XML::Simple, свободно доступного на CPAN. В модуле XML::Simple есть функция XMLin, которая возвращает переменную во внутреннем представлении perl, при этом элементы записываются как ссылки на хэш, значения элементов - как значения хэшей, а повторяющиеся элементы записываются как ссылки на массив. Например, XML файл с такой структурой

<Letter>

<Client Name='John'>

<Data>34</Data>

</Client>

<Client Name='Piter'>

<Data>46</Data>

</Client>

</Letter>

Будет приобразован к такому виду

\ {

Client [

[0] {

Data 34,

Name "John"

},

[1] {

Data 46,

Name "Piter"

}

]

}

В методе read_data также производится определение региона для каждого клиента при помощи функции define_region, описание которой приводится ниже.

Функция define_region производит запрос к двум таблицам из БД (region, post_index_region) и получает название региона по заданному почтовому индексу. Если такой почтовый индекс отсутствует в БД, то возвращается регион по умолчанию 'MOSCOW'. Структурная схема функции define_region представлена на рисунке 16.

Рисунок 1616 - Структурная схема функции define_region

Также в методе read_data производится проверка корректности считанных данных при помощи функции correct_data, и валидиция адреса при помощи функции check_address.

Функция check_address проводит проверку адреса при помощи модуля AddressInfo, описание которого приводилось выше.

Функция correct_data.

Функция принимает на вход одну считанную запись клиента и проверяет наличие в ней необходимых полей, а также длину поля code. Поле code должно содержать ровно 16 цифр. Если в переданных данных нет всех необходимых полей или поле code содержит неверное количество символов,в объект класса Rostelecom записывается сообщение об ошибке и возвращается значение 0. Структурная схема функции correct_data представлена на рис. 17.

При возникновении ошибки, метод записывает ошибку в объект при помощи метода error() и возвращает значение 0. На рисунке 18 представлена схема работы метода read_data.

Рисунок 1717 - Структурная схема функции correct_data

Метод не принимает параметры на вход. Пример вызова метода $rtk->read_data() or die $rtk->error;

Метод define_shpi

Метод выделяет каждому клиенту ШПИ. Метод работает с таблицей shpi в БД. Перед присвоением ШПИ каждому клиенту, в методе проверяется, есть ли в БД необходимое количество ШПИ кодов в текущем месяце при помощи функции get_shpi_count.

В функцию get_shpi_count передается ссылка на покдлючение к БД и регион, для которого требуется получить количество доступных ШПИ. Функция возвращает количество доступных ШПИ. Пример вызова функции: my $shpi_count = get_shpi_count ($dbh, $region);

Рисунок 1818 - Схема работы метода read_data

Структурная схема функции get_shpi_count показана на рисунке 19.

Если в БД количество ШПИ меньше, чем требуется для формирования отправлений, то функция возвращает 0 и сохраняет сообщение об ошибке при помощи метода error(). После присвоения ШПИ кодов клиентам, эти значения удаляются из БД. На рисунке 20 представлена схема работы метода define_shpi.

Рисунок 1919 - Структурная схема функции get_shpi_count

Метод define_shpi не принимает параметры на вход. Пример вызова метода

$rtk->define_shpi() or die $rtk->error;

Метод create_pdf

Метод create_pdf производит создание pdf файлов по каждому региону.

В качестве входных данных метод принимает 2 параметра:

-spool_size - размер спула (максимальное количество записей в одном файле);

-ops - ссылка на хэш, содержащая названия ОПС (отделений почтовой связи) для каждого региона. Имеет вид $ops->{'MOSCOW'} = '140961 МР АСЦ'.

Рисунок 2020 - Схема работы метода define_shpi

Продолжение рисунка 20 - Схема работы метода define_shpi

Функция сначала создает файлы во временную папку $TEMP_DIR, когда количество временных файлов будет равно размеру spool_size или больше нет данных в регионе, производится создание формы 103 в формате pdf, и все временные файлы и форма 103 собираются в один файл (при помощи функции collect модуля PDF_Features). Создание временных файлов производится асинхронно в несколько, количество потоков указывается в параметрах конструктора (параметр -cpus). Создание одного временно файла осуществляется функцией create1_pdf, которая выполняется в многопоточном режиме.

Функция create1_pdf создает pdf файл из шаблона отправления, переданного в параметре -template с именем -fname. Параметры вызова функции create1_pdf представлены в таблице 24.

Таблица 2424 - Параметры вызова функции create1_pdf

Аргумент

Обязательный/Значение по умолчанию

Описание

-fname

Обязательный

Полный путь к создаваемому pdf файлу

-shpi

Обязательный

Код ШПИ отправления

-name

Обязательный

Имя получателя (Фамилия Имя Отчество)

-code

Обязательный

Код активации

-address

Обязательный

Адрес получателя

-post_index

Обязательный

Почтовый индекс получателя

-service_str

Обязательный

Сервисная информация (название файла, номер отправления в файле)

-post_index

Обязательный

Почтовый индекс

-template

Обязательный

Полный путь к макету в формате pdf

Функция create1_pdf наносит адресный блок и ШПИ код на отправление при помощи функций draw_address_block и draw_barcode из модуля PDF_Features. Описание этих функций приводилось ранее и, ввиду простоты алгоритма create1_pdf его структурная схема не приводится.

Имя общего файла имеет вид

ymmddnum.pdf,

где

y - последняя цифра года

mm - номер месяца

dd - номер дня

num - порядковый номер файла в регионе

Файлы помещаются в директорию вида

$output_dir/$region/$formatted_date,

где

$output_dir - путь к директории, переданной в конструкторе

$region - название региона, к которому относится данный файл

$fomatted_date - текущая дата в формате yyyymmdd

Структурная схема функции create_pdf представлена на рисунке 21.

Метод generate_rtk_xml

При помощи данного метода в программе создается xml для отправки клиенту. Программа принимает один параметр:

-num - это номер xml файла

Файл сохраняется в папке

$output_dir/XML,

где $output_dir - путь к директории, заданный в конструкторе класса Rostelecom.

Рисунок 2121 - Структурная схема функции create_pdf

Продолжение рисунка 21 - Структурная схема функции create_pdf

Имя выходного файла имеет вид:

yyyymmddnum.xml,

где

yyyy - год создания файла

mm - месяц создания файла

dd - день создания файла

num - номер файла, передаваемый в параметрах метода

Пример файла, генерируемого методом generate_rtk_xml показан на рисунке 22.

Рисунок 2222 - Содержимое XML файла для отправки клиенту

Создание xml файла производится модулем XML::Simple, этот модуль переводит данные из внутреннего представления perl (хэш массивов) в формат xml. Алгоритм работы метода простой, поэтому структурная схема его работы не приводится.

Метод переносит id клиента и присвоенный ему ШПИ код в базу данных, в таблицу client_id. На каждого клиента выполняется один запрос INSERT в БД. Поле id клиента в таблице client_id является первичным ключюм, при вставке строки, значение поля id которой уже есть в базе, производится обновление всех полей, кроме id клиента. Алгоритм работы метода простой, поэтому структурная схема его работы не приводится.

Класс Rostelecom содержит также ряд методов, которые являются интерфейсами к уже описанным модулям. Эти методы, принимаемые параметры и их назначение перечислены в таблице 25.

Таблица 2525 - Методы-интерфейсы класса Rostelecom

Метод

Параметры

Описание

app

-num

Предназначен для генерации акта приема-передачи, в параметрах передается номер акта. Создание акта производится модулем App.

send_app

-rcpt ссылка на хэш получателей письма

Отправляет акт приема передачи по почте. Список получателей для каждого региона передается в виде хэша, в параметре -rcpt.

send_f103

-rcpt ссылка на хэш получателей письма

Отправляет форму 103 по почте. Список получателей для каждого региона передается в виде хэша, в параметре -rcpt.

afp

-cpus количество потоков при преобразовании

Производит конвертацию pdf файлов в afp, посредством модуля Pdf2Afp/

notice

message сообщение

Производит отправку сообщение на jabber, клиентам, подписанным на рассылку в БД, в таблице notice/

upload

-dir папка для загрузки файлов на фтп сервере

Производит загрузку готовых файлов на фтп сервер.

4.4 Описание структуры базы данных

Согласно предварительной схемы работы, в базе данных будут храниться доступные ШПИ коды для каждого региона, соответствие id клиента и присвоенного ему ШПИ отправления, список получателей уведомлений об ошибках посредством протокола XMPP (Extensible Messaging and Presence Protocol -- расширяемый протокол обмена сообщениями и информацией о присутствии [19]), соответствие индекса и кода региона. В качестве СУБД в программе используется MySQL. Для Ростелекома была создана отдельная база данных - rostelecom, и заведен пользователь rostelecom, с возможностью доступа только к этой базе данных.

Рассмотрим существующие таблицы базы данных системы, а также их назначение.

· Таблица region. Содержит соответствие id региона и названия региона

· Таблица shpi. Содержит ШПИ коды и id региона, к которому относится данный ШПИ

· Таблица client_id. Содержит ID клиентов, присвоенные им ШПИ, имя исходного файла, дату генерации отправления

· Таблица notice. Содержит jabber id, по которым требуется рассылать уведомления об ошибках, а также поле enable, позволяющее отключать клиента от рассылки без удаления записи из БД.

· Таблица post_index_region. Содержит соответствие почтового индекс и id региона.

Описание всех полей таблиц БД rostelecom приведено в табл. 26-30.

Таблица 2626 - Описание полей таблицы shpi

Название поля

Тип

Описание

Параметры поля

shpi

bigint(20)

Код ШПИ

Индексированный, первичный ключ

region_id

tinyint(4)

Id региона, к которому относится код ШПИ

Таблица 2727 - Описание полей таблицы region

Название поля

Тип

Описание

Параметры поля

id

tinyint(4)

Id региона

Индексированный, первичный ключ

region

varchar(20)

Текстовое название региона

Таблица 2828 - Описание полей таблицы client_id

Название поля

Тип

Описание

Параметры поля

id

bigint(20)

Id клиента (поле USERID) из исходного xml файла

Индексированный, первичный ключ

shpi

bigint(14)

Код ШПИ

fname

varchar(50)

Имя исходного файла, в котором была запись с данным клиентом

dat

datetime

Дата и время формирования отправления

out_fname

varchar(500)

Полный путь к файлу с письмом

Таблица 2929 - Описание полей таблицы post_index_region

Название поля

Тип

Описание

Параметры поля

post_index

bigint(6)

Почтовый индекс

Индексированный, первичный ключ

region_id

tinyint(4)

Id региона, к которому относится код почтовый индекс

Таблица 3030 - Описание полей таблицы notice

Название поля

Тип

Описание

Параметры поля

jabber_id

varchar(200)

Jabber_id получателя уведомлений

Индексированный, первичный ключ

enable

boolean

Флаг, указывающий включение рассылки на данный id

На рисунке 23 представлена общая схема таблиц и связей в БД.

Рисунок 2323 - Схема таблиц и связей БД Rostelecom

4.5 Запускающая программа

В системе конвертации данных была написана запускающая программа - convert_rostelecom.pl. В ней производится скачивание файлов с фтп сервера, проверка дублирующего запуска программы и производится создание объекта класса Rostelecom и обращение ко всем методам.

Функция check_remote_files

Для загрузки данных с ФТП сервера была написана функция check_remote_files. Параметры функции перечислены в таблице 31.

Таблица 3131 - Параметры вызова функции check_remote_files

Аргумент

Обязательный/ Необязательный

Описание

-server

Обязательный

Адрес ФТП сервера

-remote_dir

Обязательный

Полный путь к папке на ФТП сервере

-dest_dir

Обязательный

Путь к папке на локальном ПК

-ext

Обязательный

Расширение файла для загрузки

Функция производит подключение к ФТП серверу по протоколу SFTP, делает просмотр всех файлов с расширением -ext в папке -remote_dir и запоминает размер файлов. Через 30 секунд производится снова просмотр папки, если размер файлов не изменился и не было добавлено в папку новых файлов, то производится загрузка файлов с ФТП сервера в папку -dest_dir. Алгоритм работы функции check_remote_files представлен на рисунке 24.

Запрет запуска нескольких копий программы одновременно

Невозможность запуска нескольких копий программы одновременно производится с помощью модуля File::Flock::Tiny. Модулю передается имя текстового файла, в котором он сохраняет pid запущенного процесса. При повторном запуске процесса, модуль проверяет, запущен ли процесс с pid, указанным в текстовом файле. Если такой процесс уже запущен, то на экран выводится сообщение «Rostelecom already running» и производится завершение работы программы.

Рисунок 2424- Структурная схема функции check_remote_files

4.6 Обновление базы кодов ШПИ

Коды ШПИ приходят в филиал ЦГП в виде диапазона, который содержит 13 цифр кода из 14-ти. Последний, контрольный разряд кода необходимо высчитывать по алгоритму, описанному ранее. Для генерации кодов ШПИ из диапазона была написана отдельная программа - add_shpi.pl. Программа просит пользователя ввести диапазон и выбрать регион, для которого производится генерация кодов. Программа проверяет, чтобы правый диапазон был больше левого, проверят конечность диапазона, количество символов, наличие разделителя. При правильном вводе дипазона и выборе региона, программа генерирует коды по заданном диапазону, высчитывает контрольный разряд для каждого кода, вносит ШПИ коды в таблицу shpi в БД Rostelecom и выводит на экран количество сгенерированных записей.

Структурная схема программы представлена на рисунке 32.

Рисунок 2525- Структурная схема программы add_shpi

Интерфейс системы

Система спроектирована на работу в фоновом режиме в виде демона. Все настройки системы находятся в файле «config.ini». В конфигурационном файле задаются адрес ФТП сервера, полное название компании, список получателей акта приема-передачи и т.д. Более подробно поля конфигурационного файла были описаны в разделе Конфигурационный файл. Скриншот содержимого файла представлен на рисунке 26.

Рисунок 2626 - Конфигурационный файл config.ini

Есть два варианта запуска системы:

· Автоматически, по расписанию.

· В ручном режиме

При ручном запуске системы требуется отправить на выполнение файл convert_rostelecom.pl, например, прописав в терминале полный путь к исполняемому файлу и нажав Enter. Пример ручного запуска программы показан на рисунке 27.

Рисунок 2727 - Ручной запуск системы

При отсутствии файлов для обработки, на ФТП сервере, система выведет сообщение, что файлов нет, и завершит работу. Загрузим файлы для обработки на ФТП сервер и снова произведем запуск системы. Подадим на вход файл RTKMOS1503210000.zip. Экран запуска системы представлен на рисунке 28.

Рисунок 2828 - Запуск системы обработки

На экран выводится сообщение о том, что файлы данных найдены на ФТП и запуск произведен («Rostelecom converting process started»). На экран выводятся номера созданных временных файлов. Номера выводятся не по порядку, т.к. создание временных файлов производится в асинхронном многопоточном режиме.

По окончании выполнения работы, система выгружает файлы на ФТП сервер. Папка ФТП сервера, куда производится выгрузка, показана на рисунке 29.

Рисунок 2929 - Содержимое папки для выгрузки файлов на ФТП сервер

Система рассылает на e-mail акт приема-передачи данных и электронные списки.

Система производит запись журнала работы программы в log файл. Пример записей из log файла представлен на рисунке 30.

Рисунок 3030 - Пример записей в log файле

При возникновении ошибки, сообщение об ошибке записывается в error_file и отправляется на jabber_id всем, подписанным на рассылку сотрудникам. Пример сообщения об ошибке из jabber клиента представлен на рисунке 31.

Рисунок 3131 - Сообщения об ошибках в jabber клиенте на телефоне

В автоматическом режиме, запуск системы настраивается по планировщику crontab. В нем устанавливается, с какой периодичностью, и в какие дни необходимо производить запуск системы.

Для обновления базы кодов ШПИ есть программа add_shpi.pl, написанная, также как и основная часть программы, на Perl. Для добавления нового диапазона ШПИ в базу данных, необходимо провести запуск этой программы командой ./add_shpi, находясь в папке с программой, или по полному пути к файлу. Экран работы программы представлен на рисунке 25.

Рисунок 3232 - Экран работы программы add_shpi

5. Примеры работы системы

Для автоматического запуска системы, назначим ее выполнение по планировщику crontab. Запуск будем осуществлять в мультиплексоре screen. Периодичность запуска поставим 10 минут. На рисунке 44 представлен вид файла crontab с настроенным запуском по расписанию, с периодичностью запуска - 10 минут.

Рисунок 3333 - Содержимое crontab

Положим исходный файл с данными от 20.05.2015 в папку на ФТП. Имя файла RTKMOS1505200000.zip. Содержимое папки показано на рис. 34.

Рисунок 3434 - Папка RTK_in на фтп сервере

Через несколько минут файл удаляется с ФТП сервера, это означает, что система забрала файл для обработки. На сервере можно ввести команду screen -ls, которая отобразит запущенный процесс с именем rostelecom. На рисунке 35 видно, что процессу присвоен pid (Process IDentifier - идентификатор процесса многозадачной операционной системы[20]) с номером 20758.

Также можно зайти в сам процесс и посмотреть процесс выполнения командой screen -r 20758.

Рисунок 3535 - Вывод команды screen -ls

Через некоторое время на почту приходит два письма:

· Письмо операторам ОПС с просьбой о прогрузке электронных списков в ПО Партионная почта (Рисунок 36).

· Письмо с актом приема-передачи данных операторам АСЦ (Рисунок 37).

Рисунок 3636 - Письмо с электронными списками Ростелеком

Рисунок 3737 - Письмо с актом приема-передачи Ростелеком

В папку 172.24.161.186/ftp-shared/CGPSPB/RTK_out/ (путь к папке и адрес ФТП сервера задаются в config файле) выгружаются файлы для печати (рисунок 29) и XML файл для клиента (рисунок 39).

Рисунок 3838 - Содержимое папки RTK_out/MOSCOW на ФТП сервере

Рисунок 3939 - Содержимое папки RTK_out/XML на ФТП сервере

Просмотрим содержимое файла в формате afp, для этого используем ПО ISYSPapirus, распространяемое бесплатно. (Рисунок 40).

Рисунок 4040 - Вид печатного файла в формате AFP

Персональные данные на скриншоте, соответственно, закрашены. Работа программы завершена, все данные успешно обработаны.

файл программирование почтовый валидация

6. Тестирование

Тестирование может проводиться как в ручном, так и в автоматическом режиме. В ручном режиме, тестировщик вводит различные данные с ошибками, используя интерфейс программы, и смотрит на поведение программы. В автоматическом режиме тестировщик создает серию тестов к своей программе, которые отправляют некие данные в программу и проверяют ее поведение. Автоматические тесты, будучи единожды написаны, могут проводит тестирование программы в течение ее всего жизненного цикла. При изменении/добавлении функционала программы будет легко проверить, не изменилось ли поведение и функциональность старых компонентов программы.

Для тестирования поведения программы в различных условиях (неверный формат файла, неверные данные, недоступность сервера и т.д…), была написана программа автоматического тестирования - rtk_test.pl. Для написания тестов, был использован модуль Test::More, который позволяет запускать функции на выполнение, сравнивать полученный результат с ожидаемым результатом и выводить отчет о проведенных тестах. Создав один раз тесты для программы, можно вносить изменения в код, не боясь испортить основной функционал программы. Всегда можно быстро запустить тесты на выполнение и убедиться, что все модули работают так, как от них ожидает программист. В программе тестирования был написан 21 тест, все тесты перечислены в таблице 32.

Таблица 3232 - Описание тестов программы

Номер теста

Описание теста

1.

Подключение модуля Rostelecom

2.

Создание объекта класса Rostelecom

3.

Ошибка при создании объекта класса Rostelecom, проверка сообщения об ошибке

4.

Чтение файла с неправильной структурой

5.

Проверка сообщения об ошибке при чтении файла с неверной структурой

6.

Чтение файла с неверным кодом активации

7.

Проверка сообщения об ошибке при чтении файла с неверным кодом активации

8.

Тест метода read_data

9.

Тест метода define_shpi

10.

Тест метода create_pdf_files

11.

Ошибка при создании файла pdf методом create_pdf, проверка возвращаемого значения

12.

Ошибка при создании файла pdf методом create_pdf, тестирование сообщения об ошибке

13.

Тест метода generate_rtk_xml

14.

Тест внесения информации в БД

15.

Тест создания акта приема-передачи

16.

Тест наличия файла акта приема-передачи на диске

17.

Тест отправки акта приема-передачи по электронной почте

18.

Тест отправки электронных списков по электронной почте

19.

Тест конвертации pdf файлов в afp

20.

Тест наличия файлов afp на диске

21.

Тест загрузки файлов на ФТП сервер

Ниже представлен отчет о тестировании

1..21

ok 1 - use Rostelecom;

ok 2 - An object of class 'Rostelecom' isa 'Rostelecom'

ok 3 - Test for fail rtk create obj

ok 4 - Test for read bad file 1

ok 5 - Test for bad message 1

ok 6 - Test for read bad file 2

ok 7 - Test for bad message 2

ok 8 - Test for read data /opt/perl/rostelecom_new/tests/input/20150217000001.xml

Fname: 20150217000001.xml Reads ok 21. Reads bad 0

ok 9 - Test for define shpi

ok 10 - Test for create pdf files

ok 11 - Test for fail1 create_pdf

ok 12 - Test for fail_message1

ok 13 - Test for generate_rtk_xml

ok 14 - Test for add info_to_bd

ok 15 - Test for create APP

ok 16 - Test for exists APP file

ok 17 - Test for send APP

ok 18 - Test for send f103

Starting converting pdf2afp /opt/perl/rostelecom_new/tests/output/MOSCOW/20150522/5052201.pdf

Converting Z:/opt/perl/rostelecom_new/tests/output/MOSCOW/20150522/5052201.pdf OK. 115 pages 0.000 sec

ok 19 - Test for convert pdf to afp

ok 20 - Test for exists afp file 1

Upload /opt/perl/rostelecom_new/tests/output/MOSCOW/20150522/5052201.afp

ok 21 - Test for upload files to ftp server

7. Замер производительности

Для оценки скорости работы отдельных функций и программы в целом, были проведены замер времени выполнения при помощи модуля Devel::Timer. В программе расставляются контрольные точки, в которых будет измеряться время выполнения. По окончании работы программы, выводится отчет с указанием контрольных точек и времени их выполнения в секундах и в процентном соотношении от общего времени выполнения программы.


Подобные документы

  • Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.

    курсовая работа [81,7 K], добавлен 18.08.2014

  • Проектирование структуры базы данных. Технология обработки данных. Порядок установки и запуска программы. Описание объектов приложения и структура данных. Ввод и изменение исходных данных. Получение выходных документов и тестирование программы.

    отчет по практике [2,3 M], добавлен 22.07.2012

  • Сущность языка программирования, идентификатора, структуры данных. Хранение информации, алгоритмы их обработки и особенности запоминающих устройств. Классификация структур данных и алгоритмов. Операции над структурами данных и технология программирования.

    контрольная работа [19,6 K], добавлен 11.12.2011

  • Обоснование выбора языка программирования. Анализ входных и выходных документов. Логическая структура базы данных. Разработка алгоритма работы программы. Написание программного кода. Тестирование программного продукта. Стоимость программного продукта.

    дипломная работа [1008,9 K], добавлен 13.10.2013

  • Создание программы в среде LabVIEW 7.1 для аудиометра – прибора для исследования чувствительности слуха. Определение входных и выходных данных системы, алгоритма обработки данных. Схемы и диаграммы, необходимые для разработки программного продукта.

    курсовая работа [2,6 M], добавлен 03.04.2012

  • Основные свойства информационно-справочной системы для обработки результатов сдачи сессии, ее функциональное назначение и логическая структура. Выбор языка и среды программирования. Описание алгоритмов сортировки и поиска, входных и выходных данных.

    курсовая работа [742,8 K], добавлен 23.01.2014

  • Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и выбор структур данных для ее хранения, разработка основных алгоритмов. Проектирование интерфейса пользователя. Выбор стратегии тестирования и разработка тестов.

    курсовая работа [332,3 K], добавлен 09.12.2014

  • Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.

    курсовая работа [1,5 M], добавлен 08.02.2011

  • Проектирование структуры и архитектуры программного продукта. Реализация программы конвертера файлов баз данных. Описание пользовательского интерфейса. Выбор порядка конвертации dbf файлов. Создание и исполнение шаблонов. Расчет себестоимости продукта.

    дипломная работа [2,2 M], добавлен 21.06.2013

  • Создание программы для обработки и хранения информации о пациентах, сделанных им назначениях и их выписке из больницы. Описание структуры и определение формы представления входных и выходных данных. Разработка системы средствами C++ и Builder 6.0.

    курсовая работа [552,0 K], добавлен 19.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.