- Исправлена потеря документов при обновлении черновика (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
136 lines
5.4 KiB
Markdown
136 lines
5.4 KiB
Markdown
# Лог сессии 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
|
||
✅ Тестирование успешно
|
||
|