Создание сайта для складского комплекса ответственного хранения в Подмосковье: клиентский кабинет с остатками, приёмками, отгрузками и документами плюс API, через которое склад общается с интернет-магазинами клиентов. Всё сделал Евгений Росляков. Он пишет сайты и веб-сервисы с 2016 года, работает самозанятым, подписывает договор и даёт юрлицам закрывающие документы. Работать можно очно в Москве или удалённо.
Склад хранит товары интернет-магазинов и дистрибьюторов и отгружает их по заявкам. Клиентов много, у каждого свой ассортимент и свои артикулы.
Прежний кабинет был написан на ASP.NET Web Forms. Остатки в нём можно было посмотреть, и только. Заявки на отгрузку клиенты присылали в Excel по почте, а остатки сверяли встречными таблицами. Менеджеры склада вручную переносили строки в учётную систему, и каждый второй разговор начинался с вопроса «а в файле точно так?».
К этому добавлялось, что клиенты продают по-разному. Кому-то хватит кабинета в браузере. Кому-то нужно, чтобы остатки сами попадали на сайт и на маркетплейсы, а заказы сами уходили на склад.
Старый код висел на .NET Framework, и его всё труднее было обновлять и разворачивать. Поэтому вместо косметики решили собрать новый портал на современной платформе.
Портал разделён на две части: кабинет для людей и API для программ. Они работают на общей бизнес-логике и одной базе, но друг другу не мешают.
Кабинет клиента написан на ASP.NET MVC. Для тех, кто вырос на ASP.NET Web Forms, это заметный шаг: страницы строятся из понятных контроллеров и представлений, без скрытого состояния формы. В кабинете есть остатки по артикулам с поиском и фильтрами, история приёмок, заявки на отгрузку, акты и счета для скачивания. Заявку клиент собирает в форме или загружает таблицей, если строк много. Excel остался как запасной путь, но файл проверяется сразу: пустой артикул или лишнее количество клиент видит до отправки, а не из письма с ответом.
Для интеграций написал API на .NET Core Web API. Через него магазин клиента забирает остатки, отправляет заявки и узнаёт статусы: принято, собрано, отгружено. Слой данных тот же, что у кабинета, поэтому цифры в API и на экране совпадают. Доступ по ключам: у каждого клиента свой ключ и права только на его товар. Отдельно написал документацию, чтобы разработчик магазина подключался без звонков на склад.
Про платформу. Работа началась на .NET 5.0, когда шестая версия ещё не вышла. До запуска проект перевели на .NET 6 с долгой поддержкой: пятая версия переставала поддерживаться раньше, чем портал мог устареть. В заметках к сборке так и записано, .NET 5.0/6, а у клиентов работает шестая. Сам переход занял несколько дней, правки были мелкие: пакеты и настройки.
Вход и роли сделаны на штатных средствах ASP.NET Core. Менеджер склада видит всех клиентов, клиент — только себя.
Клиент открывает кабинет и видит остатки по артикулам, не звоня менеджеру. Заявка собирается в одной форме и проверяется сразу, вместо ответа по почте «в файле ошибка». Акты и счета лежат в кабинете, бухгалтерии клиента не нужно запрашивать их отдельно.
Клиенты со своим сайтом или маркетплейсами подключились через API. Остатки уходят на витрину сами, заявки приходят на склад без пересылки файлов. У менеджеров склада меньше ручных операций: переносить строки из писем почти не приходится.
Не всё идеально. Несколько небольших клиентов по-прежнему шлют Excel, и совсем отказаться от него пока не вышло. Ключи API выдаются вручную через администратора. Портал рассчитан на один комплекс, и если появится второй склад, понадобится доработка.
Следующий разумный шаг — уведомления о приёмке и отгрузке на почту и в мессенджер, а затем отчёты по оборачиваемости для крупных клиентов.
Клиенты присылают заявки таблицами, а ваши сотрудники переносят их руками? Свяжитесь со мной через сайт freelance.ru и расскажите, в какой системе ведёте учёт. Обсудим, что можно выдать клиентам в кабинете.