ПРАВИТЕЛЬСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ “ВЫСШАЯ ШКОЛА ЭКОНОМИКИ”» МОСКОВСКИЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ ДЕПАРТАМЕНТ КОМПЬЮТЕРНОЙ ИНЖЕНЕРИИ ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к дипломному проекту (работе) «Разработка системы обработки данных, получаемых ФГУП "Почта России" от ОАО "Ростелеком" » Андрюшин Павел Сергеевич Студент __________/ к.т.н., доц. / С.Л. Макаров Научный руководитель Консультанты: Специальная часть Экология и охрана труда _________/ к.т.н., доц. / С.Л.Макаров _________/ ст. преподаватель/Е.Б.Михайлов _________/ В.А.Филиппов Рецензент Допущен к защите _____________________ Академический руководитель образовательной программы 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 будет выглядеть как &#x42E;, причем кодируются не все символы, а только символы со 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 для каждого региона. Несколько получателей разделяются символом ';' ([email protected]) Электронная почта получателей акта приемапередачи app_rcpt данных Несколько в каждом получателей регионе. разделяются символом ';' ([email protected];[email protected]) Название автоматического сортировочного 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 '[email protected]' $MAIL_LOGIN 'pavel.andryushin' $MAIL_PWD '***********' Переопределить параметры по умолчанию можно с помощью функции set_param: 70 SendMail::send_param (-server => '8.8.8.5', -mailbox => '[email protected]', login => 'admin', -password => 'admin'); Для создания объекта класса SendMail необходимо вызвать конструктор new и передать в него свойства объекта. Пример создания объекта my $mail = SendMail::new (-email => '[email protected]', -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