WebCRM (Portable Offline Edition)
Миниатюрная CRM-система для автономного сбора лидов. Работает полностью оффлайн, запускается непосредственно с USB-флешки и спроектирована с возможностью быстрого переноса на любой ПК под управлением Windows 10 без необходимости повторной настройки среды.
🚀 Архитектурные особенности (KISS)
-
Zero Dependencies: Программа написана на чистой Java (JDK 25) с использованием встроенного легковесного веб-сервера
com.sun.net.httpserver. Не требует скачивания тяжелых фреймворков (Spring Boot/Tomcat). -
Портативность: Все компоненты (JDK, репозиторий, база данных) изолированы локально на диске
C:(или флешке) и не засоряют системный реестр Windows. -
Автономная БД: В качестве хранилища используется простой текстовый файл
leads_db.txt, что гарантирует сохранность данных при перезапуске и обновлении страниц.
📂 Структура каталогов
Для корректной работы портативной сборки папки на целевом ПК или USB-носителе должны быть расположены строго по следующему пути:
C:\Java\
├── VSCode-Portable\ <-- Портативное окружение разработчика
│ ├── jdk-25.0.2\ <-- Локальный Java Development Kit (JDK)
│ └── maven_repository\ <-- Локальный оффлайн-репозиторий VS Code
└── prog\
└── webcrm\ <-- Корневой каталог приложения WebCRM
├── .vscode\
│ └── settings.json <-- Файл жесткой привязки VS Code к локальной JDK
├── Main.java <-- Исходный код приложения (интерфейс + логика)
├── README.md <-- Текущая документация
└── leads_db.txt <-- Локальная база данных (создается автоматически)
💻 Порядок запуска приложения
- Подключите USB-накопитель (или убедитесь, что папки скопированы в корень диска
C:). - Запустите редактор VS Code и откройте рабочую директорию проекта:
C:\Java\prog\webcrm\. - Откройте файл
Main.java. - В правом верхнем углу интерфейса VS Code нажмите кнопку Play (
Run Java). - В консоли появится сервисное уведомление:
CRM запущена! Откройте: http://localhost:15853. - Откройте любой веб-браузер и перейдите по адресу:
http://localhost:15853
Примечание для работы оффлайн: Если на ПК временно включается интернет, встроенный менеджер VS Code автоматически подтянет индексы в папку maven_repository\, после чего систему можно полностью изолировать от сети.
📑 Функционал системы и Карта кода
Интерфейс представляет собой веб-страницу со следующими возможностями:
На странице должны быть поля:
- Имя клиента — текстовое поле ввода, обязательное для заполнения.
- Номер телефона — текстовое поле ввода контакта, обязательное для заполнения.
- Источник лида — выпадающий список для сегментации входящего трафика с опциями «Холодный» или «Тёплый».
- Ответственный — выпадающий список для распределения нагрузки между сотрудниками: «Лидоруб» (первичный обзвон) или «МОП» (менеджер отдела продаж).
- Этап сделки — выпадающий список текущего статуса клиента со значениями: «Новый лид», «Квалифицирован», «Назначена консультация», «Отказ».
- Переключатель «Запрошено ТЗ» — флажок (checkbox) для отметки о наличии технического задания от клиента.
- Кнопка «Сохранить» — инициирует отправку данных формы на сервер, запуск валидации и процедуру записи в базу данных.
Что происходит после нажатия кнопки «Сохранить»:
- Валидация: На стороне сервера проверяется заполнение обязательных полей (Имя и Телефон). При ошибке выводится трансляция предупреждения.
-
Сохранение данных: Успешно заполненный лид рендерится ниже формы в виде информационной карточки. Данные мгновенно записываются в файл
leads_db.txtи не исчезают при обновлении (F5) страницы.
Где что находится в коде (Main.java):
-
Интерфейс (HTML/JS): Находится внутри метода
handle()классаCRMHandler. Формируется через динамическую сборку строкиStringBuilder html. -
Логика кнопки «Сохранить»: Обрабатывается в блоке
if ("POST".equalsIgnoreCase(ex.getRequestMethod())). Отвечает за парсинг, валидацию входных данных и генерацию карточек. -
Сохранение данных (БД): Логика чтения и дозаписи файла реализована через стандартные методы пакета
java.nio.file.Filesпри старте сервера и отправке формы. -
Дополнительное задание (Смена этапов): На клиентской стороне внедрен JavaScript-скрипт (метод
ch(b)), циклически переключающий этапы сделки прямо в карточке без перезагрузки страницы. -
Дополнительное задание (API): Метод
sendMockApiRequestэмулирует отправку JSON-пакета с данными лида на внешний контурhttps://crm.local(логируется в консоль VS Code).