РАЗРАБОТКА КОРПОРАТИВНОЙ ИНФОРМАЦИОННОЙ СИСТЕМЫ «ОПЕРАТИВНОГО АНАЛИЗА И ПРОГНОЗИРОВАНИЯ» - Студенческий научный форум

XIII Международная студенческая научная конференция Студенческий научный форум - 2021

РАЗРАБОТКА КОРПОРАТИВНОЙ ИНФОРМАЦИОННОЙ СИСТЕМЫ «ОПЕРАТИВНОГО АНАЛИЗА И ПРОГНОЗИРОВАНИЯ»

Мосунов В.Д. 1
1Филиал РГППУ в г. Нижнем Тагиле
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

ВВЕДЕНИЕ

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

Оперативное реагирование необходимо не только при непосредственном наблюдении за производственными процессами, но и в общем при принятии решений о работе всего предприятия. Ежедневно формируется множество различных отчётов и отсылается руководству, а те в свою очередь должны усвоить всю полученную информацию и принять какие-либо решения для улучшения сложившейся ситуации. Существует множество отделов, которые ежедневно создают отчёты с помощью программ на подобии «Excel» после чего отправляют их, но при этом исторические данные для статистики никуда не записываются и со временем окончательно теряются. Также работа многих людей не согласована между собой и вполне возможна ситуация, в которой несколько разных человек создают схожие отчёты и отправляют разным руководителям. Сами отчёты чаще всего представляют из себя большие массивы числовых данных, которые крайне тяжело поддаются анализу человеком. Перечисленные выше факторы крайне негативно влияют на эффективность принятия управленческих решений.

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

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

снижение материальных затрат;

повышение эффективности инвестиционных решений;

повышение уровня использования оборудования;

Объект исследования процесссоздания информационной системы.

Предмет исследования  автоматизация методов оперативного анализа и прогнозирования различных показателей на предприятии.

Цель данной курсовой работы  разработать корпоративную информационную систему для оперативного анализа и прогнозирования основных показателей.

Для достижения указанной цели были необходимо решить ряд задач:

провести описание объекта автоматизации;

выбрать средства реализации;

реализовать проектные решения по автоматизации оперативного анализа и прогнозирования в виде корпоративной информационной системы.

ОПИСАНИЕ ОБЪЕКТА АВТОМАТИЗАЦИИ

ОАО «Высокогорский горно-обогатительный комбинат», старейшее и крупнейшее на Урале предприятие, которое ведет добычу в шахтах и карьерах с 1721 года. Благодаря тому, что технологии производства и добычи продолжают постоянно развиваться, комбинат всё ещё уверенно занимает свою нишу в отрасли добычи сырья для металлургических комбинатов.

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

Основные подразделения предприятия – это шахты: «Магнетитовая», «Естюнинская» и «Южная». «Магнетитовая» это старейшая шахта, глубина которой достигает 600 метров, несмотря на возраст в ней всё ещё много ресурсов для добычи, а из шахты «Естюнинская» было добыто порядка 250 миллионов тонн сырья, шахта «Южная» обеспечила 700 миллионов тонн руды. Также в состав предприятия входят: ПЖТ – предприятие железнодорожного транспорта, ЛАЦ – Лебяженский аглоцех, ВОЦ – Высокогорский обогатительный цех. Они занимаются перевозкой и обработкой добытого сырья и являются вспомогательным производством.

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

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

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

Администрация предприятия приняла ряд программ, связанных с повышением квалификации сотрудников ВГОКа, позволяющих работникам постоянно развиваться в данной отрасли, при этом сотрудники могут быть уверены в строгом соблюдении российского трудового законодательства.

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

Постановка задачи

На данный момент основная проблема получения оперативной информации для управления предприятием состоит в том, что данные не сосредоточены в одной информационной системе и представлены в виде массивов числовых данных.

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

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

В результате анализа можно понять, что несмотря на наличие человеческих ресурсов, которые могут вносить данные для отчётов, эти данные используются не оптимальным образом и информационная система может эти вопросы решить.

Необходимо разработать корпоративную информационную систему в виде веб-портала, который будет обладать следующим функционалом:

ввод данных в таблицы, пользовательский интерфейс которых максимально похож на интерфейс программы Microsoft Excel.

создание отчётов из введённых ранее данных, а также использование одних и тех же данных для создания различных отчётов;

назначение прав доступа различным пользователям;

создание инструмента, который позволит создавать отчёты без использования языков программирования или гипертекстовой разметки;

Реализация ввода данных в виде таблиц обусловлена тем, что пользователи привыкли работать с программой Microsoft Excel и в случае, если новое программное средство будет сильно отличаться от привычной программы, большинство сотрудников, которые должны вводить данные в систему, будут совершать ошибки ввода. Кроме этого повысится частота запросов с просьбой оказания помощи с вводом и объяснением как данная система работает.

Возможность использования введённых данных в различных отчётах, обусловлена тем, что разным руководителям требуется отчёты о разных сферах деятельности предприятия, но для создания прогнозов некоторые данные будут использоваться многократно в различных формулах.

Система управления пользователями – это то, без чего не обходится ни один веб-портал. Также раздача прав пользователям позволит более тонко регулировать доступ к ресурсам портала.

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

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

СРЕДСТВА РЕАЛИЗАЦИИ

Для создания серверной части портала был выбран язык программирования C# и среда программирования visual studio 2019. Для клиентской части программы будут использованы JavaScript, HTML и CSS. Серверная часть будет использовать фреймворк ASP.NET Core 3.0, так как он позволит запустить веб сайт, как на сервере под управлением Windows, так и Linux. Также выбор языка c# был обусловлен тем, что на портале будет производится большое количество различных расчётов, таким образом использование таких языков программирования, как php, ruby, javascript ­­– менее выгодно в плане производительности, так как это языки с динамической типизацией и при разработке могут возникнуть проблемы с определением типа переменных и некоторое замедление работы портала. Хранение данных будет осуществляться с помощью СУБД PostgreSQL.

C# создавался фирмой Microsoft, как основной язык для .NET Framework. Microsoft спроектировала C# так, чтобы С, С++ и Java–программисты смогли легко перейти на него. C# имеет корни в языках С, С++ и Java, поэтому такой переход не должен вызвать затруднений.

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

В основу языка легла библиотека классов .NET Framework (FCL), которая и позволяет C#, благодаря специальной проектировке, содержать некоторую функциональность, которой нет в других языках программирования. Так же стоит упомянуть, что управляется он общеязыковой средой исполнения (CLR) и является языком, который поддерживает платформа .NET. Другие языки с поддержкой платформы .NET: Microsoft Visual Basic .NET (VB .NET), Microsoft Visual C++ .NET и другие.

Проще всего сложность языка можно понять, если взять нечто среднее между C++ и Visual Basiс. Благодаря таким невысоким требованиям к понимаю языка, но предоставлением мощных средств для реализации своих программ C# и снискал свою популярность.

Если сравнивать C# с другими языками, то можно сказать, что более всего он похож на Java, но при этом имеет явный C образный стиль. Объектно-ориентированная направленность и её реализация в языке очень схожа с той, что используется в языке Delphi, но при этом различий между ними тоже много.

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

Также с большим вниманием отнеслись и к поддержке программы после её реализации, так в C# представлена возможность управления комментариями с помощью XML.

В C# существует система аналогичная пакетам в Java – концепция пространств имён. Благодаря такой системе можно избежать многих проблем и именованием, сделать код более понятным. Если проводить аналогии, то пространство имён – это папка, а языковые типы – файлы в папке.

Реализация структур как типов, работа с которыми происходит по выбранному значению, но в отличии от Java, позволяет также использовать и многомерные массивы, а не только вложенные, что хорошо влияет на оптимизацию приложений.

Благодаря своему объектно-ориентированному дизайну C# является хорошим решением для быстрого создания абсолютно разных программным продуктов, например программа, выполняющая некоторую бизнес логику, или же использующая низкоуровневый код, C# предоставит достаточно методов для реализации любых функций. С помощью C# можно писать не только программы для компьютера, но также и Web сервисы, сайты и настроить их на работу с локальной сетью или сетью Internet. Дополнительные возможности и преимущества перед другими языками приносит в C# использование передовых Web технологий, таких как: XML (Extensible Markup Language) и SOAP (Simple Object Access Protocol). Среда разработки позволяет создавать Web приложения, точно таким же образом, как создаются и приложения для персонального компьютера.

Несмотря на то, что C# является объектно-ориентированным языком, он также обеспечивает поддержку и компонентно-ориентированное программирование. Нынешние тренды разработки всё больше склоняются к созданию современных приложения на основе программных компонентов в форме автономных пакетов, которые реализуют некоторые отдельные возможности. Каждый компонент поддерживает свойства, методы и события, атрибуты и декларативные сведения о компоненте. В C# представлены конструкции языка, которые поддерживают данную концепцию работы, именно благодаря этому C# прекрасно подходит в тои числе и для создания подобных программных компонентов, а также реализации их возможностей.

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

Необходимо понимать, что сам по себе C# это профессиональный язык. Обучение работе на нём позволит будущему программисту гораздо быстрее выйти на рынок труда со знаниями и опытом работы на актуальном языке программирования, что обеспечит его достойный заработок и востребованность у работодателей в различных направлениях.

Структура программы C# устроена так, что элементы упакованы друг в друга, так основа языка – это классы, внутри которых уже описываются функции, методы и другие данные. Для задания значения внутри класса используются переменные, которые называются полями класса и при использовании модификатора доступа public сделать информацию из этого поля доступной в другом классе. При создании им чаще всего назначается значение по умолчанию, чаще всего это 0 соответствующего класса.

Областью действия переменой является место с начала описания этой переменной в коде и до закрывающих фигурных скобок. Фигурные скобки – это блок, он необходим для удобной группировки операторов. При создании переменной нужно учесть, что имя задаваемой переменной должно быть уникальным, для своего блока, иначе c# не позволит создать её. Так же стоит помнить о том, что если внутри блока создается ещё один блок, то все переменные используемые в блоке, расположенном иерархично выше, можно использовать и только созданном блоке.

ASP.NET Core это свободно-распространяемый кросс-платформенный фреймворк для создания веб-приложений с открытым исходным кодом. Данная платформа разрабатывается компанией Майкрософт совместно с сообществом и имеет большую производительность по сравнению с ASP.NET. Имеет модульную структуру и совместима с такими операционными системами как Windows, Linux и macOS.

Несмотря на то, что это новый фреймворк, построенный на новом веб-стеке, он обладает высокой степенью совместимости концепций с ASP.NET. Приложения ASP.NET Core поддерживают параллельное управление версиями, при котором разные приложения, работающие на одном компьютере, могут ориентироваться на разные версии ASP.NET Core. Это было невозможно в предыдущих версиях ASP.NET.

JavaScript это мультипарадигменный язык программирования. Поддерживает объектно-ориентированный, императивный и функциональный стили. Является реализацией языка ECMAScript.

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

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

На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами. Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке.

PostgreSQL является одной из наиболее популярных систем управления базами данных. Сам проект postgresql эволюционировал из другого проекта, который назывался Ingres. Формально развитие postgresql началось еще в 1986 году. Тогда он назывался POSTGRES. А в 1996 году проект был переименован в PostgreSQL, что отражало больший акцент на SQL. И собственно 8 июля 1996 года состоялся первый релиз продукта.

Microsoft Visual Studio 2019 – это набор инструментов для создания программного обеспечения: от планирования до разработки пользовательского интерфейса, написания кода, тестирования, отладки, анализа качества кода и производительности, развертывания в средах клиентов и сбора данных телеметрии по использованию. Эти инструменты предназначены для максимально эффективной совместной работы; все они доступны в интегрированной среде разработки (IDE) Visual Studio.

Таким образом, будет создана система, в которой ASP.NET Core отвечает за внутреннюю логику системы, большую часть расчётов, а так же обработка данных перед записью. Вывод и ввод данных на портале будет выполнять язык JavaScript. За хранение данных PostgreSQL.

Определение типа информационной системы

Автоматизированная система, согласно ГОСТу  система, состоящая из взаимосвязанной совокупности подразделений организации и комплекса средств автоматизации деятельности, реализующая автоматизированные функции по отдельным видам деятельности.

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

Автоматизированные информационные системы (АИС) – область информатизации, механизм и технология, эффективное средство обработки, хранения, поиска и представления информации потребителю [http://inftis.narod.ru/is/is-n3.htm]. На каждой ступени развития общества они отражают присущий ему уровень высоких технологий.

Выделяют четыре типа автоматизированных информационных систем [http://inftis.narod.ru/ais/ais-n3.htm].

охватывающий один процесс (операцию) в одной организации;

объединяющий несколько процессов в одной организации;

обеспечивающий функционирование одного процесса в масштабе нескольких взаимодействующих организаций;

реализующий работу нескольких процессов или систем в масштабе нескольких организаций;

Для работы с АИС создают специальные рабочие места пользователей (в том числе работников), получившие название «автоматизированное рабочее место» (АРМ).

Автоматизированное рабочее место – комплекс средств, различных устройств и мебели, предназначенных для решения различных информационных задач, в т.ч. поиска информации, а также выполнения специалистами производственных заданий в соответствующей предметной области [https://tovaroveded.ru/lektsii-tovarovedenie/49-avtomatizirovannoe-rabochee-mesto-ego-sostav-i-naznachenie].. Как правило, АРМ реализуются с использованием компьютерной техники и телекоммуникаций.

На основе данной информации можно сделать вывод, что АИС – тип данной программы, так как она нужна для обработки и хранения различной информации, а также для предоставления её пользователям.

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

ГОСТ 34.601–90 – распространяется на автоматизированные системы и устанавливает стадии и этапы их создания. Кроме того, в стандарте содержится описание содержания работ на каждом этапе. Стадии и этапы работы, закрепленные в стандарте, в большей степени соответствуют каскадной модели жизненного цикла.

Rational UnifiedProcess (RUP) предлагает итеративную модель разработки, включающую четыре фазы: начало, исследование, построение и внедрение. Каждая фаза может быть разбита на этапы (итерации), в результате которых выпускается версия для внутреннего или внешнего использования. Прохождение через четыре основные фазы называется циклом разработки, каждый цикл завершается генерацией версии системы. Если после этого работа над проектом не прекращается, то полученный продукт продолжает развиваться и снова минует те же фазы. Суть работы в рамках RUP – это создание и сопровождение моделей на базе диаграмм UML.

Microsoft Solution Framework (MSF) сходна с RUP, так же включает четыре фазы: анализ, проектирование, разработка, стабилизация, является итерационной, предполагает использование объектно-ориентированного моделирования. MSF в сравнении с RUP в большей степени ориентирована на разработку бизнес–приложений.

Extreme Programming (XP). Экстремальное программирование (самая новая среди рассматриваемых методологий) сформировалось в 1996 году. В основе методологии командная работа, эффективная коммуникация между заказчиком и исполнителем в течение всего проекта по разработке АРМ, а разработка ведется с использованием последовательно дорабатываемых прототипов.

ЭТАПЫ РАЗРАБОТКИ КОРПОРАТИВНОЙ ИНФОРМАЦИОННОЙ СИСТЕМЫ

Далее будут рассмотрены и объяснены основные этапы, которые были пройдены при разработке информационной системы.

Этап. Проектирование архитектуры базы данных

Рис. 1. Хранение данных

Рис. 2. Управление пользователями

Архитектура базы данных – это совокупность ее основных компонентов, которые в результате взаимодействия друг с другом позволяют реализовать основные компоненты сайта (рис. 1–2). Также важно описать принцип, по которому данные сохраняются в базу данных, так как позже из этих данных будут строится не только отчёты, но и таблицы. Таким образом были созданы условия для создания элемента сайта, отвечающего за ввод данных.

Этап. Вводданных

List<string[]> dataInTable = SqlWorker.UpgradeMassiveReader("select name_id,row_id,col_id,val from public.input_data where table_id = " + id + " and dtime='" + date + "'::timestamp order by name_id");

List<LogicCell> RealDataTable = new List<LogicCell>();

foreach (string[] cell in dataInTable)

{

LogicCell lc = new LogicCell();

lc.row_id = int.Parse(cell[1]);

lc.col_id = int.Parse(cell[2]);

lc.name_id = int.Parse(cell[0]);

lc.date = date; }

string update = "update public.input_data as u set val = u2.val from (values ";

string insert = "INSERT INTO public.input_data (val,row_id,col_id,table_id,name_id,dtime) VALUES";

List<int> not_insert = new List<int>();

int rowsForUpdate = 0;

int rowsForInsert = 0;

for (int i = 0; i < LogicTable.Count; i++)

{

LogicCell lc_lt = LogicTable[i];

for (int j = 0; j < RealDataTable.Count; j++)

{

LogicCell lc_rt = RealDataTable[j];

if (lc_lt != lc_rt)

{

if (lc_lt.name_id == lc_rt.name_id && lc_lt.row_id == lc_rt.row_id && lc_lt.col_id == lc_rt.col_id)

{

update += String.Format("('{0}',{1},{2},{3},{4},'{5}'::timestamp),", lc_lt.value, lc_rt.name_id, lc_rt.row_id, lc_rt.col_id, lc_rt.table_id, lc_rt.date);

not_insert.Add(i);

rowsForUpdate++;

}

}

Рис 3. Функция создания логической таблицы

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

Этап. Создание таблиц ввода

int tableType = int.Parse(SqlWorker.ReadSingle("select table_type from public.input_tables where id=" + id));

int cols = 0;

int cl = 0;

string headers = "'Наименование'";

string col_settings = "{type: 'text', readOnly:true}";

string col_width = "'300'";

if (tableType == 0)

{

List<string> columns = SqlWorker.ReadOneColMassive("select inm.name_val from public.input_names inm, public.input_cols ic where ic.name_id = inm.id and ic.parent_id = " + id + " order by ic.order_web");

cl = (w_p - 300) / columns.Count;

foreach (var item in columns)

{

headers += ",'" + item + "'";

col_settings += ",{type: 'text'}";

col_width += ",'" + cl + "'";

}

}

else

{DateTime dtt = DateTime.ParseExact(dt, "MM.dd.yyyy hh:mm:ss", CultureInfo.InvariantCulture);

int days = DateTime.DaysInMonth(dtt.Year, dtt.Month);

cl = (w_p - 380) / days;

for (int i = 0; i < days; i++)

{

headers += ",'" + (i + 1) + "'";

col_settings += ",{type: 'text'}";

col_width += ",'" + cl + "'";

}

cols = days;

}

Рис. 4. Создание каркаса таблицы

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

Этап. Выводотчёта

[Authorize]

[HttpGet]

public IActionResult Report(string id = "1", string date = "")

{

if (date == "")

{

date = DateTime.Today.ToString("MM");

}

else

{

date = DateTime.ParseExact(date, "yyyy-MM", null).ToString("MM");

}

string dt = DateTime.Today.ToString(date + ".01.yyyy");

ViewData["Title"] = SqlWorker.ReadSingle("select page_name from public.pages where id=" + id);

ViewBag.SourceCode = static_elements() + makeReport(id, dt, date);

return View();

}

Рис. 5. Формирование отчёта по запросу

Наиболее сложным элементом системы является контроллер создания отчётов. Процесс создания отчёта в системе состоит из нескольких этапов:

создание каркаса отчёта с помощью веб формы;

добавление данных с помощью формул;

перевод визуальной формы каркаса в закодированную строку.

После того, как отчёт был создан и записан в базу данных, его можно посмотреть, для этого функция считывает из базы данных закодированную строку, представляющую из себя каркас html страницы, элементы отчёта и данные, которыми отчёт заполняется. В первую очередь функция создаёт каркас (рис. 5) и собирает все формулы, после чего выгружает из базы данных всю информацию необходимую для просчёта формул. На третьем этапе идёт просчёт формул и объединение каркаса с готовыми элементами отчёта, после всех этих операций сформированная html страница выводится пользователю. В следующем этапе будет реализован функционал, позволяющий пользователям использовать ресурсы, созданные на данном этапе.

Этап. Созданиеотчётов

function addJustWell(name, f_guid){

var bid = guidGenerator();

var b = document.createElement("div");

var all_names = name.split(' ');

for (var i = 0; i < all_names.length; i++) {

console.log(all_names[i]);

b.classList.add(all_names[i]);

}

b.pwalker = name;

b.id = bid;

last_well_id = bid;

var r = document.createElement("div");

r.classList.add("row", "bcontrol");

var b1 = document.createElement("input");

b1.type = "button";

b1.classList.add("btn", "btn-success", "ctrlbtn");

b1.value = "+";

b1.onclick = function () { addContent(bid); };

var b2 = document.createElement("input");

b2.type = "button";

b2.classList.add("btn", "btn-danger", "ctrlbtn");

b2.value = "-";

b2.style = "float:right";

b2.onclick = function () { document.getElementById(bid).remove() };

r.appendChild(b1);

r.appendChild(b2);

b.appendChild(r);

document.getElementById(f_guid).appendChild(b);

return bid;

}

Рис. 6. Добавление блока для данных

Сам процесс создания отчета по большей части выполняется средствами JavaScript, так у пользователя есть возможность добавлять неограниченное количество блоков (рис. 6), а в них добавлять элементы отчёта. При добавлении элемента отчёта необходимо также ввести формулу данных, которые он должен вывести. После того, как всё было создано, элементы преобразуются в их укороченный вариант и записываются в базу данных. Для вывода каких-либо данных в отчёт необходимо обработать формулы, которые отвечают за вывод числовых данных в отчёт, их принцип работы будет описан в следующем этапе.

Этап. Обработкаформул

private List<string> reMadeFormulas(List<string> formulas,string date)

{

List<string> reMadeFormulas = new List<string>();

foreach (string formula in formulas)

{

string res = "";

//Делим по _ это название элемента

var name_and_formula = formula.Split('_');

res += name_and_formula[0] + "_";

//Делимпо > этоподпункты

var formula_stages = name_and_formula[1].Split('>');

foreach (string stageName in formula_stages)

{

foreach (string splted_stage in stageName.Split(','))

{

string rebuildStageName = "";

var stageFormula = splted_stage.Split(':');

rebuildStageName += stageFormula[0] + ":";

string reMadeFormula = "";

foreach (string formula_elem in stageFormula[1].Split(' '))

{

reMadeFormula += reMade(formula_elem, date);

}

rebuildStageName += reMadeFormula;

res += rebuildStageName += ",";

}

res = res.Remove(res.Length - 1);

res += ">";

}

res = res.Remove(res.Length - 1); // Удаляюпоследний >

reMadeFormulas.Add(res);

}

return reMadeFormulas;

}

Рис. 7. Обработка списка формул

Для того чтобы выводить актуальные числовые данные в отчётах используются формулы, которые являются указателями на наборы данных и то, какие методы обработки к ним можно применить. На данный момент в системе возможны следующие типы переменных для создания формул: целое число, таблица, строка, колонка, открытие скобки, закрытие скобки, арифметический символ, количество прошедших дней, дней в месяце. А общий вид готовой формулы, например для вычисления средней заработной платы по предприятию будет выглядеть так(рис.8):

i1000000 a* so so t3n8 a* t4n12c5 a+ t4n12c4 sc a+ so t3n1 a* t4n13c5 a+ t4n13c4 sc a+ so t3n3 a* t4n14c5 a+ t4n14c4 sc sc.

Рис. 8. Готовый вид формулы

Для вывода графика требуется вывод не конечного числа, а последовательности чисел, например с нарастающим итогом, также в графиках и таблицах используется множество формул в одном элементе отчёта, для того чтобы получить правильный результат система сначала разбивает эти элементы на отдельные формулы (рис. 7) а потом уже преобразует к обычному виду. После того как формула была получена, система заменяет переменные на числа и арифметические знаки, после чего решает полученный пример и возвращает число, которое встраивается в общий html код. Данный метод был создан для упрощения работы с данными для пользователей, теперь необходимо создать функционал для авторизации пользователей в системе и ограничение их прав на использование различных ресурсов.

Этап. Управление пользователями

var result = ValidateUser("vgok.ru", model.UserName, model.Password);

if (result)

{

Microsoft.AspNetCore.Identity.SignInResult innerAuth = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, false);if (innerAuth.Succeeded){

User user = await _userManager.FindByEmailAsync(model.UserName + "@vgok.ru");

if (user != null){

var _passwordValidator HttpContext.RequestServices.GetService(typeof(IPasswordValidator<User>)) as IPasswordValidator<User>;

var _passwordHasher =

HttpContext.RequestServices.GetService(typeof(IPasswordHasher<User>)) as IPasswordHasher<User>;

IdentityResult ri =await _passwordValidator.ValidateAsync(_userManager, user, model.Password);

await _signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, false);

return RedirectToAction("Index", "Home");

User newUser = new Models.User { UserName = model.UserName, Email = model.UserName + "@vgok.ru" };

_userManager.CreateAsync(newUser, model.Password);

if (resultAdd.Succeeded)

{

await _signInManager.SignInAsync(newUser, false);

return RedirectToAction("Index", "Home");

}

Рис. 9. Авторизация в системе

Новые пользователи создаются автоматически, когда человек с достаточным уровнем прав в ActiveDirectory заходит в систему под своим логином и паролем (рис. 9). Но для получения полного доступа к системе данному пользователю так же необходимо назначить группы, в которые он входит. Каждая группа может входить на определенные страницы сайта, таким образом производится гибкая настройка возможностей пользователя на портале.

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА

На портале, элементами пользовательского интерфейса являются элементы с которыми пользователь может взаимодлействовать, например таблицы в которые вводятся показатели, меню сайта или готовые отчёты.

Пользовательский интерфейс

Интерфейс портала максимально лаконичен, так как его основная цель это быстрый доступ к интерисующей информации, ниже будут разобраны основные элементы интерфейса с которыми сталкивается сотрудник при использовании портала для ввода данных или просмотра готовых отчётов. При первом открытии пользователь попадает на экран входа в систему(рис. 10).

Рис. 10 Окно входа на сайт

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

Рис. 11. Основное меню сайта

Доступных пользователю страниц может быть очень много, но их все можно разделить на несколько основных групп:

ввод данных;

просмотр отчёта;

создание отчёта.

Ввод данных

Рис. 12. Форма ввода данных

Данный интерфейс (рис. 12) предназначен для ввода различных показателей в систему, интерфейс максимально похож на интерфейс программы Excel, это позволяет новому в системе пользователю быстро адаптироваться к новой системе ввода. Данный интерфейс позволяет по нажатию на выбранную ячейку изменить в ней данные, после чего выбрать другую ячейку либо сохранить изменения. Внесенные изменения будут сохранены только в том случае, если были внесены новые данные, либо изменены старые, иначе при сохранении таблицы ничего не произойдет.

Просмотр отчёта

Рис. 13. Пример графика

Рис. 14. Пример строковых данных

Рис. 15. Пример таблицы

Данный пункт меню (рис. 13–15), позволяет посмотреть различную агрегированную информацию. В виде графика, таблицы или просто строки. С графиком также можно производить некоторые дополнительные действия, например сокрытие каких-либо линий графика, а также при наведении на пункты графика, на график будет выведена дополнительная информация по выбранному времени, ещё если на график был выведена линия данных с наименованием факт, то она будет продолжена прогнозом до последнего дня месяца, если же также будет выведена линия план, то при наведении на линию будет выведена также относительная разность плана и факта. Элементы данной страницы могут быть расположены в разных местах и вместе они создают полноценный отчёт. Кроме того, в каждом отчёте есть возможность переключения месяца, что позволит посмотреть какая информация была в этом отчёте в прошлом.

СОЗДАНИЕ ОТЧЁТА

Рис. 16. Страница создания отчёта

Данный раздел (рис. 16) позволяет визуально создать отчёт, который позже будет доступен в качестве обычного отчёта. У данного раздела есть множество отличий от остальных, так как предназначен для более продвинутых пользователей. Здесь возможно создать html скелет из готовых элементов, после чего добавить туда необходимые элементы отчёта и заполнить их данными с помощью формул. Здесь хоть и не нужно знать основы html, тем не менее, неподготовленному пользователю, скорее всего, будет сложно создать отчёт, так как это требует некоторой подготовки.

СОЗДАНИЕ ФОРМУЛ

Рис. 17. Форма создания формул

Для того чтобы вывести какую-либо информацию в отчёте, её нужно сконфигурировать с помощью формул, в конечном виде эти формулы выглядят непонятно для человека.

Рис. 18. Вставка числа из таблицы

По этой причине была создана специальная страница (рис. 17), на которой можно создать и редактировать формулы любой сложности с помощью визуальных элементов и выбора необходимых данных из выпадающих списков. Например, чтобы в формуле использовалось конкретное число (рис. 18), введенное в определенный день из какой-либо таблицы, достаточно просто выбрать нужные параметры и нажать кнопку «Применить», после чего готовая переменная будет добавлена в общую формулу.

УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ

Рис. 19. Страница управления пользователями

Данный раздел сайта (рис. 19) предназначен исключительно для администраторов системы, в нём можно выбрать любого пользователя, который авторизовался в системе и указать его данные, так же изменить группы пользователей, к которым данный человек имеет доступ. Так как этим интерфейсом не будет пользоваться большинство пользователей, он максимально упрощен, но имеет весь необходимый набор инструментов для работы со списками пользователей.

Таким образом, был разработан максимально лаконичный интерфейс для пользователей, который соответствует требованиям, указанным на этапе постановки задачи.

ЗАКЛЮЧЕНИЕ

В ходе работы над курсовой работой был разработана корпоративная информационная система для оперативного анализа и прогнозирования. Результатом работы стал сайт, который работает на технологии ASP.NET Core 3. Сайт обладает простым интерфейсом для пользователя и даёт возможность гибко настраивать отчёты и возможности обычных пользователей. Отчёты в системы позволяют создать прогноз на месяц, а также выполнить расчёт по формулам, которые будут использовать данные, введенные другими пользователями.

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

СПИСОК ЛИТЕРАТУРЫ

Агуров, Павел. C#. Сборник рецептов (+CDROM) / Павел Агуров. – М.: БХВ–Петербург, 2007. – 432 c.

Албахари, Джозеф. C# 3.0. Справочник / Джозеф Албахари , Бен Албахари. – М.: БХВ–Петербург, 2012. – 944 c.

Касаткин, А. И. Профессиональное программирование на языке СИ. Управление ресурсами / А.И. Касаткин. – М.: Высшая школа, 1992. – 432 c.

Культин, Н. Microsoft Visual C# в задачах и примерах (+ CDROM) / Н. Культин. – М.: БХВ–Петербург, 2012. – 314 c.

Майо, Джо. C#Builder. Быстрый старт / Джо Майо. – М.: Бином–Пресс, 2005. – 384 c.

Мак–Дональд, Мэтью. Microsoft ASP.NET 2.0 с примерами на C# 2005 для профессионалов / Мэтью Мак–Дональд , Марио Шпушта. – М.: Вильямс, 2007. – 139 c.

Прайс, Джейсон. Visual C# 2.0. Полное руководство / Джейсон Прайс , Майк Гандэрлой. – М.: Век +, Энтроп, Корона–Век, 2009. – 736 c.

Рихтер, Джеффри. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C# / Джеффри Рихтер. – М.: Питер, 2016. – 896 c.

Симан, Марк. Внедрение зависимостей в .NET / Марк Симан. – М.: Питер, 2013. – 464 c.

Фримен, Адам. ASP.NET 4.5 с примерами на C# 5.0 для профессионалов / Адам Фримен. – М.: Вильямс, 2014. – 474 c.

Griffiths Programming C# 5.0 / Griffiths. – Москва: Высшая школа, 2012. – 672 c.

Hans–Juergen, Schoenig Mono Kick Start / Hans–Juergen Schoenig, Ewald Geschwinde. – М.: Sams, 2003. – 320 c.

Jeff, Webb MCAD/MCSD Self–Paced Training Kit: Developing Web Applications with Microsoft Visual Basic.NET and Microsoft Visual C#.NET (+ CD–ROM) / Jeff Webb. – М.: Microsoft corporation, 2003. – 834 c.

M.J., Easton. Cross–Platform .NET Development: Using Mono, Portable.NET, and Microsoft .NET / M.J. Easton. – Москва: РГГУ, 2004. – 560 c.

Mueller Start Here! Learn Microsoft Visual C# 2010 / Mueller. – Москва: Гостехиздат, 2011. – 798 c.

Victor, Garcia. Aprea ASP.NET 1.1 Solutions Toolkit / Victor Garcia Aprea. – Москва: Высшая школа, 2004. – 344 c.

ПРИЛОЖЕНИЕ 1

Исходный код программы

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.Threading;

namespace UserAssistant

{

publicpartialclassForm1 : Form

{

public Form1()

{

InitializeComponent();

}

//Создаем объект класса для сбора информации о ПК

private SystemInfoGrinder sic = new SystemInfoGrinder();

privatevoid Form1_Load(object sender, EventArgs e)

{

//Прячем от пользователя основную форму

Hide();

//Отключить отображение в панели задач

this.ShowInTaskbar = false;

//Отображать иконку изображения

notifyIcon1.Visible = true;

//делаем ссылку на объект публичной с помощью дополнительного static класса

allset.sig = sic;

//Создаём дополнительный поток для сбора информации о системе

Thread sic_thread = new Thread(sic.start_grind);

//Запускатьвфоне

sic_thread.IsBackground = true;

//Запустить поток

sic_thread.Start();

}

privatevoidсоздатьЗаявкуToolStripMenuItem_Click(object sender, EventArgs e)

{

QueryCreate qc = new QueryCreate();

qc.ShowDialog();

}

privatevoidинформацияОСистемеToolStripMenuItem_Click(object sender, EventArgs e)

{

new Systeminfo().ShowDialog();

}

privatevoidрешениеПроблемToolStripMenuItem_Click(object sender, EventArgs e)

{

Show();

}

privatevoid button1_Click(object sender, EventArgs e)

{

Hide();

}

privatevoid comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

switch (comboBox1.SelectedIndex)

{

case 0: textBox1.Text = "Попробуйсте перезагрузить компьютер, возможно он потребует сменить пароль пользователя на новый, сделайте это. Если проблема осталась, то попытайсь найти недалеко от системного блока небольшую коробку с антенами мигающую зелёными лампочками, вытащите из розетки её провод питания, подождите 10-15 секунд и вставьте обратно. Если данные действия не помогли, то свяжитесь с ДИТом через диспетчера, указав, что проблема с подклчением к сети."; break;

case 1: textBox1.Text = "Перезагрузите компьютер. Запустите программу через mozilla firefox с ярлычком программы. Обновите страницу. Если не помогло, проверьте состояние сети в программе, вслучае если оно \"плохое\", то создайте заявку на тему \"не работает сеть\""; break;

case 2: textBox1.Text = "Если произошло замятие бумаги, то выключите принтер и плавно но с силой вытащите замявшуюся бумагу. Если принтер не печатет документы, то попробуйте перезагрузить его(выключить и включить)."; break;

}

}

}

}

using System;

using System.Linq;

using System.Net;

using System.Text;

using Newtonsoft.Json;

namespace UserAssistant

{

publicclassArticleClass

{

//Темазаявки

publicstring Subject { get; set; }

//Текстзаявки

publicstring Body { get; set; }

//Кодировка

publicstring ContentType { get; set; }

}

publicclassTicketClass

{

//Заголовок

publicstring Title { get; set; }

//Очередь

publicstring QueueID { get; set; }

//Состояниезаявки

publicstring StateID { get; set; }

//Задатьприоритет

publicstring PriorityID { get; set; }

//Пользователь

publicstring CustomerUser { get; set; }

//Типзаявки

publicstring TypeID { get; set; }

}

classTicketCreate

{

//Логин

publicstring UserLogin { get; set; }

//Пароль

publicstring Password { get; set; }

//Содержаниезаявки

public TicketClass Ticket = new TicketClass();

//Дополнениякзаявке

public ArticleClass Article = new ArticleClass();

}

publicstaticclassOTRS

{

publicstaticvoid MadeQuery(string head, string body)

{

//Конфигурируемзаявку

var Ticket = new TicketCreate();

Ticket.UserLogin = "OTRSADMIN"; //Логин специального юзера из отрс

Ticket.Password = "OTRSPASS"; //Пароль специального юзера из отрс

Ticket.Ticket.Title = head; //Заголовокзаявки

Ticket.Ticket.QueueID = "0";//ИДОчереди

Ticket.Ticket.StateID = "4";//Состояние

Ticket.Ticket.PriorityID = "3";//Приоритет

Ticket.Ticket.CustomerUser = "[email protected]";//email дляизвещения

Ticket.Ticket.TypeID = "1";//Типзаявки

Ticket.Article.Subject = head; //Темазаявки - копируемзаголовок

//Тело заявки - состояние показателей + текст пользователя

body += "Процессор " + allset.sig.cpu_data.Average() + " RAM: " + allset.sig.ram_data.Average() + " HDD: " + allset.sig.page_data.Average() + Environment.NewLine;

Ticket.Article.Body = body;

//Кодировка

Ticket.Article.ContentType = "text/plain; charset=utf8";

//Создаемэкземпляр WebClient

var cli = new WebClient() { Encoding = Encoding.UTF8 };

//Задаёмзаголовок

cli.Headers[HttpRequestHeader.ContentType] = "application/json";

//Отправляем POST запрос

cli.UploadString(new Uri("otrs.vgok.ru"), "POST", JsonConvert.SerializeObject(Ticket));

}

privatestaticbool AddictionalInfo()

{

returnfalse;

}

}

}

using System;

using System.Drawing;

using System.Linq;

using System.Windows.Forms;

namespace UserAssistant

{

publicpartialclassSysteminfo : Form

{

public Systeminfo()

{

InitializeComponent();

}

privatevoid Systeminfo_Load(object sender, EventArgs e)

{

if(allset.sig != null)

{

float cpu_avg = allset.sig.cpu_data.Average();

float ram_avg = allset.sig.ram_data.Average();

float hdd_avg = allset.sig.page_data.Average();

if (cpu_avg > 90) { label7.Text = "Плохо"; label7.BackColor = Color.Red; }

elseif (cpu_avg > 50) { label7.Text = "Нормально"; label7.BackColor = Color.Orange; }

else { label7.Text = "Хорошо"; label7.BackColor = Color.Green; }

if (ram_avg > 90) { label8.Text = "Плохо"; label8.BackColor = Color.Red; }

elseif (ram_avg > 50) { label8.Text = "Нормально"; label8.BackColor = Color.Orange; }

else { label8.Text = "Хорошо"; label8.BackColor = Color.Green; }

hdd_avg *= 100;

if (hdd_avg > 90) { label9.Text = "Плохо"; label9.BackColor = Color.Red; }

elseif (hdd_avg > 50) { label9.Text = "Нормально"; label9.BackColor = Color.Orange; }

else { label9.Text = "Хорошо"; label9.BackColor = Color.Green; }

if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())

{

label10.Text = "Хорошо"; label10.BackColor = Color.Green;

}

else

{

label10.Text = "Плохо"; label10.BackColor = Color.Red;

}

}

}

privatevoid button1_Click(object sender, EventArgs e)

{

Close();

}

}

}

Просмотров работы: 21