Освоение программирования за 2 года с нуля или как я пытался автоматизировать реальное производство

Итак, немного о себе, производстве и программировании:

Моя профессия далека от IT технологий. Я работаю на производстве кажется всю жизнь довольно давно. Тематика — производство и ремонт металлообрабатывающих станков. Производим станки как новые, так и ремонтируем. Стараемся все делать локализировано (импортозамещение ж)- все железки точим, шлифуем, собираем и т.д

Вот такие ~~чудища~~ станки производим

Вот такие ~~чудища~~ станки производим

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

Итак, 2022 год. Везде говорят про ИТ. Стало интересно. Решил попробовать с# — любопытно, но показалась сложно: ООП и прочее, хотя какой-то калькулятор на WinForms сделать все же получилось. Вкладывать в свое образование мне стало как то жалко -, а вдруг не пойдет? А вдруг я тупой или старый? (30лет), так что в основном смотрел видео на YouTube и читал книжки. Как-то в каком-то видео услышал высказывание — «Чтобы научиться программировать, надо попробовать написать проект, который связан с вашей текущей работой». Звучало не плохо — почему бы и нет?

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

В голове это выглядело примерно так:

  • некий сайт, где лежат чертежи и все, что мы закупаем

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

  • Так как контрагентов довольно много и деталей много хотелось бы, чтобы сайт (тогда я думал, что это делает какой-то мифический сайт и/или магия) сам подбирал нужного контрагента под конкретную деталь.

  • Хотелось, чтобы я всегда видел у кого что и когда заказано.

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

  • Хотелось иметь удобную навигацию по чертежам (те, кто связаны с производством меня поймут — есть сборочный чертеж, в нем ссылка на номер детали из спецификации и потом только номер самой детали).

В начале пути цель казалась не достижима, но упертость победила.

Итак, я начал изучать по видео из YouTube HTML CSS и JS.

За пару месяцев (что меня удивило) я худо-бедно стал разбираться со стилями css. Мои страницы, которые я пытался верстать, пестрили вездесущими DIV, но что-то получалось. Все же я был еще далек от начала проекта.

И начать я его решил сразу с проекта на REACT — везде про него много говорили. Ну что, освоим!

Занимаясь проектом только по вечерам после работы и в обед, параллельно изучая REACT, ExressJS, mongo через пол года у меня что-то начало вырисовываться.

Был создан сервер на Express, который общается с mongoDB через mongose. Сервер отдавал статику (чертежи), фактически просто картинки.

Также было приложение на REACT, где все чертежи можно было посмотреть, добавить в корзину и присвоить контрагента.

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

Запустил все в локальной сети и … ОНО ЗАРАБОТАЛО!

Навигация по каталогам

Навигация по каталогам

И работает!
Воодушевленный таким успехом, я добавил несколько новых функций:

  • Отправка напоминания каждому контрагенту о сделанном заказе — все детали, которые я от них жду

  • Отслеживание длительность поставки запчастей для анализа и прогнозирования закупок

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

  • Установка приоритета на детали. Контрагенту приходит уведомление что, мол, эта железка очень нужна и помечается в таблице красным цветом с пометкой «СРОЧНО».

  • Добавление прайсов от контрагентов.

    • Получилось красиво. Контрагенты присылают свой прайс в таблице Excel, я добавляю его в программу. Она подбирает на основе регулярных выражений (опять выстрел в ногу) чертеж к деталям (если они есть в каталоге) и растасовывает их по группам и подгруппам.

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

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

Исполнителей пришлось закрасить для статьи (мало ли что) паранойя

Исполнителей пришлось закрасить для статьи (мало ли что) паранойя

Следующим шагом стало управление производством.

Бизнес процесс довольно прост — приходит станок в ремонт, на него приходит договор со сроками, ЗИП (запасными частями), цветом станка характеристиками и прочее. За этим станком закрепляется бригада рабочих которые этот станок собирают.

К этому времени это приложение работает через локальную сеть на всех компьютерах на производстве.

Для автоматизации нашего бизнес процесса были реализованы следующие возможности:

  • Добавление сотрудников

  • Размещение на виртуальном поле станков

  • Назначение сотрудников для процесса сборки

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

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

  • Электронный табель посещения работы для сотрудников

  • Отслеживание дней рождения

  • Хранение истории выполненных контрактов. Можно посмотреть детально предмет контракта, контрагента, дату, а также кто из сотрудников собирал оборудование, чтобы если что наказать поощрить.

Соотношение виртуальной сборки и реальной.

Соотношение виртуальной сборки и реальной.

Параллельно с этим создал интеграцию с «Деловыми линиями» — теперь из приложения можно отслеживать грузы, которые идут к нам.

Слева направо - текущие станки, (если красные, значит н̶а̶д̶о̶ ̶п̶о̶т̶о̶р̶о̶п̶и̶т̶ь̶с̶я̶,̶ ̶и̶н̶а̶ч̶е̶ ̶о̶т̶л̶у̶п̶я̶т̶ подходят сроки сдачи), последние, полученные запчасти.

Слева направо — текущие станки, (если красные, значит н̶а̶д̶о̶ ̶п̶о̶т̶о̶р̶о̶п̶и̶т̶ь̶с̶я̶, ̶ ̶и̶н̶а̶ч̶е̶ ̶о̶т̶л̶у̶п̶я̶т̶ подходят сроки сдачи), последние, полученные запчасти.

И немного о стеке:
front — REACT / REACT-ROUTER / REDUX / REDUX-THUNK / REACT-KONVA
server — EXPRESS /mongoDB+mongose / momentJS / Winston / uniqid / pdf-parse

Подытожим:

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

Сейчас активно изучаю IT технологии и готовлю еще одно решение для соседнего производства под ключ, с полноценной разверткой, масштабируемое красивое и быстрое (PWA.desktop) … правда с таким же бюджетом.

Если вдруг статейка оказалась для Вас интересна, расскажу как программа устроена под капотом, но это уже совсем другая история…

Всех благ! Успехов в автоматизации!

© Habrahabr.ru