update documentation
This commit is contained in:
@@ -40,10 +40,10 @@
|
|||||||
|
|
||||||
## 🛠️ Технологический стек
|
## 🛠️ Технологический стек
|
||||||
|
|
||||||
**Backend:** Go + PostgreSQL + JWT auth
|
**Core Service:** Go (Gin) + PostgreSQL + JWT auth + gRPC
|
||||||
**Frontend:** React PWA (мобильный)
|
**Document Service:** Python (FastAPI) + Redis + Document libraries
|
||||||
**Печать:** PDF генерация
|
**Frontend:** Angular PWA (мобильный) + Material UI
|
||||||
**Инфраструктура:** Docker + HTTPS
|
**Инфраструктура:** Docker + gRPC + Redis + HTTPS
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -53,12 +53,44 @@
|
|||||||
**Команда:** 2 разработчика + 1 дизайнер
|
**Команда:** 2 разработчика + 1 дизайнер
|
||||||
**Бюджет:** $30,000-50,000
|
**Бюджет:** $30,000-50,000
|
||||||
|
|
||||||
### Этапы:
|
### Этапы разработки
|
||||||
1. **Фундамент** (2 недели) - инфраструктура, аутентификация
|
|
||||||
2. **Шаблоны + QR** (3 недели) - генерация мест и кодов
|
```mermaid
|
||||||
3. **Мобильное приложение** (2 недели) - PWA и сканирование
|
gantt
|
||||||
4. **Базовые операции** (2 недели) - управление товарами
|
title MVP План разработки
|
||||||
5. **Тестирование** (1 неделя) - пилот с реальными пользователями
|
dateFormat YYYY-MM-DD
|
||||||
|
section Фундамент
|
||||||
|
Инфраструктура :fund, 2024-01-01, 7d
|
||||||
|
Аутентификация :auth, after fund, 7d
|
||||||
|
gRPC настройка :grpc, after auth, 7d
|
||||||
|
|
||||||
|
section Document Service
|
||||||
|
Python сервис :python, after grpc, 7d
|
||||||
|
PDF генерация :pdf, after python, 7d
|
||||||
|
|
||||||
|
section Шаблоны + QR
|
||||||
|
Шаблоны помещений :templates, after pdf, 7d
|
||||||
|
QR генерация :qr, after templates, 7d
|
||||||
|
|
||||||
|
section Angular PWA
|
||||||
|
Фронтенд :frontend, after qr, 7d
|
||||||
|
QR сканер :scanner, after frontend, 7d
|
||||||
|
|
||||||
|
section Операции
|
||||||
|
Управление товарами :items, after scanner, 7d
|
||||||
|
Поиск и размещение :operations, after items, 7d
|
||||||
|
|
||||||
|
section Тестирование
|
||||||
|
Пилот :pilot, after operations, 7d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Детализация этапов:
|
||||||
|
1. **Фундамент** (2 недели) - инфраструктура, аутентификация, gRPC
|
||||||
|
2. **Document Service** (2 недели) - Python сервис, PDF генерация
|
||||||
|
3. **Шаблоны + QR** (2 недели) - генерация мест и кодов
|
||||||
|
4. **Angular PWA** (2 недели) - фронтенд и сканирование
|
||||||
|
5. **Базовые операции** (2 недели) - управление товарами
|
||||||
|
6. **Тестирование** (1 неделя) - пилот с реальными пользователями
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -62,17 +62,39 @@ Computer Vision функции будут добавлены после успе
|
|||||||
|
|
||||||
## 🎯 Приоритеты реализации
|
## 🎯 Приоритеты реализации
|
||||||
|
|
||||||
### Этап 1: Распознавание чеков
|
```mermaid
|
||||||
|
gantt
|
||||||
|
title Computer Vision Roadmap
|
||||||
|
dateFormat YYYY-MM-DD
|
||||||
|
section Распознавание чеков
|
||||||
|
OCR интеграция :ocr, 2024-03-01, 14d
|
||||||
|
ML модели :ml1, after ocr, 14d
|
||||||
|
API интеграция :api1, after ml1, 14d
|
||||||
|
|
||||||
|
section Распознавание товаров
|
||||||
|
Computer Vision API :cv, after api1, 21d
|
||||||
|
Обучение моделей :train, after cv, 21d
|
||||||
|
Классификация :classify, after train, 14d
|
||||||
|
|
||||||
|
section Анализ пространства
|
||||||
|
Object Detection :detect, after classify, 28d
|
||||||
|
3D reconstruction :3d, after detect, 21d
|
||||||
|
Интеграция с UI :ui, after 3d, 14d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Детализация этапов:
|
||||||
|
|
||||||
|
#### Этап 1: Распознавание чеков
|
||||||
- **Время:** 4-6 недель
|
- **Время:** 4-6 недель
|
||||||
- **Команда:** 1 ML инженер + 1 разработчик
|
- **Команда:** 1 ML инженер + 1 разработчик
|
||||||
- **Сложность:** Средняя
|
- **Сложность:** Средняя
|
||||||
|
|
||||||
### Этап 2: Распознавание товаров
|
#### Этап 2: Распознавание товаров
|
||||||
- **Время:** 6-8 недель
|
- **Время:** 6-8 недель
|
||||||
- **Команда:** 1 ML инженер + 1 разработчик
|
- **Команда:** 1 ML инженер + 1 разработчик
|
||||||
- **Сложность:** Высокая
|
- **Сложность:** Высокая
|
||||||
|
|
||||||
### Этап 3: Анализ пространства
|
#### Этап 3: Анализ пространства
|
||||||
- **Время:** 8-10 недель
|
- **Время:** 8-10 недель
|
||||||
- **Команда:** 1 ML инженер + 1 разработчик + 1 дизайнер
|
- **Команда:** 1 ML инженер + 1 разработчик + 1 дизайнер
|
||||||
- **Сложность:** Очень высокая
|
- **Сложность:** Очень высокая
|
||||||
|
|||||||
@@ -8,19 +8,66 @@
|
|||||||
|
|
||||||
## 📊 Основные аналитические модули
|
## 📊 Основные аналитические модули
|
||||||
|
|
||||||
### 1. Анализ движения товаров
|
```mermaid
|
||||||
|
graph TB
|
||||||
|
subgraph "Аналитические модули"
|
||||||
|
A[Анализ движения товаров]
|
||||||
|
B[Анализ складского пространства]
|
||||||
|
C[Финансовая аналитика]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph "Компоненты"
|
||||||
|
A1[Оборот товаров]
|
||||||
|
A2[Популярные товары]
|
||||||
|
A3[Сезонность спроса]
|
||||||
|
A4[Прогнозирование]
|
||||||
|
|
||||||
|
B1[Загруженность мест]
|
||||||
|
B2[Эффективность использования]
|
||||||
|
B3[Горячие зоны]
|
||||||
|
B4[Рекомендации]
|
||||||
|
|
||||||
|
C1[Стоимость запасов]
|
||||||
|
C2[Оборачиваемость]
|
||||||
|
C3[Прибыльность]
|
||||||
|
C4[Анализ поставщиков]
|
||||||
|
end
|
||||||
|
|
||||||
|
A --> A1
|
||||||
|
A --> A2
|
||||||
|
A --> A3
|
||||||
|
A --> A4
|
||||||
|
|
||||||
|
B --> B1
|
||||||
|
B --> B2
|
||||||
|
B --> B3
|
||||||
|
B --> B4
|
||||||
|
|
||||||
|
C --> C1
|
||||||
|
C --> C2
|
||||||
|
C --> C3
|
||||||
|
C --> C4
|
||||||
|
|
||||||
|
style A fill:#e3f2fd
|
||||||
|
style B fill:#f3e5f5
|
||||||
|
style C fill:#e8f5e8
|
||||||
|
```
|
||||||
|
|
||||||
|
### Детализация модулей:
|
||||||
|
|
||||||
|
#### 1. Анализ движения товаров
|
||||||
- **Оборот товаров** по периодам
|
- **Оборот товаров** по периодам
|
||||||
- **Популярные товары** и категории
|
- **Популярные товары** и категории
|
||||||
- **Сезонность** спроса
|
- **Сезонность** спроса
|
||||||
- **Прогнозирование** потребности
|
- **Прогнозирование** потребности
|
||||||
|
|
||||||
### 2. Анализ складского пространства
|
#### 2. Анализ складского пространства
|
||||||
- **Загруженность** мест хранения
|
- **Загруженность** мест хранения
|
||||||
- **Эффективность** использования пространства
|
- **Эффективность** использования пространства
|
||||||
- **Горячие зоны** и узкие места
|
- **Горячие зоны** и узкие места
|
||||||
- **Рекомендации** по оптимизации
|
- **Рекомендации** по оптимизации
|
||||||
|
|
||||||
### 3. Финансовая аналитика
|
#### 3. Финансовая аналитика
|
||||||
- **Стоимость** товарных запасов
|
- **Стоимость** товарных запасов
|
||||||
- **Оборачиваемость** товаров
|
- **Оборачиваемость** товаров
|
||||||
- **Прибыльность** по категориям
|
- **Прибыльность** по категориям
|
||||||
|
|||||||
@@ -140,22 +140,49 @@
|
|||||||
|
|
||||||
## 📅 План реализации
|
## 📅 План реализации
|
||||||
|
|
||||||
### Этап 1: Интеграции (6-8 недель)
|
```mermaid
|
||||||
|
gantt
|
||||||
|
title Расширенные функции - Roadmap
|
||||||
|
dateFormat YYYY-MM-DD
|
||||||
|
section Интеграции
|
||||||
|
API поставщиков :suppliers, 2024-06-01, 21d
|
||||||
|
Бухгалтерия :accounting, after suppliers, 21d
|
||||||
|
Маркетплейсы :marketplaces, after accounting, 14d
|
||||||
|
|
||||||
|
section Офлайн режим
|
||||||
|
Офлайн функциональность :offline, after marketplaces, 21d
|
||||||
|
Синхронизация :sync, after offline, 14d
|
||||||
|
Конфликт-менеджмент :conflict, after sync, 7d
|
||||||
|
|
||||||
|
section AI функции
|
||||||
|
Умные подсказки :ai1, after conflict, 28d
|
||||||
|
Автоматизация :ai2, after ai1, 28d
|
||||||
|
Чат-бот :ai3, after ai2, 14d
|
||||||
|
|
||||||
|
section Аналитика
|
||||||
|
Предиктивная :analytics1, after ai3, 21d
|
||||||
|
Бизнес-аналитика :analytics2, after analytics1, 21d
|
||||||
|
Операционная :analytics3, after analytics2, 14d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Детализация этапов:
|
||||||
|
|
||||||
|
#### Этап 1: Интеграции (6-8 недель)
|
||||||
- API интеграции с поставщиками
|
- API интеграции с поставщиками
|
||||||
- Экспорт в бухгалтерские системы
|
- Экспорт в бухгалтерские системы
|
||||||
- Базовые интеграции с маркетплейсами
|
- Базовые интеграции с маркетплейсами
|
||||||
|
|
||||||
### Этап 2: Офлайн режим (4-6 недель)
|
#### Этап 2: Офлайн режим (4-6 недель)
|
||||||
- Полная офлайн функциональность
|
- Полная офлайн функциональность
|
||||||
- Синхронизация данных
|
- Синхронизация данных
|
||||||
- Конфликт-менеджмент
|
- Конфликт-менеджмент
|
||||||
|
|
||||||
### Этап 3: AI функции (8-12 недель)
|
#### Этап 3: AI функции (8-12 недель)
|
||||||
- Умные подсказки
|
- Умные подсказки
|
||||||
- Автоматизация процессов
|
- Автоматизация процессов
|
||||||
- Чат-бот поддержка
|
- Чат-бот поддержка
|
||||||
|
|
||||||
### Этап 4: Расширенная аналитика (6-8 недель)
|
#### Этап 4: Расширенная аналитика (6-8 недель)
|
||||||
- Предиктивная аналитика
|
- Предиктивная аналитика
|
||||||
- Бизнес-аналитика
|
- Бизнес-аналитика
|
||||||
- Операционная аналитика
|
- Операционная аналитика
|
||||||
|
|||||||
@@ -62,15 +62,29 @@
|
|||||||
- **Кэширование:** Redis
|
- **Кэширование:** Redis
|
||||||
- **Аутентификация:** JWT
|
- **Аутентификация:** JWT
|
||||||
|
|
||||||
|
### Core Service
|
||||||
|
- **Язык:** Go (Gin)
|
||||||
|
- **База данных:** PostgreSQL
|
||||||
|
- **Аутентификация:** JWT
|
||||||
|
- **Межсервисная коммуникация:** gRPC
|
||||||
|
|
||||||
|
### Document Service
|
||||||
|
- **Язык:** Python (FastAPI)
|
||||||
|
- **Кэширование:** Redis
|
||||||
|
- **Документы:** PDF, Excel, Word
|
||||||
|
- **Шаблоны:** Jinja2
|
||||||
|
|
||||||
### Frontend
|
### Frontend
|
||||||
- **Фреймворк:** React PWA
|
- **Фреймворк:** Angular PWA
|
||||||
- **Дизайн:** Мобильно-ориентированный
|
- **Дизайн:** Material UI + Tailwind CSS
|
||||||
- **Печать:** PDF генерация
|
- **QR Scanner:** @zxing/ngx-scanner
|
||||||
|
- **State Management:** NgRx
|
||||||
|
|
||||||
### Инфраструктура
|
### Инфраструктура
|
||||||
- **Контейнеризация:** Docker
|
- **Контейнеризация:** Docker + Docker Compose
|
||||||
- **Безопасность:** HTTPS, шифрование данных
|
- **Межсервисная коммуникация:** gRPC + Protocol Buffers
|
||||||
- **Мониторинг:** Структурированное логирование
|
- **Безопасность:** HTTPS, CORS, JWT
|
||||||
|
- **Мониторинг:** Prometheus + Grafana
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -2,18 +2,34 @@
|
|||||||
|
|
||||||
## 🏗️ Общая архитектура
|
## 🏗️ Общая архитектура
|
||||||
|
|
||||||
```
|
```mermaid
|
||||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
graph TB
|
||||||
│ React PWA │ │ Go Backend │ │ PostgreSQL │
|
subgraph "Frontend"
|
||||||
│ (Frontend) │◄──►│ (API) │◄──►│ (Database) │
|
A[Angular PWA]
|
||||||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
B[QR Scanner]
|
||||||
│ │
|
end
|
||||||
│ │
|
|
||||||
▼ ▼
|
subgraph "Backend Services"
|
||||||
┌─────────────────┐ ┌─────────────────┐
|
C[Go Core Service]
|
||||||
│ QR Scanner │ │ PDF Generator │
|
D[Python Document Service]
|
||||||
│ (Camera) │ │ (Labels) │
|
end
|
||||||
└─────────────────┘ └─────────────────┘
|
|
||||||
|
subgraph "Infrastructure"
|
||||||
|
E[PostgreSQL]
|
||||||
|
F[Redis Cache]
|
||||||
|
end
|
||||||
|
|
||||||
|
A <--> C
|
||||||
|
B --> A
|
||||||
|
C <--> E
|
||||||
|
C <--> D
|
||||||
|
D <--> F
|
||||||
|
|
||||||
|
style A fill:#ff9999
|
||||||
|
style C fill:#99ccff
|
||||||
|
style D fill:#99ff99
|
||||||
|
style E fill:#ffcc99
|
||||||
|
style F fill:#cc99ff
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -21,29 +37,102 @@
|
|||||||
## 🛠️ Технологический стек
|
## 🛠️ Технологический стек
|
||||||
|
|
||||||
### Backend (Go)
|
### Backend (Go)
|
||||||
- **Framework:** Gin или Echo
|
- **Framework:** Gin (легкий и быстрый)
|
||||||
- **Database:** PostgreSQL
|
- **Database:** PostgreSQL
|
||||||
- **Authentication:** JWT
|
- **Authentication:** JWT
|
||||||
- **Validation:** validator
|
- **Validation:** validator
|
||||||
- **PDF Generation:** wkhtmltopdf или gofpdf
|
- **Inter-service Communication:** gRPC + Protocol Buffers
|
||||||
|
- **API Documentation:** Swagger/OpenAPI
|
||||||
|
|
||||||
### Frontend (React PWA)
|
### Frontend (Angular PWA)
|
||||||
- **Framework:** React 18
|
- **Framework:** Angular 17+
|
||||||
- **Build Tool:** Vite
|
- **Build Tool:** Angular CLI
|
||||||
- **PWA:** Workbox
|
- **PWA:** @angular/service-worker
|
||||||
- **QR Scanner:** react-qr-reader
|
- **QR Scanner:** @zxing/ngx-scanner
|
||||||
- **UI:** Tailwind CSS или Material-UI
|
- **UI:** Angular Material + Tailwind CSS
|
||||||
|
- **State Management:** NgRx (для сложной логики)
|
||||||
|
|
||||||
|
### Document Service (Python)
|
||||||
|
- **Framework:** FastAPI (быстрый, автоматическая документация)
|
||||||
|
- **PDF Generation:** reportlab + weasyprint
|
||||||
|
- **Office Documents:** python-docx, openpyxl
|
||||||
|
- **Templates:** Jinja2
|
||||||
|
- **Caching:** Redis
|
||||||
|
- **Inter-service Communication:** gRPC
|
||||||
|
|
||||||
### Infrastructure
|
### Infrastructure
|
||||||
- **Containerization:** Docker
|
- **Containerization:** Docker
|
||||||
- **Deployment:** Docker Compose
|
- **Orchestration:** Docker Compose
|
||||||
- **Security:** HTTPS, CORS
|
- **Inter-service Communication:** gRPC + Protocol Buffers
|
||||||
- **Monitoring:** Structured logging
|
- **API Gateway:** Traefik (опционально)
|
||||||
|
- **Security:** HTTPS, CORS, JWT
|
||||||
|
- **Monitoring:** Structured logging + Prometheus
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📊 Структура базы данных
|
## 📊 Структура базы данных
|
||||||
|
|
||||||
|
### ER-диаграмма
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
erDiagram
|
||||||
|
organizations {
|
||||||
|
uuid id PK
|
||||||
|
varchar name
|
||||||
|
varchar type
|
||||||
|
jsonb settings
|
||||||
|
timestamp created_at
|
||||||
|
}
|
||||||
|
|
||||||
|
users {
|
||||||
|
uuid id PK
|
||||||
|
uuid organization_id FK
|
||||||
|
varchar email
|
||||||
|
varchar role
|
||||||
|
timestamp created_at
|
||||||
|
}
|
||||||
|
|
||||||
|
storage_locations {
|
||||||
|
uuid id PK
|
||||||
|
uuid organization_id FK
|
||||||
|
uuid parent_id FK
|
||||||
|
varchar name
|
||||||
|
varchar address
|
||||||
|
varchar type
|
||||||
|
jsonb coordinates
|
||||||
|
varchar qr_code
|
||||||
|
timestamp created_at
|
||||||
|
}
|
||||||
|
|
||||||
|
items {
|
||||||
|
uuid id PK
|
||||||
|
uuid organization_id FK
|
||||||
|
varchar name
|
||||||
|
text description
|
||||||
|
varchar category
|
||||||
|
timestamp created_at
|
||||||
|
}
|
||||||
|
|
||||||
|
item_placements {
|
||||||
|
uuid id PK
|
||||||
|
uuid organization_id FK
|
||||||
|
uuid item_id FK
|
||||||
|
uuid location_id FK
|
||||||
|
integer quantity
|
||||||
|
timestamp created_at
|
||||||
|
}
|
||||||
|
|
||||||
|
organizations ||--o{ users : "has"
|
||||||
|
organizations ||--o{ storage_locations : "has"
|
||||||
|
organizations ||--o{ items : "has"
|
||||||
|
organizations ||--o{ item_placements : "has"
|
||||||
|
|
||||||
|
storage_locations ||--o{ storage_locations : "parent-child"
|
||||||
|
storage_locations ||--o{ item_placements : "contains"
|
||||||
|
|
||||||
|
items ||--o{ item_placements : "placed_in"
|
||||||
|
```
|
||||||
|
|
||||||
### Основные таблицы
|
### Основные таблицы
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
@@ -103,51 +192,156 @@ CREATE TABLE item_placements (
|
|||||||
|
|
||||||
## 🔌 API Endpoints
|
## 🔌 API Endpoints
|
||||||
|
|
||||||
### Аутентификация
|
### Core Service (Go) - REST API
|
||||||
```
|
```
|
||||||
|
# Аутентификация
|
||||||
POST /api/auth/login
|
POST /api/auth/login
|
||||||
POST /api/auth/register
|
POST /api/auth/register
|
||||||
POST /api/auth/refresh
|
POST /api/auth/refresh
|
||||||
```
|
|
||||||
|
|
||||||
### Организации
|
# Организации
|
||||||
```
|
|
||||||
GET /api/organizations/:id
|
GET /api/organizations/:id
|
||||||
PUT /api/organizations/:id
|
PUT /api/organizations/:id
|
||||||
```
|
|
||||||
|
|
||||||
### Места хранения
|
# Места хранения
|
||||||
```
|
|
||||||
GET /api/locations
|
GET /api/locations
|
||||||
POST /api/locations
|
POST /api/locations
|
||||||
GET /api/locations/:id
|
GET /api/locations/:id
|
||||||
PUT /api/locations/:id
|
PUT /api/locations/:id
|
||||||
DELETE /api/locations/:id
|
DELETE /api/locations/:id
|
||||||
POST /api/locations/:id/qr-code
|
|
||||||
```
|
|
||||||
|
|
||||||
### Товары
|
# Товары
|
||||||
```
|
|
||||||
GET /api/items
|
GET /api/items
|
||||||
POST /api/items
|
POST /api/items
|
||||||
GET /api/items/:id
|
GET /api/items/:id
|
||||||
PUT /api/items/:id
|
PUT /api/items/:id
|
||||||
DELETE /api/items/:id
|
DELETE /api/items/:id
|
||||||
```
|
|
||||||
|
|
||||||
### Операции
|
# Операции
|
||||||
```
|
|
||||||
POST /api/operations/place-item
|
POST /api/operations/place-item
|
||||||
POST /api/operations/move-item
|
POST /api/operations/move-item
|
||||||
GET /api/operations/search
|
GET /api/operations/search
|
||||||
```
|
|
||||||
|
|
||||||
### Шаблоны
|
# Шаблоны
|
||||||
```
|
|
||||||
GET /api/templates
|
GET /api/templates
|
||||||
POST /api/templates/:id/apply
|
POST /api/templates/:id/apply
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Document Service (Python) - REST API
|
||||||
|
```
|
||||||
|
# Документы
|
||||||
|
POST /api/documents/generate-pdf
|
||||||
|
POST /api/documents/generate-excel
|
||||||
|
GET /api/documents/:id/status
|
||||||
|
GET /api/documents/:id/download
|
||||||
|
|
||||||
|
# Шаблоны документов
|
||||||
|
GET /api/templates
|
||||||
|
POST /api/templates
|
||||||
|
PUT /api/templates/:id
|
||||||
|
DELETE /api/templates/:id
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔄 Межсервисная коммуникация
|
||||||
|
|
||||||
|
### gRPC Services
|
||||||
|
|
||||||
|
#### Core Service → Document Service
|
||||||
|
```protobuf
|
||||||
|
service DocumentService {
|
||||||
|
rpc GenerateQRCode(QRCodeRequest) returns (QRCodeResponse);
|
||||||
|
rpc GenerateReport(ReportRequest) returns (ReportResponse);
|
||||||
|
rpc GetDocumentStatus(StatusRequest) returns (StatusResponse);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Document Service → Core Service
|
||||||
|
```protobuf
|
||||||
|
service CoreService {
|
||||||
|
rpc GetLocationData(LocationRequest) returns (LocationResponse);
|
||||||
|
rpc GetItemData(ItemRequest) returns (ItemResponse);
|
||||||
|
rpc ValidateTemplate(TemplateRequest) returns (TemplateResponse);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### События (Event-Driven)
|
||||||
|
```protobuf
|
||||||
|
message DocumentEvent {
|
||||||
|
string event_type; // "qr_generated", "report_ready"
|
||||||
|
string document_id;
|
||||||
|
string organization_id;
|
||||||
|
google.protobuf.Timestamp timestamp;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔄 Диаграммы последовательности
|
||||||
|
|
||||||
|
### Генерация QR-кода
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant F as Frontend
|
||||||
|
participant C as Core Service
|
||||||
|
participant D as Document Service
|
||||||
|
participant R as Redis
|
||||||
|
|
||||||
|
F->>C: POST /api/locations/:id/qr-code
|
||||||
|
C->>D: gRPC GenerateQRCode()
|
||||||
|
D->>D: Generate QR code
|
||||||
|
D->>R: Cache document
|
||||||
|
D->>C: Return document URL
|
||||||
|
C->>F: Return QR code data
|
||||||
|
```
|
||||||
|
|
||||||
|
### Размещение товара
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant U as User
|
||||||
|
participant F as Frontend
|
||||||
|
participant C as Core Service
|
||||||
|
participant DB as Database
|
||||||
|
|
||||||
|
U->>F: Scan QR code
|
||||||
|
F->>F: Decode location ID
|
||||||
|
F->>C: GET /api/locations/:id
|
||||||
|
C->>DB: Query location
|
||||||
|
DB->>C: Return location data
|
||||||
|
C->>F: Return location info
|
||||||
|
F->>U: Show location details
|
||||||
|
|
||||||
|
U->>F: Select item & quantity
|
||||||
|
F->>C: POST /api/operations/place-item
|
||||||
|
C->>DB: Create placement
|
||||||
|
DB->>C: Confirm placement
|
||||||
|
C->>F: Return success
|
||||||
|
F->>U: Show confirmation
|
||||||
|
```
|
||||||
|
|
||||||
|
### Поиск товара
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant U as User
|
||||||
|
participant F as Frontend
|
||||||
|
participant C as Core Service
|
||||||
|
participant R as Redis
|
||||||
|
participant DB as Database
|
||||||
|
|
||||||
|
U->>F: Search query
|
||||||
|
F->>C: GET /api/operations/search?q=query
|
||||||
|
C->>R: Check cache
|
||||||
|
alt Cache hit
|
||||||
|
R->>C: Return cached results
|
||||||
|
else Cache miss
|
||||||
|
C->>DB: Search items & locations
|
||||||
|
DB->>C: Return results
|
||||||
|
C->>R: Cache results
|
||||||
|
end
|
||||||
|
C->>F: Return search results
|
||||||
|
F->>U: Display results
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔐 Безопасность
|
## 🔐 Безопасность
|
||||||
@@ -194,23 +388,39 @@ POST /api/templates/:id/apply
|
|||||||
```yaml
|
```yaml
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
services:
|
services:
|
||||||
backend:
|
# Core Service (Go)
|
||||||
build: ./backend
|
core-service:
|
||||||
|
build: ./core-service
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
environment:
|
environment:
|
||||||
- DB_HOST=postgres
|
- DB_HOST=postgres
|
||||||
- JWT_SECRET=your-secret
|
- JWT_SECRET=your-secret
|
||||||
|
- DOC_SERVICE_URL=http://doc-service:8000
|
||||||
depends_on:
|
depends_on:
|
||||||
- postgres
|
- postgres
|
||||||
|
- redis
|
||||||
|
|
||||||
|
# Document Service (Python)
|
||||||
|
doc-service:
|
||||||
|
build: ./doc-service
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
environment:
|
||||||
|
- REDIS_URL=redis://redis:6379
|
||||||
|
- CORE_SERVICE_URL=http://core-service:8080
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
|
||||||
|
# Frontend (Angular)
|
||||||
frontend:
|
frontend:
|
||||||
build: ./frontend
|
build: ./frontend
|
||||||
ports:
|
ports:
|
||||||
- "3000:80"
|
- "3000:80"
|
||||||
depends_on:
|
depends_on:
|
||||||
- backend
|
- core-service
|
||||||
|
|
||||||
|
# Database
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:15
|
image: postgres:15
|
||||||
environment:
|
environment:
|
||||||
@@ -220,26 +430,134 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/var/lib/postgresql/data
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
# Cache
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
ports:
|
||||||
|
- "6379:6379"
|
||||||
|
volumes:
|
||||||
|
- redis_data:/data
|
||||||
|
|
||||||
|
# API Gateway (опционально)
|
||||||
|
traefik:
|
||||||
|
image: traefik:v2.10
|
||||||
|
command:
|
||||||
|
- --api.insecure=true
|
||||||
|
- --providers.docker=true
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "8081:8080"
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
postgres_data:
|
postgres_data:
|
||||||
|
redis_data:
|
||||||
|
```
|
||||||
|
|
||||||
|
### Структура проекта
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[erp-mvp/] --> B[core-service/]
|
||||||
|
A --> C[doc-service/]
|
||||||
|
A --> D[frontend/]
|
||||||
|
A --> E[proto/]
|
||||||
|
A --> F[docker-compose.yml]
|
||||||
|
|
||||||
|
B --> B1[cmd/]
|
||||||
|
B --> B2[internal/]
|
||||||
|
B --> B3[pkg/]
|
||||||
|
B --> B4[proto/]
|
||||||
|
B --> B5[Dockerfile]
|
||||||
|
|
||||||
|
C --> C1[app/]
|
||||||
|
C --> C2[templates/]
|
||||||
|
C --> C3[proto/]
|
||||||
|
C --> C4[Dockerfile]
|
||||||
|
|
||||||
|
D --> D1[src/]
|
||||||
|
D --> D2[angular.json]
|
||||||
|
D --> D3[Dockerfile]
|
||||||
|
|
||||||
|
E --> E1[core.proto]
|
||||||
|
E --> E2[document.proto]
|
||||||
|
E --> E3[events.proto]
|
||||||
|
|
||||||
|
style A fill:#e1f5fe
|
||||||
|
style B fill:#f3e5f5
|
||||||
|
style C fill:#e8f5e8
|
||||||
|
style D fill:#fff3e0
|
||||||
|
style E fill:#fce4ec
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 📚 Конкретные библиотеки и фреймворки
|
||||||
|
|
||||||
|
### Core Service (Go)
|
||||||
|
```go
|
||||||
|
// Основные зависимости
|
||||||
|
go.mod:
|
||||||
|
- github.com/gin-gonic/gin v1.9.1 // HTTP framework
|
||||||
|
- github.com/golang-jwt/jwt/v5 v5.0.0 // JWT authentication
|
||||||
|
- github.com/lib/pq v1.10.9 // PostgreSQL driver
|
||||||
|
- github.com/go-playground/validator/v10 // Validation
|
||||||
|
- google.golang.org/grpc v1.58.0 // gRPC client/server
|
||||||
|
- github.com/swaggo/gin-swagger v1.6.0 // API documentation
|
||||||
|
- github.com/redis/go-redis/v9 v9.2.1 // Redis client
|
||||||
|
```
|
||||||
|
|
||||||
|
### Document Service (Python)
|
||||||
|
```python
|
||||||
|
# requirements.txt
|
||||||
|
fastapi==0.104.1 # Web framework
|
||||||
|
uvicorn==0.24.0 # ASGI server
|
||||||
|
reportlab==4.0.4 # PDF generation
|
||||||
|
weasyprint==60.1 # HTML to PDF
|
||||||
|
python-docx==1.1.0 # Word documents
|
||||||
|
openpyxl==3.1.2 # Excel files
|
||||||
|
jinja2==3.1.2 # Templates
|
||||||
|
redis==5.0.1 # Redis client
|
||||||
|
grpcio==1.59.0 # gRPC
|
||||||
|
protobuf==4.24.4 # Protocol Buffers
|
||||||
|
pydantic==2.4.2 # Data validation
|
||||||
|
```
|
||||||
|
|
||||||
|
### Frontend (Angular)
|
||||||
|
```json
|
||||||
|
// package.json
|
||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"@angular/core": "^17.0.0",
|
||||||
|
"@angular/material": "^17.0.0",
|
||||||
|
"@angular/service-worker": "^17.0.0",
|
||||||
|
"@zxing/ngx-scanner": "^3.0.0",
|
||||||
|
"@ngrx/store": "^17.0.0",
|
||||||
|
"@ngrx/effects": "^17.0.0",
|
||||||
|
"tailwindcss": "^3.3.0",
|
||||||
|
"rxjs": "^7.8.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## 📊 Мониторинг
|
## 📊 Мониторинг
|
||||||
|
|
||||||
### Логирование
|
### Логирование
|
||||||
- Structured JSON логи
|
- **Go:** logrus или zerolog для structured logging
|
||||||
- Уровни: DEBUG, INFO, WARN, ERROR
|
- **Python:** structlog для structured logging
|
||||||
- Correlation ID для отслеживания запросов
|
- **Frontend:** Angular logging service
|
||||||
|
- Correlation ID для отслеживания запросов через все сервисы
|
||||||
|
|
||||||
### Метрики
|
### Метрики
|
||||||
- Время отклика API
|
- **Prometheus** для сбора метрик
|
||||||
- Количество ошибок
|
- **Grafana** для визуализации
|
||||||
- Активные пользователи
|
- Время отклика API по сервисам
|
||||||
- Операции в день
|
- Количество ошибок и их типы
|
||||||
|
- Активные пользователи и операции
|
||||||
|
|
||||||
### Алерты
|
### Алерты
|
||||||
- Высокое время отклика (>500ms)
|
- Высокое время отклика (>500ms)
|
||||||
- Высокий процент ошибок (>5%)
|
- Высокий процент ошибок (>5%)
|
||||||
- Недоступность сервиса
|
- Недоступность сервисов
|
||||||
|
- Проблемы с генерацией документов
|
||||||
|
|||||||
@@ -15,6 +15,24 @@
|
|||||||
- Кондитерские/пекарни
|
- Кондитерские/пекарни
|
||||||
- Мастерские по ремонту
|
- Мастерские по ремонту
|
||||||
|
|
||||||
|
### 1.3 Пользовательские сценарии
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
journey
|
||||||
|
title Пользовательский сценарий: Организация склада
|
||||||
|
section Настройка
|
||||||
|
Создание организации: 5: Мастер
|
||||||
|
Выбор шаблона помещения: 4: Мастер
|
||||||
|
Настройка размеров: 3: Мастер
|
||||||
|
Генерация QR-кодов: 5: Система
|
||||||
|
Печать этикеток: 4: Мастер
|
||||||
|
section Использование
|
||||||
|
Сканирование QR-кода: 5: Мастер
|
||||||
|
Размещение товара: 4: Мастер
|
||||||
|
Поиск товара: 5: Мастер
|
||||||
|
Перемещение товара: 3: Мастер
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Функциональные требования MVP
|
## 2. Функциональные требования MVP
|
||||||
@@ -37,8 +55,9 @@
|
|||||||
**Требования:**
|
**Требования:**
|
||||||
- Генерация уникальных QR-кодов для каждого места
|
- Генерация уникальных QR-кодов для каждого места
|
||||||
- Кодирование в QR: ID места, адрес, координаты
|
- Кодирование в QR: ID места, адрес, координаты
|
||||||
- Печать этикеток на обычном принтере (A4)
|
- Печать этикеток на обычном принтере (A4) через Document Service
|
||||||
- Сетка этикеток на лист с предварительным просмотром
|
- Сетка этикеток на лист с предварительным просмотром
|
||||||
|
- Кэширование сгенерированных QR-кодов в Redis
|
||||||
|
|
||||||
#### 2.1.3 Виртуальная карта
|
#### 2.1.3 Виртуальная карта
|
||||||
**Требования:**
|
**Требования:**
|
||||||
@@ -49,20 +68,22 @@
|
|||||||
- Красный: переполнено
|
- Красный: переполнено
|
||||||
- Интерактивность: клик на место → список товаров
|
- Интерактивность: клик на место → список товаров
|
||||||
|
|
||||||
### 2.2 Мобильное приложение (PWA)
|
### 2.2 Мобильное приложение (Angular PWA)
|
||||||
|
|
||||||
#### 2.2.1 Сканирование QR-кодов
|
#### 2.2.1 Сканирование QR-кодов
|
||||||
**Требования:**
|
**Требования:**
|
||||||
- Сканирование камерой телефона
|
- Сканирование камерой телефона через @zxing/ngx-scanner
|
||||||
- Распознавание QR-кодов в реальном времени
|
- Распознавание QR-кодов в реальном времени
|
||||||
- Автоматический переход к операции с местом
|
- Автоматический переход к операции с местом
|
||||||
- Обработка ошибок сканирования
|
- Обработка ошибок сканирования
|
||||||
|
- Offline поддержка через Service Worker
|
||||||
|
|
||||||
#### 2.2.2 Быстрые операции
|
#### 2.2.2 Быстрые операции
|
||||||
**Требования:**
|
**Требования:**
|
||||||
- Размещение товара: сканирование места → выбор товара → подтверждение
|
- Размещение товара: сканирование места → выбор товара → подтверждение
|
||||||
- Поиск товара: сканирование места → показ списка товаров
|
- Поиск товара: сканирование места → показ списка товаров
|
||||||
- Перемещение: сканирование места откуда → сканирование места куда → выбор товара
|
- Перемещение: сканирование места откуда → сканирование места куда → выбор товара
|
||||||
|
- State management через NgRx для сложных операций
|
||||||
|
|
||||||
### 2.3 Справочники
|
### 2.3 Справочники
|
||||||
|
|
||||||
@@ -87,6 +108,7 @@
|
|||||||
- Выбор места размещения
|
- Выбор места размещения
|
||||||
- Указание количества
|
- Указание количества
|
||||||
- Автоматическое обновление статуса места
|
- Автоматическое обновление статуса места
|
||||||
|
- Валидация через gRPC между сервисами
|
||||||
|
|
||||||
#### 2.4.2 Поиск товаров
|
#### 2.4.2 Поиск товаров
|
||||||
**Требования:**
|
**Требования:**
|
||||||
@@ -94,6 +116,24 @@
|
|||||||
- Поиск по адресу места
|
- Поиск по адресу места
|
||||||
- Поиск по категории
|
- Поиск по категории
|
||||||
- Результат: список мест с товарами
|
- Результат: список мест с товарами
|
||||||
|
- Кэширование результатов поиска в Redis
|
||||||
|
|
||||||
|
### 2.5 Document Service
|
||||||
|
|
||||||
|
#### 2.5.1 Генерация документов
|
||||||
|
**Требования:**
|
||||||
|
- Генерация PDF этикеток с QR-кодами
|
||||||
|
- Создание Excel отчетов по товарам
|
||||||
|
- Экспорт данных в Word документы
|
||||||
|
- Шаблонизация через Jinja2
|
||||||
|
- Асинхронная обработка через Redis
|
||||||
|
|
||||||
|
#### 2.5.2 Кэширование
|
||||||
|
**Требования:**
|
||||||
|
- Кэширование сгенерированных документов
|
||||||
|
- TTL для документов: 24 часа
|
||||||
|
- Автоматическая очистка старых документов
|
||||||
|
- Статистика использования кэша
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user