200 lines
7.3 KiB
Markdown
200 lines
7.3 KiB
Markdown
|
|
# Тестовый режим парсера (отключение проверки дубликатов)
|
|||
|
|
|
|||
|
|
**Дата:** 17 октября 2025
|
|||
|
|
**Статус:** ✅ Готово к использованию
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 Зачем это нужно
|
|||
|
|
|
|||
|
|
Когда ты тестируешь парсер на уже обработанных делах, все события помечаются как дубликаты и не добавляются в БД повторно. Это **правильное поведение** для продакшена, но **неудобно для тестирования**.
|
|||
|
|
|
|||
|
|
Тестовый режим позволяет:
|
|||
|
|
- ✅ Повторно парсить одно и то же дело
|
|||
|
|
- ✅ Видеть все события в логах
|
|||
|
|
- ✅ Получать корректный JSON ответ даже для дубликатов
|
|||
|
|
- ✅ Проверять работу парсера без очистки БД
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Как использовать
|
|||
|
|
|
|||
|
|
### Вариант 1: В дизайнере процессов (для тестирования)
|
|||
|
|
|
|||
|
|
Добавь в POST параметры:
|
|||
|
|
```
|
|||
|
|
skip_duplicate_check=1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Пример полного запроса:**
|
|||
|
|
```
|
|||
|
|
status=представительство в суде 1й инстанции
|
|||
|
|
link1=https://mos-gorsud.ru/rs/shcherbinskij/services/cases/civil/details/...
|
|||
|
|
case_number=02-15800/2025
|
|||
|
|
uid=
|
|||
|
|
skip_duplicate_check=1 ← ДОБАВИТЬ ДЛЯ ТЕСТИРОВАНИЯ
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Вариант 2: Через cURL (для ручного тестирования)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST http://crm.clientright.ru/parscourt.php \
|
|||
|
|
-d "status=представительство в суде 1й инстанции" \
|
|||
|
|
-d "link1=https://mos-gorsud.ru/rs/shcherbinskij/..." \
|
|||
|
|
-d "case_number=02-15800/2025" \
|
|||
|
|
-d "uid=" \
|
|||
|
|
-d "skip_duplicate_check=1"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 Что происходит в тестовом режиме
|
|||
|
|
|
|||
|
|
### С проверкой дубликатов (по умолчанию, продакшен):
|
|||
|
|
```
|
|||
|
|
[2025-10-17 15:49:25] Найдено событие (МСК): Название: Решение, Дата: 02.10.2025...
|
|||
|
|
[2025-10-17 15:49:25] Дубликат найден для события: Решение, пропускаем запись.
|
|||
|
|
```
|
|||
|
|
❌ Событие не добавляется в БД
|
|||
|
|
❌ `$last_event` остается `null` если все события дубликаты
|
|||
|
|
|
|||
|
|
### Без проверки дубликатов (skip_duplicate_check=1):
|
|||
|
|
```
|
|||
|
|
[2025-10-17 16:00:00] ⚠️ ТЕСТОВЫЙ РЕЖИМ: Проверка дубликатов ОТКЛЮЧЕНА
|
|||
|
|
[2025-10-17 16:00:01] Найдено событие (МСК): Название: Решение, Дата: 02.10.2025...
|
|||
|
|
[2025-10-17 16:00:01] ⚠️ ТЕСТОВЫЙ РЕЖИМ: Проверка дубликатов отключена для события: Решение
|
|||
|
|
[2025-10-17 16:00:01] Данные успешно записаны в таблицу subject для события: Решение
|
|||
|
|
```
|
|||
|
|
✅ Событие добавляется в БД (даже если уже есть)
|
|||
|
|
✅ `$last_event` всегда заполняется
|
|||
|
|
✅ JSON ответ всегда возвращает данные
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚠️ ВАЖНО!
|
|||
|
|
|
|||
|
|
### Когда использовать тестовый режим:
|
|||
|
|
|
|||
|
|
✅ **ДА (для тестирования):**
|
|||
|
|
- Проверка работы парсера на уже обработанных делах
|
|||
|
|
- Отладка извлечения данных
|
|||
|
|
- Проверка формата JSON ответа
|
|||
|
|
- Тестирование новых функций
|
|||
|
|
|
|||
|
|
❌ **НЕТ (в продакшене):**
|
|||
|
|
- Обычная работа через дизайнер процессов
|
|||
|
|
- Автоматические запуски через cron
|
|||
|
|
- Реальная обработка новых дел
|
|||
|
|
|
|||
|
|
### Последствия использования в продакшене:
|
|||
|
|
|
|||
|
|
⚠️ **В БД будут создаваться дубликаты событий!**
|
|||
|
|
- Одно и то же событие будет записано несколько раз
|
|||
|
|
- Размер БД будет расти
|
|||
|
|
- Может нарушиться логика отчетов
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 Примеры использования
|
|||
|
|
|
|||
|
|
### Пример 1: Тестирование московского суда
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# В дизайнере процессов добавь параметр:
|
|||
|
|
skip_duplicate_check=1
|
|||
|
|
|
|||
|
|
# Дерни парсер - получишь данные даже если дело уже парсили
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ожидаемый результат:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"status": "success",
|
|||
|
|
"message": "Парсинг завершен.",
|
|||
|
|
"last_event": {
|
|||
|
|
"Наименование": "Решение",
|
|||
|
|
"Дата": "02.10.2025",
|
|||
|
|
...
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Пример 2: Обычная работа (продакшен)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# НЕ добавляй skip_duplicate_check
|
|||
|
|
|
|||
|
|
# Дерни парсер - дубликаты будут пропущены
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Ожидаемый результат при дубликатах:**
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"status": "success",
|
|||
|
|
"message": "Парсинг завершен, но нет новых событий."
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Логи
|
|||
|
|
|
|||
|
|
### В тестовом режиме:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
[timestamp] ========================================
|
|||
|
|
[timestamp] Режим парсера: НОВЫЙ (универсальный)
|
|||
|
|
[timestamp] ⚠️ ТЕСТОВЫЙ РЕЖИМ: Проверка дубликатов ОТКЛЮЧЕНА
|
|||
|
|
[timestamp] Выбран парсер: MoscowCourtParser
|
|||
|
|
[timestamp] ⚠️ ТЕСТОВЫЙ РЕЖИМ: Проверка дубликатов отключена для события: Решение
|
|||
|
|
[timestamp] Данные успешно записаны в таблицу subject для события: Решение
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### В обычном режиме:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
[timestamp] ========================================
|
|||
|
|
[timestamp] Режим парсера: НОВЫЙ (универсальный)
|
|||
|
|
[timestamp] Выбран парсер: MoscowCourtParser
|
|||
|
|
[timestamp] Дубликат найден для события: Решение, пропускаем запись.
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 Очистка тестовых данных
|
|||
|
|
|
|||
|
|
Если накопилось много дубликатов после тестирования:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- Удалить дубликаты по конкретному делу
|
|||
|
|
DELETE FROM court.subject
|
|||
|
|
WHERE case_number = '02-15800/2025'
|
|||
|
|
AND update_datetime > '2025-10-17 15:00:00';
|
|||
|
|
|
|||
|
|
-- ИЛИ оставить только последние записи
|
|||
|
|
DELETE t1 FROM court.subject t1
|
|||
|
|
INNER JOIN court.subject t2
|
|||
|
|
WHERE t1.event_name = t2.event_name
|
|||
|
|
AND t1.event_date = t2.event_date
|
|||
|
|
AND t1.case_number = t2.case_number
|
|||
|
|
AND t1.id < t2.id;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ Резюме
|
|||
|
|
|
|||
|
|
**Новый параметр:** `skip_duplicate_check=1`
|
|||
|
|
|
|||
|
|
**Использование:**
|
|||
|
|
- 🧪 Для тестирования: `skip_duplicate_check=1`
|
|||
|
|
- 🚀 Для продакшена: не передавай этот параметр
|
|||
|
|
|
|||
|
|
**Эффект:**
|
|||
|
|
- С параметром: события добавляются всегда (даже дубликаты)
|
|||
|
|
- Без параметра: дубликаты пропускаются (защита от повторов)
|
|||
|
|
|
|||
|
|
**Готово! Теперь можешь легко тестировать парсер! 🎉**
|
|||
|
|
|
|||
|
|
|