Files
crm.clientright.ru/parsers/BaseCourtParser.php

81 lines
3.1 KiB
PHP
Raw Normal View History

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
<?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;
}
}
?>