From 18f5e47e51e9f0791b4b0324110ea3fda16ff344 Mon Sep 17 00:00:00 2001 From: vladfo Date: Wed, 2 Oct 2024 14:19:01 +0300 Subject: [PATCH] =?utf8?q?=D0=98=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9?= =?utf8?q?=D1=81=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20?= =?utf8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/controllers/SchedulerTaskController.php | 62 +++++++++++++++++++ .../task_34_create_request_for_1c_buh.php | 38 +++++++----- erp24/views/scheduler_task/result.php | 15 +++++ erp24/views/scheduler_task/test.php | 37 +++++++++++ 4 files changed, 138 insertions(+), 14 deletions(-) create mode 100644 erp24/views/scheduler_task/result.php create mode 100644 erp24/views/scheduler_task/test.php diff --git a/erp24/controllers/SchedulerTaskController.php b/erp24/controllers/SchedulerTaskController.php index bcb6fb34..40837664 100755 --- a/erp24/controllers/SchedulerTaskController.php +++ b/erp24/controllers/SchedulerTaskController.php @@ -2,6 +2,7 @@ namespace app\controllers; +use Yii; use yii_app\records\SchedulerTask; use yii_app\records\SchedulerTaskSearch; use yii\web\Controller; @@ -122,6 +123,67 @@ class SchedulerTaskController extends Controller return $this->redirect(['/scheduler_task/index']); } + + public function actionTest() + { + return $this->render('/scheduler_task/test'); + } + + public function actionRunTask() + { + $request = Yii::$app->request; + if ($request->isPost) { + $date = $request->post('date'); + $time = $request->post('time'); + $taskNum = $request->post('task_num'); + + // Объединяем дату и время + $dateTime = strtotime($date . ' ' . $time); + + // Проверяем корректность даты и времени + if ($dateTime === false) { + return $this->render('/scheduler_task/test', [ + 'error' => 'Неверный формат даты или времени.', + ]); + } + + // Запускаем задачу + $output = $this->runTask($taskNum, $dateTime); + + return $this->render('/scheduler_task/result', [ + 'output' => $output, + ]); + } else { + return $this->redirect(['/scheduler_task/test']); + } + } + + protected function runTask($taskNum, $dateTime) + { + // Путь к вашему скрипту scheduler.php + $schedulerScript = Yii::getAlias('@app') . '/scripts/scheduler.php'; + + // Путь к задаче + $taskScript = Yii::getAlias('@app') . '/scripts/tasks/' . $taskNum . '.php'; + + if (!file_exists($taskScript)) { + return "Задача с номером {$taskNum} не найдена."; + } + + // Команда для запуска скрипта + $command = PHP_BINARY . " {$schedulerScript} {$dateTime} \"{$taskScript}\""; + + // Выполняем команду и собираем вывод + exec($command, $output, $returnVar); + + if ($returnVar !== 0) { + return "Ошибка при выполнении задачи. Код возврата: {$returnVar}"; + } + + // Возвращаем вывод скрипта + return implode("\n", $output); + } + /** * Finds the SchedulerTask model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. diff --git a/erp24/scripts/tasks/task_34_create_request_for_1c_buh.php b/erp24/scripts/tasks/task_34_create_request_for_1c_buh.php index 53d51ab8..0ad8d9c2 100644 --- a/erp24/scripts/tasks/task_34_create_request_for_1c_buh.php +++ b/erp24/scripts/tasks/task_34_create_request_for_1c_buh.php @@ -18,9 +18,14 @@ ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); +// Если переменная $time не определена, используем текущее время +if (!isset($time)) { + $time = time(); +} + echo "time2_" . $time . "_time2 "; $taskNum = 34; -$dateTask = date('Y-m-d H:i:s'); +$dateTask = date('Y-m-d H:i:s', $time); $dateTaskStart = null; $dateTaskStop = null; $log = ''; @@ -49,7 +54,7 @@ try { && $enable ) { - $dateTaskStart = date('Y-m-d H:i:s'); + $dateTaskStart = date('Y-m-d H:i:s', $time); $info = ' ================ test Task ' . $taskNum . ' start ================'; echo $info; $log .= $info; @@ -66,9 +71,9 @@ try { $schedulerTaskLog->save(); } - $currentDay = date('d'); - $currentMonth = date('m'); - $currentYear = date('Y'); + $currentDay = date('d', $time); + $currentMonth = date('m', $time); + $currentYear = date('Y', $time); if ($currentDay == 8) { @@ -102,11 +107,13 @@ try { } + // Логика для запроса данных за предыдущий месяц в начале месяца if ($currentDay == 1) { - $previousMonth = date('m', strtotime('first day of last month')); + $previousMonth = date('m', strtotime('first day of last month', $time)); + $previousYear = date('Y', strtotime('first day of last month', $time)); for ($week = 1; $week <= 5; $week++) { - $weekRange = Motivation::getWeekRangeForDate($week, $previousMonth); - processFirms($weekRange); + $weekRange = Motivation::getWeekRangeForDate($week, $previousMonth, $previousYear); + processFirms($weekRange, $time); } } @@ -114,7 +121,7 @@ try { echo $info; $log .= $info; $log .= ' date >= ' . strtotime("-1 week", time()); - $dateTaskStop = date('Y-m-d H:i:s'); + $dateTaskStop = date('Y-m-d H:i:s', $time); } else { $info = ' Task ' . $taskNum . ' skip '; echo $info; @@ -149,16 +156,19 @@ if ($validate) { } -function processFirms($weekRange) { +// Функция обработки компаний по неделям +function processFirms($weekRange, $time) +{ foreach (Firms::getInn() as $key => $firm) { - createApiCron($key, $weekRange); + createApiCron($key, $weekRange, $time); } } -function createApiCron($key, $weekRange) { +function createApiCron($key, $weekRange, $time) +{ $model = new ApiCronBuh(); - $model->date = date('Y-m-d H:i:s'); - $model->request_id = strval(strtotime($model->date) . '_' . $key); + $model->date = date('Y-m-d H:i:s', $time); + $model->request_id = strval($time . '_' . $key); $model->json_post = Json::encode([ 'request_id' => $model->request_id, 'cost_items' => [ diff --git a/erp24/views/scheduler_task/result.php b/erp24/views/scheduler_task/result.php new file mode 100644 index 00000000..9e68b973 --- /dev/null +++ b/erp24/views/scheduler_task/result.php @@ -0,0 +1,15 @@ +title = 'Результат выполнения задачи'; +?> +
+

title) ?>

+ +
+ +

'btn btn-default']) ?>

+
\ No newline at end of file diff --git a/erp24/views/scheduler_task/test.php b/erp24/views/scheduler_task/test.php new file mode 100644 index 00000000..2968b9ea --- /dev/null +++ b/erp24/views/scheduler_task/test.php @@ -0,0 +1,37 @@ +title = 'Тестовый запуск задачи'; +?> +
+

title) ?>

+ + +
+ + +
+ request->csrfParam, Yii::$app->request->getCsrfToken()) ?> + +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
\ No newline at end of file -- 2.39.5