Files
crm.clientright.ru/ticket_form/SESSION_LOG_2025-12-03.md

133 lines
5.4 KiB
Markdown
Raw Normal View 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`
```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
**Статус:** В процессе отладки