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:
98
docs/SQL_FIX_CLAIM_DOCUMENTS_FIELD_NAMES.sql
Normal file
98
docs/SQL_FIX_CLAIM_DOCUMENTS_FIELD_NAMES.sql
Normal file
@@ -0,0 +1,98 @@
|
||||
-- ============================================================================
|
||||
-- SQL для исправления field_name в таблице clpr_claim_documents
|
||||
-- ============================================================================
|
||||
-- Проблема: Все документы имеют одинаковый field_name (uploads[0][0])
|
||||
-- Решение: Пересоздаём записи с правильными field_name на основе documents_uploaded
|
||||
-- ============================================================================
|
||||
|
||||
-- Для конкретного claim_id
|
||||
WITH claim_data AS (
|
||||
SELECT
|
||||
id,
|
||||
payload
|
||||
FROM clpr_claims
|
||||
WHERE id::text = 'bddb6815-8e17-4d54-a721-5e94382942c7'
|
||||
OR payload->>'claim_id' = 'bddb6815-8e17-4d54-a721-5e94382942c7'
|
||||
ORDER BY updated_at DESC
|
||||
LIMIT 1
|
||||
),
|
||||
|
||||
-- Извлекаем documents_required для определения индексов
|
||||
documents_required_array AS (
|
||||
SELECT
|
||||
jsonb_array_elements(payload->'documents_required') WITH ORDINALITY AS doc_req(doc, idx)
|
||||
FROM claim_data
|
||||
),
|
||||
|
||||
-- Извлекаем documents_uploaded с правильными индексами
|
||||
documents_uploaded_mapped AS (
|
||||
SELECT
|
||||
doc_up.*,
|
||||
(doc_req.idx - 1)::int AS group_index -- Индекс документа (0-based)
|
||||
FROM claim_data,
|
||||
jsonb_array_elements(payload->'documents_uploaded') AS doc_up,
|
||||
documents_required_array doc_req
|
||||
WHERE (doc_up->>'id' = doc_req.doc->>'id' OR doc_up->>'type' = doc_req.doc->>'id')
|
||||
),
|
||||
|
||||
-- Удаляем старые записи
|
||||
deleted_old AS (
|
||||
DELETE FROM clpr_claim_documents
|
||||
WHERE claim_id = (SELECT id::text FROM claim_data)
|
||||
RETURNING claim_id, field_name, file_id
|
||||
),
|
||||
|
||||
-- Вставляем новые записи с правильными field_name
|
||||
inserted_new AS (
|
||||
INSERT INTO clpr_claim_documents (
|
||||
claim_id,
|
||||
field_name,
|
||||
file_id,
|
||||
file_name,
|
||||
original_file_name,
|
||||
uploaded_at
|
||||
)
|
||||
SELECT
|
||||
(SELECT id::text FROM claim_data) AS claim_id,
|
||||
'uploads[' || group_index || '][0]' AS field_name,
|
||||
doc_up->>'file_id' AS file_id,
|
||||
doc_up->>'file_name' AS file_name,
|
||||
doc_up->>'original_file_name' AS original_file_name,
|
||||
COALESCE(
|
||||
(doc_up->>'uploaded_at')::timestamptz,
|
||||
now()
|
||||
) AS uploaded_at
|
||||
FROM documents_uploaded_mapped doc_up
|
||||
WHERE doc_up->>'file_id' IS NOT NULL
|
||||
AND doc_up->>'file_id' <> ''
|
||||
ON CONFLICT (claim_id, field_name) DO UPDATE SET
|
||||
file_id = EXCLUDED.file_id,
|
||||
file_name = EXCLUDED.file_name,
|
||||
original_file_name = EXCLUDED.original_file_name,
|
||||
uploaded_at = EXCLUDED.uploaded_at
|
||||
RETURNING claim_id, field_name, file_id, file_name
|
||||
)
|
||||
|
||||
-- Возвращаем результат
|
||||
SELECT
|
||||
'Удалено старых записей' AS action,
|
||||
COUNT(*) AS count
|
||||
FROM deleted_old
|
||||
UNION ALL
|
||||
SELECT
|
||||
'Вставлено новых записей' AS action,
|
||||
COUNT(*) AS count
|
||||
FROM inserted_new;
|
||||
|
||||
-- Проверка результата
|
||||
SELECT
|
||||
ccd.claim_id,
|
||||
ccd.field_name,
|
||||
ccd.file_id,
|
||||
ccd.file_name,
|
||||
ccd.original_file_name,
|
||||
ccd.uploaded_at
|
||||
FROM clpr_claim_documents ccd
|
||||
WHERE ccd.claim_id = 'bddb6815-8e17-4d54-a721-5e94382942c7'
|
||||
ORDER BY ccd.field_name;
|
||||
|
||||
Reference in New Issue
Block a user