- Добавлен сервис CrmMySQLService для подключения к MySQL БД vtiger CRM - Обновлён get_draft() для прямого SQL запроса к MySQL вместо webservice API - Получение cf_2624 и всех данных контакта из MySQL - Обновлена документация и SQL файлы для n8n - Добавлено логирование для отладки Преимущества: - Проще: один SQL запрос вместо цепочки HTTP запросов - Быстрее: прямой запрос к БД - Надёжнее: не зависит от webservice API - Актуальнее: всегда свежие данные из БД
5.4 KiB
5.4 KiB
Лог сессии 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
# 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 запрос:
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
Преимущества нового подхода
- ✅ Проще - один SQL запрос вместо цепочки HTTP запросов
- ✅ Быстрее - прямой запрос к БД
- ✅ Надёжнее - не зависит от webservice API
- ✅ Актуальнее - всегда получаем свежие данные из БД
Проверка
MySQL запрос:
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
Возможные причины:
- Запрос к MySQL не выполняется (нет логов)
contact_idне передаётся или имеет неправильный тип- Ошибка в SQL запросе (не логируется)
Добавлено логирование:
logger.info(f"🔍 Получен contact_id из черновика: {contact_id} (type: {type(contact_id)})")
Следующие шаги
- Проверить логи при загрузке черновика
- Убедиться, что
contact_idпередаётся корректно - Проверить, что SQL запрос выполняется успешно
- Убедиться, что фронтенд правильно использует
contact_data_confirmedдля блокировки полей
Файлы изменены
ticket_form/backend/app/config.py- добавлены credentials для MySQL CRMticket_form/backend/app/services/crm_mysql_service.py- новый сервисticket_form/backend/app/main.py- подключение к MySQL CRMticket_form/backend/app/api/claims.py- прямой SQL запрос к MySQLticket_form/docs/N8N_MYSQL_GET_CONTACT_DATA.sql- SQL запрос для n8nticket_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
Статус: В процессе отладки