Список использованных источников - LMS

advertisement
ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ
“ВЫСШАЯ ШКОЛА ЭКОНОМИКИ”»
МОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ
ДЕПАРТАМЕНТ КОМПЬЮТЕРНОЙ ИНЖЕНЕРИИ
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к дипломному проекту (работе)
«Разработка системы обработки данных, получаемых ФГУП
"Почта России" от ОАО "Ростелеком" »
Андрюшин Павел Сергеевич
Студент
__________/ к.т.н., доц. / С.Л. Макаров
Научный руководитель
Консультанты:
Специальная часть
Экология и охрана труда
_________/ к.т.н., доц. / С.Л.Макаров
_________/ ст. преподаватель/Е.Б.Михайлов
_________/ В.А.Филиппов
Рецензент
Допущен к защите
_____________________
Академический
руководитель
образовательной программы
230101.65
"Вычислительные
машины, комплексы, системы и
сети"
к.т.н., доц. Ю.И. Гудков
Москва 2015
Аннотация
В данном дипломном проекте разрабатывалась система обработки
данных, получаемых ФГУП «Почта России» от ОАО «Ростелеком». Система
предназначена для работы в Центры гибридной почты – филиал ФГУП
«Почта России». Разрабатываемая система должна была проверять почтовые
адреса
на
валидность
по
адресной
базе,
формировать
отчетную
документацию для отделения почтовой связи, формировать отчетную
документацию для клиента.
В разделе «Специальная часть» проведен аналитический обзор
аналогичных программных решений, выбран язык программирования
высокого
уровня
для
реализации
проекта.
Для
выбранного
языка
программирования, были подобраны модули для выполнения основого
функционала программы. В ходе дипломного проектирования были
разработаны:
 структурная схема базы данных;
 общая схема работы системы;
 структурная схема функциональных модулей;
 проведен
сравнительный
анализ
коммерческого
ПО,
предназначенного для формирования почтовых отправлений;
 проведено автоматическое тестирование системы;
 проведен расчет надежность разработанной системы;
 выполнена оценка производительности системы.
При проведении оценки производительности системы, были выявлены
функции
в
программе,
выполнение
которых
занимает
наибольшее
количество времени.
В Приложениях представлены внешние виды отчетной документации,
создаваемой
разработанной
программой,
внешний
вид
отправлений,
исходный текст программы. Разработано руководство пользователя системы.
2
Программный продукт был внедрен на предприятии, что подтверждается
актом о внедрении.
В разделе «Охрана труда» проведен анализ вредных и опасных
факторов, влияющих на человека при работе на ЭВМ, а также проведено
исследование процессов утилизации компонентов ПК в России и на Западе.
Характеристики дипломного проекта
1. 213 cтраниц
2. 33 таблицы
3. 52 иллюстрации
4. 25 источников информации
3
Annotation
In this degree work we have developed a system of processing data FGUP
"Pochta Rossii" from OAO "Rostelecom". The system is designed to work in the
hybrid mail Centers – branch FGUP " Pochta Rossii ". The system was developed
to verify mailing addresses for validity on a targeted basis, to generate the related
documents for post offices, to generate the related documents for a client.
In the "Special part" there are an analytical review of similar software
solutions and high level programming language selection for the project. Several
modules were selected for the chosen programming language to provide the main
functionality of the program. The following project parts were developed during
the graduation work:




structural scheme of the database;
the general scheme of the system;
structural diagram of functional modules;
performed a comparative analysis of commercial software designed for the
formation of postal items;
 an automated testing of the system has been performed;
 calculated the reliability of the developed system;
 system performance has been evaluated.
When evaluating system performance, there were program functions revealed
which execution takes the largest amount of time.
In the enclosure to this document there are outcoming report documentation
types made by the program including formats of the sendings, user manual and
company introduction act of the program. Developed user manual. The software
was implemented in the enterprise, which is confirmed by act of introducing.
In the protection of labour section of the document there is an analysis of
harmful and dangerous factors, which influence PC users, as well as the study of
PC component recycling processes in Russia and in western countries.
Characteristics of the degree work
1. 213 pages
2. 33 tables
4
3. 52 illustrations
4. 25 sources of information
5
Оглавление
Аннотация .............................................................................................................. 2
Annotation ............................................................................................................... 4
А Специальная часть .......................................................................................... 8
1
Постановка задачи ................................................................................ 8
2
Введение ................................................................................................ 9
3
Аналитический обзор аналогичных программных продуктов ...... 10
4
Формирование требований к системе ............................................... 15
4.1 Описание формата и структуры входных файлов ....................... 15
4.2 Описание формата и структуры выходных файлов .................... 18
4.3 Служебные файлы .......................................................................... 24
5
Предварительная схема работы системы ......................................... 27
5.1 Выбор языка программирования................................................... 30
5.2 Выбор Perl модуля для генерации документов в формате pdf ... 38
5.3 Валидация почтового адреса ......................................................... 39
6
Процесс создания алгоритма обработки данных............................. 43
6.1 Структура штрихкодового почтового идентификатора (ШПИ) 49
6.2 Многопоточная обработка данных в Perl ..................................... 52
6.3 Описание основных модулей системы ......................................... 53
6.4 Описание структуры базы данных ................................................ 98
6.5 Запускающая программа .............................................................. 101
6.6 Обновление базы кодов ШПИ ..................................................... 104
7
Интерфейс системы .......................................................................... 106
8
Примеры работы системы ................................................................ 112
9
Тестирование ..................................................................................... 116
6
10
Замер производительности .............................................................. 119
11
Расчет надежности ............................................................................ 121
11.1 Завершенность............................................................................... 122
11.2 Устойчивость................................................................................. 123
11.3 Восстанавливаемость ................................................................... 123
Б Экология и охрана труда ............................................................................ 125
Вредные и опасные факторы при работе на ЭВМ ................................. 125
Утилизация компонентов ПК в России и за границей. ......................... 127
Заключение ........................................................................................................ 136
Список использованных источников .............................................................. 138
Приложение А ..................................................... Error! Bookmark not defined.
Дизайн макета отправления ...................... Error! Bookmark not defined.
Приложение Б ...................................................... Error! Bookmark not defined.
Вид акта приема-передачи данных ........... Error! Bookmark not defined.
Приложение В...................................................... Error! Bookmark not defined.
Внешний вид формы 103 ............................ Error! Bookmark not defined.
Приложение Г ...................................................... Error! Bookmark not defined.
Внешний вид конверта стандарта С65, с логотипом Ростелеком, с
вложением .......................................................... Error! Bookmark not defined.
Приложение Д...................................................... Error! Bookmark not defined.
Руководство пользователя.......................... Error! Bookmark not defined.
Приложение Е ...................................................... Error! Bookmark not defined.
Текст программы ......................................... Error! Bookmark not defined.
7
А Специальная часть
1 Постановка задачи
Мировой опыт показывает, что, несмотря на развитие высоких
технологий и активное использование электронной почты, большинство
людей предпочитает получать официальные документы не только в
электронном, но и в бумажном виде. Это относится и к телефонным счетам,
квитанциям по оплате коммунальных услуг и многому другому.
Многим компаниям, имеющим большую клиентскую базу, требуются
услуги подготовки, печати и отправки почтовых отправлений своим
клиентам.
Целью настоящей дипломной работы является проектирование и
разработка системы обработки данных, получаемых ФГУП «Почта России»
от ОАО «Ростелеком».
Данная система предназначена для:
 Формирования почтовых отправлений по макету заказчика.
 Определения одного из цехов для производства почтовых
отправлений.
 Создания сопроводительной документации, содержащей: акт
приема-передачи данных, списки по ф. 103, отчет для клиента.
 Автоматизации труда операторов связи в цехах производства.
 Получения уведомлений об ошибках в работе программы,
посредством протокла XMPP.
Для
достижения
поставленной
задачи
необходимо
выполнить
следующие задачи:
 Провести обзор и оценить возможности современных систем
обработки данных и формирования почтовых отправлений.
 Изучить руководящие технические материалы «Почты России».
 Провести обзор языков программирования высокого уровня для
разработки системы формирования почтовых отправлений.
8
 Произвести выбор общедоступных модулей для работы с
файлами формата pdf, Microsoft Excel, для работы скачивания и
загрузки файлов на ФТП сервер.
 Спроектировать общую схему работы системы.
 Разработать основные модули для выполнения функционала
программы.
 Спроектировать структуру базу данных системы и выбрать
систему управления базой данных.
 Разработать
документацию
к
системе
–
руководство
пользователя, текст программы.
 Изучить вредное влияние ПК на человека и провести анализ
механизмов утилизации ПК в России и на Западе.
 Разработать
тесты
нестандартных
для
оценки
ситуациях
и
поведения
провести
системы
в
автоматическое
тестирование программы.
 Протестировать скорость работы системы и оценить узкие места
в программе.
2 Введение
Обработкой и печатью партионных отправлений занимается ЦГП –
филиал ФГУП «Почта России». Одним из клиентов филиала ЦГП (Центры
гибридной
почты)
является
компания
ОАО
«Ростелеком».
ОАО
«Ростелеком» рассылает коды активации учетных записей с сайта
http://www.gosuslugi.ru. Код активации отправляется заказным письмом,
которое является регистрируемым почтовым отправлением с нанесением на
отправление
штрихкодового
почтового
идентификатора
(ШПИ)
для
отслеживания сроков прохождения почтового отправления. Обработкой
отправлений занимается аутсорсинговая компания. Работа со сторонней
компанией влечет риск утечки персональных данных, а также накладывает
дополнительные финансовые расходы
на филиал ЦГП. Обработка и
9
формирование отправлений силами филиала позволит сократить сроки
обработки и отправки писем, разгрузит операторов печати в цехе от
неэффективной работы по ручному созданию отчетов, а также уменьшит
затраты на производство.
Разрабатываемая система позволит самостоятельно формировать
почтовые отправления по заданному макету, а также создавать отчетную
документацию, электронные списки для ПО «Партионная почта», отчет для
клиента о количестве отправленных писем и присвоенных им кодах ШПИ
(штриховой почтовый идентификатор).
3 Аналитический обзор аналогичных программных
продуктов
Среди компьютерного программного обеспечения есть большое
количество программных продуктов, предназначенных для обработки файлов
и формирования отправления, на основе макета. В компании имеется два
типа печатающих устройств: листовые машины и рулонные. Печать
большого количества отправлений обычно осуществляют на рулонной
машине, т.к. скорость печати на ней выше, а себестоимость одного отпечатка
ниже. В компании установлены рулонные печатающие устройства фирмы
IBM. Данные устройства принимают на вход файлы только в формате afp.
Это специальный потоковый формат печати, разработанный компанией IBM.
Поэтому для обработки почтовых отправлений, необходимо ПО, которое
может создавать файлы в формате Advanced Function Presentation (afp).
Рассмотрим некоторые программные продукты, предназначенные для
формирования почтовых отправлений.
1. DocBridge Mill от компании Compart [1]. Программное обеспечение
состоит из нескольких компонентов:
 DocBridge Mill WorkBench. Графическая среда для создания схем
преобразования данных. Используется для отрисовки схем, по
10
которым будет производиться преобразование данных, упаковки
этих схем в формат mia для последующего использования в
продукте DocBridge Mill Server.
 DocBridge
Mill
Server.
Программное
обеспечение,
устанавливаемое в системе в качестве демона (программа,
работающая в фоновом режиме). В данном продукте возможно
реализовать «горячие папки», в одну папку складываются
исходные файлы, а в другой папке после обработки появляются
готовые файлы. Для настройки горячей папки, в ПО загружается
схема преобразования данных, созданная с помощью DocBridge
Mill WorkBench, а также указываются пути к папкам для входных
и выходных файлов. Доступ к настройкам ПО осуществляется
через web интерфейс.
 Cpmcopy. Консольная утилита, предназначенная в основном для
конвертации файлов из одного формата в другой.
Продукт
заявлен
как
универсальный
обработчик
документов.
Предназначен он для обработки данных и создания на основе шаблона,
готовых отправлений. В качестве входных форматов может принимать как
xml, xsl-fo, pdf, data-file, csv, так и множество других форматов, на выходе
получаются файлы формата afp, pdf, csv. ПО было куплено в компании и
использовалось для формирования отправлений некоторых клиентов. В
основном, ПО использовалось для простой конвертации pdf файлов в формат
afp. Возможные форматы, а также количество используемых для обработки
ядер процессора, лицензируется и покупается отдельно. В компании была
приобретена лицензия на 1 ядро, входные форматы: pdf, xsl-fo; выходной
формат: afp. Главными недостатками Docbridge Mill являются:
 Невозможность создания отчетной документации, электронных
списков для прогрузки в ПО «Партионная почта».
11
 Невозможность нанесения на отправления специальных меток
реза (OMR метки, DataMatrix).
 Необходимость лицензирования каждого используемого ядра
процессора.
 Невозможность работы с данными в формате xml.
 Невозможность сортировки почтовых отправлений по индексам
во время обработки.
2. Bta Print Machine от компании ITS Neopost [2]. Программное обеспечение
от
Neopost
специально
отправлений. ПО легко
предназначено
для
обработки
почтовых
интегрируется в корпоративную
сеть,
автоматически принимает исходные данные из различных баз данных.
Для написания программ, в Bta Print Machine используется язык, похожий
на Visual Basic. В качестве форматов исходных данных можно
использовать: xml, текстовые файлы, csv. На выходе получаются
форматы: PCL, PDF, PS, TIFF, AFP. Программный продукт может
создавать отчетную документацию, имеет возможность рассылки отчетов
на E-Mail, факс; может наносить на отправления бар-коды, OMR метки
для реза, автоматически распределять задания между печатающими
машинами, сортировать и группировать отправления по разным
признакам, архивировать обработанные данные. Основным недостатком
продукта является его высокая цена, а также необходимость интеграции
всех цехов и печатающих устройств в единую сеть и закупку на все
станции данного ПО. В данный момент объединение всех печатающих
устройств и рабочих станций, используемых для печати отправлений,
невозможно по соображениям информационной безопасности.
3. Комплексное решение от компании GMC [3]. Компания GMC занимается
разработкой программного обеспечения, предназначенного для обработки
персонифицированных данных. GMC предлагет множество программных
продуктов, таких как:
12
 Inspire Designer. Обладает многофункциональным интерфейсом
для
создания
высококачественных,
персонализированных
документов прямого маркетинга, деловой документации и
документов
по
требованию.
Выполняется
ввод
данных,
импортирование проектов, подготовка данных, проектирование и
многосложный графический макет страниц.
 Inspire Print Output. Осуществляет всеобъемлющую поддержку
потока данных печати документов, включая Advanced Function
Presentation™ (AFP™), PostScript, PCL, Metacode, XML и PDF.
 Inspire Automator. Осуществляет выполнение разнообразных
операций, таких как отправка документов по email, верификация
данных посредством web-сервера, загрузка данных с/на ФТП
сервер, в автоматическом режиме.
Для выполнения требуемого функционала по подготовке писем и
отчетной документации для нашей компании, потребуется приобрести два
программных продукта: Inspire Designer и Inspire Automator. Система имеет
возможность расширения, за счет покупки дополнительных модулей. Есть
возможность написания дополнительных модулей/функций на языке Java.
Главным недостатком данной системы является ее высокая стоимость (ок. 1
млн. евро).
Сравнительная характеристика продуктов представлена в таблице 1.
Таблица 1 - Сравнение различных продуктов для формирования почтовых отправлений
Возможность
Возможност
Возможность
Простот валидации
ь создания
Стоимос
Название
получения
ав
адреса,
отчетной
ть
системы
формата afp
использ используя
документац системы
на выходе
овании запросы к webии
сервису
DocBridge
Mill
BTA
PrintMachine
+
-
-
+
-
+
+
-
+
-
13
Продолжение таблицы 1
Название
системы
Возможность
получения
формата afp
на выходе
Возможност
ь создания
отчетной
документац
ии
GMC Inspire
+
+
Стоимос
ть
системы
-
Возможность
Простот валидации
ав
адреса,
использ используя
овании запросы к webсервису
+
+
На рынке ПО для печати и подготовки почтовых отправлений нет
большого
количества
программных
продуктов.
Многие
компании
заказывают разработку программного продукта «под себя». Как видно, из
таблицы 1, основным недостатком готовых программных решений для
обработки данных является их стоимость, а также в некоторых случаях
негибкость системы, невозможность настройки под определенные задачи.
Среди рассмотренных систем, только система GMC Inspire имеет
возможность удовлетворить все требования к функционалу системы.
Главным недостатком данной системы является ее высокая цена, а также
необходимость объединения всех цехов в единую сеть. На данном этапе
развития
филиала
ЦГП,
нет
технической
возможности
реализовать
объединение всех цехов компании в единую сеть. Без объединения в единую
сеть, система может обрабатывать данные локально на каждом ПК, но тогда
встает проблема синхронизации данных, создания единых отчетов, подсчета
затрат на печать.
В компании идут процедуры покупки и установки ПО GMC Inspire, а
также настройки оборудования, но данный процесс займет, по крайней мере,
не менее года, поэтому на данном этапе было решено разработать
собственную систему подготовки печатных отправлений.
14
4 Формирование требований к системе
4.1
Описание формата и структуры входных файлов
4.1.1
Дизайн-макет отправления
Клиент предоставляет дизайн-макет почтового отправления. Для
передачи
дизайн-макетов
используются
композитные
PDF
файлы,
соответствующие стандарту PDF/x-1a.
Требования к макету
 Размер документа должен соответствовать обрезному формату
издания.
 Во избежание появления муара и зубчатости все изображения
должны быть заверстаны в 100%-м масштабе.
 Все шрифты должны быть представлены в формате TrueType или
PostScript Type 1.
 Разрешение изображений 600-1200 dpi.
 Все элементы дизайн - макета документов должны быть
выполнены в цветовых пространствах CMYK или Grayscale.
 Значащие элементы дизайн - макета документов должны быть
расположены не ближе 5 мм относительно линий реза, фальцовки
и перфорации.
 Размер макета: А4 (210х297мм).
Большинство полей в макете являются статическими, т.е. они
присутствуют во всех письмах, отправляемых клиентам. Поля, содержимое
которых
уникально
для
каждого
клиента
называются
полями
персонализации.
В макете несколько полей персонализации:
 Фамилия, имя, отчество клиента.
 Код активации.
 Адресный блок.
15
 Код ШПИ.
 Поле служебной информации (содержит имя файла, дату
отправки, порядковый номер отправления в файле).
Внешний вид дизайн - макета документа представлен в приложении А.
4.2.1
Формат файла данных
Клиент передает нам файл, зашифрованный при помощи ПО Верба.
Основным каналом обмена данными предполагается обмен данными по
телекоммуникационным каналам по протоколу FTP/FTPS. Расшифровкой
файла занимаются администраторы в цехе, расположенном в Подольском
АСЦ
(автоматический
сортировочный
центр).
После
расшифровки,
получается архив формата zip, внутри которого располагаются файлы в
формате xml. Один файл содержит не более 500 клиентов, при количестве
отправлений более 500, данные размещаются в нескольких файлах.
Кодировка файла: UTF-8.
Файл имеет древовидную структуру. Примерный вид файла:
<mails>
<mail>
<userid>*****</userid>
<lastname>Жерлицин</lastname>
<firstname>Александр</firstname>
<middlename>Сергеевич</middlename>
<code>********</code>
<zip>101000</zip>
<region></region>
<district></district>
<city********></city>
<street></street>
<bulding1>17</bulding1>
16
<bulding2></bulding2>
<bulding3></bulding3>
<apartment>65</apartment>
</mail>
<mail>
……
</mail>
</mails>
Корневым элементом документа является элемент с именем <mails>.
Данные клиентов располагаются в элементах <mail>.
userid – код клиента
lastname – фамилия
firstname – имя
middlename – отчетство
code – код активации (наносится в теле почтового сообщения)
zip – почтовый индекс
region – название региона
district - область
city – город
street – улица
bulding1 – дом
bulding2 – строение
bulding3 – корпус
apartment – квартира
Данные в элементах region, district, city, street закодированы в HTML
Entities. Каждому символу слова соответствует соответствующий цифровой
код, который записывается в виде сущности &#<Цифровой код символа>;.
Например буква 'Ю', закодированная в HTML Entities будет выглядеть как
Ю, причем кодируются не все символы, а только символы со 128-255
17
номера
из таблицы ASCII. Все перечисленные сущности должны
присутствовать в исходном документе, даже если адрес не содержит
квартиры, то элемент apartment должна быть в документе.
Формат именования файла
XXXFILYYMMDDNNNN.ZIP, где
XXX – код клиента (любая трехбуквенная последовательность из
латинских букв). Для клиента ОАО «Ростелеком» принимает значение RTK.
FIL – код филиала/подразделения предприятия (например MOS)
YYMMDD – дата в формате последние две цифры года, номер месяца
и число из двух цифр (если значение месяца или числа содержит менее двух
цифр, требуется дополнить их ведущими нулями до нужного количества
символов)
NNN – порядковый номер файла в день
.ZIP – признак архивного файла
Для обмена данными используется внутренний ftp сервер ФГУП
«Почта России». Клиент заблаговременно предупреждает о размещении
файлов на ftp. Пример уведомления:
ОАО «Ростелеком»
Подтверждение успешной приемки.
Имя файла:
RTKMOS1502060000.zip
Идентификатор: 001-000-245
Дата приемки:
4.2
21.03.2015 09:15:43 UTC
Описание формата и структуры выходных файлов
На выходе программа должна формировать следующие файлы:
1. Файлы для печати почтовых отправлений
2. Списки для загрузки данных в ПО Партионная почта
3. Акт приема-передачи данных
4. Список соответствия id клиента и присвоенного ему ШПИ
5. Печатные списки формы 103
18
4.1.2
Файлы для печати почтовых отправлений
Формат файла: afp
Количество документов в файле: не более 500
Формат имени файла: ymmddnn.afp, где
ymmdd – дата формирования файла
nn – порядковый номер файла за текущий день
Необходимо сформировать спул печатных файлов для передачи
непосредственно в печатный цех. Получить файлы в формате afp можно при
помощи ПО DocBridgeMill, путем конвертации из формата pdf. При
конвертации необходимо указать Form Definition в параметрах программы.
Form Definition – это правило раскладки полученного файла на
печатном рулоне. При помощи него определяется формат отпечатка, его
ориентация, формат печати (односторонний, двухсторонний), расположение
отпечатка на бумаге. Используя таблицу соответствия (Form Definitions and
Page Definitions Supplied with Infoprint), получим название требуемого Form
Definition: F1N20010[4].
4.2.2
Списки для загрузки данных в ПО Партионная
почта
Формат файла: ini, txt
Формат имени файла: Соответствует формату имени файла для печати
почтовых отправлений, только имеет формат zip
Списки представляют из себя два файла, упакованные в архив формата
zip. Оба файла имеют одинаковое имя, за исключением того, что в конце
имени файла формата ini пишется буква 'h'.
Первый файл формата ini содержит в себе общую информацию об
отправлениях:
категория
отправления,
ИНН
клиента,
количество
отправлений, общий вес отправлений, цена отправлений.
Примерное содержимое файла:
[Main]
19
Inn=7707049388
SendCtg=3
SendDate=20140905
ListNum=13
MailType=2
MailCtg=1
[Summary]
MailCount=62
MassSum=1240
MassRateSum=202120
Описание основных полей представлено в таблице 2.
Таблица 2 - Описание полей ini файла списков для ПО Партионная почта
Имя поля
Inn
SendCtg
SendDate
Описание
ИНН клиента
Код
категории
отправителя
(население-1,
бюджетная
организация-2, хозрасчетная организация-3)
Дата сдачи партионной почты объекту почтовой связи в
формате yyyymmdd
Уникальный номер списка партионной почты в день сдачи
ListNum
списка (в числовом формате, начиная с 1, максимальная
длина 3 символа)
MailType
MailCtg
Вид
почтового
отправления
(письмо-2,
бандероль-3,
посылка-4, мелкий пакет-5 и т.д…)
Код категории почтового отправления (простое-0, заказное1, с объявленной ценностью-2)
MailCount
Общее количество отправлений в списке партионной почты
MassSum
Общий вес отправлений в списке партионной почты
MassRateSum
Общая сумма платы за пересылку всех отправлений в списке
(не включая НДС)
20
Категории писем определяются в соответствии с руководящим
техническим материалом (РТМ) 0002.11.14 [5].
Второй файл имеет формат txt. Кодировка файла cp866. В нем
расположена основная информация об отправлении (код ШПИ, индекс,
город, вес отправления). Файл содержит текстовые строки, в конце которых
располагается управляющий символ «возврат каретки», новая строка (ASCII
код 13 и 10). Разделителем элементов данных в строке является символ: |
(ASCII код 124). Первая строка файла данных с разделителями содержит
наименование элементов данных, последующие строки содержат данные,
позиционно соответствующие элементам данных.
Файл содержит следующие поля:
 BARCODE – ШПИ код отправления
 MASS – вес отправления в граммах
 MASSRATE – сумма платы за пересылку в копейках
 PAYMENT – сумма наложенного платежа в копейках
 VALUE – сумма объявленной ценности в копейках
 INSRRATE – сумма платы за объявленную ценность в копейках
 AIRRATE – выделенная сумма платы за пересылку воздушным
транспортом в копейках
 INDEXTO – почтовый индекс адресата
 REGION – регион
 AREA – район
 CITY – город
 STREET – улица
 ADDRESSEE – адресат
 COMMENT – служебные данные. Разделителем служебных
данных является ';'
 MAILDIRECT – код страны места назначения почтового
отправления (для России – 643)
21
Примерный вид файла:
BARCODE|MASS|MASSRATE|PAYMENT|VALUE|INSRRATE|AIRRAT
E|INDEXTO|REGION|AREA|CITY|STREET|ADDRESSEE|COMMENT|MAILD
IRECT|ALTERDELIV|TELADDRESS
14083878225815|20|3260|0|0|0|0|109147|г.Москва
ул.Абельмановская|||,
11, 42|ОАО "Ростелеком"||643|0|
14083878225822|20|3260|0|0|0|0|121596|Москва
Город|||Запорожская
Улица, 6, 115|ОАО "Ростелеком"||643|0|
4.3.2
Акт приема-передачи данных
Формат файла: xls
В файле в табличном виде перечислены имя файла с данными,
количество документов в файле, количество отправлений в файле, общее
количество отправлений, формат печати, наименование клиента. Внешний
вид файла представлен в приложении Б. Нумерация актов приема-передачи
данных должна быть сквозной, номер последнего акта хранится в
конфигурационном файле.
4.4.2
Список соответствия id клиента и присвоенного
ему ШПИ
Формат файла: xml
Кодировка файла: utf8
Файл представляет собой структуру xml. Корневым элементом
является элемент с именем CodeSHPI, имеющим 5 атрибутов:
 TimeShtamp – время в формате dd/mm/yyyy
 FileNum – номер файла за текущую дату
 All – общее количество отправлений, по которым предоставлена
информация в файле
 AllGood – количество валидных отправлений
22
 AllBad – количество невалидных отправлений
Корневой элемент содержит 2 элемента: <Good> и <Bad>, внутри
которых расположены данные об отправлениях. Данные располагаются в
элементах <Code>, которые содержат 7 элементов:
 USERID – уникальный код клиента
 SHPI/ERROR – присвоенный клиенту код ШПИ, в случае
валидного отправления. В случае невалидного отправления,
элемент имеет имя ERROR и внутри него содержится описание
ошибки
 PostDate – дата и время отправления письма (05.09.2014 15:32:01)
 PostName – имя файла с данными, в котором располагался
данный клиент
 Surname – фамилия клиента
 Name – имя клиента
 MiddleName – отчетсво клиента
Примерный вид файла:
<?xml version="1.0" encoding="Cp1251" standalone="yes"?>
<CodeSHPI
TimeShtamp="9/5/2014"
FileNum="01"
All="6066"
AllGood="6062" AllBad="4">
<Good>
<Code>
<USERID>20767931</USERID>
<SHPI>14083878165814</SHPI>
<PostDate>05.09.2014 15:32:01</PostDate>
<PostName>20140901000001.xml</PostName>
<Surname>Иштуганова</Surname>
<Name>Гульнара</Name>
<MiddleName>Радмировна</MiddleName>
</Code>
23
</Good>
<Bad>
<Code>
<USERID>20773730</USERID>
<PostDate>05.09.2014 15:32:01</PostDate>
<PostName>20140901000005.xml</PostName>
<Surname>Мальцев</Surname>
<Name>Олег</Name>
<MiddleName>Станиславович</MiddleName>
<Error>Неверно указан адрес</Error>
</Code>
</Bad>
</CodeSHPI>
4.3 Служебные файлы
К разрабатываемой программе прилагается несколько служебных
файлов, которые хранятся в одной директории с программой:
 Журнал работы программы
 Журнал ошибок. В этом файле регистрируются все ошибки,
возникающие при работе программы
 Конфигурационный файл
4.1.3
Журнал работы программы
Формат файла: txt
Имя файла: log.txt
В этом файле регистрируется время и выполняемая в текущий момент
операция. Файл предназначен для анализа и разбора действий, в случае
возникновения проблем. Структура файла:
hh:mm:ss DD/MM/YYYY <text>,
где
24
hh:mm:ss – время сообщения
DD/MM/YYYY – дата сообщения
<text> текст сообщения
Записи отделяются друг от друга символом '\n'.
4.2.3
Журнал ошибок
Формат файла: txt
Имя файла: error.txt
В этом файле регистрируются все ошибки, возникающие при работе
программы. Формат данных в файле аналогичен формату файла журнала.
4.3.3
Конфигурационный файл
Формат файла: ini
Имя файла: config.ini
Файл содержит настройки программы. Настройки в файле разделены
на несколько групп:
 [main] В этой группе расположены настройки, относящиеся к
работе всей программы
 [NOVOSIB], [PITER], [MOSCOW] В этих группах расположены
настройки, относящиеся к определенному региону, в котором
производится печать и конвертование отправлений
Описание основных полей представлено в таблице 3.
Таблица 3 - Описание полей конфигурационного файла
Группа Имя поля
Описание
Количество потоков для обработки данных.
[main]
cpus
Обычно равно колисеству ядер процессора в
системе
Краткое название компании
short_company_name
25
Продолжение таблицы 3
Группа Имя поля
Описание
Папка на ФТП сервере, содержащая входные
input_dir
файлы
(/ftp/ftp-shared/CGPSPB/RTK_in)
Полное название компании-клиента
company
(ОАО "Ростелеком" )
Номер выходного xml файла за текущий день.
Хранится дата обработки и номер файла в
xml_filenum
формате
yyyymmdd;nn
(20150415;01)
ИНН компании-клиента
[main]
inn
(7707079388)
Ip адрес ФТП сервера
ftp_server
(172.24.161.186)
Имя файла, хранящего PID (Process IDentifier)
текущего процесса программы. Предназначен
flock
для предотвращения одновременного запуска
нескольких копий программы
(rostelecom_pid.pid)
Номер последнего акта приема-передачи.
lists_num
Предназначен
для
сохранения
сквозной
нумерации актов приема-передачи
spool_size
error_file
Максимальное количество отправлений в
одном файле
Имя файла для записи ошибок программы
(rtk_error.txt)
26
Продолжение таблицы 3
Группа Имя поля
log_file
output_dir
Описание
Имя файла журнала (log.txt)
Путь к папке на ФТП сервере, куда буду
загружаться файлы
Электронная почта получателей списка по
[NOVOSIB], [PITER], [MOSCOW]
f103_rcpt
ф.103
для
каждого
региона.
Несколько
получателей разделяются символом ';'
(103f@ascpost.ru)
Электронная почта получателей акта приемапередачи
app_rcpt
данных
Несколько
в
каждом
получателей
регионе.
разделяются
символом ';'
(k.baranov@cgppost.ru;o.mamonov@cgppost.ru)
Название автоматического сортировочного
ops
центра (АСЦ), принимающего отправления в
данном регионе. Присутствует в бумажных
списках ф. 103
5 Предварительная схема работы системы
1. Администраторы загружают исходные файлы в папку на ФТП
сервере.
2. Программа в автоматическом режиме проверяет наличие новых
файлов с расширением .zip на ФТП сервере.
3. При обнаружении файлов происходит их загрузка с ФТП сервера
в папку XML.
4. Программа производит извлечение файлов из архива и сохраняет
имена файлов формата xml.
27
5. Данные из каждого файла считываются в структуру типа хэш
массивов хэшей.
6. При считывании данных производится проверка адресного поля
на корректность, а также определение принадлежности клиента к
определенному региону.
7. Асинхронно формируется отправление для каждого клиента.
8. Когда количество отправлений становится равным размеру спула
или если нет больше клиентов в массиве, печатные файлы
собираются в один, в формате pdf. Одновременно формируется
печатный список ф. 103 и вставляется в конец файла, а также
происходит формирование электронных списков ф. 103 и их
сохранение на диске.
9. После формирования файлов, происходит конвертирование pdf
файлов в afp.
10. Создание акта приема-передачи и отправка его по электронной
почте
11. Отправка списков ф.103 по электронной почте для прогрузки в
ПО Партионная почта.
12. Загрузка печатных файлов формата afp на ФТП сервер.
Разрабатываемая система должна работать в операционной системе
Linux с 32-х или 64-х битной архитектурой. Программировать систему
целесообразно на языке высокого уровня. Выбор подходящего языка
программирования для решения задачи, необходимо произвести с помощью
системы поддержки принятия решений.
Печать производится на ролевой машине IBM InfoPrint 4100 (Рисунок
1).
28
Рисунок 1 - Внешний вид IBM InfoPrint 4100
Ширина бумаги: 430 мм. Отправления имеют ширину 210 мм.,
поэтому надо располагать их по 2 шт в ряд. Отпечатанный ролик разрезается
на отдельные отправления. Отдельные отправления складываются Z-фальцем
и упаковываются в конверт стандарта С65 (114х229мм) с прозрачным окном.
Резка
отправлений
и
упаковка
в
конверты
осуществляется
на
конвертовальном оборудовании Kern 3500 (Рисунок 2).
Рисунок 2 - Конвертовальная система Kern 3500
Внешний вид брендированного конверта стандарта С65 с прозрачным
адресным окном представлен в приложении Г.
29
Соответствие почтового индекса региону будем хранить в СУБД
MySql.
MySQL - это быстрая, надежная, открыто распространяемая СУБД, как
и многие другие СУБД, функционирует по модели "клиент/сервер". Под этим
подразумевается сетевая архитектура, в которой компьютеры играют роли
клиентов либо серверов. [6].
СУБД MySql имеет следующие преимущества:
 простота установки;
 наличие
web-интерфейса
(PHPMyAdmin
—
в
виде
веб-приложение
утилиты
с
phpmyadmin
открытым
кодом,
написанное на языке PHP и представляющее собой вебинтерфейс для администрирования СУБД MySQL [7]);
 свободное распространение.
5.1 Выбор языка программирования
Для
выбора
языка
программирования
воспользуемся
методом
аналитических иерархий. Решение задачи методом аналитических иерархий
складывается из следующих этапов:
Структуризация задачи в виде иерархической структуры с несколькими
уровнями (цели-критерии-альтернативы).
Попарное сравнение лицом принимающим решения (далее – ЛПР)
элементов каждого уровня. Результаты переводятся в числа с помощью
специальной таблицы.
Вычисление коэффициентов важности для элементов каждого уровня.
При этом проверяется согласованность суждений ЛПР.
Подсчет количественного индикатора качества каждой альтернативы и
определение наилучшей альтернативы.
Цель: Выбрать оптимальный язык программирования, наиболее полно
соответствующий перечисленным критериям.
Критерии:
30
 лицензия, под которой распространяется язык программирования
(далее – ЯП);
 платформонезависимость
(возможность
работы
программ,
написанных на данном ЯП, на разных ОС);
 наличие и количество модулей для работы с pdf файлами;
 сложность освоения;
 уровень знания данного ЯП у ЛПР;
 наличие IDE для разработки;
 наличие русскоязычной литературы по данному ЯП;
 поддержка и развитое сообщество;
 скорость работы программ на данном ЯП;
 работа на сервере без GUI
Альтернативы
 Java
 C++
 Perl
 Phyton
 C#
 php
Таблица 4 - Шкала словесных определений уровней важности
Уровень важности
Количественное значение
Равная важность
1
Умеренное превосходство
3
Существенное или сильное превосходство
5
Значительное (большое) превосходство
7
Очень большое превосходство
9
31
При сравнении элементов, которые принадлежат одному уровню
иерархии, ЛПР выражает свое мнение, используя одно из определений,
приведенных в таблице. В матрицу заносится соответствующее число.
Сравнение критериев приведено в таблице 5.
32
Таблица 5 - Сравнение критериев выбора ЯП
Критерии
Плат
фор
моне
зави
симо
сть
Модули
для
работы с
pdf
Cложн
ость
освое
ния
Уровень
знания
данного
ЯП у ЛПР
Платформонезави
симость
1,00
0,30
0,14
Модули для
работы с pdf
3,00
1,00
Cложность
освоения
7,00
Уровень знания
данного ЯП у ЛПР
Наличие IDE для
разработки
Наличие
русскоязычной
литературы по ЯП
Поддержка и
развитое
сообщество
Скорость работы
программ на
данном ЯП
Работа на сервере
без GUI
лицензия, под
которой
распространяется
ЯП
лиценз
ия, под
Работа на
которой
сервере
распрос
без GUI
траняет
ся ЯП
Наличие IDE
для
разработки
Наличие
русскоязы
чной
литератур
ы по ЯП
Поддержка
и развитое
сообщество
Скорость
работы
программ на
данном ЯП
Собс
твен
ный
вект
ор
Вес
крите
рия
0,10
3,00
0,20
0,30
0,14
0,20
1,00
0,71
4377
0,069
34227
0,20
0,14
7,00
3,00
3,00
3,00
5,00
5,00
1,20
5615
0,117
02518
5,00
1,00
1,00
7,00
5,00
5,00
3,00
1,00
7,00
1,44
433
0,140
19643
9,00
7,00
1,00
1,00
9,00
5,00
7,00
3,00
3,00
9,00
1,56
2938
0,151
70933
0,30
0,14
0,14
0,10
1,00
0,30
0,30
0,14
0,20
1,00
0,65
7411
0,063
81273
5,00
0,30
0,30
0,20
0,14
1,00
1,00
0,20
0,14
1,00
0,78
0028
0,075
71481
3,00
0,30
0,20
0,14
3,00
1,00
1,00
0,30
1,00
5,00
0,93
4236
0,090
68328
7,00
0,30
0,30
0,30
7,00
5,00
3,00
1,00
0,30
5,00
1,11
1871
0,107
92573
5,00
0,20
1,00
0,30
5,00
7,00
1,00
3,00
1,00
7,00
1,18
3672
0,114
89525
1,00
0,20
0,14
0,10
1,00
1,00
0,20
0,20
0,14
1,00
0,70
7709
0,068
695
33
Платформонезависимость
Модули для работы с pdf
Альтернатива
Perl
Cложность освоения
Phython Java
3
3
C#
Php
C++
9
1
3
1,987013346 0,296573977
Phython
0,3
1
3
7
1
3
1,443968521 0,215521193
Java
0,3
0,3
1
3
1
1
0,849024984 0,126722207
C#
0,1
0,14
0,3
1
0,3
0,3
0,373410456
0,05573381
Php
1
1
1
3
1
3
1,316074013
0,19643215
C++
0,3
0,3
1
3
0,3
1
0,730399769 0,109016663
Собственный
Вес критерия
вектор
Альтернатива
Perl
Perl
1
Phython Java
1
3
C#
Php
C++
3
5
9
2,118028882 0,295898969
1
1
3
3
5
7
2,052526719 0,286747997
Java
0,3
0,3
1
3
3
7
1,242218184 0,173543941
C#
0,3
0,3
0,3
1
3
3
0,83791658 0,117061035
Php
0,2
0,2
0,3
0,3
1
3
0,567777227 0,079321249
C++
0,1
0,14
0,14
0,3
0,3
1
0,339478538 0,047426808
Phython
Альтернатива
Уровень знания данного ЯП у
ЛПР
Perl
1
Собственный
Вес критерия
вектор
Perl
Perl
1
Phython Java
1
5
C#
Php
Собственный
Вес критерия
вектор
C++
3
1
7
1,789157867 0,264396383
1
1
3
1
1
5
1,402850552 0,207309046
Java
0,2
0,3
1
0,3
0,3
3
0,597295684 0,088266564
C#
0,3
1
3
1
1
5
1,206845191 0,178343962
Php
1
1
3
1
1
5
1,402850552 0,207309046
C++
0,14
0,2
0,3
0,2
0,2
1
0,367953052 0,054374998
Phython
Альтернатива
Perl
Perl
Phython Java
C#
Php
Собственный
Вес критерия
вектор
C++
1
1
5
3
1
5
1,715468145 0,265709983
Phython
0,3
1
3
3
1
5
1,38449605 0,214445499
Java
0,2
0,3
1
3
0,2
1
0,659990695 0,102226391
C#
0,3
0,3
0,3
1
1
3
0,730399769 0,113132098
Php
1
1
5
1
1
5
1,495348781 0,231615551
C++
0,2
0,2
1
0,3
0,2
1
0,470464009 0,072870478
34
Наличие IDE для разработки
Наличие русскоязычной
литературы по ЯП
Поддержка и развитое
сообщество
Скорость работы
программ на данном ЯП
Работа на сервере без GUI
Альтернатива
Perl
Perl
1
Phython Java
0,3
0,14
C#
0,14
Php
1
C++
0,3
Собственный
Вес критерия
вектор
0,452701906 0,060871792
Phython
3
1
0,2
0,14
3
0,3
0,724127806 0,097368614
Java
7
5
1
1
5
3
2,187861938 0,294187135
C#
7
7
1
1
7
5
2,53678123 0,341103975
Php
1
0,3
0,2
0,14
1
0,3
0,473342028 0,063647131
C++
3
3
0,3
0,2
3
1
1,062158617 0,142821352
Собственный
Вес критерия
вектор
Альтернатива
Perl
Perl
1
Phython Java
0,3
0,2
C#
0,2
Php
0,3
C++
0,2
0,404731086 0,060356855
Phython
3
1
0,3
0,3
1
0,3
Java
5
3
1
1
3
0,3
C#
5
3
1
1
3
1
1,609353928 0,240000201
Php
3
1
0,3
0,3
1
0,3
0,730399769 0,108923269
C++
5
3
3
1
3
1
1,846255156 0,275328876
Альтернатива
Perl
Phython
Java
C#
Php
C++
Альтернатива
Perl
Phython
Java
C#
Php
C++
Альтернатива
Perl
Phython
Java
C#
Php
C++
Perl
1
1
3
3
5
0,3
Perl
1
1
3
0,3
0,3
5
Phython Java
1
0,3
1
0,3
3
1
3
1
1
0,3
0,3
0,2
C#
0,3
0,3
1
1
0,3
0,14
Phython Java
1
0,3
1
0,3
3
1
0,3
0,2
0,3
0,3
5
3
C#
Perl
Phython Java
1
1
3
1
1
3
0,3
0,3
1
0,14
0,14
0,2
1
1
3
1
1
3
C#
Php
0,2
1
3
3
1
0,3
Php
3
3
5
1
3
9
3
3
3
0,3
1
7
Php
7
7
5
1
5
7
1
1
0,3
0,2
1
1
0,730399769 0,108923269
1,38449605
0,20646753
Собственный
Вес критерия
вектор
C++
3
3
5
7
3
1
C++
0,2
0,2
0,3
0,1
0,14
1
C++
1
1
0,3
0,14
1
1
0,694303285
0,849024984
1,846255156
1,92556297
1,038225571
0,40720699
0,102698791
0,125584656
0,273091279
0,2848222
0,153570512
0,060232562
Собственный
Вес критерия
вектор
0,925868311
0,925868311
1,588297594
0,390435429
0,571250551
2,87938824
0,127160352
0,127160352
0,218139533
0,053623076
0,078456537
0,395460151
Собственный
Вес критерия
вектор
1,46311146
1,46311146
0,669779542
0,319930402
1,402850552
1,46311146
0,215737856
0,215737856
0,098759942
0,047174191
0,2068523
0,215737856
35
лицензия, под которой
распространяется ЯП
Альтернатива
Perl
Phython
Java
C#
Php
C++
Perl
1
1
0,3
0,2
1
1
Phython Java
1
3
3
1
0,3
1
0,2
1
1
3
1
3
C#
Php
5
5
1
1
5
5
1
1
0,3
0,2
1
1
C++
1
1
0,3
0,2
1
1
Собственный
Вес критерия
вектор
1,402850552
1,402850552
0,547722558
0,447213595
1,402850552
1,402850552
0,212349183
0,212349183
0,082908644
0,067694625
0,212349183
0,212349183
Таблица 6 - Сравнение ЯП по весам критериев
wi - важность i-го критерия
Vji - важность j-й альтернативы по i-му критерию
лицензия, под которой
распространяется ЯП
Работа на сервере без
GUI
Скорость работы
программ на данном ЯП
Поддержка и развитое
сообщество
0,0371
0,0403 0,0039
0,0046 0,0093 0,0137 0,0248 0,0146 0,2034
Phython
0,0149
0,0336
0,0291
0,0325 0,0062
0,0082 0,0114 0,0137 0,0248 0,0146
Java
0,0088
0,0203
0,0124
0,0155 0,0188
0,0156 0,0248 0,0235 0,0113 0,0057 0,1567
C#
0,0039
0,0137
0,025
0,0172 0,0218
0,0182 0,0258 0,0058 0,0054 0,0047 0,1414
Php
0,0136
0,0093
0,0291
0,0351 0,0041
0,0082 0,0139 0,0085 0,0238 0,0146 0,1602
C++
0,0076
0,0056
0,0076
0,0111 0,0091
0,0208 0,0055 0,0427 0,0248 0,0146 0,1493
Ценность
0,0346
Наличие IDE для
разработки
0,0206
Уровень знания
данного ЯП у ЛПР
Модули для работы с
pdf
Perl
Cложность освоения
Платформонезависим
ость
Наличие русскоязычной
литературы по ЯП
N - количество альтернатив
0,189
Из таблицы 6 видно, что наибольшее значение V=0.2 у ЯП Perl.
Исследования показали, что выбор языка программирования несколькими
способами влияет на производительность труда программиста и качество
создаваемого им кода. Если язык хорошо знаком программистам, они работают
более производительно. Данные, полученные при помощи оценки Cocomo2,
показывают, что программисты, использующие язык с которым они работали 3
года и более, примерно на 30% более продуктивные, чем программисты,
имеющие аналогичный опыт, но для которых язык является новым [8].
36
Perl — высокоуровневый интерпретируемый динамический язык
программирования
лингвистом
по
общего
назначения,
образованию.
созданный
Название
языка
Ларри
представляет
Уоллом,
собой
аббревиатуру, которая расшифровывается как Practical Extraction and Report
Language — «практический язык для извлечения данных и составления
отчётов» [9]. В настоящее время большинство поставщиков операционных
систем включают Perl в качестве стандартной составляющей своей системы
[10]. Perl имеет развитое сообщество и большое количество модулей.
Имеются модули для работы с базой данных, обращения к web страницам,
составления отчетов, разбора xml файлов, создания и редактирования pdf
файлов. Благодаря возможности разработки отдельных модулей на Perl, мы
можем разработать основные модули, которые в дальнейшем можно
использовать для обработки данных от любых клиентов.
Perl относится к языкам очень высокого уровня. Это означает, что
программный код получается весьма компактным; программа, написанная на
Perl, занимает от одной до трех четвертей объема аналогичной программы на
C.
Программы
Perl
быстрее
пишутся,
быстрее
читаются,
быстрее
отлаживаются, а их сопровождение занимает меньше времени [11].
По состоянию на 01.04.2015 последней стабильной версией Perl
является версия 5.20.2, ее и будем использовать. Дистрибутив для установки
можно загрузить с официального сайта сообщества Perl http://www.perl.org/
На Perl, используя модуль для работы с pdf файлами, сформируем
отправления в формате pdf, после чего будем производить конвертирование в
формат afp, с помощью купленного в компании ПО Docbridge Mill cpmcopy.
В компании была куплена только версия для Windows систем, для работы в
системе Linux будем использовать утилиту wine.
Wine
—
пользователям
свободное
программное
UNIX-подобных
систем
обеспечение,
архитектуры
x86
позволяющее
(и
других
архитектур, при наличии совместимости, например, AMD64) исполнять 16-,
37
32- и 64- битные приложения Microsoft Windows (64-битные приложения
находятся в стадии ранней реализации)[12].
5.2 Выбор Perl модуля для генерации документов в
формате pdf
Perl имеет множество расширений
(модулей) для выполнения
различных задач. Модули хранятся в базе CPAN (Comprehensive Perl Archive
Network). По состоянию на 01.04.2015 хранилище содержало 146,249
модулей. Для генерации почтовых отправлений в формате PDF выберем
несколько
наиболее
популярных
модулей
из
хранилища
CPAN
и
протестируем их на наличие необходимого функционала.
PDF
Модуль PDF версии 1.11, не обновлялся с 14.02.2000 года. Модуль
позволяет только прочитать системную информацию из документа pdf,
получить его версию, количество страниц в документе. Модуль не покрывает
требуемый для данного проекта функционал и не умеет создавать документы
в формате pdf.
CAM::PDF
CAM::PDF - PDF manipulation library [13]. Модуль поддерживается,
текущая версия модуля 1.60, последнее обновление 15.08.2013. Модуль
позволяет манипулировать документами в формате pdf,
копировать
страницы, собирать несколько документов в один, извлекать изображения из
документов, вставлять метки, добавлять шрифты. Данный модуль также не
позволяет добавлять в документ pdf пользовательский текст.
PDF::API2
PDF::API2 - Facilitates the creation and modification of PDF files [14].
Широко распространенный и известный модуль для создания и модификации
документов в формате pdf. Модуль активно поддерживается, и постоянно
обновляется. В работе модуля не зафиксировано каких-либо серьезных
ошибок. Текущая версия модуля
- 2.0.23 (по состоянию на 01.04.2015).
38
Работа с модулем описана во многих статьях в интернете, например в
журнале «Системный администратор» №3 от 2006г. Модуль позволяет
создавать документы в формате pdf, манипулировать страницами в
документе (перемещать, копировать, вставлять из других документов),
наносить пользовательский текст на шаблоны, вставлять бар-коды, вставлять
картинки.
Одним
относительно
из
недостатков
невысокая
скорость
модуля
PDF::API2
работа,
но
является
данный
его
недостаток
перекрывается его широким функционалом.
PDF::Reuse
PDF::Reuse - Reuse and mass produce PDF documents [15]. Второй по
популярности модуль для работы с документами pdf в Perl. Модуль активно
поддерживается разработчиком и постоянно обновляется. Текущая версия
модуля
0.36
манипулировать
(по
состоянию
страницами
на
01.04.2015).
документа
(создавать,
Модуль
позволяет
менять
местами,
копировать из других документов), добавлять текст в документ, шрифты.
Модуль имеет высокую скорость работы, благодаря работе с документом pdf
на «низком» уровне, но в нем нет возможности добавлять бар-коды в
документ.
Проанализировав основные модули для работы с pdf в Perl, остановим
свой выбор на PDF::API2. Данный модуль хоть и не отличается высокой
скоростью работы, зато его функционала достаточно для
поставленной
задачи.
5.3 Валидация почтового адреса
Для
проверки
почтового
использовать эталонный
адреса
на
корректность
мы
будем
справочник адресов. Есть два популярных
справочника адресов:
 КЛАДР (классификатор адресов Российской Федерации) —
ведомственный классификатор ФНС России, созданный для
39
распределения территорий между налоговыми инспекциями и
автоматизированной рассылки корреспонденции [16].
 ФИАС - Федеральная информационная адресная система
Оба справочника распростряняются бесплатно, но справочник КЛАДР
является устаревшим, поэтому использовать мы будем справочник ФИАС.
Справочник ФИАС поставляется в виде набора файлов в формате DBF со
следующей структурой:
 KLADR - содержит объекты c 1-го по 4-й уровень классификации
(регионы; районы (улусы); города, поселки городского типа,
сельсоветы; сельские населенные пункты);
 STREET - содержит объекты 5-го уровня классификации (улицы
городов и населенных пунктов);
 DOMA - содержит объекты 6-го уровня классификации (номера
домов улиц городов и населенных пунктов);
 FLAT - содержит объекты 7-го уровня классификации (номера
квартир домов);
 SOCRBASE - содержит объекты с краткими наименованиями
типов адресных объектов;
 ALTNAMES - содержит сведения о соответствии кодов записей
со старыми и новыми наименованиями адресных объектов, а
также сведения о соответствии кодов адресных объектов до и
после их переподчинения.
Для проверки произвольного адреса по эталонному справочнику,
необходимо разбить адрес на составляющие его части (город, район, регион,
улица, дом, квартира). Данная задача достаточно сложная, по ней написано
немало статей, в которых рассказываются алгоритмы выделения из адресной
строки значащих частей.
В компании ФГУП «Почта России» имеется сетевой сервис, который
принимает на вход адресную строку, а возвращает код состояния,
40
показывающий корректность адреса, а также разобранную на составляющие
части адресную строку.
Для обращения к сервису необходимо отправить POST запрос по
протоколу https (протокол http с шифрованием). Для обмена данными с
сервером используется протокол SOAP (Simple Object Access Protocol —
простой протокол доступа к объектам).
Пример SOAP запроса к серверу
<soapenv:Envelope
xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:cle="https://clean.soap.cleaner.hflabs.ru">
<soapenv:Header/>
<soapenv:Body>
<cle:doCleanRequest>
<data>WORK</data>
<data>москва озерковская д. 50 стр1 оф 201</data>
<mapping>cdi-address-clean</mapping>
</cle:doCleanRequest>
</soapenv:Body>
</soapenv:Envelope>
Ответ от сервера:
<soapenv:Envelope
xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:doCleanResponse xmlns:ns2="https://clean.soap.cleaner.hflabs.ru">
<data>WORK</data>
<data>115054</data>
<data>115054</data>
<data>РОССИЯ</data>
<data>Г</data>
41
<data>МОСКВА</data>
<data/>
<data/>
<data>Г</data>
<data>МОСКВА</data>
<data/>
<data/>
<data>НАБ</data>
<data>ОЗЕРКОВСКАЯ</data>
<data>50</data>
<data/>
<data/>
<data/>
<data>1</data>
<data/>
<data/>
<data/>
<data/>
<data/>
<data/>
<data/>
<data>201</data>
<data/>
<data/>
<data/>
<data/>
<data>7700000000021080002</data>
<data>45286560000</data>
<data>GOOD</data>
<data>VALIDATED</data>
42
<data/>
<data>ЦЕНТРАЛЬНЫЙ</data>
<data>07.11.2013</data>
</ns2:doCleanResponse>
</soapenv:Body>
</soapenv:Envelope>
Система возвращает разобранный адрес, а также код проверки и код
полноты адреса, которые расположены
в полях
data[29] и data[30].
Отправлять запросы к системе будем посредством функционала Perl модуля
Mojo::UserAgent.
6 Процесс создания алгоритма обработки данных
С целью возможного повторного применения алгоритмов для
обработки данных других клиентов, было решено вести разработку
основного функционала системы по модульному типу. Для каждой значащей
функции, выполняемой системой обработки данных, был написан отдельный
модуль.
Основные функциональные модули программы перечислены в таблице
7.
Таблица 7 - Основные функциональные модули системы обработки данных
Название
Описание
модуля
Модуль включает в себя 2 функции:
generate_ini. Функция для создания электронных списков
по ф. 103. На выходе генерирует два файла (ini и txt) и
F103.pm
архивирует их в формат zip.
generate_f103. Функция для генерации печатных списков
по ф.103. Модуль генерирует список в формате pdf и
сохраняет его под именем sp_$lists_num_f103.pdf, где
$lists_num - номер списка.
43
Продолжение таблицы 7
Название
Описание
модуля
Модуль для валидации адреса. В качестве параметра
модуль получает в строке адрес для валидации. Возращает
AddressInfo.pm
модуль статус валидации (0 – невалидный адрес, 1валидация прошла успешно) и разобранный на составные
части адрес (индекс, город, район, регион и т.д…)
Модуль для загрузки файлов на сервер по защищенному
ScpUpload.pm
протоколу ssh. Авторизация на сервере осуществляется по
ключу.
Модуль для генерации Акта приема-передачи. На вход
подаются данные о файлах (наименование, количество
отправлений,
количество
листов,
формат),
название
компании, директория для записи файла. На выходе
гененрирует файл формата Microsoft Excel 2003 (.xls) с
App.pm
именем
APP_$short_company_name_$app_num_$data.xls,
где
$short_company_name – краткое наименование компанииклиента, например RTK
$app_num – номер акта приема-передачи
$data – дата создания акта в формате (ДДММГГГГ)
Модуль для отправки электронной почты. На вход
SendMail.pm
принимает адрес получателя письма, тему письма, тело
письма, вложения. Возвращает 1 - в случае успешной
отправки или 0 - в случае ошибки при отправке.
44
Продолжение таблицы 7
Название
Описание
модуля
Модуль
для
конвертирования
файлов
из
формата
PDF/XSL-Fo в формат AFP. Работает в многопоточном
Pdf2Afp.pm
режиме. Можно задать formdef в параметрах и количество
потоков для конвертации. Возвращает 1 – в случае
успешного выполнения или 0 – в случае ошибки.
Модуль содержит основные функции для работы с pdf
файлами:
collect – функция для объединения нескольких pdf файлов
в один
PDF_Features.pm draw_address_block – функция для вывода адресного блока
на странице pdf файла в определенных координатах
draw_barcode – функция для вывода ШПИ кода по
стандартам Почты России на странице pdf файла в
определенных координатах.
Rostelecom.pm
Модуль содержит основные функции, относящиеся только
к обработке данных от клиента ОАО «Ростелеком»
Первым делом была написана функция для чтения данных из XML
файла во внутреннюю структуру. Perl не имеет типа данных struct.
Основынми типами данных для хранения списка данных являются массивы и
хэши. В массивах доступ к объекту осуществляется посредством указания
имени массива и номера элемента. Хэши – это ассоциативные массивы.
Каждый элемент хэша имеет свой уникальный ключ. Доступ к данным хэша
осуществляется путем указания имени хэша и имени ключа. Сложные
структуры в Perl хранятся в виде ссылок на массивы и хэши. В хэше мы
будем хранить данные клиента, получившиеся хэши будем хранить в
45
массиве, который в свою очередь будет храниться в хэше, ключами которого
будет название региона. Получившаяся структура будет иметь вид
$data -> {
MOSCOW =>
[
{
userid => 12223,
lastname => 'Иванов',
firstname => 'Федор',
code => 45634445,
……..
},
{
userid => 4545445,
lastname => 'Козлов',
firstname => 'Николай',
code => 8776474,
……..
},
……..
]
PITER =>
[
…..
]
}
Далее была написана функция create_pdf, создающая pdf файл для
одного клиента. В функцию передаются данные клиента, имя файла.
Функция создает pdf файл во временной директории. Когда количество
файлов становится равным размеру спула или все данные обработаны,
46
файлы собираются в один при помощи функции collect, находящейся в
модуле PDF_Features. Основной функционал системы расположен в модулях,
описание которых приведено в разделе «Описание основных модулей
системы». При проведении тестирования, оказалось, что скорость генерации
одного отправления составляет 0.5 сек. После чего еще требовалось собрать
файлы в один и конвертировать их в формат afp. За час получалось
обработать около 4 тыс. отправлений. Скорость генерации ниже, чем
необходимая скорость в 10 тысяч отправлений/час, указанная в техническом
задании. Для увеличения скорости обработки было решено задачи генерации
pdf файлов и конвертирование файлов из формата pdf в формат afp
осуществлять в многопоточном режиме.
Общая структурная схема системы представлена на рисунке 3.
47
Rostelecom::
notice
Список Jabber_id
message
ge
йл
се ы д
рв л я
ер з а
, п гр
а п уз к
ка и,
ssa
Rostelecom::
write_error
Rostelecom::
send_app
Em
s
ail,
ub
j, b
od
y
1
Фа
message
ScpUpload
0o
r
Rostelecom::
db_connect
$DB->{name}
$DB->{host}
$DB->{login}
$DB->{password}
SendMail
r1
me
DB Rostelecom
Table notice
message
0o
Rostelecom::
error
-rcpt
Rostelecom::
upload
получат
елей АП
П
и
уз к
Пе
ре
д
ач
ап
ар
ам
ет
ро
в
Пу
ть
к
на
кт
ъе
об
обе
1
or
Rostelecom::
create_pool
fname
shpi
lastname
…
нта
ат
дин
коор
ы
аp
df
лие
ек
нны
f
айл
яф
Им
Да
ый
а
нн
1
pd
F103
l
xm
а
ру
Ст
XML::Simple
ул
на п
ля
лка
од у
С сы
о
г м
е
ч
або
яр
Им
ш
0 or
ла
ай
яф
Им
Rostelecom::
create1_pdf
-fname
-shpi
-name
-address
-post_index
-service_str
-template
ур
кт
та
AddressInfo
С
ф
ай
л
ы
й
нн
об
ра
н
ие
кл
С
ые
Ш
П
И
нн
си
в
ес
PDF_Features
на
ка у
р
ыл
Сс укту х
стр нны
да
Да
ас
в
Ссылка на
данные
М
ф
ай
ло
иг
он
а
лк
сы
хэ
на
num
на
на
по
з
self
self
л
пу
ка
ыл
Ра
с
0
ил
и
ша
Сс
хэ
ка
ыл
ид
е
Сс
вв
кт
ъе
об
Rostelecom::
generate_rtk_xml
DB Rostelecom
Table shpi
0o
DB Rostelecom
Table client_id
Rostelecom::
create_pdf
Списки
фа
йл
у
0
0o
r1
С сы
лка
на о
бъе
кт
Ссылка на объект
1
на
ес
i,
shp _id
nt
cl i e
or
ые
бъект
convert_rostelecom.pl
ка
ыл
др
а на о
Ссылк
Сс
0
ре
Ад
р
r1
на
С сы
лка
бъ
ек
т
Rostelecom::
define_shpi
Rostelecom::
check_address
address
ан н
Rostelecom::
add_info_to_bd
ес
xml_dat
Ад
р
Rostelecom::
correct_data
1
ка
ыл
д
на
кт
Список
ля
д
пка
Па
r1
or
0
0o
0 or 1
fname
ао
Сс
num
1
р
з аг
0 or 1
Сс
ы
стр лка н
у
а
дан ктуру
ны
х
r1
Rostelecom
::read_data
ыл
ка
н
0o
XML::Simple
Сс
Rostelecom::
app
App
0 or
-output_dir
-template
-cpus
-company
-inn
-short_company_name
-write_log
-write_error
ПП
аА
Rostelecom::new
айл
яф
Им
на БД
ка е к
ыл ни
Сс юче
кл
д
по
-dir
AnyEvent::Fork::Pool
я
дл
ты кста
на
ди ия те
ор
Ко есен
н
На
PDF::API2
Рисунок 3 - Общая структурная схема системы обработки данных
48
6.1 Структура штрихкодового почтового
идентификатора (ШПИ)
Штрихкодовый идентификатор необходим для однозначного
определения каждого почтового отправления. Структура штрихкодовой
идентификации
почтовых
отправлений
описывается
в
руководящем
техническом материале (РТМ) 0001.01-99.
Используется
следующая
структура
штрихкодового
идентификатора:
 штрихкод стандарта Interleaved 2 of 5
 длина идентификатора 14 символов
Структура блока показана в таблице 8:
Таблица 8 - Структура ШПИ
Позиции
1-6
Формат
данных
N6
Содержание
Индекс
Пример
отделения
почтовой
связи 143185
места приема
7-8
N2
Порядковый номер месяца при печати 83
штрихкодового
идентификатора,
начиная с 01.2000 (значение 01)
9-13
N5
Номер почтового отправления
00774
14
N1
Контрольный разряд
5
Позиции 7-8 в структуре штрихкодового почтового идентификатора
должны гарантировать уникальность идентификатора в сети почтовой связи
на протяжении, по крайней мере, восьми лет. Порядковый номер месяца
печати идентификатора для предприятий связи с небольшими объемами
регистрируемой почты (не более 99999 в месяц) не означает необходимость
привязки его к конкретному календарному номеру месяца и фактически
является порядковым номером партии предварительно напечатанных
идентификаторов.
Предприятиям
с
большими
объемами
почты,
49
предусматривается
выделение
дополнительных
почтовых
индексов,
включаемых в структуру идентификатора для обеспечения уникальности
отправлений. В таких случаях клиенту, периодически сдающему партионную
почту и самостоятельно готовящему сопроводительную документацию
выделяется индексный и номерной диапазон для обеспечения уникальности
почтовых отправлений. В этом случае клиент вносит в позицию 7-8
фактический порядковый номер месяца, начиная с 01.2000 г. Значение января
2000г. равно 01. Если номер в позиции 7-8 меньше 10, то обязательно
дополнение лидирующими нулями [17].
Клиентом,
осуществляющим
отправку
большого
количества
отправлений в месяц, является и ОАО «Ростелеком». Для него выделяется
250 тыс. ШПИ в месяц. Один индекс может содержать не более 99999 ШПИ,
поэтому для ОАО «Ростелеком» выделяется три индекса: 140811, 140812,
140813. Вид диапазона ШПИ представлен в таблице 9.
Таблица 9 - Диапазон ШПИ для ОАО "Ростелеком"
Индекс
Срок действия
Номер месяца
140811
Апрель 2015
140812
140813
Номер
С
По
85
00 001
99 999
Апрель 2015
85
00 001
99 999
Апрель 2015
85
00 001
50 000
Контрольный
разряд
(позиция
№14
вычисляется
клиентом
самостоятельно) используя следующий алгоритм:
1. Сумма символов, расположенных в нечетных позициях числа
умножается на 3
2. Считается сумма символов, расположенных в четных позициях
числа.
3. Суммируются результаты пунктов 1 и 2.
4. Вычисляется минимальное число, которое необходимо прибавить
к результату из пункта 3, чтобы получить сумму, кратную 10.
50
Получившееся число и будет контрольным разрядом. (Например,
после выполнения пункта 3, получилось число 27, значит
контрольный разряд 3). Если результат в пункте 3 кратен 10, то
контрольное число 0.
Коды ШПИ будем хранить в отдельной таблице в базе данных.
Необходимо разработать также программу для генерации кодов ШПИ по
введенному пользователем диапазону, проверки контрольной цифры, и
внесения диапазона кодов ШПИ в базу данных.
Входные данные:
 Xml файл с данными клиентов, упакованный в архив формата zip.
 Таблица в БД с кодами ШПИ.
 Таблица в БД, хранящая соответствие почтового индекса региону
Выходные данные:
 AFP файл, содержащий почтовые отправления для печати
 ZIP архив с электронными списками для прогрузки в ПО
«Партионная Почта»
 XML файл, содержащий id клиента и присвоенный ему ШПИ.
Файл ежедневно направляется клиенту
 Акт приема-передачи данных для передачи печатных файлов на
производство
Списки для прогрузки в ПО Партионная Почта будут автоматически
рассылаться из программы по e-mail. Готовые файлы печати должны также
автоматически загружаться на ФТП сервер компании, после чего должно
приходить
письмо-уведомление
начальнику
цеха
и
системным
администраторам о готовности файлов к печати, также содержащее акт
приема-передачи. Акт приема-передачи должен содержать в табличном виде
все файлы для печати, количество страниц в каждом файле, количество
отправлений,
размер
отправлений
и
тип
печати
(односторонняя/двухсторонняя).
51
6.2 Многопоточная обработка данных в Perl
Для Perl есть несколько вариантов реализации многопоточной
обработки данных. Рассмотрим основные способы.
6.1.2
Fork
Для создания потомков процесса Perl использует системный вызов fork.
Обычно он используется совместно с exec. Функция exec выполняет команду,
переданную ей в аргументах, и завершает свою работу после выполнения.
Вызов fork возвращает undef (неопределенное значение) в случае неудачи,
иначе в родительском процессе он возвращает ненулевое значение, а в
процессе-потомке нуль.
При вызове функции fork создается процесс-
потомок, который копирует все данные от родительского процесса. Новый
процесс получает своё собственное адресное пространство и начинает
существовать независимо от родителя. Такое ветвление процессов – широко
распространённая практика в многозадачных средах, способных выполнять
сразу несколько потоков команд. Но ветвление – не единственный способ
воспользоваться преимуществами многопоточности.
6.2.2
Threads
Другой подход – создание нитей (threads). При стандартном forkподходе одно отдельное адресное пространство обрабатывается одним
потоком команд. Но нет никаких принципиальных ограничений на
количество потоков команд, работающих в одном адресном пространстве,
поэтому потоки и принято называть нитями. Нити позволяют операционной
системе выполнять программу сразу на нескольких процессорах или
продолжать выполнение одной нити, пока другая ожидает ввода/вывода,
сетевого соединения или других событий. Подобные возможности доступны
и
при
fork-ветвлении,
но
нити
дают
некоторое
дополнительное
преимущество перед ветвлением. Во-первых, при переключении между
нитями системе не приходится менять контекст задачи. Во-вторых, передача
52
данных между нитями происходит гораздо проще, чем между отдельными
процессами, благодаря общей памяти.
Поддержка нитей в программе включается при подключении модуля
threads командой use threads. Для успешного подключения threads, требуется,
чтобы Perl был собран с поддержкой многопоточности, иначе интерпертатор
выведет сообщение об ошибке.
При
использовании
threads
часто
происходят
утечки
памяти,
отработавшие процессы не освобождают память, причем отловить эти утечки
часто очень трудно. Также использование threads требует больше памяти,
чем fork.
6.3.2
Специализированные модули для параллельного
выполнения процессов.
В CPAN есть несколько модулей, предназначенных для параллельного
выполнения процессов. Все они в той или иной степени являются
надстройками над fork или threads и позволяют несущественно облегчить
работу по распараллеливанию процессов.
Но есть отдельный модуль под названием AnyEvent::Fork. В описании
модуля сказано, что работа с потоками через этот модуль, быстрее, чем
запуск fork+exec. Также модуль позволяет автоматически отслеживать
завершившиеся процессы, имеет возможность передачи параметров в
выполняемые потоки. В модуле есть функция, определяющая количество
процессоров в системе.
Для
параллельного
выполнения
процессов
в
данном
проекте
используем модуль AnyEvent::Fork.
6.3 Описание основных модулей системы
1.1.1
Модуль F103
Модуль предназначен для создания бумажных и электронных списков
по форме 103. Бумажный список – это список в формате pdf, который
53
прикрепляется в конце каждого печатного файла. Модуль написан с
применением объектно-ориентированного подхода. Глобальные переменные,
значения которых используются по умолчанию, перечислены в таблице 10.
Таблица 10 - Глобальные переменные модуля F103
Переменная
Значение
Описание
$RPO_CAT
'Заказное письмо'
Категория отправления
$WEIGHT
0.02
Вес отправления
$PRICE_REGISTERED_
35.00
Цена отправления
LETTER
'/home/vrag/perl/Mod Путь
$xsl_f103
$temp_dir
к
файлу,
ules/f103.xsl'
содержащему xsl схему
'/var/tmp/rostelecom'
Временная
папка
для
хранения файлов
Для создания объекта класса F103, вызывается конструктор (функция
new). Параметры, принимаемые конструктором, перечислены в таблице 11.
Таблица 11 - Параметры конструктора модуля F103
Аргумент
Обязательный/Значение
по Описание
умолчанию
-lists_num
Обязательный
Номер списка
-sender
Обязательный
Наименование клиента
-ops
Необязательный/«»
Наименование
почтовой
осуществляющего
отделения
связи,
приемку
отправлений
-dir
Обязательный
Директория, в которую будет
сохранен файл
54
Продолжение таблицы 11
Аргумент
Обязательный/Значение
по Описание
умолчанию
Необязательный/значение
-price
Цена отправления
переменной
$PRICE_REGISTERED_LETT
ER
-weight
Необязательный/
Вес
отправления,
по
умолчанию вес отправления
до 3-х вложений
-rpo_cat
Необязательный/«Заказное
Категория
письмо»
отправления
почтового
Пример вызова конструктора:
my $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].
55
Схема генерации файла с использованием XSLT процессора выбрана
из-за того, что в PDF модулях для Perl нет возможности генерации в файлах
pdf таблиц с динамическими данными, т.е. модули предоставляют
возможность вывода текста в pdf по определенным координатам, а
возможность вывода текста в определенную ячейку таблицы отсутсвует. На
языке XSLT 1.0 была написана схема генерации данных f103.xsl. Модуль на
Perl создает xml файл с данными формы 103, который вместе с xsl схемой
подаётся на вход Apache FOP. Apache FOP производит трансформацию
данных согласно схеме xsl и на выходе создает pdf файл.
Общая блок-схема алгоритма представлена на рисунке 4.
Рисунок 4 - Схема работы функции generate_f103
Параметры вызова функции перечислены в таблице 12.
56
Таблица 12 - Параметры вызова функции generate_f103
Аргумент
Обязательный/Значение Описание
по умолчанию
-dir
Обязательный
Директория, в которую будет сохранен
файл
-data
Обязательный
Ссылка на массив хэшей с данными об
отправлениях. Ключи хэша:
barcode
zip
name
address
Возвращаемое значение: Массив (Полный путь к сгенерированному
файлу, статус).
Действие при ошибке: Вывод сообщения об ошибке и возврат 0.
Пример вызова функции:
$f103 - >generate_f103 (-dir => $TEMP_DIR, -data => $DATA);
Создание электронного списка
Метод: generate_ini
Функция осуществляет создание 2-х файлов:
 txt файл, который содержит в каждой строке информацию об
одном отправлении (ШПИ, почтовый индекс, вес, цена, адрес
получателя);
 ini
файл,
содержащий
итоговую
информацию
обо
всех
отправлениях, перечисленных в txt файле (суммарный вес
отправлений, суммарная цена, ИНН отправителя, дата отправки и
т.д..)
57
Оба файла помещаются в архив формата zip с удалением исходных
файлов. Схема работы функции показана на рисунке 5.
58
Рисунок 5 - Схема работы функции generate_ini
59
Параметры вызова функции перечислены в таблице 13.
Таблица 13 - Параметры вызова функции generate_ini
Аргумент
Обязательный/Значение
Описание
по умолчанию
-inn
Обязательный
ИНН клиента
-dir
Обязательный
Директория, в которую
будет сохранен файл
Обязательный
-data
Ссылка на массив хэшей
с
данными
об
отправлениях.
Ключи
хэша:
barcode
zip
area
city
weight
price
Возвращаемое значение: Массив (Полный путь к сгенерированному
файлу, статус).
Действие при ошибке: Вывод сообщения об ошибке и возврат 0.
Пример вызова функции:
$f103->generate_ini_new (-inn => $inn, -dir => $OUTPUT_DIR, -data
=> $DATA);
6.1.3
Модуль AddressInfo
Модуль предназначен для валидации почтового адреса и разбора его на
составляющие части. Модуль написан в ООП стиле и содержит конструктор
(фунция new) и несколько функций для доступа к данным. Для валидации
данных
необходимо
создать
объект
класса
AddressInfo,
вызовом
60
конструктора, в параметрах конструктора передается адрес, который
необходимо провалидировать. Пример создания объекта
my $addr = AddressInfo::new ('Адрес для валидации');
В случае успешного выполнения, функция вернет 1 и присвоит ссылку
на объект класса AddressInfo переменной $addr. В случае ошибки, функция
возвращает 0. Для получения информации об адресе, необходимо вызвать
метод get_info. Все методы класса AddressInfo перечислены в таблице 14.
Таблица 14 - Методы класса AddressInfo
Название
Параметры Возвращаемое
метода
new
get_info
Описание
значение
address –
$self – ссылка на Конструктор класса
адрес для
объект
валидации
AddressInfo
-
1
класса
в
-
случае Метод
успешного
получения
информации об адресе
выполнения
0 – в случае ошибки
status
-
1
в
-
случае Метод, возвращающий статус
успешной
валидации адреса
валидации адреса
0
–
при
невозможности
восстановить адрес
source_add -
Адрес до валидации
возвращающий
исходный адрес, до валидации
ress
post_index
Метод,
-
Почтовый
индекс Метод, возвращающий только
после валидации, 0 почтовый индекс, если его
–
при
валидации
ошибке удалось
получить,
иначе
возвращает 0
61
Продолжение таблицы 14
Название
Параметры Возвращаемое
метода
Описание
значение
Метод,
-
записывающий
post_index
post_index
_write
–
почтовый индекс, переданный
почтовый
в
индекс
свойства
параметрах
метод
вызова,
объекта.
для
в
Private
использования
внутри класса.
post_addre
-
Строка, содержащая Метод,
почтовый
ss
возвращающий
адрес почтовый
адрес
в
форме,
после валидации, 0 соответствующей
–
при
ошибке требованиям почтовых правил
валидации
address_ha
-
Сссылка
на
хэш, Метод,
содержащий
sh
почтовый
возвращающий
разобранный
на
адрес составляющие части адрес в
после валидации, 0 виде хэша (ключи: region,
–
при
ошибке area, city, street)
валидации
error
-
Сообщение
об Метод,
возвращающий
ошибке, 0 – в случае сообщение об ошибке, если
отсутствия ошибок
она
произошла,
иначе
возвращает 0
Основным методом класса является метод get_info, остальные методы,
являются методами-акцессорами, т.е. предоставляют доступ к свойствам
класса и не выполняют никаких функций. Поэтому описывать будем только
алгоритм метода get_info
Метод get_info
62
При вызове данного метода, на сервер валидации адресов (https://factordev.russianpost.ru/factor-service-rupost/services/CleanService)
отправляется
запрос с адресом, который требуется проверить. В ответ сервис возвращает 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.
63
Рисунок 6 - Структурная схема метода get_info
6.2.3
Модуль ScpUpload
Модуль предназначен для загрузки одного файла на сервер с доступом
по протоколу ssh. Модуль содержит глобальную переменную $SERVER
(адрес сервера, на который производится загрузка), которая имеет значение
по умолчанию '62.176.2.49'. Модуль содержит единственную функцию
scp_upload. Параметры вызова функции перечислены в таблице 15.
Таблица 15 - Параметры вызова функции scp_upload
Аргумент
Обязательный/Значение по Описание
умолчанию
-fname
Обязательный
Полный
путь
к
файлу
на
локальном ПК, который требуется
загрузить на сервер
64
Продолжение таблицы 15
Аргумент
Обязательный/Значение по Описание
умолчанию
Обязательный
-rdir
Папка на удаленном сервере, в
которую производится загрузка.
Папка
должна
быть
создана
заранее, при отсутствии папки на
сервере, выводится ошибка
-server
Необязательный/$SERVER Адрес сервера куда производится
загрузка файлов
-subdir
Необязательный
Поддиректория,
в
которую
требуется осуществить загрузку.
При ее отсутствии, создается на
сервере
Структурная схема функции scp_upload представлена на рисунке 7.
65
Начало
Передача параметров в функцию
$fname = $opts{-fname};
$rdir = $opts{-rdir};
$server = $opts{-server};
$subdir = $opts{-subdir};
Существует
файл $fname?
Нет
File $fname
not exists
Да
Удалось
подключиться к
$server?
Нет
Cant connect
to $server
Нет
$rdir not exists
on $server
Да
Существует
директория
$rdir?
Да
Нет
Надо создать
поддиректорию?
Да
mkdir ($subdir);
$rdir = $rdir.'/'.$subdir;
$status = put ($fname);
Нет
Загрузка файла
выполнена успешно?
Cant upload
$fname
Да
return 0
return 1
Конец
Рисунок 7 - Структурная схема функции scp_upload
6.3.3
Модуль APP
Модуль предназначен для создания акта приема-передачи в формате
Microsoft Excel 2003 (.xls). Модуль содержит 2 функции, видимые снаружи:
create_app, send_app.
Функция create_app
66
Функция предназначена для непосредственного создания Акта приемаперадачи в виде файла в формате xls. В функцию передается массив хэшей с
данными, где один элемент массива содержит одну строку в таблице Акта
приема-передачи. Для создания файла в формате Microsoft Excel 2003,
функция использует модуль Spreadsheet::WriteExcel 2.40.
В случае успешного выполнения функция возвращает полный путь к
созданному файлу, в случае ошибки – 0. Параметры вызова функции
перечислены в таблице 16.
Таблица 16 - Параметры вызова функции create_app
Аргумент
Обязательный/
Значение
Описание
по
умолчанию
-dataref
Обязательный
Ссылка на массив хешей с данными для акта
приема-передачи. Ключи хэша
filename – имя файла в таблице
type – формат страницы (необязательный)
sheets_count – количество листов
sends_count – количество отправлений
-dir
Необязательны
Полный путь к папке для записи файла
й/Текущая
директория
-company
Необязательны
Название клиента-отправителя писем
й/''
-region
Необязательны
Флаг, указывающий, надо ли указать название
й/no
региона в имени файла. Номер региона берется
из папки, переданной в аргументе –dir
-short_
Необязательны
company_n й/''
Краткое название компании, указывается в
имени файла, содержащего АПП
ame
67
Продолжение таблицы 16
Аргумент
Обязательный/
Значение
Описание
по
умолчанию
-type
-num
Необязательны
Тип бумаги. Если в хэше, в данных (аргумент –
й/'А4
dataref) передан параметр type, то используется
«Симплекс»'
он в качестве формата страницы
Необязательны
Номер акта приема-передачи. Используется в
й/Номер дня в имени файла и в теле акта
году
Структурная схема функции create_app представлена на рисунке 8.
68
Начало
Нет
Отобразить
регион?
Да
$dir = $dir.'_'.$region;
Общее кол-во записей = кол-во
элементов в массиве $dataref
Вывод заголовков таблицы
$worksheet->write(…)
Цикл по @$dataref
Вывод строки в таблицу
$worksheet->write(…)
Подсчет общего количества
страниц и отправлений
$sum_all += $sheets_count
$documents_sum += $sends_count
Конец цикла @$dataref
Запись файла $fname
return $fname
Конец
Рисунок 8 - Структурная схема функции create_app
Функция send_app
Функция позволяет отправить акт приема-передачи по e-mail. Функция
представляет собой упрощенный интерфейс к модулю SendMail. Параметры
вызова функции представлены в таблице 17.
69
Таблица 17 - Параметры вызова функции send_app
Аргумент
Обязательный/Зна
чение
Описание
по
умолчанию
-mail_rcpt
Обязательный
Получатель
письма,
несколько
получателей разделяются символом ';'
-subj
Обязательный
Тема письма
-msg
Обязательный
Тело письма
-app_fname
Обязательный
Путь
к
файлу,
который
требуется
вложить в письмо
В случае успешного выполнения, функция возвращает 1, иначе – 0. Так
как алгоритм простой, блок-схему можно не показывать.
6.4.3
Модуль SendMail
Модуль предназначен для отправки письма по электронной почте, с
вложением файла или без вложений. Последняя рабочая версия модуля: 1.10.
Модуль написан с применением объектно-ориентированного подхода и
состоит из конструктора и метода send. Также модуль содержит несколько
вспомогательных функций, которые недоступны снаружи и предназначены
для работы основной функции send. Учетные данные, использующиеся для
подключения к серверу хранятся в глобальных переменных, которые
перечислены в таблице 18.
Таблица 18 - Глобальные переменные модуля SendMail
Имя переменной
Значение по умолчанию
$SERVER
'10.132.0.40'
$MAILBOX
'p.andryushin@cgppost.ru'
$MAIL_LOGIN
'pavel.andryushin'
$MAIL_PWD
'***********'
Переопределить параметры по умолчанию можно с помощью функции
set_param:
70
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.
71
Начало
Передача параметров в функцию
$mail_rcpt = $self->{email};
$subj = $self->{subj};
$mail = $self->{body};
$attachment = $self->{attachment};
Подключение к
серверу $SERVER
Нет
Ошибка
установки
связи
Нет
Ошибка
авторизации
Да
Авторизация
удалась?
Да
Отправка адреса
получателя. Адрес
корректен?
Нет
Ошибка в
почтовом
ящике
получателя
Да
Есть вложения в Нет
письмо?
Да
Цикл по
@$attachment
Прикрепить к
письму
$attachment[$i]
Конец цикла
@$attachment
Нет
Отправка письма.
Успешно?
Ошибка при
отправлении
письма
Да
return 1
return 0
Конец
Рисунок 9 - Структурная схема метода send
6.5.3
Модуль Pdf2Afp
Модуль предназначен для конвертирования из формата pdf или
формата xsl-fo в формат afp. Для конвертирования модуль использует
внешнюю программу cpmill. Есть версия утилиты cpmill под Linux и под
72
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.
73
Рисунок 10 - Структурная схема функции 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
74
Функция 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.
Таблица 19 - Параметры функции collect
Аргумент
Обязательный/Значе Описание
ние по умолчанию
-fname
Обязательный
Полный путь к файлу, в который будут
собраны исходные документы
Ссылка на массив, содержащая пути к
-array
исходным
файлам,
которые
надо
объединить
-pdf_dir
Обязательный
Путь к папке, содержащей файлы pdf.
При указании данного параметра, в
качестве исходных документов будут
выбраны все файлы с расширением .pdf
в папке –pdf_dir
-unlink
Необязательный/0
Если принимает любое значение, кроме
0, то после объединения, исходные
документы будут удалены
Пример вызова функции collect
collect (-fname => 'collect.pdf', -array => $pdf_array, -unlink => 1);
75
Структурная схема функции представлена на рисунке 11.
Рисунок 11 - Структурная схема функции collect
Функция draw_address_block
76
Функция позволяет вывести на объект класса PDF::API2 адресный блок
по стандартам Почты России. Координаты расположения адресного блока
могут задаваться в параметрах вызова функции. Адресное поле выводится
шрифтом Times New Roman, размером 10пт. Индекс выводится шрифтом
Arial Bold 13 кегля. Если адресное поле или поле отправителя не умещаются
на одной строке, то они разбиваются на несколько строк с помощью функции
splits, разбиение строки на подстроки производится по символам (' ', ',', '.'). По
умолчанию адресный блок выводится в координатах для листа формата А4,
складываемого Z-фальцем, отправляемого в конверте С65. Внешний вид
адресного блока, получаемого при помощи функции draw_address_block,
представлен на рисунке 12.
Рисунок 12 - Адресный блок, получаемый функцией draw_address_block
Параметры вызова функции draw_address перечислены в таблице 20.
Таблица 20 - Аргументы вызова функции draw_address
Аргумент
Обязательный/Значение
по Описание
умолчанию
-page
Обязательный
Объект
страницы
класса
документа
класса
координаты
х
PDF::API2
-pdf
Обязательный
Объект
PDF::API2
-x
Необязательный /125mm
Значение
для
размещения адресного блока
-y
Необязательный /239.3mm
Значение
координаты
y
для
размещения адресного блока
77
Продолжение таблицы 20
Аргумент
Обязательный/Значение
по Описание
умолчанию
-fio
Необязательный /''
Поле адресования «Кому»
-address
Обязательный
Поле адреса «Куда»
-post_index
Обязательный
Поле индекса
Пример вызова функции:
draw_address_block (
-pdf => $pdf,
-page => $page,
-fio => $data->{fio},
-address => $data->{address},
'-x'
=> $x,
'-y'
=> $y,
-post_index => $data->{post_index},
);
Структурная схема функции представлена на рисунке 13.
78
Рисунок 13 - Структурная схема функции draw_address_block
Функция draw_barcode
Функция осуществляет вывод на документ pdf ШПИ кода по
стандартам Почты России. Сверху над штрих-кодом выводится надпись
«Почта России», справа – буквы «З/П», что означает заказное письмо. Снизу,
под штрих-кодом выводится цифровое представление штрих-кода, при этом
штрих-код разбивается на группы \d{6} \d{2} \d{5} \d{1}. Пять цифр в
штрих-коде, представляющих собой номер по порядку, выделяются
полужирным начертанием шрифта. Внешний вид штрих-кода, получаемого
функцией draw_barcode представлен на рисунке 14.
79
Рисунок 14 - Штрих-код, генерируемый функцией draw_barcode
Штрих-код должен содержать строго 14 цифр, в функции выполняется
проверка переданного значения на соответсвие данному требованию, если
переданное значение имеет другое количество цифр или содержит буквы или
другие символы, то функция выводит сообщение об ошибке и возвращает
значение 0.
Параметры вызова функции draw_barcode перечислены в таблице 21.
Таблица 21 - Параметры вызова функции draw_barcode
Аргумент
Обязательный/Значение
по Описание
умолчанию
-page
Обязательный
Объект
страницы
класса
документа
класса
координаты
х
PDF::API2
-pdf
Обязательный
Объект
PDF::API2
-x
Необязательный /115mm
Значение
для
размещения адресного блока
-y
Необязательный /245mm
Значение
координаты
y
для
размещения адресного блока
-shpi
Обязательный
Числовое представление штрихкода отправления
Пример вызова функции draw_barcode:
draw_barcode (
-pdf => $pdf,
-page => $page,
'-x'
=> $x - 10/mm,
80
'-y'
=> $y + 5.7/mm,
-shpi => $data->{shpi},
);
Структурная схема функции представлена на рисунке 15.
Начало
Нет
Код состоит из 14
цифр?
Barcode must
have 14 digit
Да
Генерация штрих-кода
функцией xo_2of5int
Разбивка кода на блоки
по 6,2,5,1 символ
Вывод каждого блока в
документ
return 0
Вывод надписей «ПОЧТА
РОССИИ» и «З/П»
return 1
Конец
Рисунок 15 - Структурная схема функции draw_barcode
6.6.3
Модуль Rostelecom
Модуль содержит основные функции для обработки отправлений
только для клиента ОАО «Ростелеком». Модуль написан в объектноориентированном стиле и содержит конструктор (метод new) и несколько
методов для обработки данных. В случае возникновения ошибки методы
записывают сообщение об ошибке в объект класса, и возвращают значение 0.
После каждого выполнения метода необходимо проверять возвращаемое
значение и, если оно равно 0, вызвать метод error() для получения сообщения
об ошибке. При успешном выполнении, методы возвращают 1.
81
В
глобальных
переменных
модуля
хранится
информация
для
подключения к базе данных, а также путь к шрифтам в формате True Type
(.ttf), которые используются для нанесения персонализации на макеты. Для
переопределения хранящегося в глобальных переменных значения, в модуле
есть функция set_param. Значения глобальных переменных и параметры
вызова функции set_param представлены в таблице 22.
Таблица 22 - Значения глобальных переменных и параметры вызова функции set_param
Параметр
Глобальная
Значение по
переменная
умолчанию
функции
Описание
set_param для
переменной
переопределен
ия значения
$DB->{login}
'rostelecom'
-db_login
Имя
пользователя
БД
'4574yr4yreyre'
-db_password
Пароль от БД
$DB->{host}
'127.0.0.1'
-db_host
Адрес сервера БД
$DB->{name}
'rostelecom'
-db_name
Имя БД
$TEMP_DIR
'/var/tmp/rostelecom'
-temp_dir
Путь к временной
$DB>{password}
папке для хранения
временныхфайлов
во
время
работы
программы
$FONT_FILE
'/opt/perl/font/Times
-font_file
_New
Путь
к
шрифту
Times New Roman
_Roman.ttf'
-font_b_file
Путь
к
шрифту
$FONT_B_FIL
'/opt/perl/font/Times
E
_New
Times New Roman
_Roman_bold.ttf'
Bold
82
Продолжение таблицы 22
Параметр
Глобальная
Значение по
переменная
умолчанию
функции
set_param для
переопределен
Описание
переменной
ия значения
$ARIAL_FONT '/opt/perl/font/ARIC
_FILE
-arial_font_file
YR.ttf'
Путь
к
шрифту
к
шрифту
Arial
Путь
$ARIAL_FONT '/opt/perl/font/ARIC
-
_B_FILE
arial_font_b_file Arial Bold
YRB.ttf'
Методы модуля Rostelecom и их описание представлены ниже.
Конструктор
В качестве конструктора используется метод new. Конструктор создает
объект класса Rostelecom. В случае успешного выполнения, конструктор
возвращает ссылку на объект класса Rostelecom, в случае ошибки, в
стандартный поток ошибок (STDERR) выводится сообщение об ошибке и
возвращается значение 0. Параметры конструктора перечислены в таблице
23.
Таблица 23 - Параметры вызова конструктора класса Rostelecom
Аргумент
Обязательный/Значение Описание
по умолчанию
-output_dir
Обязательный
Полный путь к папке, в которую
будут
складываться
выходные
файлы
83
Продолжение таблицы 23
Аргумент
Обязательный/Значение Описание
по умолчанию
-template
Обязательный
Полный путь к файлу – макету
отправления (в формате pdf). При
передачи параметра, конструктор
проверяет существование файла и
доступ к нему. Если файл не
существует, выводится сообщение
об ошибке.
Необязательный /4
-cpus
Количество потоков для обработки
данных
-company
Необязательный /'ОАО Название компании
«Ростелеком»'
-inn
7707049388
ИНН клиента
-short_
Необязательный /'RTK'
Короткое
название
компании
латинскими
company_name
(импользуется
буквами
в
имени
файла
АПП)
-write_log
Необязательный
Путь к файлу для ведения журнала
-write_error
Необязательный
Путь к файлу для записи ошибок в
работе модуля
Конструктор, при создании объекта, также производит подключение к
БД и сохраняет ссылку на подключение в объекте класса Rostelecom. Ссылка
на подключение используется во всех функциях, где в объекте класса
производится обращение к БД. Пример вызова конструктора:
Rostelecom->new
(-output_dir
=>
$OUTPUT_DIR,
-template
=>
$TEMPLATE, -company => $company, -inn => 77777, -short_company_name
=> 'RTK_test');
84
Функция 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"
85
},
[1] {
Data 46,
Name "Piter"
}
]
}
В методе read_data также производится определение региона для
каждого клиента при помощи функции define_region, описание которой
приводится ниже.
Функция define_region производит запрос к двум таблицам из БД
(region, post_index_region) и получает название региона по заданному
почтовому индексу. Если такой почтовый индекс отсутствует в БД, то
возвращается регион по умолчанию 'MOSCOW'. Структурная схема функции
define_region представлена на рисунке 16.
86
Рисунок 16 - Структурная схема функции define_region
Также в методе read_data производится проверка корректности
считанных данных при помощи функции correct_data, и валидиция адреса
при помощи функции check_address.
Функция check_address проводит проверку адреса при помощи модуля
AddressInfo, описание которого приводилось выше.
Функция correct_data.
Функция принимает на вход одну считанную запись клиента и
проверяет наличие в ней необходимых полей, а также длину поля code. Поле
code должно содержать ровно 16 цифр. Если в переданных данных нет всех
необходимых полей или поле code содержит неверное количество символов,в
объект класса Rostelecom записывается сообщение об ошибке и возвращается
значение 0. Структурная схема функции correct_data представлена на рисунке
17.
87
Начало
Задать требуемые поля в данных
my @keys = qw/userid lastname firstname middlename code zip
region district city street bulding1 bulding2 bulding3 apartment/;
Цикл по @keys
$i=0;$i<@keys;$i++
Поле $keys[$i] содержится в
данных?
Нет
error(«Данные не
содержат поле
$keys[$i]»);
Да
Конец цикла по @keys
Нет
Поле $self->{code}
содержит только 16 цифр?
error(«Поле $self>{code} не содержит
16 цифр);
Да
return 1
return 0
Конец
Рисунок 17 - Структурная схема функции correct_data
При возникновении ошибки, метод записывает ошибку в объект при
помощи метода error() и возвращает значение 0. На рисунке 18 представлена
схема работы метода read_data.
88
Рисунок 18 - Схема работы метода read_data
Метод не принимает параметры на вход. Пример вызова метода
$rtk->read_data() or die $rtk->error;
Метод define_shpi
Метод выделяет каждому клиенту ШПИ. Метод работает с таблицей
shpi в БД. Перед присвоением ШПИ каждому клиенту, в методе проверяется,
89
есть ли в БД необходимое количество ШПИ кодов в текущем месяце при
помощи функции get_shpi_count.
В функцию get_shpi_count передается ссылка на покдлючение к БД и
регион, для которого требуется получить количество доступных ШПИ.
Функция возвращает количество доступных ШПИ. Пример вызова функции:
my $shpi_count = get_shpi_count ($dbh, $region);
Структурная схема функции get_shpi_count показана на рисунке 19.
Рисунок 19 - Структурная схема функции get_shpi_count
Если в БД количество ШПИ меньше, чем требуется для формирования
отправлений, то функция возвращает 0 и сохраняет сообщение об ошибке
при помощи метода error(). После присвоения ШПИ кодов клиентам, эти
значения удаляются из БД. На рисунке 20 представлена схема работы метода
define_shpi.
90
Рисунок 20 - Схема работы метода define_shpi
91
Продолжение рисунка 20 - Схема работы метода define_shpi
Метод define_shpi не принимает параметры на вход. Пример вызова
метода
$rtk->define_shpi() or die $rtk->error;
Метод create_pdf
Метод create_pdf производит создание pdf файлов по каждому региону.
В качестве входных данных метод принимает 2 параметра:
-spool_size – размер спула (максимальное количество записей в одном
файле);
-ops – ссылка на хэш, содержащая названия ОПС (отделений почтовой
связи) для каждого региона. Имеет вид $ops->{'MOSCOW'} = '140961 МР
АСЦ'.
Функция сначала создает файлы во временную папку $TEMP_DIR,
когда количество временных файлов будет равно размеру spool_size или
больше нет данных в регионе, производится создание формы 103 в формате
pdf, и все временные файлы и форма 103 собираются в один файл (при
помощи функции collect модуля PDF_Features). Создание временных файлов
92
производится асинхронно в несколько, количество потоков указывается в
параметрах конструктора (параметр –cpus). Создание одного временно файла
осуществляется
функцией
которая
create1_pdf,
выполняется
в
многопоточном режиме.
Функция create1_pdf создает pdf файл из шаблона отправления,
переданного в параметре –template с именем –fname. Параметры вызова
функции create1_pdf представлены в таблице 24.
Таблица 24 - Параметры вызова функции 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 – номер дня
93
num – порядковый номер файла в регионе
Файлы
помещаются
в
директорию
вида
$output_dir/$region/$formatted_date, где
$output_dir – путь к директории, переданной в конструкторе
$region – название региона, к которому относится данный файл
$fomatted_date – текущая дата в формате yyyymmdd
Структурная схема функции create_pdf представлена на рисунке 21.
94
Начало
Цикл по каждому региону
foreach my $region (keys %{$self->{client}});
$output_dir = «$self->{output_dir}/$region/
$formatted_date»
Создать папку, куда будут
складываться данные $output_dir
$i = 1;
$num_in_spool=0;
Цикл по каждому клиенту в регионе
Имя временного файла
my $temp_fname = «$TEMP_DIR/pdf/$i»;
$i++;
Добавить клиента в pool для последующей
обработки
$$pool->(
-fname
=> $temp_fname,
-shpi
=> $letter->{shpi},
-template => $self->{template},
-name
=> $letter->{name},
-address
=> $letter->{address},
-post_index => $letter->{post_index},
-code
=> $letter->{code},
);
Нет
Проверим $i на кратность размеру спула
или на последнюю запись в массиве
($i % $spool_size) == 0
|| ($i == scalar (@$array_ref))
Да
create1_pdf
create1_pdf
create1_pdf
...
Создадим бумажные и электронные списки
$f103->generate_f103
$f103->generate_ini
Собрать временные pdf файлы в один и удалить
временные файлы
collect (-fname => $out_fname, -array => $pdf_temp_fname, unlink => 1)
1
2
Рисунок 21 - Структурная схема функции create_pdf
95
1
2
Добавить в массив
@pdf_region имя собранного
pdf
Конец цикла по каждому клиенту
Конец цикла по каждому региону
return 1
Конец
Продолжение рисунка 21 - Структурная схема функции create_pdf
Метод generate_rtk_xml
При помощи данного метода в программе создается xml для отправки
клиенту. Программа принимает один параметр:
-num – это номер xml файла
Файл сохраняется в папке $output_dir/XML,
где $output_dir – путь к директории, заданный в конструкторе класса
Rostelecom.
Имя выходного файла имеет вид:
yyyymmddnum.xml, где
yyyy – год создания файла
mm – месяц создания файла
dd – день создания файла
num – номер файла, передаваемый в параметрах метода
Пример файла, генерируемого методом generate_rtk_xml показан на
рисунке 22.
96
Рисунок 22 - Содержимое XML файла для отправки клиенту
Создание xml файла производится модулем XML::Simple, этот модуль
переводит данные из внутреннего представления perl (хэш массивов) в
формат xml. Алгоритм работы метода простой, поэтому структурная схема
его работы не приводится.
Метод add_info_to_bd
Метод переносит id клиента и присвоенный ему ШПИ код в базу
данных, в таблицу client_id. На каждого клиента выполняется один запрос
INSERT в БД. Поле id клиента в таблице client_id является первичным
ключюм, при вставке строки, значение поля id которой уже есть в базе,
производится обновление всех полей, кроме id клиента. Алгоритм работы
метода простой, поэтому структурная схема его работы не приводится.
Класс Rostelecom содержит также ряд методов, которые являются
интерфейсами к уже описанным модулям. Эти методы, принимаемые
параметры и их назначение перечислены в таблице 25.
Таблица 25 - Методы-интерфейсы класса Rostelecom
Метод
Параметры
Описание
app
-num
Предназначен
для
приема-передачи,
генерации
в
акта
параметрах
передается номер акта. Создание акта
производится модулем App.
97
Продолжение таблицы 25
Метод
Параметры
Описание
send_app
-rcpt ссылка на хэш Отправляет акт приема передачи по
получателей письма
почте. Список получателей для каждого
региона передается в виде хэша, в
параметре –rcpt.
send_f103
-rcpt ссылка на хэш Отправляет форму 103 по почте. Список
получателей письма
получателей
для
каждого
региона
передается в виде хэша, в параметре –
rcpt.
afp
количество Производит конвертацию pdf файлов в
-cpus
потоков
при afp, посредством модуля Pdf2Afp/
преобразовании
message сообщение
notice
Производит
jabber,
отправку
клиентам,
сообщение
на
подписанным
на
рассылку в БД, в таблице notice/
upload
-dir
папка
для Производит загрузку готовых файлов на
загрузки файлов на фтп сервер.
фтп сервере
6.4 Описание структуры базы данных
Согласно предварительной схемы работы, в базе данных будут
храниться доступные ШПИ коды для каждого региона, соответствие id
клиента и присвоенного ему ШПИ отправления, список получателей
уведомлений об ошибках посредством протокола XMPP (Extensible
Messaging and Presence Protocol — расширяемый протокол обмена
сообщениями и информацией о присутствии [19]), соответствие индекса и
кода региона.
98
В качестве СУБД в программе используется MySQL. Для Ростелекома
была создана отдельная база данных – rostelecom, и заведен пользователь
rostelecom, с возможностью доступа только к этой базе данных.
Рассмотрим существующие таблицы базы данных системы, а также их
назначение.
 Таблица region. Содержит соответсвие id региона и названия
региона
 Таблица shpi. Содержит ШПИ коды и id региона, к которому
относится данный ШПИ
 Таблица client_id. Содержит ID клиентов, присвоенные им ШПИ,
имя исходного файла, дату генерации отправления
 Таблица notice. Содержит jabber id, по которым требуется
рассылать уведомления об ошибках, а также поле enable,
позволяющее отключать клиента от рассылки без удаления
записи из БД.
 Таблица post_index_region. Содержит соответствие почтового
индекс и id региона.
Описание всех полей таблиц БД rostelecom приведено в таблицах 26 30.
Таблица 26 - Описание полей таблицы shpi
Название поля
Тип
Описание
shpi
bigint(20) Код ШПИ
Параметры поля
Индексированный,
первичный ключ
region_id
tinyint(4) Id региона, к которому
относится код ШПИ
99
Таблица 27 - Описание полей таблицы region
Название поля
Тип
Описание
Параметры поля
id
tinyint(4)
Id региона
Индексированный,
первичный ключ
region
varchar(20) Текстовое
название
региона
Таблица 28 – Описание полей таблицы client_id
Название поля
Тип
Описание
id
bigint(20)
Id
Параметры поля
клиента
(поле Индексированный,
USERID) из исходного первичный ключ
xml файла
shpi
bigint(14)
Код ШПИ
fname
varchar(50)
Имя исходного файла, в
котором была запись с
данным клиентом
dat
datetime
Дата
и
время
формирования
отправления
out_fname
varchar(500) Полный путь к файлу с
письмом
Таблица 29 - Описание полей таблицы post_index_region
Название поля
Тип
Описание
Параметры поля
post_index
bigint(6)
Почтовый индекс
Индексированный,
первичный ключ
region_id
tinyint(4)
Id региона, к которому
относится код почтовый
индекс
100
Таблица 30 - Описание полей таблицы notice
Название поля
Тип
Описание
jabber_id
varchar(200) Jabber_id
Параметры поля
получателя Индексированный,
уведомлений
enable
boolean
Флаг,
первичный ключ
указывающий
включение рассылки на
данный id
На рисунке 23 представлена общая схема таблиц и связей в БД.
Рисунок 23 - Схема таблиц и связей БД Rostelecom
6.5 Запускающая программа
В системе конвертации данных была написана запускающая программа
– convert_rostelecom.pl. В ней производится скачивание файлов с фтп
сервера, проверка дублирующего запуска программы и производится
создание объекта класса Rostelecom и обращение ко всем методам.
Функция check_remote_files
Для загрузки данных с ФТП сервера была написана функция
check_remote_files. Параметры функции перечислены в таблице 31.
Таблица 31 - Параметры вызова функции check_remote_files
Аргумент
Обязательный/
Описание
Необязательный
-server
Обязательный
Адрес ФТП сервера
101
Продолжение таблицы 31
Аргумент
Обязательный/
Описание
Необязательный
-remote_dir
Обязательный
Полный путь к папке на ФТП сервере
-dest_dir
Обязательный
Путь к папке на локальном ПК
-ext
Обязательный
Расширение файла для загрузки
Функция производит подключение к ФТП серверу по протоколу SFTP,
делает просмотр всех файлов с расширением –ext в папке –remote_dir и
запоминает размер файлов. Через 30 секунд производится снова просмотр
папки, если размер файлов не изменился и не было добавлено в папку новых
файлов, то производится загрузка файлов с ФТП сервера в папку –dest_dir.
Алгоритм работы функции check_remote_files представлен на рисунке 24.
102
Рисунок 24- Структурная схема функции check_remote_files
Запрет запуска нескольких копий программы одновременно
Невозможность запуска нескольких копий программы одновременно
производится с помощью модуля File::Flock::Tiny. Модулю передается имя
текстового файла, в котором он сохраняет pid запущенного процесса. При
103
повторном запуске процесса, модуль проверяет, запущен ли процесс с pid,
указанным в текстовом файле. Если такой процесс уже запущен, то на экран
выводится
сообщение
«Rostelecom already running»
и
производится
завершение работы программы.
6.6 Обновление базы кодов ШПИ
Коды ШПИ приходят в филиал ЦГП в виде диапазона, который
содержит 13 цифр кода из 14-ти. Последний, контрольный разряд кода
необходимо высчитывать по алгоритму, описанному ранее. Для генерации
кодов ШПИ из диапазона была написана отдельная программа – add_shpi.pl.
Программа просит пользователя ввести диапазон и выбрать регион, для
которого производится генерация кодов. Программа проверяет, чтобы
правый диапазон был больше левого, проверят конечность диапазона,
количество символов, наличие разделителя. При правильном вводе дипазона
и выборе региона, программа генерирует коды по заданном диапазону,
высчитывает контрольный разряд для каждого кода, вносит ШПИ коды в
таблицу
shpi
в
БД
Rostelecom
и
выводит
на
экран
количество
сгенерированных записей.
Структурная схема программы представлена на рисунке 32.
104
Рисунок 25- Структурная схема программы add_shpi
105
7 Интерфейс системы
Система спроектирована на работу в фоновом режиме в виде демона.
Все настройки системы находятся в файле «config.ini». В конфигурационном
файле задаются адрес ФТП сервера, полное название компании, список
получателей
акта
приема-передачи
и
т.д.
Более
подробно
поля
конфигурационного файла были описаны в разделе Конфигурационный
файл. Скриншот содержимого файла представлен на рисунке 26.
Рисунок 26 - Конфигурационный файл config.ini
Есть два варианта запуска системы:
 Автоматически, по расписанию.
 В ручном режиме
При ручном запуске системы требуется отправить на выполнение файл
convert_rostelecom.pl, например, прописав в терминале полный путь к
исполняемому файлу и нажав Enter. Пример ручного запуска программы
показан на рисунке 27.
Рисунок 27 - Ручной запуск системы
При отсутствии файлов для обработки, на ФТП сервере, система
выведет сообщение, что файлов нет, и завершит работу. Загрузим файлы для
106
обработки на ФТП сервер и снова произведем запуск системы. Подадим на
вход файл RTKMOS1503210000.zip. Экран запуска системы представлен на
рисунке 28.
Рисунок 28 - Запуск системы обработки
На экран выводится сообщение о том, что файлы данных найдены на
ФТП и запуск произведен («Rostelecom converting process started»). На экран
выводятся номера созданных временных файлов. Номера выводятся не по
порядку, т.к. создание временных файлов производится в асинхронном
многопоточном режиме.
По окончании выполнения работы, система выгружает файлы на ФТП
сервер. Папка ФТП сервера, куда производится выгрузка, показана на
рисунке 29.
107
Рисунок 29 - Содержимое папки для выгрузки файлов на ФТП сервер
Сисетма рассылает на e-mail акт приема-передачи данных и
электронные списки.
Система производит запись журнала работы программы в log файл.
Пример записией из log файла представлен на рисунке 30.
108
Рисунок 30 - Пример записей в log файле
При возникновении ошибки, сообщение об ошибке записывается в
error_file и отправляется на jabber_id всем, подписанным на рассылку
сотрудникам. Пример сообщения об ошибке из jabber клиента представлен на
рисунке 31.
109
Рисунок 31 - Сообщения об ошибках в jabber клиенте на телефоне
В
автоматическом
режиме,
запуск
системы
настраивается
по
планировщику crontab. В нем устанавливается, с какой периодичностью, и в
какие дни необходимо производить запуск системы.
Для обновления базы кодов ШПИ есть программа add_shpi.pl,
написанная, также как и основная часть программы, на Perl. Для добавления
нового диапазона ШПИ в базу данных, необходимо провести запуск этой
программы командой ./add_shpi, находясь в папке с программой, или по
полному пути к файлу. Экран работы программы представлен на рисунке 25.
110
Рисунок 32 - Экран работы программы add_shpi
111
8 Примеры работы системы
Для автоматического запуска системы, назначим ее выполнение по
планировщику crontab. Запуск будем осуществлять в мультиплексоре screen.
Переодичность запуска поставим 10 минут. На рисунке Error! Reference
source not found. представлен вид файла crontab с настроенным запуском по
расписанию, с периодичностью запуска – 10 минут.
Рисунок 33 - Содержимое crontab
Положим исходный файл с данными от 20.05.2015 в папку на ФТП.
Имя файла RTKMOS1505200000.zip. Содержимое папки показано на рисунке
34.
Рисунок 34 - Папка RTK_in на фтп сервере
Через несколько минут файл удаляется с ФТП сервера, это означает, что
система забрала файл для обработки. На сервере можно ввести команду
screen –ls, которая отобразит запущенный процесс с именем rostelecom. На
рисунке 35 видно, что процессу присвоен pid (Process IDentifier 112
идентификатор процесса многозадачной операционной системы[20]) с
номером 20758.
Рисунок 35 - Вывод команды screen -ls
Также можно зайти в сам процесс и посмотреть процесс выполнения
командой screen –r 20758.
Через некоторое время на почту приходит два письма:
 Письмо операторам ОПС с просьбой о прогрузке электронных списков
в ПО Партионная почта (Рисунок 36).
 Письмо с актом приема-передачи данных операторам АСЦ (Рисунок
37).
113
Рисунок 36 - Письмо с электронными списками Ростелеком
Рисунок 37 - Письмо с актом приема-передачи Ростелеком
В папку 172.24.161.186/ftp-shared/CGPSPB/RTK_out/ (путь к папке и адрес
ФТП сервера задаются в config файле) выгружаются файлы для печати
(рисунок 29) и XML файл для клиента (рисунок 39).
114
Рисунок 38 – Содержимое папки RTK_out/MOSCOW на ФТП сервере
Рисунок 39 - Содержимое папки RTK_out/XML на ФТП сервере
Просмотрим содержимое файла в формате afp, для этого используем ПО
ISYSPapirus, распространяемое бесплатно. (Рисунок 40).
115
Рисунок 40 - Вид печатного файла в формате AFP
Персональные данные на скриншоте, соответственно, закрашены. Работа
программы завершена, все данные успешно обработаны.
9 Тестирование
Тестирование может проводиться как в ручном, так и в автоматическом
режиме. В ручном режиме, тестировщик вводит различные данные с
ошибками, используя интерфейс программы, и смотрит на поведение
программы. В автоматическом режиме тестировщик создает серию тестов к
своей программе, которые отправляют некие данные в программу и
проверяют
ее
поведение.
Автоматические
тесты,
будучи
единожды
написаны, могут проводит тестирование программы в течение ее всего
жизненного цикла. При изменении/добавлении функционала программы
будет легко проверить, не изменилось ли поведение и функциональность
старых компонентов программы.
Для тестирования поведения программы в различных условиях
(неверный формат файла, неверные данные, недоступность сервера и т.д…),
была написана программа автоматического тестирования – rtk_test.pl. Для
написания тестов, был использован модуль Test::More, который позволяет
116
запускать функции на выполнение, сравнивать полученный результат с
ожидаемым результатом и выводить отчет о проведенных тестах. Создав
один раз тесты для программы, можно вносить изменения в код, не боясь
испортить основной функционал программы. Всегда можно быстро
запустить тесты на выполнение и убедиться, что все модули работают так,
как от них ожидает программист. В программе тестирования был написан 21
тест, все тесты перечислены в таблице 32.
Таблица 32 - Описание тестов программы
Номер
Описание теста
теста
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.
Тест внесения информации в БД
117
Продолжение таблицы 32
Номер
Описание теста
теста
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
118
Upload
/opt/perl/rostelecom_new/tests/output/MOSCOW/20150522/5052201.afp
ok 21 - Test for upload files to ftp server
10 Замер производительности
Для оценки скорости работы отдельных функций и программы в целом,
были
проведены
замер
времени
выполнения
при
помощи
модуля
Devel::Timer. В программе расставляются контрольные точки, в которых
будет измеряться время выполнения. По окончании работы программы,
выводится отчет с указанием контрольных точек и времени их выполнения в
секундах и в процентном соотношении от общего времени выполнения
программы.
Для тестирования производительности, на фтп сервер был загружен
файл, состоящий из 10000 записей. Результаты замеров производительности
представлены в таблице 33.
Таблица 33 - Отчет о времени выполнения разных частей программы
Интервал Время,
сек.
Процент от Название интервала
общего
времени
03 -> 04
1849.6243 80.50%
Read data and validate address. Function:
Rostelecom::read_data -> Define shpi.
Function: Rostelecom::define_shpi
05 -> 06
331.4281
14.42%
Create_pdf.
Function:
Rostelecom::create_pdf
->
rtk_xml.
Generate
Function:
Rostelecom::generate_rtk_xml
11 -> 12
72.3960
3.15%
Convert
pdf
Rostelecom::afp
to
afp.
->
Upload
Function:
to
ftp.
Function: Rostelecom::upload
119
Продолжение таблицы 33
Интервал Время,
сек.
Процент от Название интервала
общего
времени
01 -> 02
30.2382
1.32%
Download
files
from ftp
-> Unzip
downloaded files
07 -> 08
5.6507
0.25%
Add_info_to_bd.
Function:
Rostelecom::add_info_to_bd
->
Create
app. Function: Rostelecom::app
04 -> 05
5.4415
0.24%
Define
shpi.
Function:
Rostelecom::define_shpi -> Create_pdf.
Function: Rostelecom::create_pdf
12 -> 13
1.6033
0.07%
Upload
to
ftp.
Function:
Rostelecom::upload -> END
09 -> 10
0.5915
0.03%
Send
app
to
email.
Function:
Rostelecom::send_app -> Send f103 to
email. Function: Rostelecom::send_f103
10 -> 11
0.5473
0.02%
Send
f103
to
email.
Function:
Rostelecom::send_f103 -> Convert pdf to
afp. Function: Rostelecom::afp
06 -> 07
0.1557
0.01%
Generate
rtk_xml.
Rostelecom::generate_rtk_xml
Add_info_to_bd.
Function:
->
Function:
Rostelecom::add_info_to_bd
02 -> 03
0.0640
0.00%
Unzip downloaded files -> Read data and
validate
address.
Function:
Rostelecom::read_data
120
Продолжение таблицы 33
Интервал Время,
сек.
Процент от Название интервала
общего
времени
08 -> 09
0.0173
0.00%
Create app. Function: Rostelecom::app ->
Send
app
to
email.
Function:
Rostelecom::send_app
00 -> 01
0.0002
0.00%
INIT -> Download files from ftp
Общее время выполнения программы составило 2297.7581 сек., что
меньше, чем задано в техническом задании (3600 сек на 10000 отправлений).
Из таблицы 33 видно, что наибольшее время (ок 80%) занимает выполнение
чтения данных и валидации адреса. Валидацичя адреса производится долго,
вследствие того, что запросы на сервер валидации отправляются по одному.
Для ускорения работы системы в целом, адреса можно отправлять пакетными
запросами, сразу большим количеством, дожидаться их обработки сервером
и забирать обработанные данные с сервера в виде документа xml. Такой
интерфейс работы с сервером существует, но потребует изменения модуля
AddressInfo, что можно будет сделать в будущем, для ускорения работы
системы.
11 Расчет надежности
Надежность
- совокупность свойств, характеризующая способность
программного средства сохранять заданный уровень пригодности в заданных
условиях в течение заданного интервала времени [21].
Для проектируемой системы обработки данных требуется рассчитать
• Завершенность:
Средняя наработка на отказ 𝑇0
Интенсивность отказов
• Устойчивость
121
• Восстанавливаемость
Система является восстанавливаемой и имеет последовательную
надежностную схему.
11.1 Завершенность
Завершенность - совокупность свойств программного средства,
характеризующая частоту отказов, обусловленных дефектами программного
средства [22].
Интенсивность отказов
Интенсивность отказов - отношение числа отказавших объектов
(образцов аппаратуры, изделий, деталей, механизмов, устройств, узлов и т.
п.) в единицу времени к среднему числу объектов, исправно работающих в
данный отрезок времени при условии, что отказавшие объекты не
восстанавливаются и не заменяются исправными [23]. Интеснивность
отказов численно равна числу отказов в единицу времени, деленное на число
узлов, проработавших безотказно и определяется по формуле:

m
( N  m)  t
(1)
Так как надежностная схема является последовательной, то общая
интенсивность отказов будет определяться по формуле:
n
   i
(2)
i 1
Интенсивность отказов для различного оборудования, используемого в
работе программы :
 Сервер 𝜆1 = 2 ∗ 10−5
 База данных MySQL, возьмем значение интенсивности отказов на
сайте разработчика 𝜆2 = 15.8 ∗ 10−5
 Рассчитаем интенсивность отказа исходного кода по формуле:
𝑚
𝜆3 =
∗ КЯП ∗ КТП
(3)
(𝑁 − 𝑚) ∗ 𝑡
122
где
N – примерное число строк в коде = 2445
t – время работы с системой во время тестирования = 5 (ч)
m – количество ошибок, выявленное за время тестирования = 10
КЯП – коэффициент надежности языка программирования, для
Perl = 2
КТП – коэффициент надежности технологии программирования,
для объектно-ориентированного программирования составляет 0.1.
Таким образом, 𝜆3 =
10
(2445−10)∗5
∗ 2 ∗ 0.1 = 16.4 ∗ 10−5
Общая интенсивность отказа программы:
3
𝜆 = ∑ 𝜆𝑖 = 2 ∗ 10−5 + 15.8 ∗ 10−5 + 16.4 ∗ 10−5 = 34.2 ∗ 10−5
𝑖=1
Среднее время наработки на отказ
Среднее время наработки на отказ определяется по формуле
𝑇0 =
1
𝜆
(4)
Таким образом, 𝑇0 = 2923.9 (ч)
11.2 Устойчивость
Устойчивость – свойство программы поддерживать заданный уровень
функционирования при возникновении ошибок.
В данном ПО входные файлы перед обработкой проверяются на
корректность и ошибок при обработке данных возникнуть не может. Ошибки
могут возникнуть при возникновении сбоев в работе оборудования (сервера,
сервера базы данных, системы проверки адресов).
11.3 Восстанавливаемость
Восстанавливаемость – совокупность свойств программного средства,
характеризующая
возможность
осуществления,
трудоемкость
и
123
продолжительность действий
по
восстановлению
им своего
уровня
пригодности, а также непосредственно подвергшихся воздействию данных, в
случае отказа [24].
При
возникновении
сбоя,
программное
обеспечение
требуется
перезапустить, исходные данные заново подать на вход. Все обработанные
ранее данные при этом будут утеряны.
124
Б Экология и охрана труда
Разработанное программное обеспечение работает на электронновычислительной
машине,
обслуживанием
программного
продукта
занимается оператор. При работе на персональном компьютере оператор
подвергается вредному воздействию ЭВМ на человека.
Вредные и опасные факторы при работе на ЭВМ
Работа с персональным компьютером — это воспроизведение
визуальной информации на дисплее, которая должна быстро и точно
восприниматься пользователем [25]. Основными факторами, которые влияют
на производительность труда людей, работающиях с ЭВМ, являются
комфортные и безопасные условия труда. При работе на ПК, оператор
подвергается следующим вредным воздействиям:
 повышенная или пониженная температура окружающего воздуха в
рабочей зоне;
 отклонение от нуровня нормальной влажности воздуха;
 увеличенный уровень статического электричества;
 высокий уровень электромагнитного излучения;
 напряженность электрического поля;
 повышенная контрастность изображения;
 увеличенная температура поверхностей ПК;
 недостаточная искусственная освещенность рабочей зоны;
 увеличенная яркость искусственного освещения;
 онедостаток естественного освещения;
 блесткость экрана;
 напряжение зрительного аппарата;
 монотонность трудового процесса;
 нервно-эмоциональные перегрузки.
125
При работе на ПК, оператор подвергается значительному
напряжению функций зрительного анализатора, возникающее вследствие
необходимости
постоянного
различения объектов (символов, знаков,
графических изображений) на экране. При этом на экране присутствуют
следующие негативные факторы: мерцание изображений, недостаточная
освещенность поля экрана, недостаточная контрастность объектов, строчная
структура экрана, вследствие чего возникает необходимость постоянной
переадаптации глаз к разным уровням освещенности дисплея, оригинала
документа, и клавиатуры.
Нервно-эмоциональное напряжение при работе на ПК возникает
вследствие
недостатка
времени,
большого
количества
и
плотности
информации, возможности быстрого доступа к различной информации,
трудностей при запоминании большого объема поступающей информации,
ответственности за правильную обработку информации.
Последствия неблагоприятного воздействия физических факторов,
сопровождающих
работу
компьютера,
на
здоровье
пользователей
неоднократно описаны в научно-исследовательских работах российских и
зарубежных ученых. Это такие факторы, как постоянное напряжение в
мышцах, малоподвижный образ жизни, «туннельный» эффект.
Можно выделить следующие наиболее важные последствия для
здоровья человека, при длительной работе на ЭВМ: заболевания глаз и
зрительный дискомфорт, изменения костно-мышечной системы, нарушения,
связанные со стрессом, заболевания кожи, неблагоприятные исходы
беременности, расстройства в функционировании центральной нервной
системы и др. Люди, постоянно работающие на персональном компьютере,
подвержены эмоциональным стрессам в гораздо большей степени, чем
работники
из
любых
других
профессий,
когда-либо
проходивших
аналогичные обследования, включая диспетчеров воздушных линий. К
другим жалобам на здоровье относятся также сыпь на лице и коже,
периодические головные боли, тошнота, головокружения, «пелена перед
126
глазами», нервные напряжения и депрессии, повышенная утомляемость,
невозможность
долгой
концентрации
внимания,
пониженная
трудоспособность и бессонница.
К числу факторов, ухудшающих состояние здоровья пользователей
компьютерной
техники,
также
относятся
электромагнитное
и
электростатическое поля, шумы, возникающие при работе ПК, изменение
параметров (температура, влажность) микроклимата в помещении.
Не последним факторами, влияющими на здоровье и утомляемость
человека при работе на ПК являются: качество освещения рабочего места,
качество монитора, его размер, разрешение, местоположение, наличие
системы очистки и кондиционирования воздуха в помещении. На состояние
пользователей оказывают также влияние и эргономические параметры
расположения экрана монитора (дисплея), которые ведут, в частности, к
изменению контрастности изображения в условиях интенсивной засветки,
появлению зеркальных бликов от передней поверхности экрана монитора и т.
д. [25].
Утилизация компонентов ПК в России и за границей.
В двадцать первом веке трудно себе представить нашу жизнь без ПК.
Персональный компьютер плотно вошел в нашу жизнь, и сейчас нет ни
одной области жизнедеятельности человека, где бы ни использовались ПК.
Но персональные компьютеры быстро устаревают, и невольно возникает
вопрос об их утилизации. Сегодня утилизация компьютеров – это
обязательная процедура для всех работающих предприятий и юридических
лиц,
и
нарушение
данной
процедуры
ведет
к
административной
ответственности. Возникает вопрос: «Зачем же утилизировать ПК, а не
просто вывозить его на свалку бытовых отходов?». Ответ очевиден, потому
что, любая электроника, которая оказывается на городской свалке, выделяет
токсичные вещества, такие как ртуть, свинец, кадмий и т.д. Эти вещества,
127
попадая в окружающую среду, наносят ей непоправимый урон, а также
вызывают у человека различные заболевания, в том числе и онкологические.
Помимо этого, в персональных компьютерах содержится большое
количество
дефицитных
и
драгоценных
металлов,
которые
можно
использовать для вторичной переработки. Корпуса ПК также можно
использовать как вторичное сырье. В последние годы, в связи с развитием
компьютерных технологий, утилизация ПК стала не только жизненноважной
задачей, но и весьма прибыльным бизнесом. На сегодняшний день
существует множество компаний по утилизации электронной техники и ПК в
частности.
В данной главе рассмотрим различные подходы к утилизации
персональных компьютеров в России и на Западе. Рассмотрим варианты
утилизации как для юридических, так и для физических лиц, ведь это тоже
очень важный аспект.
Итак, с чего же начинается утилизация ПК для предприятий в России?
Все начинается с акта списания.
Акт списания – это необходимое
заключение о состоянии техники, выданное с учетом оценки, которое
показывает, что данное устройство не подлежит дальнейшей эксплуатации.
Оно
должно
основываться
на
заключении
технического
осмотра.
Деятельность организации проводящей такой технический осмотр должна
быть сертифицирована, и организация, проводящая данную процедуру,
должна иметь соответствующий сертификат.
После того, как было проведено списание основных средств с баланса
предприятия, можно приступать к процессу утилизации техники. Утилизация
техники проходит поэтапно.
На первом этапе будет произведена сортировка, часть компонентов,
которая может служить исходным материалом (пластик, чермет, цветмет)
будут отправлены на переработку и будут в дальнейшем использованы на
производстве. Заниматься переработкой данных материалов может только
компания, имеющая в распоряжении необходимое оборудование, владеющая
128
технологическим процессом переработки и имеющая соответствующее
разрешение (сертификат).
Оставшиеся после сортировки стекло и электронные компоненты
должны быть отправлены на
аффинажный завод. Из них должно быть
произведено извлечение драгметаллов и передача их в Государственный
фонд драгоценных металлов и камней.
Надо отметить, что утилизация, и в частности утилизация ПК очень
трудоемкий и медленный процесс, например процесс переработки системных
блоков - наполовину ручной, наполовину автоматизированный труд; потому
что вначале необходимо подготовить системный блок к утилизации и
извлечь из него все токсичные и опасные вещества, и только потом бывшие
ПК отправляют в дробильные машины, которые его измельчают, после чего
начинается самый сложный процесс, процесс распределения переработанных
отходов для вторичного использования.
Что же касается старых мониторов (ЭЛТ), то здесь процесс происходит
полностью вручную, что делает его более трудоемким, и при всем при этом,
на вторичную переработку пойдет только 50 процентов, а остальные 50
придется отправить на свалку. На сегодняшний день переработка и
утилизация отходов является не только жизненно важным, но и весьма
прибыльным делом, поэтому появляется очень много компаний по
утилизации электронной техники, а также заводов по переработки отходов.
Но, к сожалению, эти компании работают в основном с юридическими
лицами, которые обязаны утилизировать технику на законодательном
уровне, и собственно имеют с этого процесса небольшую, но всетаки
прибыль.
Что же касаемо физических лиц, а именно большинства из нас, то здесь
все гораздо печальнее. И не потому, что данный закон не работает
относительно физических лиц, а потому что практически нет условий для
утилизации ПК и электронной техники в целом.
129
Ведь многие из нас, при поломке ПК или телевизора не ищут
специализированные пункты приема, а просто относят отслужившую
технику на ближайшую свалку, после чего она прямиком попадает на
полигон с бытовыми отходами, и удачно разлагается там, загрязняя
окружающую среду. Что же можно сделать для того, чтобы ситуация
изменилась в лучшую сторону? Прежде всего, необходимо проводить
разъяснительную работу с населением, обязать производителей электронной
техники
принимать
на
утилизацию
свою
продукцию
и
открывать
специализированные пункты приема электронной техники на утилизацию, а
также вводить штрафы за выброс электронной техники в неположенном
месте.
Надо отметить, что в последнее время некоторые производители
техники, а также крупные торговые сети, проводят акции по утилизации
старой или неработающей техники, произведенной первыми, или же
купленной у вторых. Но этих средств все равно недостаточно, и старая
техника по-прежнему продолжает загрязнять окружающую среду.
Теперь рассмотрим, как происходит процесс утилизации ПК на Западе.
Западные страны славятся своим педантичным отношением к делу,
рациональностью, и бережным отношением к окружающей среде, но и там,
остро стоит вопрос об утилизации электронного мусора. Например, страны
Северной Америки до недавнего времени не утилизировали ПК, а просто
вывозили их в развивающиеся страны, якобы для вторичного использования,
на деле же, контейнеры с электронным мусором, прямиком шли на свалки,
где его, как правило, сжигали для экономии места, тем самым загрязняя
окружающую среду. Но это не могло длиться вечно, так как слабо развитые
страны, не имеющие возможности перерабатывать электронные отходы,
отказались становиться огромной свалкой, за мизерное вознаграждение.
Известен случай, когда баржа, с предназначенным для захоронения мусором,
вышла из Нью-Йорка, обошла несколько стран Карибского бассейна, и
вернулась обратно в Нью-Йорк, потому что ее нигде не хотели принимать.
130
Вообще, в связи с тем, что, темп производства персональных
компьютеров очень велик, в среднем каждые полгода выходит новая модель,
а то и раньше, проблема утилизации ПК приобрела глобальные масштабы,
что привело к необходимости разработки и подписанию международной
Базельской конвенции. Эта конвенция является, по сути, единственным
международным договором об утилизации мусора, и должна быть
препятствием экономически мотивированному вывозу мусора богатыми
странами на территорию бедных стран. Кстати Российская Федерация
подписала эту конвенцию в 1995 году, а вот Соединенные Штаты Америки
до сих пор не ратифицировали эту конвенцию, более того, они всячески
противостоят попыткам запретить вывоз токсичных отходов из богатых
стран в бедные. США единственная из развитых стран, которая не имеет
единой системы контроля за вывозом токсичных отходов, то есть, они
вывозят электронный мусор туда, где это дешевле, мотивируя это тем, что в
том случае, если они ратифицируют Базельскую конвенцию, то пострадает
экономика тех стран-импортеров электронного мусора, которые освоили его
безопасную переработку.
Американское правительство пытается культивировать и прививать
компаниям выпускающим оргтехнику то, что называется «чувством
ответственности за окружающую среду», но американские экологи считают,
что такой подход не эффективен, и больше надеются на экономические
рычаги давления, а также на давление со стороны общественности. Также
они надеются, что компании, заинтересованные в сбыте ПК на европейском
рынке, будут вынуждены подстроиться под ужесточение норм Евросоюза на
содержание вредных веществ в компьютерах, ввозимых в страны Европы.
Между тем в самих Соедененных Штатах Америки, под давлением
общественного мнения, производители оргтехники взяли на себя максимум
ответственности за утилизацию устаревших изделий. Подобные программы
сейчас взяли на себя многие фирмы производители компьютеров.
131
Экологи также предлагают фирмам-производителям новые решения и
варианты, такие как включать в стоимость компьютера
стоимость
пожизненного ухода за ним, чтобы у производителей были средства для
утилизации.
Также администрации многих штатов сами инициируют программы
сбора и утилизации электроники. Во многих штатах приняты законы о
повышении цен на ПК и на эти деньги финансируются программы по
утилизации. Также во многих городах появляются службы, которые
занимаются тем, что разъезжают по городу и собирают старую технику. Но,
безусловно, первенство в плане технологии и подходу к утилизации
персональных компьютеров принадлежит Европе. В Европе раздельному
сбору и утилизации мусора уделяется огромное внимание, причем помимо
частных инициатив, огромную роль в этом вопросе играет государство. В
Европе пункты сбора техники расположены непосредственно в магазинах по
ее продаже, причем можно сдать любую технику. Размещение таких пунктов
не является случайным, все дело в том, что любая модель компьютера
устаревает гораздо быстрей, нежели ломается, и производители и продавцы
заинтересованы в том, чтобы старую технику сдавали в специализированные
пункты, и покупали новую. Поэтому между торговыми сетями и
производителями заключается договор, по которому к ним (торговым сетям)
за техникой регулярно приезжают машины. Но в конечном итоге, все
утилизированные
компьютеры
из
пунктов
приема
попадают
на
мусороперерабатывающие заводы. В Европе существует несколько типов
заводов. Наиболее распространенные и в то же время самые критикуемые из
них – мусоросжигательные заводы. С одной стороны они позволяют
получить из мусорных отходов источники энергии, с другой стороны,
наносят
непоправимый
урон
окружающей
среде.
Самые
крупные
мусоросжигательные заводы в Европе находятся в Германии, Франции,
Италии и Швейцарии.
132
Второй тип заводов, это заводы по вторичной переработке, и
разделяются они по типу перерабатываемого материала.
Под эгидой Евросоюза предпринимаются попытки унифицировать
утилизацию
отходов.
Многое
уже
закреплено
в
европейском
законодательстве, несоблюдение которого, влечет серьезные последствия.
Например, в 2014 году, в Италии был выписан штраф в размере 40
миллионов евро за то, что 218 свалок в этой стране не соответствовали
нормам, прописанным в этом законодательстве.
Что же касается электронной техники и в частности персональных
компьютеров, то эти стандарты ограничивают содержание вредных веществ
в электронных компонентах, а также четко прописывают условия их
хранения, транспортировки, сортировки и переработки.
Рассмотрим путь ПК от пункта приема до завода по переработке.
Выделяют несколько этапов:
 прием и сортировка изделий;
 откачка вредных веществ;
 извлечение электронных компонентов, пластика, стекла и
деталей, содержащих цветные металлы;
 переработка компонентов.
В Европе на утилизации зарабатывают большие деньги практически
все, начиная от заводов по утилизации, которые получают огромные
субсидии и финансирование от государства, заканчивая потребителями, то
есть, рядовые граждане тоже могут заработать на утилизации ПК.
В некоторых Европейских фирмах в офисах ставят специальные ящики
для сбора старой электроники, таким образом, уже фирмы ставят выгоду от
утилизации на поток.
Как мы видим, европейцы подходят к вопросу об утилизации
электронной техники и ПК со свойственной им педантичностью и
прагматичностью.
133
В Европе очень хорошо умеют считать деньги и никогда не тратят
средства впустую. Ведь утилизация электронного мусора это во первых
выгодная отрасль промышленности, которая дает множество рабочих мест, к
тому же идет сильная поддержка и софинансирование государства, во вторых
переработка мусора это средство получения энергии, в третьих большая
часть переработанных ПК получает вторую жизнь после утилизации, и в
третьих, существенно улучшает состояние окружающей среды на нашей
планете. И неудивительно, что именно европейцы одними из первых встали
на путь цивилизованного подхода к утилизации персональных компьютеров
и вообще бытовой техники в целом.
В данной главе сделана попытка разобраться, как же утилизируют
персональные компьютеры в России и на Западе. Сейчас, когда спрос на ПК
колоссально высок проблема утилизации этой техники становится глобально
актуальной. Мы видим, что в Европейских странах этой проблемой
занимаются давно и серьезно, не жалея средств, и естественно они достигли
превосходных результатов в этой области. Также им удалось привить в
обществе
некоторую
культуру
в
плане
утилизации
персональных
компьютеров. Нигде в Европе мы не увидим на улице выброшенный ноутбук
или системный блок, потому что, в любой торговой сети присутствуют
пункты приема. Также мы видим, что у них в плане утилизации очень
развиты отношения между производителями товаров и магазинами, где эти
товары
реализовывают,
ведь
большинство
крупных
европейских
производителей имеют свои фабрики по переработке устаревших ПК и
другой электронной техники.
В России, проблема
утилизации и переработки
ПК тоже
очень
актуальна, ведь мы тоже не мыслим своей жизни без компьютеров. И в
России тоже есть заводы по переработке электронной техники. Конечно, по
количеству заводов мы отстаем от Европы, но надо признать, что работать
над проблемой утилизации электронного мусора у нас стали заниматься
значительно позже. Сейчас в России прекрасно понимают, что заниматься
134
утилизацией и переработкой ПК не только необходимо, но и выгодно,
поэтому на данный момент, количество утилизирующих компаний очень
велико, и они удачно работают и развиваются. Но также надо отметить, что
нам есть, что еще перенять у европейцев в плане подхода к вопросу об
утилизации ПК. Необходимо, прежде всего, прививать населению культуру
отношения к устаревшим компьютерам, чтобы их не просто выбрасывали на
улицу, а относили в специальные пункты приема. Необходимо доносить до
рядовых граждан то, что выбрасывание старой техники на свалку
небезопасно, прежде всего, для них самих. Но несмотря, ни на что, мы
видим, что наша страна все же стремится к цивилизованному подходу
утилизации персональных компьютеров, и делает много для того, чтобы
сделать нашу планету немного чище.
135
Заключение
В ходе дипломного проектирования были решены следующие задачи:
1. Произведен обзор существующих решений для формирования и
подготовки к печати почтовых отправлений. Произведен анализ
достоинств и недостатков существующих систем.
2. Изучены руководящие технические материалы, содержащие
требования Почты Росси к оформлению почтовых отправлений.
3. Проведен обзор языков программирования высокого уровня, в
результате которого был выбран язык Perl.
4. Выбрана СУБД MySQL для хранения данных. Спроектирована
общая структурная схема данных и связей таблиц в БД.
5. Выбраны общедоступные модули для формирования файлов
формата pdf, работы с сокетами, многопоточной обработки
данных, работы с файлами в формате Microsoft Excel, работы с
файлами XML.
6. Разработаны основные модули для формирования почтовых
отправлений и создания сопроводительной документации (актов
приема-передачи данных, отчета для клиента, списков по ф. 103).
Модули можно использовать для обработки данных любого
клиента, что значительно упрощает создание новых систем
обработки данных.
7. Проведено автоматическое тестирование системы, проверено
поведение системы в нестандартных ситуациях (неверный
формат данных, неверная структура данных, недоступность
сервера валидации данных).
8. Разработана общая схема работы системы.
9. Проведено тестирование скорости работы системы, выявлены
«узкие» места.
136
10. Разработана
документация
к
системе
–
руководство
пользователя, текст программы.
11. В разделе «Охрана труда» изучено вредное влияние ПК на
человека и проведено исследование механизмов утилизации
компонентов ПК в России и на Западе.
После решения всех поставленыых задач, была достугнута цель
дипломного проектирования – разработать систему обработки данных,
которая позволяет
 Обрабатывать поступающие от клиента ОАО «Ростелеком»
данные и формировать на основе заданного макета почтовые
отправления готовые к печати и упаковке в конверты.
 Создавать сопроводительную документацию на обработанные
данные и автоматически рассылать их, посредством электронной
почты, всем задействованным в процессе сотрудникам.
 Получать уведомления об ошибках в работе программы,
посредством протокола XMPP на любой Jabber клиент.
 Автоматизировать
работу
операторов
связи
в
цехах
производства.
 Формировать отчет для клиента об отправленных письмах.
137
Список использованных источников
1.
Compart – информация о продукте DocbridgeMill. [Электронный ресурс]
Официальный
сайт
компании
compart
–
(Дата
http://www.compart.com/en/docbridge-mill-plus
URL:
обращения
22.05.2015)
2.
ITS neopost – информация о продукте BTA Print Machine. [Электронный
ресурс]
Официальный
сайт
компании
ITS
neopost
–
URL:
http://www.itsneopost.net/products/envelope-inserting/documentmanagement-software/bta-print-machine (Дата обращения 23.05.2015)
3.
GMC Inspire – информация о продукте GMC Inspire Designer.
[Электронный ресурс] Официальный сайт компании GMC – URL:
http://www.gmc.net/en/gmc-inspire/gmc-inspire-overview/ (Дата обращения
23.05.2015)
4.
Таблица
выбора
FormDefinition
[Электронный
документ]
URL:
http://www4.infoprintsolutionscompany.com/ Form definitions and page
definitions supplied with InfoPrint
5.
Руководящий технический материал ФГУП «Почта России». «Коды и
атрибуты почтовых отправлений». РТМ 0002.11-14. Москва, 2014.
6.
Основные характеристики СУБД MySQL [Электронный ресурс] /
MySQL Одобрено лучшими российскими программистами – URL:
http://studopedia.org/1-32324.html (Дата обращения 16.04.2015)
7.
phpMyAdmin – Википедия [Электронный ресурс] / Википедия. – URL:
https://ru.wikipedia.org/wiki/PhpMyAdmin (Дата обращения 17.04.2015)
8.
Макконел С. Совершенный код. Мастер-класс / Пер. с англ. – М.:
Издательско-торговый дом «Русская редакция»; СПб.: Питер, 2005. –
896 стр. ISBN 5-7502-0064-7 ISBN 5-469-00822-3 стр. 59
9.
Уолл Л., Кристиансен Т., Орвант Д. Программирование на Perl, 3-е
издание. – СПбЖ: Символ-Плюс, 2010 стр. 23.
138
10. Уолл Л., Кристиансен Т., Орвант Д. Программирование на Perl, 3-е
издание. – СПбЖ: Символ-Плюс, 2010 стр. 4.
11. Шварц Р., Феникс Т., брайан д фой. Изучаем Perl, 5-е издание . – Пер. с
англ. – СПб: Символ-Плюс, 2009. – 384 с., ил. ISBN: 978-5-93286-154-7,
стр. 25
12. Wine - Википедия. [Электронный ресурс] / Википедия. – URL:
https://ru.wikipedia.org/wiki/Wine (Дата обращения 17.04.2015)
13. CAM::PDF – PDF manipulation library [Электронный ресурс]/ metcpan.org
– URL: https://metacpan.org/pod/CAM::PDF (Дата обращения 19.04.2015)
14. PDF::API2 - Facilitates the creation and modification of PDF files
[Электронный
ресурс]/
metcpan.org
–
URL:
https://metacpan.org/pod/PDF::API2 (Дата обращения 19.04.2015)
15. PDF::Reuse - Reuse and mass produce PDF documents [Электронный
ресурс]/ metcpan.org – URL: https://metacpan.org/pod/PDF::Reuse (Дата
обращения 19.04.2015)
16. КЛАДР - Википедия. [Электронный ресурс] / Википедия. – URL:
https://ru.wikipedia.org/wiki/КЛАДР (Дата обращения 20.04.2015)
17. Руководящий технический материал ФГУП «Почта России». Структура
штрихкодовой идентификации почтовых отправлений. РТМ 0001.01.99
от 11.02.2000
18. Тидуэлл Д. XSLT, 2-е издание. – Пер. с англ. – СПБ.: Символ-Плюс,
2010. – 960 с., ил. ISBN: 978-5-93286-150-9 стр. 19.
19. XMPP - Википедия. [Электронный ресурс] / Википедия. – URL:
https://ru.wikipedia.org/wiki/XMPP (Дата обращения 20.04.2015)
20. Идентификатор процесса [Электронный ресурс] / Википедия. – URL:
https://ru.wikipedia.org/wiki/Идентификатор_процесса (Дата обращения
20.05.2015)
21. Надежность программного средства по ГОСТ 28806-90 [Электронный
ресурс] / Термины и определения из ГОСТов URL: http://tdocs.su/16567
139
(Дата обращения 20.05.2015)
22.
Завершенность
программного
средства
по
ГОСТ
28806-90
[Электронный ресурс] / URL: http://tdocs.su/16581 (Дата обращения
20.05.2015)
23. Интенсивность
отказов
-
Википедия.
[Электронный
ресурс]
/
Википедия. – URL: https://ru.wikipedia.org/wiki/Интенсивность_отказов
(Дата обращения 20.05.2015)
24. Восстанавливаемость программного средства по ГОСТ 28806-90
[Электронный ресурс] / Термины и определения из ГОСТов - URL:
http://tdocs.su/ 16583 (Дата обращения 20.05.2015)
25. ТРЕБОВАНИЯ ОХРАНЫ ТРУДА ПРИ РАБОТЕ НА ПЕРСОНАЛЬНЫХ
ЭЛЕКТРОННО ВЫЧИСЛИТЕЛЬНЫХ МАШИНАХ. 2 е изд., перераб. и
доп. М. : Издательство «Альфа-Пресс» 2008. ISBN 978 5 94280.
140
Download