Files
crm.clientright.ru/parsers/BaseCourtParser.php
Fedor 3db9d06c86 feat: Интеграция уведомлений для событий судов
- Добавлена поддержка project_id в parscourt.php для создания уведомлений
- Создана система парсеров судов (BaseCourtParser, MoscowCourtParser, RegionalCourtParser)
- Интегрирован Browserless для парсинга московских судов (mos-sud.ru, mos-gorsud.ru)
- Добавлены уведомления VDNotifierPro при обнаружении новых событий судов
- Создан ParseAndCreateEvent.php для интеграции с CRM workflow
- Создан CreateCourtEvent_v2.php для прямого создания событий в календаре CRM
- Поддержка проверки дубликатов событий (можно отключить для тестирования)
- Автоматическое определение типа суда и выбор подходящего парсера

Функции:
- Парсинг региональных судов (*.sudrf.ru) через HTML
- Парсинг московских судов через Browserless API
- Создание событий в CRM календаре с привязкой к проектам
- Уведомления ответственных пользователей о новых событиях
- Сохранение событий в таблицу subject для истории
2025-10-17 19:45:11 +03:00

81 lines
3.1 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Базовый класс для парсеров судов
*/
abstract class BaseCourtParser {
protected $pdo;
protected $case_number;
protected $uid;
protected $skip_duplicate_check;
protected $project_id;
public function __construct($pdo, $case_number, $uid, $skip_duplicate_check = false, $project_id = null) {
$this->pdo = $pdo;
$this->case_number = $case_number;
$this->uid = $uid;
$this->skip_duplicate_check = $skip_duplicate_check;
$this->project_id = $project_id;
}
/**
* Определить, может ли этот парсер обработать данную ссылку
*/
abstract public function canHandle($url);
/**
* Парсить страницу дела
* @return array|null Массив с данными последнего события или null
*/
abstract public function parse($url, $status);
/**
* Логирование
*/
protected function log($message) {
$date = date('Y-m-d H:i:s');
file_put_contents('logs/parser.log', "[$date] $message" . PHP_EOL, FILE_APPEND);
}
/**
* Сохранить событие в БД
*/
protected function saveEvent($event) {
// Проверяем на дублирование (если не отключена проверка)
if (!$this->skip_duplicate_check) {
$checkQuery = "SELECT COUNT(*) FROM subject WHERE event_name = ? AND event_date = ? AND publication_date = ?";
$checkStmt = $this->pdo->prepare($checkQuery);
$checkStmt->execute([$event['event_name'], $event['event_date'], $event['publication_date']]);
$exists = $checkStmt->fetchColumn() > 0;
if ($exists) {
$this->log("Дубликат найден для события: {$event['event_name']}, пропускаем запись.");
return false;
}
} else {
$this->log("⚠️ ТЕСТОВЫЙ РЕЖИМ: Проверка дубликатов отключена для события: {$event['event_name']}");
}
// Запись данных в таблицу subject
$insertQuery = "INSERT INTO subject (case_number, uid, event_name, event_date, event_time, location, event_result, event_basis, note, publication_date, update_datetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$insertStmt = $this->pdo->prepare($insertQuery);
$insertStmt->execute([
$this->case_number,
$this->uid,
$event['event_name'],
$event['event_date'],
$event['event_time'],
$event['location'],
$event['event_result'],
$event['event_basis'],
$event['note'],
$event['publication_date'],
date('Y-m-d H:i:s')
]);
$this->log("Данные успешно записаны в таблицу subject для события: {$event['event_name']}");
return true;
}
}
?>