Разработка моделей и алгоритмов автоматизированного управления технологическими процессами ресурсного обеспечения производства тема диссертации и автореферата по ВАК РФ 05.13.06, кандидат наук Высочкин Алексей Васильевич

  • Высочкин Алексей Васильевич
  • кандидат науккандидат наук
  • 2019, ФГАОУ ВО  «Национальный исследовательский университет «Московский институт электронной техники»
  • Специальность ВАК РФ05.13.06
  • Количество страниц 159
Высочкин Алексей Васильевич. Разработка моделей и алгоритмов автоматизированного управления технологическими процессами ресурсного обеспечения производства: дис. кандидат наук: 05.13.06 - Автоматизация и управление технологическими процессами и производствами (по отраслям). ФГАОУ ВО  «Национальный исследовательский университет «Московский институт электронной техники». 2019. 159 с.

Оглавление диссертации кандидат наук Высочкин Алексей Васильевич

СОДЕРЖАНИЕ Стр.

Введение 3 Глава 1. Анализ систем, технологий и алгоритмов управления

технологическими процессами ресурсного обеспечения производства

1.1Обзор существующих триггерных алгоритмов управления

технологическими процессами

1.2 Сравнительный анализ существующих решений в системах 19 планирования ресурсного обеспечения

1.3Основные технологии управления ресурсами и запасами предприятия

1.4 Постановка цели и задач исследования

Выводы по главе 1 36 Глава 2 Разработка модели и алгоритмов триггерного управления

технологическими процессами ресурсного обеспечения 37 2.1Создание математической модели построения триггеров в системах

управления ресурсным обеспечением

2.2 Разработка методики построения триггеров управления в АСУРО

2.3 Разработка алгоритмов построения триггеров управления

2.4 Программная реализация алгоритмов построения и обновления графа триггеров управления 55 Выводы по главе

Глава 3. Разработка средств преференциального управления технологическими процессами ресурсного обеспечения и пополнения производственных запасов

3.1 Особенности управления процессами ресурсного обеспечения и пополнения производственных запасов

3.2 Разработка математической модели преференциального управления ресурсным обеспечением

3.3 Разработка структуры системы управления процессами ресурсного обеспечения и пополнения производственных запасов

3.4 Разработка преференциального алгоритма управления процессами ресурсного обеспечения и пополнения запасов

3.5 Разработка принципов построения и структуры преференциальной матрицы

3.6 Практические аспекты использования механизма преференциального управления процессами ресурсного обеспечения 97 Выводы по главе

Глава 4 Экспериментальные исследования эффективности средств управления процессами ресурсного обеспечения производства

4.1 Разработка принципов хранения и обновления данных при управлении процессами ресурсного обеспечения

4.2 Разработка методики проведения имитационного моделирования процесса преференциального управления

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

4.4 Результаты имитационного моделирования алгоритма преференциального управления ресурсным обеспечением

4.5 Оценка быстродействия разработанных алгоритмов построения триггеров управления 122 Выводы по главе

Заключение

Список литературы

Приложение 1.Программный код построения и обновления графа триггеров 139 управления процессами ресурсного обеспечения

Приложение 2.Результаты внедрения диссертационных исследований

Рекомендованный список диссертаций по специальности «Автоматизация и управление технологическими процессами и производствами (по отраслям)», 05.13.06 шифр ВАК

Введение диссертации (часть автореферата) на тему «Разработка моделей и алгоритмов автоматизированного управления технологическими процессами ресурсного обеспечения производства»

Введение

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

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

Традиционно используемые для этих целей автоматизированные средства основываются на классических алгоритмах управления ресурсным обеспечением, в частности, "r,Q", EOQ, "с фиксированным размером заказа" и др., которые ориентированы на конкретные условия применения, и не являются гибким и универсальным инструментом, который можно адаптировать для управления процессами пополнения различных видов ресурсов с варьируемыми характеристиками.

Проблема управления ресурсным обеспечением производства нашла отражение в научных трудах следующих ученых: Дейвида Дж. Клосс , Доналд Дж. Бауэрсокса [1], Д. Джонсона, Д. Вуда, Д. Вордлоу [2], Рыжикова Ю.И. [3-5], Пола Р. Мэрфи , Д. Вуда [6], H.K. Alfares [7], Tsan-Ming Choi [8], K. J. Arrow [9], R. A Wilson [10], F. W Harris [11-13], М.Р. Линдерса , Е.Ф Харольда [14] и др.

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

Выходом из создавшейся ситуации является разработка некоторого преференциального алгоритма управления ресурсным обеспечением, который должен обеспечивать автоматический выбор оптимального алгоритма Ц из совокупности стандартных алгоритмов {Ь1,Ь2,...,Ьк} в соответствии с заранее заданными экспертными критериями, например процент обслуживаемых требований. Применение разрабатываемого алгоритма направлено на повышение эффективности пополнения и распределения производственных ресурсов, запасов и материалов.

Помимо вышесказанного важной является проблема повышения обработки событий в автоматизированных системах управления ресурсным обеспечением (АСУРО). При управлении ресурсным обеспечением и планировании запасов существует необходимость, связанная с определенными событиями или триггерами (в частности, добавление ресурсов в список заканчивающихся). При этом необходимо обеспечить повышение быстродействия процессов построения и вызова триггеров управления ресурсами и процессами предприятия, поскольку существующие системы управления не обладают достаточными возможностями для создания триггеров.

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

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

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

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

Поставленная в работе цель определяет следующие задачи диссертационных исследований:

- проведение анализа систем, технологий и алгоритмов управления технологическими процессами ресурсного обеспечения производства;

- создание математической модели и методики построения триггеров управления в АСУРО;

- разработка и программная реализация алгоритмов построения и обновления графа триггеров управления;

- разработка математических моделей и структуры автоматизированной системы управления ресурсным обеспечением;

- создание преференциального алгоритма управления процессами ресурсного обеспечения и пополнения запасов

- разработка принципов построения и структуры преференциальной матрицы выбора ресурсов;

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

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

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

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

В ходе проведения диссертационных исследований получены следующие новые научные результаты.

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

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

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

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

Теоретическая значимость диссертационных исследований

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

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

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

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

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

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

В ходе проведенных испытаний по построению графов триггеров управления в системе планирования ресурсов предприятия установлено, что число запросов уменьшилось на 60%, а временные затраты на построение и обновление графа триггеров снизились в среднем в 10 раз.

В результате проведенного имитационного моделирования преференциального алгоритма управления было получено увеличение процента обслуживания заявок c 57,87% до 64,73% при незначительным росте размера запасов по сравнению с наиболее эффективным стандартным алгоритмом.

Отдельное практическое значение имеют:

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

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

- полученные формульные выражения, определяющие зависимость времени моделирования преференциального алгоритма и вычислительными ресурсами;

- вопросы практического применения разработанного преференциального алгоритма управления.

Фрагмент программного кода построения и обновления графа триггеров управления процессами ресурсного обеспечения представлен в приложении 1 диссертационной работы.

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

Личный вклад автора.

Все основные результаты диссертационной работы получены автором лично. Главными из них являются следующие:

- проведение анализа систем, технологий и алгоритмов управления технологическими процессами ресурсного обеспечения производства;

- разработка математической модели и методики построения триггеров управления в АСУРО;

- разработка и программная реализация алгоритмов построения и обновления графа триггеров управления;

- разработка структуры автоматизированной системы управления ресурсным обеспечением;

- разработка модели и преференциального алгоритма управления процессами ресурсного обеспечения и пополнения запасов;

-разработка принципов построения и структуры преференциальной матрицы выбора ресурсов;

-создание имитационной модели процесса управления ресурсным обеспечением производства;

-проведение экспериментальных исследований по оценке эффективности средств управления процессами ресурсного обеспечения производства;

-разработка практических аспектов применения созданных в работе средств управления ресурсным обеспечением производства.

Реализация и внедрение полученных результатов.

Результаты диссертационных исследований используются в: учебном процессе Института системной и программной инженерии и информационных технологий (СПИНТех) Национального

исследовательского университета"МИЭТ"; при выполнении гранта РФФИ Шифр18-07-00079 А "Научные основы создания системы поиска, хранения и анализа структурированной и неструктурированной информации в локальных и глобальных информационных ресурсах научно-технических и технологических решений на базе технологий обработки больших массивов данных (Big Data)", а также в производственном процессе АО НПЦ "ЭЛВИС". Соответствующие акты внедрения представлены в приложении 2 диссертации.

На защиту выносятся следующие основные научные положения:

- модель и алгоритмы построения триггеров управления процессами ресурсного обеспечения предполагают хранение триггера в сериализованном

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

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

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

- методика и результаты проведения имитационного моделирования процесса преференциального управления процессами ресурсного обеспечения, в ходе которых обосновано: снижение числа запросов на 60%, временных затрат на построение и обновление графа триггеров в 10 раз, увеличение процента обслуживания заявок с 57,87% до 64,73% при незначительным росте размера запасов.

Апробация работы и публикации. Основные положения диссертационной работы были апробированы на следующих конференциях:

- международная научно-техническая конференция "Энергосбережение и эффективность в технических системах" (Тамбов 2017- 2019 г.г.);

- всероссийская научно-практическая конференция «Актуальные проблемы информатизации в науке и образовании» (Москва, Зеленоград , МИЭТ, 2017-2019 г.г.);

- IEEE Russia Section Young Researchers in Electrical and Electronic Engineering Conference, ElConRus. National Research University of Electronic Technology "MIET" (Moscow 2017, 2019 г.г.);

- всероссийская межвузовская научно -техническая конференция «Микроэлектроника и информатика » (Москва, Зеленоград , МИЭТ, 2017 -2019 г.г.).

Публикации. По результатам исследований опубликовано 18 печатных научных работ, включая 4 статьи в журналах из перечня ВАК РФ, и 2 публикации, входящие в базы данных Scopus и Web of Science.

Структура и объем работы. Диссертация состоит из введения, 4 глав, заключения, списка литературы из 105 наименований и двух приложений. Общий объем диссертационной работы 159 страниц, включая 10 таблиц и 32 рисунка.

Глава 1. Анализ систем, технологий и алгоритмов управления технологическими процессами ресурсного обеспечения производства

1.1 Обзор существующих триггерных алгоритмов управления технологическими процессами

В системах планирования ресурсов предприятия применяются ERP-триггеры - наборы действий, выполняющиеся при наступлении определенных событий .

Триггеры в ERP-системах можно классифицировать по нескольким параметрам: по типу события триггера, по типу воздействия на объекты системы и по области воздействия триггера [15-18]. Классификация триггеров по типу события

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

В языке SQL этим событиям соответствуют триггеры модификации данных (INSERT, UPDATE, DELETE) с ключевыми словами BEFORE (запуск триггера обеспечивается выполнением связанных с ним событий) и AFTER (триггер запускается после события). В некоторых СУБД накладываются ограничения на операторы, использованные в триггере. В частности, существуют запреты на внесение изменения в таблицу, к которой относится триггер [19].

Под объектом ERP-системы может подразумеваться как таблица в базе данных ERP-системы, так и любая другая сущность системы планирования ресурсов предприятия, например, поля таблиц, справочники, свойства справочников и т.д [17,18].

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

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

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

В большинстве ERP-систем создание триггеров ограничивается созданием триггеров БД, т.е. триггеров 1-го типа, которые предназначены только для работы с таблицами баз данных, события таких триггеров могут быть только трех типов (INSERT, UPDATE, DELETE для записей в таблицах БД), также, как и действия триггера при его вызове [20].

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

событий в языке программирования, на котором разрабатывается система, т.е. применять триггеры 2-го типа.

Рассмотрим подробнее работу триггеров в базах данных на примере СУБД MySQL [19,20].

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

В качестве примера можно привести следующий: пусть требуется создать запись в журнале об изменении. Вместо того, чтобы запускать два отдельных запроса (один - для изменения данных, другой для внесения записи в журнал), можно написать триггер, который будет содержать правило: "при изменении строки, создать новую строку в другой таблице, чтобы сообщить, что были сделаны изменения". Такой подход создает некоторую избыточность в основном запросе, но теперь нет проходов двух разных пакетов до сервера базы данных, чтобы выполнить два разных действия, что в целом способствует улучшению производительности.

Время запуска триггера идентифицируется ключевым словом BEFORE (запуск триггера производится до осуществления связанных с ним событий; например, до добавления записи) или AFTER (после события).

В качестве примера создания триггеров рассмотрим инструкцию CREATE TRIGGER, которая имеет следующий синтаксис [21]:

CREATE

[DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl name FOR EACH ROW

trigger_body

triggerjime: { BEFORE | AFTER }

trigger_event: { INSERT | UPDATE | DELETE }

Здесь введены следующие обозначения: -trigger_name - имя триггера;

-trigger_time - время, в течение которого срабатывает триггер: -BEFORE - перед наступлением события; -AFTER - после наступления события; -trigger_event - непосредственно событие:

-insert - событие, которое вызывается с помощью операторов insert, data load, replace;

-update - событие, которое вызывается с помощью оператора update; -delete - событие, которое вызывается с помощью операторов delete, replace; -tbl_name - название таблицы;

-trigger_stmt - выражение, выполняемое в случае активации триггера.

Триггеры были введены в MySQL начиная с версии 5.0.2. MySQL использует стандарт ANSI SQL:2003 для процедур и других функций [20].

Триггеры выполняются как процедуры при событиях UPDATE, DELETE и INSERT. Они могут быть выполнены либо до либо после определения события. Таким образом можно определить триггер, которые будет выполняться перед DELETE или после DELETE, и т.д. Это означает, что можно иметь один триггер, который выполнится до INSERT и совершенно другой, который выполнится после INSERT, что является весьма мощным инструментом.

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

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

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

Основная суть ERP-триггера состоит в выполнении каких-то действий при наступлении определенных событий. Таким образом, создание триггера можно представить реализацией паттерна проектирования Наблюдатель (Observer).

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

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

При реализации Наблюдателя как правило используют следующие классы [22-24]:

-Observable - определяет методы, позволяющие добавлять, удалять и оповещения наблюдателей.

Observer - класс, обеспечивающий получение оповещений. ConcreteObservable - класс, реализующий интерфейс Observable. ConcreteObserver - класс, реализующий интерфейс Observer.

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

На рисунке 1.1 представлена UML-диаграмма классов паттерна Наблюдатель.

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

«МеЛасе» СЬзетлгаЫе

1-Ас1с10Ь5е™ег(о: ОЬйеп/ег) ■|-РетоуеОЬ5ег\/ег(о: ОЬзегуег) 1-Мой1уОЬ5е™егО

Соп сге!еО Ьэе п/аЫ е

-оЬзег^егв: ОЬвег^ег|]

+АскЮЬ5е™ег(о: ОЬэегуег) +РетоуеОЬеегуег(о: ОЬзегуег) +1Мой?уОЬЕегуег()

■л.

к Вызывает метод Напй1еЕуепг[} у каждого наблюдателя

«¡тег1асе» ОЬзегуег

-> +Напс11еЕ№т()

д

Соп сге1еО Ьзе п/ег

+Напс11еЕ№т()

Рисунок 1.1 - ЦМЬ-диаграмма классов паттерна Наблюдатель

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

Недостатками такого решения является отсутствие возможности создания триггеров для событий изменения, добавления и удаления записей в таблицах БД, а также отсутствие средств управления и модификации обработчиков событий без дополнительных изменений исходного кода БЯР-системы [25].

1.2 Сравнительный анализ существующих решений в системах планирования ресурсного обеспечения

Рассмотрим существующие решения задачи построения триггеров управления бизнес-процессами в ERP-системах на примере SAP ERP, Microsoft Dynamics и Oracle E-Business Suite.

Триггерные алгоритмы в системе планирования ресурсов предприятия SAP ERP

Триггеры в SAP ERP можно создавать несколькими способами [28]:

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

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

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

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

Недостатком данного решения является сложность портирования trigger points и background jobs при внедрении ERP-системы на других предприятиях [26,27].

Триггерные алгоритмы в системе планирования ресурсов предприятия Microsoft Dynamics

Система Microsoft Dynamics ERP является средством управления ресурсами предприятия (цепочками поставок, закупками и управления трудовыми ресурсами, финансами, проектами совместной работы и др.).

В Microsoft Dynamics ERP на текущий момент доступны следующие виды триггеров [28-29]:

Codeunit Triggers - триггеры, связанные с запуском codeunit тестов;

Dataport Triggers - триггеры, связанные с модификацией и помещением данных в dataports;

Form Control Triggers - триггеры, связанные с модификацией и валидацией данных в формах ввода;

Похожие диссертационные работы по специальности «Автоматизация и управление технологическими процессами и производствами (по отраслям)», 05.13.06 шифр ВАК

Список литературы диссертационного исследования кандидат наук Высочкин Алексей Васильевич, 2019 год

Список литературы

1 Клосс Дейвид Дж. , Бауэрсокс Доналд Дж. Логистика. Интегрированная цепь поставок.-М.: Олимп-Бизнес, 2017.-640 с.

2 Джонсон Д., Вуд Д., Вордлоу Д., Мэрфи-мл. П. Современная логистика. 8-е изд. — М.: Издательский дом Вильямс , 2009. - 629 с.;

3 Рыжиков Ю.И. Расчет систем обслуживания с большим числом каналов // В сборнике: Информационные технологии и математическое моделирование (ИТММ-2018) Материалы XVII Международной конференции имени А.Ф. Терпугова. 2018. С. 132-138.

4 Рыжиков Ю.И. Оптимизация маршрутной матрицы в сетях обслуживания //В сборнике: Логистика: современные тенденции развития Материалы XVII Международной научно -практической конференции. 2018. С. 51-54.

5 Ryzhikov Y.I. Multi-channel queuing systems with markovian impatience //Communications in Computer and Information Science. 2018. Т. 912. С. 83-92.

6 Мэрфи Пол Р. , Вуд Дональд Современная логистика.-М.: Вильямс,2016- 720 с.

7 Alfares, H.K. Inventory model with stock-level dependent demand rate and variable holding cost// International Journal of Production Economics, № 108 (1-2), 2007.- pp. 259-265. doi: 10.1016/j.ijpe.2006.12.013

8 Tsan-Ming Choi (Ed.) Handbook of EOQ Inventory Problems: Stochastic and Deterministic Models and Applications, Springer's International Series in Operations Research and Management Science, 2014. doi:10.1007/978-1-4614-7639-9.

9 Arrow K. J., Harris T. B., Marschak J. Optimal inventory policy // Econometrica. - 1951, Vol. 19. - Pp. 250-272.

10 Wilson, R. A Scientific Routine for Stock Control// Harvard Business Review 13, 1934.- Pages 116-128.

11 Harris, F. W., 1913. How Many Parts to Make at Once// Operations Research, 1990, 38(6), Pages 947-950.

12 Harris, F. W. Patents from a Patent Attorney's Viewpoint// Machinery,1914. № 21(1), Pages 39-40.

13 Harris, F. W. What Quantity to Make at Once. //The Library of Factory Management, Vol. V. Operation and Costs. Chicago: A. W. Shaw Company,1915.- Pages 47-52

14 Линдерс М.Р., Харольд Е.Ф. Управление снабжением и запасами. Логистика. - Пер. с англ. - СПб.: Полигон, 1999. - 768 с. - С. 243-247

15 Srinivas C. Consignment inventory model with variable// В сборнике: Procedia Engineering Сер. "International Conference on Industrial Engineering, ICIE 2017" 2017. С. 1528-1534.

16 О'Лири Дэниел. ERP системы. Современное планирование и управление ресурсами предприятия. Выбор, внедрение, эксплуатация.- М.: ООО «Вершина», 2004 , 272 с.

17 Колчанова П.С. Применение кластерных технологий и ERP-систем в процессе управления предприятием// Актуальные вопросы современной науки. 2015. № 2 (5). С. 124-127.

18 Рачков, М.Ю. Оптимальное управление детерминированными и стохастическими системами / М.Ю. Рачков. - М. : Московский гос. индустриальный университет, 2005. - 135 с.

19 Антонян Л.В. Методика выбора модели управления запасами// Методы менеджмента качества. 2014. № 10. С. 38-45.

20 Шнайдер, Роберт Microsoft SQL Server 6.5. Проектирование высокопроизводительных баз данных; М.: Лори - Москва, 2014. - 361 c.

21 Дэвидсон, Луис проектирование баз данных на SQL Server 2000; Бином - Москва, 2014. - 660 c.

22 MySQL Database triggers [Электронный ресурс], - MySQL 5.6 Reference Manual, - URL: https://dev.mysql.com/doc/refman/5.6/en/triggers.html - (Дата обращения: 10.10.2018).

23 Пешкова О.В. Об одном подходе к оценке эффективности автоматизации управления ресурсами предприятия// Известия Иркутской государственной экономической академии. 2007. № 6. С. 110-112.

24 Карева И. Н. Сравнительная характеристика ERP-систем SAP и Oracle // Молодой ученый. — 2014. — №20. — С. 279-281. — URL https://moluch.ru/archive/79/13746/ (дата обращения: 19.06.2019).

25 Meer, Kamran H. Best Practices in ERP Software Applications, 2005.

- 232 с.

26 Скотт, Миллетт Предметно-ориентированное проектирование. Паттерны, принципы и методы. Руководство / Миллетт Скотт. - М.: Питер, 2017. - 734 c.

27 Пасынков Б.В. Уязвимость ERP-систем на примере программных продуктов//В сборнике: "Системный анализ в проектировании и управлении" сборник научных трудов XXII Международной научно-практической конференции. 2018. С. 315-319.

28 Vlasov V., Chebotareva V., Rakhimov M., Kruglikov S. AI user support system for SAP ERP// Journal of Physics: Conference Series (см. в книгах). 2017. Т. 913. № 1. С. 012001.

29 Vysochkin A.V., Fedorov, A. Kokin, V., Andrianov, A. Improving the efficiency of program analysis with symbolic execution// IEEE Russia Section Young Researchers in Electrical and Electronic Engineering Conference, ElConRus 201724 April 2017, Номер статьи 7910574, Pages 390-393

30 Саенко О.В., Пителинский К.В. Логистический подход УК управлению материальными запасами// Межотраслевая информационная служба. 2006. № 4. С. 51-62.

31 Моргунов А.Ф. Оценка локализации некоторых из представленных на российском рынке ERP-систем // Вестник компьютерных и информационных технологий. 2014. № 12 (126). С. 37-42

32 Гарсиа-Молина Г., Ульман Дж., Уидом Дж. Системы баз данных.

- Вильямс, 2003. - 1088 с.

33 Джеймс Р. Грофф, Пол Н. Вайнберг, Эндрю Дж. Оппель. SQL, 3-е издание. - М.: «Вильямс», 2014. - 960 с.

34 Al-Fedaghi S., Alduwaisan Y. Process modeling for analysis and control: A case study of IT services// International Journal of Control and Automation. 2018. Т. 11. № 1. С. 25-42.

35 Karl F., Reinhart G. Reconfigurations on manufacturing resources: identification of needs and planning// Production Engineering. 2015. Т. 9. № 3. С. 393-404.Перерва О.Л., Лаврухина Н.В., Размахова А.В. Международные стандарты управления MRP, MRP II, BPR, ERP, CSRP// Вопросы радиоэлектроники. 2012. Т. 1. № 3. С. 14-27.

36 Kostina S. Experience in the use of Petri nets to investigate the logistic systems // Логистика. 2012. № 2 (63). С. 18-21.

37 Новиков В.Э.Особенности управления запасами в цепях поставок сетевых розничных операторов// Логистика и управление цепями поставок. 2015. № 4 (69). С. 68-75.

38 Иванова О.М. Логистические стратегии для оптимального управления запасами в компании// Логистические системы в глобальной экономике. 2018. № 8. С. 343-347.

39 David A. Patterson, John L. Hennessy. Computer Architecture: A Quantitative Approach, 5th Edition. - Morgan Kaufmann, 2011. - 856 с.

40 Кормен Т., Лейзерсон Ч. Алгоритмы: построение и анализ / Под ред. И. В. Красикова. - 2-е изд. - М.: Вильямс, 2005. - С. 632-635.

41 Гагарина Л.Г., Чудайкина С.А. Логистические системы и сети Петри //Оборонный комплекс - научно-техническому прогрессу России. 2004. № 3. С. 24-27.

42 Samokhvalov D.I., Dworzanski L.W. Automatic code generation from nested Petri nets to event-based systems on the telegram platform// Труды Института системного программирования РАН. 2016. Т. 28. № 3. С. 65-84.

43 Высочкин А.В., Слюсарь В.В., Николаев О.В.Особенности онтологического проектирования в задачах интеллектуальной обработки

данных // Оборонный комплекс - научно-техническому прогрессу России. 2016. № 4 (132). С. 22-25

44 Высочкин А.В. Разработка графовой модели триггерного управления в системах управления ресурсным обеспечением производства // Международный электронный научно-технический журнал «Теория. Практика. Инновации», 2019.Режим доступа: http ://www.tpinauka.ru/2019/01/Vysochkin .pdf

45 Харари Ф. Теория графов. - М.: УРСС, 2003. - 300 с.

46 Оре, Ойстин. Теория графов. - М.: УРСС, 2008. - 352 с.

47 Буй Д.Б., Шишацкая Е.В., Fabunmi S., Mohammed K. Рефлексивно-транзитивные замыкания бинарных отношений// Электротехнические и компьютерные системы. 2016. № 22 (98). С. 272-276.

48 Высочкин А.В., Кокин В.В., Портнов Е.М.Математическая модель оценки вычислительных ресурсов // Международная научно-техническая конференция "Энергосбережение и эффективность в технических системах". Тезисы докладов. Тамбовский государственный технический университет , 2017.-C.321-322.

49 Высочкин А.В., Кокин В.В., Аунг Чжо Мьо Методика оценки временных характеристик АСУТП в энергетике// Международная научно -техническая конференция "Энергосбережение и эффективность в технических системах". Тезисы докладов. Тамбовский государственный технический университет, 2017.-C.392-393

50 Высочкин А.В., Кокин В.В. Разработка модели ресурсного обеспечения производства// Всероссийская межвузовской научно -практическая конференция "Актуальные проблемы информатизации в науке и образовании". Тезисы докладов. Москва, Зеленоград. МИЭТ, 2018. -C.29.

51 Иан Грэхем. Объектно-ориентированные методы. Принципы и практика. - 3-е изд. - М.: «Вильямс», 2004. - С. 880.

52 Ноубл, Дж., Андерсон, Т., Брэйтуэйт, Г., Казарио, М., Третола. Основы программирования. - БХВ-Петербург, 2011. - С. 548.

53 Гради Буч, Роберт А. Максимчук, Майкл У. Энгл, Бобби Дж. Янг, Джим Коналлен, Келли А. Хьюстон. Объектно-ориентированный анализ и проектирование с примерами приложений. - 3-е издание. - «Вильямс», 2010.

54 Keval Vora; Rajiv Gupta; Guoqing Xu KickStarter: Fast and Accurate Computations on Streaming Graphs via Trimmed Approximations// International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS'17). 2017.- pp. 237-251.

55 Balmas, Francoise. Displaying dependence graphs: a hierarchical approach. 2001. - 261 С.

56 D. Crockford The application/json Media Type for JavaScript Object Notation (JSON) - Internet Engineering Task Force, 2006. - 10 с.

57 Синдеев С.С. Исследование использования тип данных - JSON в базе данных MYSQL// В сборнике: Фундаментальные и прикладные исследования: от теории к практике Материалы II международной научно-практической конференции, приуроченной ко Дню Российской науки. 2018. С. 201-204.

58 Mironov V.V., Gusarenko A.S., Yusupova N.I. JSON Documents processing using situation-oriented databases// В сборнике: Computer Science and Information Technologies (CSIT'2017) proceedings of the 19th International Workshop. 2017. С. 97-103.

59 Симаков Р.А., Логашов Д.С. Red database: анализ интеграции с JSON// Алгоритмы, методы и системы обработки данных. 2017. № 1 (35). С. 58-66.

60 Высочкин А.В., Квач А.И., Портнов Е.М.Разработка алгоритма поиска и ранжирования неструктурированной информации// Инженерный вестник Дона, 2019.- №1.-C.57-61

61 Левитин А. В. Глава 5. Метод уменьшения размера задачи: Топологическая сортировка // Алгоритмы. Введение в разработку и анализ -М.: Вильямс, 2006. - С. 220-224. - 576 с.

62 Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Глава 22.4. Топологическая сортировка // Алгоритмы: построение и анализ = Introduction to Algorithms / Под ред. И. В. Красикова. - 2-е изд. - М.: Вильямс, 2005. - С. 632-635.

63 Joseph M. Morris Traversing binary trees simply and cheaply // Information Processing Letters. - 1979. - Т. 9, вып. 5.

64 Цициашвили Г.Ш., Осипова М.А., Лосев А.С. Алгоритмы кластеризации графов// Вестник Воронежского государственного университета. Серия: Физика. Математика. 2016. № 1. С. 145-149.

65 Мэтт Зандстра. PHP: объекты, шаблоны и методики программирования. - 3-е издание. - М.: «Вильямс», 2010. - С. 560.

66 Дмитрий Котеров, Алексей Костарев. PHP. - СПб.: «БХВ-Петербург», 2005. - С. 1120.

67 Крышень М.А. Абстрактные типы и неизменяемые структуры данных для интерактивной визуализации графов// Программная инженерия. 2015. № 7. С. 21-28.

68 Кяжин С.Н., Фомичев В.М. Алгоритмы анализа примитивности ориентированных графов// Безопасность информационных технологий. 2012. Т. 19. № 1. С. 102-103.

69 Баранов Д.А. Laravel Eloquent ORM ELOQUENT ORM// Информационно-компьютерные технологии в экономике, образовании и социальной сфере. 2018.№ 3 (21). -С. 73-79.

70 Высочкин А.В. Анисимов А.А., Портнов Е.М. Методика синтеза структуры обрабатывающих устройств распределенных вычислительных систем// VI Международная научно -техническая конференция студентов, молодых ученых и специалистов "Энергосбережение и эффективность в технических системах". Тамбовский государственный технический университет , 2019.

71 Круглов, В.М. Случайные процессы / В.М. Круглов. - М.: Academia, 2018. - 318 c.

72 Коралов, Л.Б. Теория вероятностей и случайные процессы / Л.Б. Коралов. - М.: МЦНМО, 2013. - 408 с.

73 Емельянов, С.В. Труды ИСА РАН: Системы управления и моделирование. Динамические системы. Управление рисками и безопасностью. Методы и модели в экономике. Прикладные а / С.В. Емельянов. - М.: Красанд, 2014. - 124 с.

74 Ким, Д.П. Теория автоматического управления. Том 1. Линейные системы / Д.П. Ким. - М.: Физматлит, 2007. - 312 с.

75 Аунг Чжо Мьо, Высочкин А.В., Кокин В.В., Чжо Зин Лин, Портнов Е.М.Совершенствование структуры контролируемых пунктов системы телемеханики//Журнал "Международный журнал прикладных и фундаментальных исследований". - 2019. - № 2. Режим доступа: ШрБ ://аррНеё-гевеагсЬ.ги/рё1/2019/2/12662.рёГ

76 Высочкин А.В. Разработка системы автоматизированного управления технологическими процессами ресурсного обеспечения производства//Аспирант и соискатель, 2019.-№1.-С.86-88.

77 Таха Х. А. Введение в исследование операций. — 7-е изд.: Пер. с англ. — М.: Изд. дом «Вильямс», 2005. — 912 с.

78 Высочкин А.В. Портнов Е.М., Слюсарь В.В.,Разработка математической модели системы управления ресурсами предприятия// Современные наукоемкие технологии, 2019.- №1.-С.97-102.

79 Александров, П.С. Введение в теорию множеств и общую топологию - М.: Наука, 2011. - 626 с.

80 Высочкин А.В. Портнов Е.М., Николаев Н.А., Власова А.О.,Преференциальный алгоритм управления процессами ресурсного обеспечения и пополнения запасов// Естественные и технические науки, 2019.-№2.-С.195-196.

81 Высочкин А.В. Разработка преференциального алгоритма управления процессами ресурсного обеспечения и пополнения запасов//26 -я Всероссийская межвузовская научно-техническая конференция студентов и

аспирантов «Микроэлектроника и информатика - 2019». Тезисы доклада.-М.:МИЭТ, 2019.-C.106

82 Vysochkin A.V., Zaw Hein , Aung Kyaw Myo, Hein Htet Zaw Development of a selective control algorithm of the production logistics flows// Proceedings of the 2019 IEEE Russia Section Young Researchers in Electrical and Electronic Engineering Conference, ElConRus 2019, Pages 2157-2161.

83 Высочкин А.В., Кокин В.В., Портнов Е.М. К вопросу оценки качества АСУТП в энергетике// Материалы IV Международной научно-технической конференции студентов, молодых ученых и специалистов "Энергосбережение и эффективность в технических системах". Тамбовский государственный технический университет , 2017. -C.411-412.

84 Высочкин А.В. Система динамического управления процессом пополнения производственных запасов// Тезисы доклада на конференции №47 «Актуальные вопросы науки.-М.: Издательство "Спутник+", 2018.

85 Domínguez A. A History of the Convolution Operation // IEEE Pulse. — 2015. — Vol. 6, no. 1. — P. 38—49.

86 Davig, T., Hall, A.S.Recession forecasting using Bayesian classification // International Journal of Forecasting 35(3), 2019.- pp. 848-867

87 Габидуллина Л.Х., Ганеев Р.Р. Практические аспекты оптимизации процесса управления запасами на предприятии// В сборнике: кластерные инициативы в формировании прогрессивной структуры национальной экономики// Cборник научных трудов 2-й Международной научно-практической конференции: в 2-х томах. 2016. С. 7786.

88 Высочкин А.В., Гагарина Л.Г.Учет сезонного фактора при управления процессами ресурсного обеспечения и пополнения запасов производства//Актуальные проблемы современной науки, 2019. -№2.-C.241-243.

89 Сумец А.М. Выбор стратегии управления товарными запасами с учетом фактора сезонности // Вестник Полоцкого государственного

университета. Серия D: Экономические и юридические науки. 2010. № 4. С. 163-170.

90 Жукова Я.В., Козеной Д.Ю.Влияние фактора сезонности на логистические издержки //В сборнике: От синергии знаний к синергии бизнеса Сборник статей и тезисов докладов III международной научно -практической конференции студентов, магистрантов и преподавателей. Омский филиал Негосударственного образовательного частного учреждения высшего образования «Московский финансово-промышленный университет «Синергия». 2016. С. 480-483.

91 Кузнецов С. Д. Основы баз данных. - 2-е изд. - М.: Интернет-университет информационных технологий; БИНОМ. Лаборатория знаний, 2007. - 484 с.

92 Дейт К. Дж. Системы баз данных. - 8-е изд. - М.: Вильямс, 2005. - 1328 с.

93 Коннолли Т., Бегг К. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. - 3-е изд. - М.: Вильямс, 2003. - 1436 с.

94 Тарасик, В.П. Математическое моделирование технических систем: Учебник для вузов; Мн: Дизайн ПРО - М., 2011. - 640 с.

95 Бражник А.Н. Имитационное моделирование: возможности GPSS WORLD. — СПб..: Реноме, 2006. — 439 с.

96 Дж. Макконелл. Основы современных алгоритмов. - Изд. 2 доп. -М.: Техносфера, 2004. - 368 с.

97 Майк Гандерлой, Джозеф Джорден, Дейвид Чанц. Часть II. Язык программирования Transact-SQL // Освоение Microsoft SQL Server 2005 = Mastering Microsoft SQL Server 2005. — М.: «Диалектика», 2007. — С. 139280. — ISBN 0-7821-4380-6.

98 Кокин В.В. Епишин К.О. Разработка нестационарной модели динамического пополнения производственных ресурсов и запасов //Аспирант и соискатель, 2019.-№1.-С.89-92.

99 Стерлигова А.Н. Управление запасами в целях поставок: Учебник.

- М.: ИНФРА - М, 2009.

100 А. А. Разборов О сложности вычислений // Математическое просвещение. - МЦНМО, 1999. - № 3.

101 Д. Грин, Д. Кнут. Математические методы анализа алгоритмов. М.: Мир, 1987. - 120 с.

102 Джон Э. Сэвидж. Сложность вычислений. - М.: Факториал, 1998.

- 368 с.

103 В. Н. Крупский. Введение в сложность вычислений. - М.: Факториал Пресс, 2006. - 128 с.

104 Высочкин А.В., Кокин В.В. Разработка устройства частотно-импульсного измерения дисперсии сигнала// Материалы научно-практической конференции "Актуальные проблемы информатизации в науке и образовании - 2017" Сборник статей. 2017. С. 60-64.

105 Высочкин А.В. И др. Разработка генератора верификационных тестов для многоядерных структур //Информатизация и связь. 2017. № 4. С. 20-25.

Приложение 1

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

1. Модуль преобразования объектов и задач ERP-триггеров

1.1. Файл Element.php <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Element extends Model {

protected $casts = [

'props' => 'array', ];

/**

* Relation for entity.

*/

public function entity() {

return $this->belongsTo(Entity::class); }

}

1.2. Файл Dictionary.php <?php

namespace App;

use App\Collections\DictionaryValuesCollection; use App\Scopes\ForTeamScope; use DB;

use Illuminate\Database\Eloquent\Model;

class Dictionary extends Model

90 {

protected $fillable = [

'name', ];

protected $appends = [

'sorted_values', ];

protected $casts = [

'values' => 'array', ];

/**

* The "booting" method of the model.

*

* @return void

*/

protected static function boot() {

parent::boot();

static::addGlobalScope(new ForTeamScope()); }

public function getSortedValuesAttribute() {

$values = (array) $this->values; usort($values, function ($a, $b) {

return $a['sort'] <=> $b['sort'];

});

return $values; }

/** 91

* Гидрация значений словаря из json объекта который мы

получаем из формы.

*

* @param string $json

*

* @return void

*/

public function hydrateValues($json) {

$this->values = DictionaryValuesCollection::collect($json) ->normalize()

->keyBy('slug'); }

/**

* Безопасно ли удалять этот справочник?

*

* @return bool

*/

public function isDeletable() {

//$entity = Entity::whereRaw("jsonb_exists(props, ?)", [$this->slug])->first(['id']);

$entities = Entity::whereNotNull('props')->get(['props']); foreach ($entities as $entity) { foreach ($entity->sorted_props as $prop) { if ($prop['type'] == 'dictionary' && $prop['extra']['dictionary'] == $this->id){ return false;

} } }

return true; }

}

92

1.3. Файл User.php <?php

namespace App;

use Laravel\Spark\CanJoinTeams; use Laravel\Spark\User as SparkUser;

class User extends SparkUser {

use CanJoinTeams;

/**

* The attributes that are mass assignable.

*

* @var array

*/

protected $fillable = [ 'name',

'email', ];

/**

* The attributes excluded from the model's JSON form.

*

* @var array

*/

protected $hidden = [

'password',

'remember_token',

'authy_id',

'country_code',

'phone',

'card_brand',

'card_last_four',

'card_country',

'billing_address',

93

'billing_address_line_2', 'billing_city', 'billing_zip', 'billing_country',

'extra_billing_information', ];

/**

* The attributes that should be cast to native types.

*

* @var array

*/

protected $casts = [ 'trial_ends_at' => 'date', 'last_login_at' => 'date',

'uses_two_factor_auth' => 'boolean', ];

public function isOwner() {

return current_team()->isOwnedBy($this->id); }

public function scopeFromTeam($query, $teamId = null) {

if (is_null($teamId)) {

$teamId = current_team_id(); }

return $query->whereHas('teams', function($q) use ($teamId) {

$q->where('team_id', '=', $teamId); });

} }

1.4. Файл SavesElement.php <?php

namespace App\Savers; use App\Element; use App\Entity; use App\Team; use App\User; use Auth;

class SavesElement {

/**

* @var Element

*/

protected $model;

/**

* @var Team

*/

protected $team;

/**

* SavesElement constructor.

* @param $model

*/

public function __construct($model) {

$this->model = $model;

$this->team = current_team(); }

/**

* @param array $data

* @param bool $new

* @return bool

*/

public function save(array $data, $new = false) {

if ($this->model->entity_id) {

$data['entity_id'] = $this->model->entity_id; }

$this->replaceNullsInProps($data['props']); if ($this->validate($data)) {

return false; }

$this->model->props = $data['props']; if ($new) {

$this->model->entity_id = $data['entity_id']; $this->model->team_id = $this->team->id;

$this->model->created_by = Auth::id(); }

return $this->model->save(); }

/**

* @param array $data

* @return bool

*/

public function create(array $data) {

return $this->save($data, true); }

private function replaceNullsInProps(&$props) {

foreach ($props as $k => $prop) {

$props[$k] = (string) $prop; }

}

private function validate($data) {

if (!$data['entity_id']) {

return false; }

$entity = Entity::find($data['entity_id']); if (!$entity['entity_id']) {

return false; }

$availableSlug = $entity->propsSlugs(); foreach ($data['props'] as $slug => $value) { if (!in_array($slug, $availableSlug)) {

return false; }

}

foreach ($entity->sorted_props_with_details as $prop) {

if (!$this->isPropertyValid($prop, $data['props'] [$prop ['slug']])) {

return false; }

}

return true; }

private function isPropertyValid($prop, $value) {

if (!$value) {

return true; }

$type = $prop['type']; if ($type == 'user') {

return $this->validatePropertyUser($prop, $value); }

if ($type == 'enum') {

return $this->validatePropertyEnum($prop, $value); }

if ($type == 'dictionary') {

return $this->validatePropertyDictionary($prop,

$value); }

if ($type == 'element') {

return $this->validatePropertyElement($prop, $value); }

return true; }

private function validatePropertyUser($prop, $value) {

if (!is_numeric($value)) {

return false; }

$user = User::find($value); if (!$user) {

return false; }

return $user->onTeam($this->team); }

private function validatePropertyEnum($prop, $value) {

return in_array($value, $prop['extra']['values']); }

private function validatePropertyDictionary($prop, $value) {

$availableValues = [];

foreach ($prop['details']['sorted_values'] as $enum) {

$availableValues[] = $enum['slug']; }

return in_array($value, $availableValues); }

private function validatePropertyElement($prop, $value) {

$availableValues = [];

foreach ($prop['details']['elements'] as $element) {

$availableValues[] = $element['id'];

}

return in_array($value, $availableValues); }

}

2. Модуль определения рассчитываемых свойств ERP-триггеров

2.1. Файл EntityController.php

<?php

namespace App\Http\Controllers; use App\Entity;

use App\Http\Requests\Entity\AddRequest; use App\Http\Requests\Entity\UpdateRequest; use App\Team;

99

use App\Http\Requests; use LogicException; use Ramsey\Uuid\Uuid;

class EntityController extends Controller {

public function __construct() {

$this->middleware('auth');

$this->middleware('owner', ['except' => 'index']); }

/**

* Display a listing of the resource.

*

* @return \Illuminate\Http\Response

*/

public function index() {

$entities = Entity::orderBy('sort')

->orderBy('id')

->get();

return view('entities.index', compact('entities')); }

/**

* Show the form for creating a new resource.

*

* @return \Illuminate\Http\Response

*/

public function create() {

return view('entities.create'); }

/**

* Store a newly created resource in storage.

100

*

* @param AddRequest Srequest

* @return \Illuminate\Http\Response

*/

public function store(AddRequest Srequest) {

Sdata = $request->all(); Sdata['sort'] = intval(Sdata['sort']) ? intval(Sdata['sort']) : 100;

Sdata['slug'] = str_slug(Sdata['name']).'-'.Uuid::uuid4()->toString();

Sentity = current_team()->addEntity(new Entity(Sdata)); if (!Sentity) {

return back()->withError('Something went wrong'); }

return redirect()->route('entities.edit',

[current_team_subdomain(), Sentity->id]); }

/**

* Display the specified resource.

*

* @param int Sid

* @return \Illuminate\Http\Response

*/

public function show(Sid) {

// }

/**

* Show the form for editing the specified resource.

*

* @param int Sid

* @return \Illuminate\Http\Response 101

*/

public function edit(Sid) {

Sentity = Entity::findOrFail(Sid); return view('entities.edit', compact('entity',

'entitiesNames')); }

/**

* Update the specified resource in storage.

*

* @param UpdateRequest Srequest

* @param int Sid

* @return \Illuminate\Http\Response

*/

public function update(UpdateRequest $request, $id) {

$entity = Entity::findOrFail($id); try {

$entity->fill($request->all()); $entity->hydrateProps($request->input('props')); $entity->save(); } catch (LogicException $e) {

return (array) json_decode($e->getMessage()); }

return [

'errors' => [] ];

}

/**

* Remove the specified resource from storage.

*

* @param int $id

* @return \Illuminate\Http\Response 102

*/

public function destroy($id) {

// }

}

2.2. Файл EntityTransformer.php <?php

namespace App\Transformers; use App\Element;

use League\Fractal\TransformerAbstract;

class ElementTransformer extends TransformerAbstract {

/**

* Turn this item object into a generic array.

*

* @param $item

* @return array

Обратите внимание, представленные выше научные тексты размещены для ознакомления и получены посредством распознавания оригинальных текстов диссертаций (OCR). В связи с чем, в них могут содержаться ошибки, связанные с несовершенством алгоритмов распознавания. В PDF файлах диссертаций и авторефератов, которые мы доставляем, подобных ошибок нет.