From 6a1a0e001cdecc8b9e92e098f1da4ff6a3b18d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D1=82=D1=80=D0=B8=D1=89=D0=B5=D0=B2=20=D0=90?= =?UTF-8?q?=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= Date: Wed, 26 Nov 2025 18:41:43 +0300 Subject: [PATCH] =?UTF-8?q?[add]=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/engine/cron/data_sync/run.sh | 3 + .../cron/data_sync/sync_doctors_and_zones.php | 54 +++++------ .../migrations/20251126-1827-user-cats.sql | 2 + .../migrations/20251126-1828-user-cats.sql | 4 + ...abbb1938ff83691969b9fa9449dce53ca25.bladec | 4 +- ...1d85314321923ccc7e45f1793abe0d5773e.bladec | 83 +++++++++++++++++ ...3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec | 69 +++++++++----- ...914d3856b1a7f37474c63abd946c9c06fb9.bladec | 2 +- .../www/bladetpl/site_index/data.blade.php | 67 +++++++++----- .../www/bladetpl/site_index/main.blade.php | 2 +- .../bladetpl/site_index/show_doc.blade.php | 0 .../site_index/zone_not_found.blade.php | 4 +- .../bladetpl/site_screensaver/main.blade.php | 83 +++++++++++++++++ app/engine/www/modules/site_screensaver.php | 20 +++++ app/engine/www/tpls/index.htm | 90 +++++-------------- app/engine/www/tpls/index_empty.htm | 21 +++++ app/engine/www/xml/empty.xml | 4 + docker-compose.yml | 30 ------- sync_data.cmd | 1 + 19 files changed, 362 insertions(+), 181 deletions(-) create mode 100644 app/engine/cron/data_sync/run.sh create mode 100644 app/engine/migrations/20251126-1827-user-cats.sql create mode 100644 app/engine/migrations/20251126-1828-user-cats.sql create mode 100644 app/engine/www/bladetpl/cache/c2b731d85314321923ccc7e45f1793abe0d5773e.bladec create mode 100644 app/engine/www/bladetpl/site_index/show_doc.blade.php create mode 100644 app/engine/www/bladetpl/site_screensaver/main.blade.php create mode 100644 app/engine/www/modules/site_screensaver.php create mode 100644 app/engine/www/tpls/index_empty.htm create mode 100644 app/engine/www/xml/empty.xml create mode 100644 sync_data.cmd diff --git a/app/engine/cron/data_sync/run.sh b/app/engine/cron/data_sync/run.sh new file mode 100644 index 0000000..b1e1b3a --- /dev/null +++ b/app/engine/cron/data_sync/run.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cd /var/www/html/engine/cron/data_sync || exit 1 +php sync_doctors_and_zones.php diff --git a/app/engine/cron/data_sync/sync_doctors_and_zones.php b/app/engine/cron/data_sync/sync_doctors_and_zones.php index d00280c..7506bf0 100644 --- a/app/engine/cron/data_sync/sync_doctors_and_zones.php +++ b/app/engine/cron/data_sync/sync_doctors_and_zones.php @@ -10,6 +10,7 @@ $DRY_RUN = false; // ← поставить true для тестового за // Источник (старая МИС) $src = new db(); +// $src->connect("192.168.111.234", "dbuser", "dbpassword", "pnd8"); $src->connect("192.168.0.2", "root", "Xx29Pz33", "pnd8"); // Приёмник (новая база) @@ -145,11 +146,11 @@ function replaceTables($dst, $DRY_RUN) replaceTables($dst, $DRY_RUN); -function getDoctorSchedule($src, $doctorId) { - - // Генерируем диапазон дат: -3 дня назад и +4 вперёд - $startDate = date('Y-m-d', strtotime('-3 days')); - $endDate = date('Y-m-d', strtotime('+4 days')); +function getDoctorSchedule($src, $doctorId) +{ + // диапазон на 10 дней включая сегодня + $startDate = date('Y-m-d'); + $endDate = date('Y-m-d', strtotime('+9 days')); $sql = " SELECT @@ -174,45 +175,34 @@ function getDoctorSchedule($src, $doctorId) { GROUP BY DATE(e.execDate) "; + $rows = $src->q($sql)->fetchAll(); - // Подготовка недели: day1..day7 = Пн..Вс - $week = [ - 1 => 'day1', - 2 => 'day2', - 3 => 'day3', - 4 => 'day4', - 5 => 'day5', - 6 => 'day6', - 7 => 'day7', - ]; - - // Заполняем пустыми днями - $result = [ - 'day1' => null, - 'day2' => null, - 'day3' => null, - 'day4' => null, - 'day5' => null, - 'day6' => null, - 'day7' => null, - ]; + $result = []; +// 1. Сначала добавляем ВСЕ даты из SQL foreach ($rows as $r) { + $day = trim($r['day']); // защита от пробелов - // 1 – воскресенье, нам нужно 1=Пн → 7=Вс - $dayNum = date('N', strtotime($r['day'])); - - $key = $week[$dayNum]; - - $result[$key] = [ + $result[$day] = [ 'start' => $r['work_start'] ?: null, 'end' => $r['work_end'] ?: null, ]; } +// 2. Потом добавляем пустые даты вперёд на 10 дней + for ($i = 0; $i < 10; $i++) { + $date = date('Y-m-d', strtotime("+{$i} days")); + if (!array_key_exists($date, $result)) { + $result[$date] = null; + } + } + + + return json_encode($result, JSON_UNESCAPED_UNICODE); } + echo "\n--- DONE (DRY_RUN = " . ($DRY_RUN ? "YES" : "NO") . ") ---\n"; diff --git a/app/engine/migrations/20251126-1827-user-cats.sql b/app/engine/migrations/20251126-1827-user-cats.sql new file mode 100644 index 0000000..53dea39 --- /dev/null +++ b/app/engine/migrations/20251126-1827-user-cats.sql @@ -0,0 +1,2 @@ +UPDATE `_sys_cat` SET `_sys_cat`.`module` = "site_screensaver.php" , `_sys_cat`.`data` = "" WHERE `_sys_cat`.`cat_id` = "index"; +UPDATE `_sys_cat` SET `_sys_cat`.`xml` = "index.xml" WHERE `_sys_cat`.`cat_id` = "--btns-"; diff --git a/app/engine/migrations/20251126-1828-user-cats.sql b/app/engine/migrations/20251126-1828-user-cats.sql new file mode 100644 index 0000000..92dbc80 --- /dev/null +++ b/app/engine/migrations/20251126-1828-user-cats.sql @@ -0,0 +1,4 @@ +UPDATE `_sys_cat` SET `_sys_cat`.`xml` = "empty.xml" WHERE `_sys_cat`.`cat_id` = "index"; +UPDATE `_sys_cat` SET `_sys_cat`.`_sys_deleted` = "1" WHERE `_sys_cat`.`cat_id` = "core-menuconfig"; +UPDATE `_sys_cat` SET `_sys_cat`.`_sys_deleted` = "1" WHERE `_sys_cat`.`cat_id` = "-no-auth-links-"; +; diff --git a/app/engine/www/bladetpl/cache/50036abbb1938ff83691969b9fa9449dce53ca25.bladec b/app/engine/www/bladetpl/cache/50036abbb1938ff83691969b9fa9449dce53ca25.bladec index 71fd4ec..7b6fb26 100644 --- a/app/engine/www/bladetpl/cache/50036abbb1938ff83691969b9fa9449dce53ca25.bladec +++ b/app/engine/www/bladetpl/cache/50036abbb1938ff83691969b9fa9449dce53ca25.bladec @@ -3,8 +3,8 @@

- Не удалось определить участок.
- Попробуйте ввести другой адрес. + Попробуйте ввести другой адрес
+ или обратитесь в регистратуру

diff --git a/app/engine/www/bladetpl/cache/c2b731d85314321923ccc7e45f1793abe0d5773e.bladec b/app/engine/www/bladetpl/cache/c2b731d85314321923ccc7e45f1793abe0d5773e.bladec new file mode 100644 index 0000000..3ae2418 --- /dev/null +++ b/app/engine/www/bladetpl/cache/c2b731d85314321923ccc7e45f1793abe0d5773e.bladec @@ -0,0 +1,83 @@ + + + +
+
+
+ + + +
+ +
+ + + Логотип + + +
+ Психоневрологический
+ диспансер №8 +
+ + +

+ Расписание приема врачей
и участков +

+ +
+ (поиск по адресу проживания) +
+ +
+
+
+ + diff --git a/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec b/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec index 08edf31..0703da8 100644 --- a/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec +++ b/app/engine/www/bladetpl/cache/db96a3dc7e7cb5fa7e5c21f03ac1e1d5bc9cfdeb.bladec @@ -1,18 +1,14 @@
-

Ваш участок обслуживания

+

Ваш участок обслуживания

- - addLoop($__currentLoopData);$this->getFirstLoop(); foreach($__currentLoopData as $doc): $loop = $this->incrementLoopIndices(); ?>
-
+

@@ -35,38 +31,64 @@
'Понедельник', - 'day2' => 'Вторник', - 'day3' => 'Среда', - 'day4' => 'Четверг', - 'day5' => 'Пятница', - 'day6' => 'Суббота', - 'day7' => 'Воскресенье', - ]; + // JSON формата: "2025-01-20" => {start:"", end:""} или null + $schedule = json_decode($doc['schedule'] ?? '{}', true); - $schedule = json_decode($doc['schedule'] ?? '', true); + $todayDate = date('Y-m-d'); + $filtered = []; + + // Фильтруем только >= сегодня + foreach ($schedule as $date => $slot) { + if ($date >= $todayDate) { + $filtered[$date] = $slot; + } + } + + // Для отображения дня недели + $ruDays = ['Вс','Пн','Вт','Ср','Чт','Пт','Сб']; ?>
-
Расписание приёма
+
Расписание приёма
- -
Расписание не указано
+ +
Расписание отсутствует
    - addLoop($__currentLoopData);$this->getFirstLoop(); - foreach($__currentLoopData as $dayKey => $dayTitle): $loop = $this->incrementLoopIndices(); ?> + addLoop($__currentLoopData);$this->getFirstLoop(); + foreach($__currentLoopData as $date => $slot): $loop = $this->incrementLoopIndices(); ?> 'января', + 2 => 'февраля', + 3 => 'марта', + 4 => 'апреля', + 5 => 'мая', + 6 => 'июня', + 7 => 'июля', + 8 => 'августа', + 9 => 'сентября', + 10 => 'октября', + 11 => 'ноября', + 12 => 'декабря', + ]; + + $dayNum = (int)date('j', $ts); // 1–31 (без ведущего нуля) + $monthNum = (int)date('n', $ts); // 1–12 + $monthName = $months[$monthNum]; + + $label = "{$dayNum} {$monthName} ({$weekday})"; + ?>
  • - + @@ -86,4 +108,3 @@
popLoop(); $loop = $this->getFirstLoop(); ?> - diff --git a/app/engine/www/bladetpl/cache/decf3914d3856b1a7f37474c63abd946c9c06fb9.bladec b/app/engine/www/bladetpl/cache/decf3914d3856b1a7f37474c63abd946c9c06fb9.bladec index 89f02c1..854b84d 100644 --- a/app/engine/www/bladetpl/cache/decf3914d3856b1a7f37474c63abd946c9c06fb9.bladec +++ b/app/engine/www/bladetpl/cache/decf3914d3856b1a7f37474c63abd946c9c06fb9.bladec @@ -369,7 +369,7 @@ // Подменяем HTML на печатный document.body.innerHTML = - '
' + + '
' + modalBody.innerHTML + '
'; diff --git a/app/engine/www/bladetpl/site_index/data.blade.php b/app/engine/www/bladetpl/site_index/data.blade.php index 8bb03cd..b30edfd 100644 --- a/app/engine/www/bladetpl/site_index/data.blade.php +++ b/app/engine/www/bladetpl/site_index/data.blade.php @@ -1,17 +1,13 @@
-

Ваш участок обслуживания

+

Ваш участок обслуживания

{{$zone_name}}

-@php - $today = date('N'); // 1..7 -@endphp - @foreach($doctors as $doc)
-
+
{{-- Левая колонка с аватаром-вставкой по дизайну --}}
{{$doc['name']}}
@@ -33,37 +29,63 @@
@php - $daysMap = [ - 'day1' => 'Понедельник', - 'day2' => 'Вторник', - 'day3' => 'Среда', - 'day4' => 'Четверг', - 'day5' => 'Пятница', - 'day6' => 'Суббота', - 'day7' => 'Воскресенье', - ]; + // JSON формата: "2025-01-20" => {start:"", end:""} или null + $schedule = json_decode($doc['schedule'] ?? '{}', true); - $schedule = json_decode($doc['schedule'] ?? '', true); + $todayDate = date('Y-m-d'); + $filtered = []; + + // Фильтруем только >= сегодня + foreach ($schedule as $date => $slot) { + if ($date >= $todayDate) { + $filtered[$date] = $slot; + } + } + + // Для отображения дня недели + $ruDays = ['Вс','Пн','Вт','Ср','Чт','Пт','Сб']; @endphp
-
Расписание приёма
+
Расписание приёма
- @if(empty($schedule)) -
Расписание не указано
+ @if(empty($filtered)) +
Расписание отсутствует
@else
    - @foreach($daysMap as $dayKey => $dayTitle) + @foreach($filtered as $date => $slot) @php - $slot = $schedule[$dayKey] ?? null; + $ts = strtotime($date); + $weekday = $ruDays[date('w', $ts)]; + $months = [ + 1 => 'января', + 2 => 'февраля', + 3 => 'марта', + 4 => 'апреля', + 5 => 'мая', + 6 => 'июня', + 7 => 'июля', + 8 => 'августа', + 9 => 'сентября', + 10 => 'октября', + 11 => 'ноября', + 12 => 'декабря', + ]; + + $dayNum = (int)date('j', $ts); // 1–31 (без ведущего нуля) + $monthNum = (int)date('n', $ts); // 1–12 + $monthName = $months[$monthNum]; + + $label = "{$dayNum} {$monthName} ({$weekday})"; + @endphp
  • - {{ $dayTitle }} + {{ $label }} @if($slot && !empty($slot['start']) && !empty($slot['end'])) @@ -82,4 +104,3 @@
@endforeach - diff --git a/app/engine/www/bladetpl/site_index/main.blade.php b/app/engine/www/bladetpl/site_index/main.blade.php index 52a5580..cf6c666 100644 --- a/app/engine/www/bladetpl/site_index/main.blade.php +++ b/app/engine/www/bladetpl/site_index/main.blade.php @@ -368,7 +368,7 @@ // Подменяем HTML на печатный document.body.innerHTML = - '
' + + '
' + modalBody.innerHTML + '
'; diff --git a/app/engine/www/bladetpl/site_index/show_doc.blade.php b/app/engine/www/bladetpl/site_index/show_doc.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/app/engine/www/bladetpl/site_index/zone_not_found.blade.php b/app/engine/www/bladetpl/site_index/zone_not_found.blade.php index 6635228..d0a7609 100644 --- a/app/engine/www/bladetpl/site_index/zone_not_found.blade.php +++ b/app/engine/www/bladetpl/site_index/zone_not_found.blade.php @@ -3,8 +3,8 @@

- Не удалось определить участок.
- Попробуйте ввести другой адрес. + Попробуйте ввести другой адрес
+ или обратитесь в регистратуру

diff --git a/app/engine/www/bladetpl/site_screensaver/main.blade.php b/app/engine/www/bladetpl/site_screensaver/main.blade.php new file mode 100644 index 0000000..1dc8562 --- /dev/null +++ b/app/engine/www/bladetpl/site_screensaver/main.blade.php @@ -0,0 +1,83 @@ + + + +
+
+
+ + + +
+ +
+ + + Логотип + + +
+ Психоневрологический
+ диспансер №8 +
+ + +

+ Расписание приема врачей
и участков +

+ +
+ (поиск по адресу проживания) +
+ +
+
+
+ + diff --git a/app/engine/www/modules/site_screensaver.php b/app/engine/www/modules/site_screensaver.php new file mode 100644 index 0000000..37128f5 --- /dev/null +++ b/app/engine/www/modules/site_screensaver.php @@ -0,0 +1,20 @@ +run($this->getBladeTempl('main')); + } + + +} + + + + +?> \ No newline at end of file diff --git a/app/engine/www/tpls/index.htm b/app/engine/www/tpls/index.htm index ab9bae5..7fd3976 100644 --- a/app/engine/www/tpls/index.htm +++ b/app/engine/www/tpls/index.htm @@ -33,89 +33,47 @@
-
+
{body}
- - - -
- - diff --git a/app/engine/www/tpls/index_empty.htm b/app/engine/www/tpls/index_empty.htm new file mode 100644 index 0000000..3dcf0f2 --- /dev/null +++ b/app/engine/www/tpls/index_empty.htm @@ -0,0 +1,21 @@ + + + + + {auto_title} + + + + + + {include:include/_static_css_headers.htm} + {include:include/_static_js_headers.htm} + {add_headers} + + + + {body} + + + + diff --git a/app/engine/www/xml/empty.xml b/app/engine/www/xml/empty.xml new file mode 100644 index 0000000..f61a18d --- /dev/null +++ b/app/engine/www/xml/empty.xml @@ -0,0 +1,4 @@ + + + + diff --git a/docker-compose.yml b/docker-compose.yml index 5303c3c..77b306e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,36 +18,6 @@ services: networks: - app_network - php-cron: - build: - context: . - dockerfile: docker/dockerfile_cron - image: angels-it/php-cron - environment: - APP_ENV: ${APP_ENV} - DB_HOST: mariadb - DB_DATABASE: ${MYSQL_DATABASE} - DB_USERNAME: ${MYSQL_USER} - DB_PASSWORD: ${MYSQL_PASSWORD} - volumes: - - ./app:/var/www/html - - ./config/php:/usr/local/etc/php - - ./config/cron:/etc/cron.d - - ./logs/php-cron:/var/log - command: > - /bin/sh -c ' - if [ "$${APP_ENV}" = "prod" ]; then - echo "[cron] production mode — starting cron"; - cron -f; - else - echo "[cron] dev mode — sleeping"; - tail -f /dev/null; - fi - ' - restart: always - networks: - - app_network - nginx: image: nginx:1.24.0 ports: diff --git a/sync_data.cmd b/sync_data.cmd new file mode 100644 index 0000000..c1b329f --- /dev/null +++ b/sync_data.cmd @@ -0,0 +1 @@ +docker exec -t pnd8_app-php-1 sh -c "/var/www/html/engine/cron/data_sync/run.sh"