feat: Получение cf_2624 из MySQL и блокировка полей при подтверждении данных
- Добавлен сервис CrmMySQLService для прямого подключения к MySQL CRM - Обновлён метод get_draft() для получения cf_2624 напрямую из БД - Реализована блокировка полей (readonly) при contact_data_confirmed = true - Добавлен выбор банка для СБП выплат с динамической загрузкой из API - Обновлена документация по работе с cf_2624 и MySQL - Добавлен network_mode: host в docker-compose для доступа к MySQL - Обновлены компоненты формы для поддержки блокировки полей
This commit is contained in:
96
docs/SESSION_LOG_2025-11-28_documents_dedup.md
Normal file
96
docs/SESSION_LOG_2025-11-28_documents_dedup.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# Лог сессии 28.11.2025 — Дедупликация документов и исправление field_label
|
||||
|
||||
## Проблемы, которые были решены
|
||||
|
||||
### 1. Неправильный `field_label` ("group-2" вместо "Переписка")
|
||||
|
||||
**Причина:** В коде `N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js` использовался индекс `grp` (позиция в `documents_required`) для доступа к массиву `uploads_field_labels`, но этот массив содержит элементы с индексами от 0 (текущий запрос).
|
||||
|
||||
**Исправление:** Изменён доступ к массивам на индекс `0`:
|
||||
```javascript
|
||||
// Было:
|
||||
const field_label = uploads_field_labels[grp] || ...
|
||||
|
||||
// Стало:
|
||||
const field_label = uploads_field_labels[0] || uploads_field_names[0] || uploads_descriptions[0] || `group-${grp}`;
|
||||
```
|
||||
|
||||
**Файл:** `ticket_form/docs/N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js`
|
||||
|
||||
---
|
||||
|
||||
### 2. Дублирование записей в `documents_meta`
|
||||
|
||||
**Причина:** SQL использовал простую конкатенацию `||` для объединения новых и существующих `documents_meta`, что приводило к накоплению дубликатов (было 28 записей вместо 2).
|
||||
|
||||
**Исправление:** Создан новый SQL с дедупликацией — новые записи заменяют старые с тем же `field_name`:
|
||||
```sql
|
||||
SELECT DISTINCT ON (doc->>'field_name') doc
|
||||
FROM (
|
||||
SELECT ... AS doc, 1 AS priority -- новые (приоритет)
|
||||
UNION ALL
|
||||
SELECT ... AS doc, 2 AS priority -- существующие
|
||||
) all_docs
|
||||
ORDER BY doc->>'field_name', priority, (doc->>'uploaded_at') DESC NULLS LAST
|
||||
```
|
||||
|
||||
**Файл:** `ticket_form/docs/SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql`
|
||||
|
||||
---
|
||||
|
||||
### 3. Ошибка `ON CONFLICT` для `document_texts`
|
||||
|
||||
**Причина:** Уникальный индекс на `file_hash` был частичным (`WHERE file_hash IS NOT NULL`), что не позволяло использовать `ON CONFLICT (file_hash)`.
|
||||
|
||||
**Исправление:** Создан полный уникальный индекс:
|
||||
```sql
|
||||
DROP INDEX IF EXISTS idx_document_texts_hash_unique;
|
||||
CREATE UNIQUE INDEX idx_document_texts_hash_unique ON document_texts(file_hash);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Созданные/изменённые файлы
|
||||
|
||||
| Файл | Описание |
|
||||
|------|----------|
|
||||
| `SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql` | SQL с дедупликацией `documents_meta` |
|
||||
| `SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql` | SQL для очистки существующих дубликатов |
|
||||
| `N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js` | Исправлен доступ к `uploads_field_labels[0]` |
|
||||
|
||||
---
|
||||
|
||||
## SQL-запросы для n8n
|
||||
|
||||
### Проверка дубликата по хешу
|
||||
```sql
|
||||
SELECT
|
||||
EXISTS (SELECT 1 FROM document_texts WHERE file_hash = '{{ $json.file_hash }}') AS found,
|
||||
(SELECT id FROM document_texts WHERE file_hash = '{{ $json.file_hash }}' LIMIT 1) AS existing_id;
|
||||
```
|
||||
|
||||
### Вставка с дедупликацией
|
||||
```sql
|
||||
INSERT INTO document_texts
|
||||
(file_id, file_url, path, title, filename_for_upload, "text", description, file_hash)
|
||||
VALUES (...)
|
||||
ON CONFLICT (file_hash) DO NOTHING
|
||||
RETURNING id, file_id, title, file_hash;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Изменения в БД
|
||||
|
||||
1. Создан уникальный индекс `idx_document_texts_hash_unique` на `document_texts(file_hash)`
|
||||
2. Очищены дубликаты в `documents_meta` для заявки `ef853bac-f54b-46aa-adf8-f0c9c0cd76bc` (было 28 → стало 2)
|
||||
3. Исправлен `field_label` для `uploads[2][0]` на "Переписка"
|
||||
|
||||
---
|
||||
|
||||
## Рекомендации
|
||||
|
||||
1. **Обновить SQL в n8n** ноде `claimsave` на версию из `SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql`
|
||||
2. **Обновить код** в ноде `editfiletobd1` на версию из `N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js`
|
||||
3. **Добавить проверку хеша** перед вставкой в `document_texts` для информирования о дубликатах
|
||||
|
||||
Reference in New Issue
Block a user