Добавлена система Soft Lock для витринных комплектов в POS-терминале
Реализована элегантная блокировка витринных букетов при добавлении в корзину, предотвращающая многократную продажу одного физического комплекта. ## Изменения в БД: - Добавлены поля в Reservation: cart_lock_expires_at, locked_by_user, cart_session_id - Созданы индексы для оптимизации запросов блокировок - Миграция 0006: добавление полей Soft Lock ## Backend (pos/views.py): - add_showcase_kit_to_cart: создание блокировки на 30 минут с проверкой конфликтов - remove_showcase_kit_from_cart: снятие блокировки при удалении из корзины - get_showcase_kits_api: возврат статусов блокировок (is_locked, locked_by_me) ## Frontend (terminal.js): - addToCart: AJAX запрос для создания блокировки, запрет qty > 1 - removeFromCart: автоматическое снятие блокировки - renderCart: желтый фон, badge "1 шт (витрина)", скрыты кнопки +/− - UI индикация: зеленый badge "В корзине" (свой), красный "Занят" (чужой) ## Автоматизация (inventory/tasks.py): - cleanup_expired_cart_locks: Celery periodic task (каждые 5 минут) - Автоматическое освобождение истекших блокировок (30 минут timeout) - Логирование очистки для мониторинга ## Маршруты (pos/urls.py): - POST /api/showcase-kits/<id>/add-to-cart/ - создание блокировки - POST /api/showcase-kits/<id>/remove-from-cart/ - снятие блокировки ## Документация: - ЗАПУСК.md: инструкция по запуску Celery Beat Преимущества: ✓ Предотвращает конфликты между кассирами ✓ Автоматическое освобождение при таймауте ✓ Понятный UX с визуальной индикацией ✓ Совместимость с существующей логикой резервирования 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
25
ЗАПУСК.md
Normal file
25
ЗАПУСК.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Запуск системы
|
||||
|
||||
## Из каталога `(venv) PS C:\Users\team_\Desktop\test_qwen\`
|
||||
|
||||
### 1. Запуск Celery Worker (для фото и прочих задач)
|
||||
```powershell
|
||||
start_celery.bat
|
||||
```
|
||||
|
||||
### 2. Запуск Celery Beat (для периодических задач)
|
||||
**Новая команда - для автоматической очистки блокировок корзины каждые 5 минут:**
|
||||
```powershell из myproject
|
||||
celery -A myproject beat -l info
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Что делает Celery Beat?
|
||||
- Автоматически освобождает витринные комплекты, если блокировка в корзине истекла (30 минут)
|
||||
- Запускает задачу `cleanup_expired_cart_locks` каждые 5 минут
|
||||
- Логи пишет в консоль (уровень INFO)
|
||||
|
||||
## Можно ли не запускать Beat?
|
||||
Да, но тогда блокировки не будут автоматически сниматься при истечении таймаута.
|
||||
Кассиры все равно смогут работать, просто букет останется "занят" до ручного удаления из корзины.
|
||||
Reference in New Issue
Block a user