feat(documents): дедупликация documents_meta и исправление field_label

- Исправлен N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js: использовать uploads_field_labels[0] вместо [grp]
- Создан SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql с дедупликацией documents_meta
- Создан SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql для очистки существующих дубликатов
- Создан полный уникальный индекс idx_document_texts_hash_unique на document_texts(file_hash)
- Добавлен SESSION_LOG_2025-11-28_documents_dedup.md с описанием всех изменений

Fixes:
- field_label теперь корректно отображает 'Переписка' вместо 'group-2'
- documents_meta не накапливает дубликаты при повторных сохранениях
- ON CONFLICT (file_hash) теперь работает для document_texts
This commit is contained in:
Fedor
2025-11-28 18:16:53 +03:00
parent 6c770f0a87
commit 840acca51a
118 changed files with 13379 additions and 218 deletions

View File

@@ -0,0 +1,51 @@
<?php
require_once '/var/www/fastuser/data/www/crm.clientright.ru/config.inc.php';
$pdo = new PDO(
"mysql:host={$dbconfig['db_server']};port=3306;dbname={$dbconfig['db_name']};charset=utf8",
$dbconfig['db_username'],
$dbconfig['db_password'],
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$projectId = 371231;
$sql = "SELECT
n.notesid,
n.title,
n.filelocationtype,
n.filename,
n.s3_bucket,
n.s3_key
FROM vtiger_notes n
INNER JOIN vtiger_crmentity e ON e.crmid = n.notesid
INNER JOIN vtiger_senotesrel snr ON snr.notesid = n.notesid
WHERE snr.crmid = ? AND e.deleted = 0
ORDER BY n.notesid DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute([$projectId]);
$documents = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "Проверка поля filename для документов проекта $projectId\n";
echo str_repeat("=", 80) . "\n\n";
foreach ($documents as $doc) {
echo "ID: {$doc['notesid']}\n";
echo " Название: {$doc['title']}\n";
echo " filelocationtype: {$doc['filelocationtype']}\n";
echo " filename (первые 200 символов): " . substr($doc['filename'], 0, 200) . "\n";
echo " s3_bucket: " . ($doc['s3_bucket'] ?? 'нет') . "\n";
echo " s3_key: " . substr($doc['s3_key'] ?? 'нет', 0, 100) . "\n";
// Проверяем, является ли filename URL
$isUrl = filter_var($doc['filename'], FILTER_VALIDATE_URL);
echo " filename является URL: " . ($isUrl ? 'ДА' : 'НЕТ') . "\n";
// Проверяем, начинается ли filename с http
$isHttp = (strpos($doc['filename'], 'http://') === 0 || strpos($doc['filename'], 'https://') === 0);
echo " filename начинается с http: " . ($isHttp ? 'ДА' : 'НЕТ') . "\n";
echo "\n";
}