# Лог сессии 2025-12-03 ## Задача: Получение cf_2624 из MySQL при загрузке черновика ### Проблема Пользователь заметил, что для `claim_id: "226564ce-d7cf-48ee-a820-690e8f5ec8e5"` доступно редактирование, хотя в CRM стоит галка "Данные подтверждены" (`cf_2624 = "1"`). ### Решение Вместо передачи `cf_2624` через события Redis, реализован прямой SQL запрос к MySQL БД vtiger CRM при загрузке черновика. ## Изменения ### 1. Добавлены credentials для MySQL CRM в `config.py` ```python # MySQL CRM (vtiger CRM) mysql_crm_host: str = "localhost" mysql_crm_port: int = 3306 mysql_crm_db: str = "ci20465_72new" mysql_crm_user: str = "ci20465_72new" mysql_crm_password: str = "EcY979Rn" ``` ### 2. Создан сервис `CrmMySQLService` **Файл:** `ticket_form/backend/app/services/crm_mysql_service.py` - Подключение к MySQL БД vtiger CRM - Методы: `fetch_one()`, `fetch_all()`, `execute()` - Использует `aiomysql` для асинхронных запросов ### 3. Обновлён `main.py` - Добавлено подключение к MySQL CRM при старте - Добавлено закрытие соединения при остановке ### 4. Обновлён `claims.py` - метод `get_draft()` **Эндпоинт:** `GET /api/v1/claims/drafts/{claim_id}` **Изменения:** - Убран webservice API (getchallenge → login → retrieve) - Добавлен прямой SQL запрос к MySQL для получения `cf_2624` - Получаем все данные контакта, включая `cf_2624` - Добавлено логирование для отладки **SQL запрос:** ```sql SELECT cd.contactid, cd.firstname, cd.lastname, cd.email, cd.mobile, ccf.cf_2624 AS cf_2624 FROM vtiger_contactdetails cd LEFT JOIN vtiger_contactscf ccf ON ccf.contactid = cd.contactid LEFT JOIN vtiger_crmentity ce ON ce.crmid = cd.contactid WHERE cd.contactid = %s AND ce.deleted = 0 LIMIT 1 ``` **Логика:** - Если `cf_2624 = "1"` → `contact_data_confirmed = True`, `contact_data_can_edit = False` - Если `cf_2624 = "0"` или `NULL` → `contact_data_confirmed = False`, `contact_data_can_edit = True` ### 5. Обновлены SQL файлы и документация - `N8N_POSTGRESQL_GET_CONTACT_DATA.sql` → `N8N_MYSQL_GET_CONTACT_DATA.sql` - Изменён синтаксис: `$1` → `?` (для n8n MySQL ноды) - Обновлена документация `BACKEND_GET_CONTACT_CF_2624_FROM_POSTGRESQL.md` - Создан `N8N_MYSQL_GET_CONTACT_DATA.md` ## Преимущества нового подхода 1. ✅ **Проще** - один SQL запрос вместо цепочки HTTP запросов 2. ✅ **Быстрее** - прямой запрос к БД 3. ✅ **Надёжнее** - не зависит от webservice API 4. ✅ **Актуальнее** - всегда получаем свежие данные из БД ## Проверка **MySQL запрос:** ```bash mysql -h localhost -u ci20465_72new -p'EcY979Rn' ci20465_72new \ -e "SELECT contactid, cf_2624 FROM vtiger_contactscf WHERE contactid = '399542' LIMIT 1;" ``` **Результат:** ``` contactid cf_2624 399542 1 ``` ✅ В MySQL `cf_2624 = "1"` для `contact_id = "399542"` - данные подтверждены. ## Текущий статус - ✅ Код обновлён - ✅ Бэкенд перезапущен - ⚠️ Требуется проверка: почему в ответе API `contact_data_confirmed` и `contact_data_can_edit` равны `null` **Возможные причины:** 1. Запрос к MySQL не выполняется (нет логов) 2. `contact_id` не передаётся или имеет неправильный тип 3. Ошибка в SQL запросе (не логируется) **Добавлено логирование:** ```python logger.info(f"🔍 Получен contact_id из черновика: {contact_id} (type: {type(contact_id)})") ``` ## Следующие шаги 1. Проверить логи при загрузке черновика 2. Убедиться, что `contact_id` передаётся корректно 3. Проверить, что SQL запрос выполняется успешно 4. Убедиться, что фронтенд правильно использует `contact_data_confirmed` для блокировки полей --- ## Файлы изменены - `ticket_form/backend/app/config.py` - добавлены credentials для MySQL CRM - `ticket_form/backend/app/services/crm_mysql_service.py` - новый сервис - `ticket_form/backend/app/main.py` - подключение к MySQL CRM - `ticket_form/backend/app/api/claims.py` - прямой SQL запрос к MySQL - `ticket_form/docs/N8N_MYSQL_GET_CONTACT_DATA.sql` - SQL запрос для n8n - `ticket_form/docs/N8N_MYSQL_GET_CONTACT_DATA.md` - документация - `ticket_form/docs/BACKEND_GET_CONTACT_CF_2624_FROM_POSTGRESQL.md` - обновлена документация --- **Время работы:** 2025-12-03 16:00-16:30 **Статус:** В процессе отладки