This commit is contained in:
brusnitsyn
2026-02-20 17:28:16 +09:00
parent 94e374c32b
commit 52a80ccd3b
41 changed files with 2555 additions and 206 deletions

View File

@@ -37,8 +37,9 @@ class AutoReportService
$period = CarbonPeriod::create($startDate, $endDate);
foreach ($period as $date) {
$dateRange = $this->dateRangeService->getNormalizedDateRange($user, $date, $date);
try {
$reportCreated = $this->createReportForDate($user, $date, $departmentId, $force);
$reportCreated = $this->createReportForDate($user, $dateRange, $departmentId, $force);
if ($reportCreated) {
$createdCount++;
@@ -55,13 +56,13 @@ class AutoReportService
/**
* Создать отчет для конкретной даты
*/
public function createReportForDate(User $user, Carbon $date, $departmentId, bool $force = false): bool
public function createReportForDate(User $user, DateRange $dateRange, $departmentId, bool $force = false): bool
{
$user->rf_department_id = $departmentId;
// Проверяем, существует ли уже отчет на эту дату
$existingReport = Report::where('rf_department_id', $departmentId)
->whereDate('created_at', $date)
->whereDate('sent_at', $date)
->whereDate('created_at', $dateRange->endSql())
->whereDate('sent_at', $dateRange->endSql())
->first();
if ($existingReport && !$force) {
@@ -75,18 +76,11 @@ class AutoReportService
$existingReport->delete();
}
// Создаем DateRange для этой даты
// Приводим к Illuminate\Carbon если нужно
if (!$date instanceof \Illuminate\Support\Carbon) {
$date = \Illuminate\Support\Carbon::instance($date);
}
$dateRange = $this->dateRangeService->createDateRangeForDate($date, $user);
// Получаем данные для отчета
$reportData = $this->prepareReportData($user, $dateRange, $date, $departmentId);
$reportData = $this->prepareReportData($user, $dateRange, $departmentId);
// Создаем отчет
DB::transaction(function () use ($user, $reportData, $date) {
DB::transaction(function () use ($user, $reportData) {
$this->reportService->storeReport($reportData, $user);
});
@@ -96,7 +90,7 @@ class AutoReportService
/**
* Подготовить данные для отчета
*/
private function prepareReportData(User $user, DateRange $dateRange, Carbon $date, $departmentId): array
private function prepareReportData(User $user, DateRange $dateRange, $departmentId): array
{
$department = Department::where('department_id', $departmentId)->first();
$branchId = $this->getBranchId($department->rf_mis_department_id);
@@ -121,10 +115,10 @@ class AutoReportService
$dateRange->startTimestamp(),
$dateRange->endTimestamp()
],
'sent_at' => $this->dateRangeService->toSqlFormat($date),
'created_at' => $this->dateRangeService->toSqlFormat($date),
'sent_at' => $dateRange->endSql(),
'created_at' => $dateRange->endSql(),
'metrics' => $this->formatMetrics($metrics),
'observationPatients' => $this->getObservationPatients($departmentId, $date),
'observationPatients' => $this->getObservationPatients($departmentId, $dateRange),
'unwantedEvents' => [],
];
}
@@ -247,7 +241,7 @@ class AutoReportService
/**
* Получить пациентов под наблюдением на дату
*/
private function getObservationPatients(int $departmentId, Carbon $date): array
private function getObservationPatients(int $departmentId, DateRange $dateRange): array
{
// Здесь нужно реализовать логику получения пациентов под наблюдением
// на конкретную дату. Возможно, из снапшотов или истории.