Files
crm.clientright.ru/ticket_form/SESSION_LOG_2025-12-03.md
Fedor e114231541 feat: Получение cf_2624 из MySQL при загрузке черновика
- Добавлен сервис CrmMySQLService для подключения к MySQL БД vtiger CRM
- Обновлён get_draft() для прямого SQL запроса к MySQL вместо webservice API
- Получение cf_2624 и всех данных контакта из MySQL
- Обновлена документация и SQL файлы для n8n
- Добавлено логирование для отладки

Преимущества:
- Проще: один SQL запрос вместо цепочки HTTP запросов
- Быстрее: прямой запрос к БД
- Надёжнее: не зависит от webservice API
- Актуальнее: всегда свежие данные из БД
2025-12-03 16:04:25 +03:00

5.4 KiB
Raw Blame History

Лог сессии 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" или NULLcontact_data_confirmed = False, contact_data_can_edit = True

5. Обновлены SQL файлы и документация

  • N8N_POSTGRESQL_GET_CONTACT_DATA.sqlN8N_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 запрос:

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 запросе (не логируется)

Добавлено логирование:

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
Статус: В процессе отладки