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:
116
check_s3_access_371231.php
Normal file
116
check_s3_access_371231.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
require_once '/var/www/fastuser/data/www/crm.clientright.ru/vendor/autoload.php';
|
||||
require_once '/var/www/fastuser/data/www/crm.clientright.ru/config.inc.php';
|
||||
require_once '/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/config.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.filename,
|
||||
n.filelocationtype,
|
||||
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 AND n.filelocationtype = 'E'
|
||||
ORDER BY n.notesid DESC";
|
||||
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([$projectId]);
|
||||
$documents = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
echo "Проверка доступности S3 файлов для проекта $projectId\n";
|
||||
echo str_repeat("=", 80) . "\n\n";
|
||||
|
||||
// Инициализируем S3 клиент
|
||||
$s3Config = $config['s3'];
|
||||
$awsClient = new \Aws\S3\S3Client([
|
||||
'version' => 'latest',
|
||||
'region' => $s3Config['region'],
|
||||
'endpoint' => $s3Config['endpoint'],
|
||||
'credentials' => [
|
||||
'key' => $s3Config['key'],
|
||||
'secret' => $s3Config['secret'],
|
||||
],
|
||||
'use_path_style_endpoint' => true,
|
||||
]);
|
||||
|
||||
$accessible = 0;
|
||||
$notAccessible = 0;
|
||||
$errors = [];
|
||||
|
||||
foreach ($documents as $doc) {
|
||||
$notesid = $doc['notesid'];
|
||||
$title = $doc['title'];
|
||||
$s3Bucket = $doc['s3_bucket'];
|
||||
$s3Key = $doc['s3_key'];
|
||||
|
||||
try {
|
||||
$exists = $awsClient->doesObjectExist($s3Bucket, $s3Key);
|
||||
|
||||
if ($exists) {
|
||||
$accessible++;
|
||||
echo "✅ ID: $notesid - $title\n";
|
||||
} else {
|
||||
$notAccessible++;
|
||||
echo "❌ ID: $notesid - $title\n";
|
||||
echo " S3 Key: $s3Key\n";
|
||||
$errors[] = [
|
||||
'id' => $notesid,
|
||||
'title' => $title,
|
||||
's3_key' => $s3Key,
|
||||
'reason' => 'File does not exist in S3'
|
||||
];
|
||||
}
|
||||
} catch (\Aws\Exception\AwsException $e) {
|
||||
$notAccessible++;
|
||||
echo "❌ ID: $notesid - $title\n";
|
||||
echo " Ошибка: " . $e->getMessage() . "\n";
|
||||
echo " S3 Key: $s3Key\n";
|
||||
$errors[] = [
|
||||
'id' => $notesid,
|
||||
'title' => $title,
|
||||
's3_key' => $s3Key,
|
||||
'reason' => 'AWS Exception: ' . $e->getMessage()
|
||||
];
|
||||
} catch (Exception $e) {
|
||||
$notAccessible++;
|
||||
echo "❌ ID: $notesid - $title\n";
|
||||
echo " Ошибка: " . $e->getMessage() . "\n";
|
||||
$errors[] = [
|
||||
'id' => $notesid,
|
||||
'title' => $title,
|
||||
's3_key' => $s3Key,
|
||||
'reason' => 'Exception: ' . $e->getMessage()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n" . str_repeat("=", 80) . "\n";
|
||||
echo "СТАТИСТИКА:\n";
|
||||
echo " Доступных файлов: $accessible\n";
|
||||
echo " Недоступных файлов: $notAccessible\n";
|
||||
|
||||
if (!empty($errors)) {
|
||||
echo "\nНЕДОСТУПНЫЕ ФАЙЛЫ:\n";
|
||||
foreach ($errors as $error) {
|
||||
echo " - ID {$error['id']}: {$error['title']}\n";
|
||||
echo " S3 Key: {$error['s3_key']}\n";
|
||||
echo " Причина: {$error['reason']}\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user