fix: Исправление загрузки документов и SQL запросов
- Исправлена потеря документов при обновлении черновика (SQL объединяет вместо перезаписи) - Исправлено определение типа документа (приоритет field_label над field_name) - Исправлены дубликаты в documents_meta и documents_uploaded - Добавлена передача group_index с фронтенда для правильного field_name - Исправлены все документы в таблице clpr_claim_documents с правильными field_name - Обновлены SQL запросы: claimsave и claimsave_final для нового флоу - Добавлена поддержка multi-file upload для одного документа - Исправлены дубликаты в списке загруженных документов на фронтенде Файлы: - SQL: SQL_CLAIMSAVE_FIXED_NEW_FLOW.sql, SQL_CLAIMSAVE_FINAL_FIXED_NEW_FLOW_WITH_UPLOADED.sql - n8n: N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js (поддержка group_index) - Backend: documents.py (передача group_index в n8n) - Frontend: StepWizardPlan.tsx (передача group_index, исправление дубликатов) - Скрипты: fix_claim_documents_field_names.py, fix_documents_meta_duplicates.py Результат: документы больше не теряются, имеют правильные типы и field_name
This commit is contained in:
135
SESSION_LOG_2025-11-25.md
Normal file
135
SESSION_LOG_2025-11-25.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# Лог сессии 25.11.2025
|
||||
|
||||
## Основные задачи
|
||||
|
||||
### 1. Передача unified_id и contact_id в описание проблемы
|
||||
|
||||
**Файлы:**
|
||||
- `backend/app/api/models.py` — добавлены поля `unified_id` и `contact_id` в `TicketFormDescriptionRequest`
|
||||
- `backend/app/api/claims.py` — добавлена передача `unified_id` и `contact_id` в Redis событие
|
||||
- `frontend/src/components/form/StepDescription.tsx` — добавлена передача `unified_id` и `contact_id` при отправке описания
|
||||
|
||||
**Результат:** При отправке описания проблемы теперь передаются `unified_id` и `contact_id` пользователя.
|
||||
|
||||
---
|
||||
|
||||
### 2. Структура таблиц CRM MySQL для контактов
|
||||
|
||||
**Основные таблицы:**
|
||||
- `vtiger_contactdetails` — основные данные (firstname, lastname, email, mobile, phone)
|
||||
- `vtiger_contactscf` — кастомные поля:
|
||||
- `cf_1157` — Отчество (middle_name)
|
||||
- `cf_1263` — Место рождения (birthplace)
|
||||
- `cf_1257` — ИНН (inn)
|
||||
- `cf_1849` — Реквизиты (requisites)
|
||||
- `cf_1580` — Код (code)
|
||||
- `vtiger_contactsubdetails` — дополнительные данные (birthday, homephone)
|
||||
- `vtiger_contactaddress` — адреса (mailingstreet, mailingcity, и т.д.)
|
||||
|
||||
**Создан файл:** `docs/SQL_SELECT_CONTACT_WITH_CUSTOM_FIELDS.sql` — правильный SQL запрос для получения всех данных контакта
|
||||
|
||||
---
|
||||
|
||||
### 3. Исправление Code Node: Мерж данных проекта в сессию
|
||||
|
||||
**Проблема:** Данные из `body.other` (sessionData) не сохранялись в Redis — терялись все данные пользователя.
|
||||
|
||||
**Причина:** К моменту выполнения Code Node структура данных менялась (`body_keys: ["success", "result"]`), и `body.other` был недоступен.
|
||||
|
||||
**Решение:** Добавлен fallback на получение `other` напрямую из Webhook:
|
||||
```javascript
|
||||
// ✅ Пробуем также достать other из Webhook напрямую
|
||||
if (!rawOther) {
|
||||
try {
|
||||
const webhookJson = $('Webhook').first()?.json;
|
||||
if (webhookJson?.body?.other) {
|
||||
rawOther = webhookJson.body.other;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
```
|
||||
|
||||
**Файл:** `docs/CODE_MERGE_PROJECT_TO_SESSION.js`
|
||||
|
||||
**Результат:** Теперь в Redis сохраняются ВСЕ данные:
|
||||
- session_id, phone, unified_id, contact_id
|
||||
- lastname, firstname, middle_name
|
||||
- birthday, birthplace, inn
|
||||
- mailingzip, mailingstreet, email, tg_id
|
||||
- description
|
||||
- claim_id, project_id, project_name
|
||||
- is_new_project, current_step
|
||||
|
||||
---
|
||||
|
||||
### 4. Генерация новой сессии для новой жалобы
|
||||
|
||||
**Проблема:** При создании новой жалобы использовалась та же сессия, что и для предыдущей.
|
||||
|
||||
**Решение:**
|
||||
- Добавлена функция `generateUUIDv4()` в `ClaimForm.tsx`
|
||||
- При создании новой жалобы генерируется новый `session_id`
|
||||
- `session_token` в localStorage (авторизация) остаётся прежним
|
||||
- `unified_id`, `phone`, `contact_id` сохраняются
|
||||
|
||||
**Файл:** `frontend/src/pages/ClaimForm.tsx`
|
||||
|
||||
---
|
||||
|
||||
## Созданные/обновлённые файлы
|
||||
|
||||
### Новые файлы:
|
||||
- `docs/SQL_SELECT_CONTACT_WITH_CUSTOM_FIELDS.sql` — SQL запрос для контактов с кастомными полями
|
||||
|
||||
### Обновлённые файлы:
|
||||
- `backend/app/api/models.py` — добавлены unified_id, contact_id
|
||||
- `backend/app/api/claims.py` — передача unified_id, contact_id в Redis
|
||||
- `frontend/src/components/form/StepDescription.tsx` — передача unified_id, contact_id
|
||||
- `frontend/src/pages/ClaimForm.tsx` — генерация новой сессии для новой жалобы
|
||||
- `docs/CODE_MERGE_PROJECT_TO_SESSION.js` — исправлен мерж данных в сессию
|
||||
|
||||
---
|
||||
|
||||
## Технические детали
|
||||
|
||||
### Redis канал для описания проблемы
|
||||
- Канал: `ticket_form:description`
|
||||
- Передаваемые данные: session_id, phone, email, unified_id, contact_id, problem_description
|
||||
|
||||
### Redis канал для подтверждения формы
|
||||
- Канал: `clientright:webform:approve`
|
||||
- Включает SMS код для верификации
|
||||
|
||||
### Структура сессии в Redis
|
||||
```json
|
||||
{
|
||||
"session_id": "sess_...",
|
||||
"phone": "79262306381",
|
||||
"unified_id": "usr_...",
|
||||
"contact_id": "320096",
|
||||
"lastname": "Коробков",
|
||||
"firstname": "Федор",
|
||||
"middle_name": "Владимирович",
|
||||
"birthday": "1981-09-18",
|
||||
"birthplace": "Москва",
|
||||
"inn": "123456789012",
|
||||
"mailingstreet": "...",
|
||||
"email": "help@clientright.ru",
|
||||
"tg_id": "295410106",
|
||||
"description": "...",
|
||||
"claim_id": "...",
|
||||
"project_id": "399171",
|
||||
"project_name": "Коробков_КлиентПрав",
|
||||
"is_new_project": false,
|
||||
"current_step": 2
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Статус
|
||||
✅ Все задачи выполнены
|
||||
✅ Backend пересобран и перезапущен
|
||||
✅ Frontend обновлён через HMR
|
||||
✅ Тестирование успешно
|
||||
|
||||
Reference in New Issue
Block a user