- Добавлен сервис CrmMySQLService для прямого подключения к MySQL CRM - Обновлён метод get_draft() для получения cf_2624 напрямую из БД - Реализована блокировка полей (readonly) при contact_data_confirmed = true - Добавлен выбор банка для СБП выплат с динамической загрузкой из API - Обновлена документация по работе с cf_2624 и MySQL - Добавлен network_mode: host в docker-compose для доступа к MySQL - Обновлены компоненты формы для поддержки блокировки полей
37 lines
1.3 KiB
SQL
37 lines
1.3 KiB
SQL
-- ============================================================================
|
||
-- SQL для очистки дубликатов в documents_meta
|
||
-- ============================================================================
|
||
-- Удаляет дубликаты, оставляя только самую новую запись для каждого field_name
|
||
-- ============================================================================
|
||
|
||
-- $1 = claim_id (UUID)
|
||
|
||
UPDATE clpr_claims
|
||
SET payload = jsonb_set(
|
||
payload,
|
||
'{documents_meta}',
|
||
(
|
||
SELECT COALESCE(jsonb_agg(doc ORDER BY (doc->>'uploaded_at') DESC NULLS LAST), '[]'::jsonb)
|
||
FROM (
|
||
SELECT DISTINCT ON (doc->>'field_name') doc
|
||
FROM jsonb_array_elements(COALESCE(payload->'documents_meta', '[]'::jsonb)) AS doc
|
||
ORDER BY
|
||
doc->>'field_name',
|
||
-- Приоритет: записи с file_url важнее, потом по дате
|
||
CASE WHEN doc->>'file_url' IS NOT NULL AND doc->>'file_url' <> '' THEN 0 ELSE 1 END,
|
||
(doc->>'uploaded_at') DESC NULLS LAST
|
||
) unique_docs
|
||
),
|
||
true
|
||
),
|
||
updated_at = now()
|
||
WHERE id = $1
|
||
RETURNING
|
||
id,
|
||
jsonb_array_length(payload->'documents_meta') AS documents_meta_count,
|
||
(
|
||
SELECT jsonb_agg(doc->>'field_name')
|
||
FROM jsonb_array_elements(payload->'documents_meta') AS doc
|
||
) AS field_names;
|
||
|