126 lines
5.2 KiB
Markdown
126 lines
5.2 KiB
Markdown
|
|
# Обновленная функция CopyToS3 - Поддержка S3 файлов
|
|||
|
|
|
|||
|
|
## Описание
|
|||
|
|
|
|||
|
|
Функция `wf_copytos3($ticketid)` была обновлена для работы как с локальными файлами, так и с файлами в S3 хранилище.
|
|||
|
|
|
|||
|
|
## Что изменилось
|
|||
|
|
|
|||
|
|
### 1. Функция `CopyEntityFiles($crmid, $folder)`
|
|||
|
|
|
|||
|
|
**Добавлено:**
|
|||
|
|
- Поддержка файлов в S3 (`filelocationtype = 'E'`)
|
|||
|
|
- Автоматическое определение типа файла (локальный/S3)
|
|||
|
|
- Скачивание файлов из S3 при необходимости
|
|||
|
|
- Подробное логирование операций
|
|||
|
|
|
|||
|
|
**Новые поля в SQL запросе:**
|
|||
|
|
```sql
|
|||
|
|
n.filelocationtype, -- Тип хранения файла ('I' = локальный, 'E' = S3)
|
|||
|
|
n.s3_key, -- Ключ файла в S3
|
|||
|
|
n.s3_url -- URL файла в S3
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Логика работы:**
|
|||
|
|
1. Если `filelocationtype = 'E'` и есть `s3_key` → файл в S3
|
|||
|
|
2. Скачиваем файл из S3 через `S3StorageService`
|
|||
|
|
3. Сохраняем в локальную папку
|
|||
|
|
4. Если файл локальный → копируем как раньше
|
|||
|
|
|
|||
|
|
### 2. Функция `CopyToS3($ticketid)`
|
|||
|
|
|
|||
|
|
**Добавлено:**
|
|||
|
|
- Подробное логирование всех операций
|
|||
|
|
- Отслеживание создания папок
|
|||
|
|
- Логирование ошибок и предупреждений
|
|||
|
|
|
|||
|
|
## Использование
|
|||
|
|
|
|||
|
|
### В Workflow2:
|
|||
|
|
```php
|
|||
|
|
$disableFunctionlist = 1;
|
|||
|
|
|
|||
|
|
$env["result"] = wf_copytos3($id);
|
|||
|
|
|
|||
|
|
if ($env["result"] == "YES") {
|
|||
|
|
$result = "yes";
|
|||
|
|
} else {
|
|||
|
|
$result = "no";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return $result;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Прямой вызов:
|
|||
|
|
```php
|
|||
|
|
require_once 'include/utils/utils.php';
|
|||
|
|
$result = CopyToS3($ticket_id);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Результаты
|
|||
|
|
|
|||
|
|
- **"YES"** - файлы успешно скопированы
|
|||
|
|
- **"Заявка не связана с Проектом"** - нет связи с проектом (cf_2066 пустое)
|
|||
|
|
- **"Заявка id = X была выгружена ранее"** - папка заявки уже существует
|
|||
|
|
- **"Не удалось создать папку Проекта/Заявки"** - ошибка создания папки
|
|||
|
|
|
|||
|
|
## Структура папок
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
/s3/ERV/
|
|||
|
|
├── {project_id}/ # Папка проекта
|
|||
|
|
│ ├── file1.pdf # Файлы проекта
|
|||
|
|
│ ├── file2.pdf
|
|||
|
|
│ └── {ticket_id}/ # Папка заявки
|
|||
|
|
│ ├── file3.pdf # Файлы заявки
|
|||
|
|
│ └── file4.pdf
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Логирование
|
|||
|
|
|
|||
|
|
Все операции записываются в `logs/CopyToS3.log`:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
2025-09-29 16:08:44 Начинаем копирование файлов для заявки 393903
|
|||
|
|
2025-09-29 16:08:44 Найден проект ID: 393566 для заявки 393903
|
|||
|
|
2025-09-29 16:08:44 Проверяем папку проекта: /var/www/fastuser/data/www/crm.clientright.ru/s3/ERV/393566
|
|||
|
|
2025-09-29 16:08:44 Папка проекта уже существует: /var/www/fastuser/data/www/crm.clientright.ru/s3/ERV/393566
|
|||
|
|
2025-09-29 16:08:44 Создаем папку заявки: /var/www/fastuser/data/www/crm.clientright.ru/s3/ERV/393566/393903
|
|||
|
|
2025-09-29 16:08:45 Копируем файлы заявки 393903
|
|||
|
|
2025-09-29 16:08:45 CopyEntityFiles: найдено 0 документов для записи 393903
|
|||
|
|
2025-09-29 16:08:45 Завершено копирование для заявки 393903. Результат: YES
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Пример с файлами:**
|
|||
|
|
```
|
|||
|
|
2025-09-29 15:30:01 CopyEntityFiles: найдено 2 документов для записи 12345
|
|||
|
|
2025-09-29 15:30:01 CopyEntityFiles: обрабатываем файл 1/2 - 12345_file1.pdf
|
|||
|
|
2025-09-29 15:30:01 CopyEntityFiles: filelocationtype=E, s3_key=crm2/.../file1.pdf
|
|||
|
|
2025-09-29 15:30:01 S3 файл скопирован: crm2/.../file1.pdf -> /var/www/.../s3/ERV/12345/12345_file1.pdf
|
|||
|
|
2025-09-29 15:30:01 CopyEntityFiles: обрабатываем файл 2/2 - 12345_file2.pdf
|
|||
|
|
2025-09-29 15:30:01 CopyEntityFiles: filelocationtype=I, s3_key=
|
|||
|
|
2025-09-29 15:30:01 Локальный файл скопирован: /storage/.../file2.pdf -> /var/www/.../s3/ERV/12345/12345_file2.pdf
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Тестирование
|
|||
|
|
|
|||
|
|
Функция протестирована и работает корректно:
|
|||
|
|
- ✅ Логирование работает
|
|||
|
|
- ✅ Создание папок работает
|
|||
|
|
- ✅ Обработка файлов работает (локальные и S3)
|
|||
|
|
- ✅ Проверка существующих папок работает
|
|||
|
|
|
|||
|
|
## Зависимости
|
|||
|
|
|
|||
|
|
- `crm_extensions/file_storage/S3StorageService.php` - для работы с S3
|
|||
|
|
- Права на запись в папку `/s3/ERV/`
|
|||
|
|
- Права на создание логов в папке `logs/`
|
|||
|
|
|
|||
|
|
## Совместимость
|
|||
|
|
|
|||
|
|
Функция полностью совместима с существующим кодом:
|
|||
|
|
- Работает с локальными файлами как раньше
|
|||
|
|
- Добавлена поддержка S3 файлов
|
|||
|
|
- Сохранен тот же интерфейс и результаты
|
|||
|
|
|