Евгений Росляков написал для типографии полного цикла сервис заказов на Spring Boot: онлайн-расчёт цены, загрузку макетов с автоматической проверкой и статусы производства для клиента, менеджера и цеха. Веб-разработкой он занимается с 2016 года, работает самозанятым, до старта подписывает договор, а юрлицам выдаёт закрывающие документы. Базируется в Москве, но может вести проект и удалённо.
Типография печатает визитки, каталоги и упаковку небольшими тиражами. Заказы приходят через онлайн-калькулятор и приём макетов на сайте. Прежний сервис писали давно, и перед праздниками он падал в самый неудобный момент, когда идут корпоративные заказы: сотни визиток и подарочных коробок для сотрудников.
Макеты терялись. Клиент загружал файл, а менеджер его не находил или находил не ту версию. Когда файл всё же доходил до цеха, выяснялось, что нет вылетов под обрез или цвета в RGB вместо печатных, и заказ откладывался на день.
Менеджеры не видели, на каком этапе заказ, и ходили в цех спрашивать. Корпоративным клиентам тоже было неудобно: сотрудников у компании несколько, а в аккаунте один пароль на всех.
Нужен был сервис, который переживёт сезон, не потеряет файлы и покажет каждому только его часть работы. Серверную часть я взял на себя. Калькулятор и страницы сайта на стороне типографии остались прежними и подключились к новому сервису.
За основу взял Spring Boot на Java. Экосистема Java Spring дала готовые куски для того, что типографии нужно: безопасность, работа с базой, очереди и проверка данных. Каркас с нуля писать не пришлось.
Расчёт цены вынес в отдельный модуль. Тираж, формат, бумага, число красок, постпечатная обработка, срочность: правила лежат в таблицах, и технолог меняет их сам, без программиста. Цену в калькуляторе и в заказе считает один и тот же код, поэтому расхождений не бывает.
Макеты проверяются при загрузке. Сервис смотрит размер страницы, вылеты под обрез, цветовую модель и разрешение изображений. Если с файлом что-то не так, клиент сразу читает причину простыми словами и загружает исправленный. Проверка идёт через очередь: файл принимается мгновенно, разбирает его отдельный обработчик. В сезон очередь просто становится длиннее, а сайт не зависает.
Роли настроил на Spring Security. Клиент видит свои заказы. У корпоративного клиента есть администратор компании и сотрудники, которые оформляют заказы от её имени. Менеджер ведёт заказы и общается с клиентом. Цех видит только макет, тираж, материал и срок, а цен не видит.
Работа с базой идёт через Spring Data. Репозитории описаны на Spring JPA, как чаще говорят, Spring Data JPA, с Hibernate под капотом. Запросы к заказам, файлам и статусам читаются просто. Тяжёлые выборки я проверял отдельно, чтобы список заказов менеджера не превращался в сотню запросов к базе.
Статусы производства: принят, макет проверен, в печати, постпечатная обработка, готов, выдан. Каждая смена статуса пишется в историю, а клиент получает уведомление.
Перед сезоном провёл нагрузочные прогоны: одновременная загрузка десятков больших макетов плюс работа менеджеров. Нашёл два узких места и убрал их.
Первый предпраздничный сезон на новом сервисе типография прошла без падений. Корпоративные заказы приходили пачками, и очередь проверки макетов разбирала их без остановки.
Макеты больше не теряются. Каждая загрузка привязана к заказу и хранит версии, менеджер открывает нужный файл в один щелчок. Про отсутствующие вылеты клиент узнаёт сразу, а не после звонка из цеха.
Менеджеры перестали бегать в цех: статус виден в сервисе, а клиент смотрит его сам. Вопросов «где мой заказ» заметно поубавилось, и у менеджеров освободилось время на новые заказы. Корпоративные клиенты работают вместе: у каждого сотрудника свой вход, а администратор компании видит все заказы и счета.
Автоматика ловит технические ошибки, но дизайн не оценивает. Опечатку в тексте или нечитаемый шрифт она не заметит, поэтому живой препресс-оператор остался и смотрит макет глазами. И цены верны ровно настолько, насколько технолог вовремя обновляет правила, когда дорожает бумага.
Дальше типография хочет показывать клиенту предпросмотр макета с обрезом в личном кабинете.
Заказы теряются между сайтом, менеджерами и производством? Напишите мне на freelance.ru, как сейчас идёт заказ от макета до выдачи, и обсудим, что собрать в одном сервисе.