From: vladfo Date: Wed, 2 Oct 2024 14:50:59 +0000 (+0300) Subject: Интерфейс проверки задач и тестирование X-Git-Tag: 1.6~42^2~7 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=67147234ec3d75772053579ad8c023576585b7fb;p=erp24_rep%2Fyii-erp24%2F.git Интерфейс проверки задач и тестирование --- diff --git a/erp24/controllers/SchedulerTaskController.php b/erp24/controllers/SchedulerTaskController.php index 40837664..64d765cc 100755 --- a/erp24/controllers/SchedulerTaskController.php +++ b/erp24/controllers/SchedulerTaskController.php @@ -160,28 +160,22 @@ class SchedulerTaskController extends Controller protected function runTask($taskNum, $dateTime) { - // Путь к вашему скрипту scheduler.php - $schedulerScript = Yii::getAlias('@app') . '/scripts/scheduler.php'; - // Путь к задаче - $taskScript = Yii::getAlias('@app') . '/scripts/tasks/' . $taskNum . '.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); + // Устанавливаем временную метку $time, если она используется в скрипте задачи + $time = $dateTime; - if ($returnVar !== 0) { - return "Ошибка при выполнении задачи. Код возврата: {$returnVar}"; - } + // Выполняем скрипт задачи + ob_start(); // Начинаем буферизацию вывода + include($taskScript); + $output = ob_get_clean(); // Получаем вывод скрипта - // Возвращаем вывод скрипта - return implode("\n", $output); + return $output; } /** 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 0ad8d9c2..42b4aad4 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 @@ -1,24 +1,19 @@ setTaskNum($taskNum) @@ -66,71 +53,45 @@ try { ->setDate($dateTask) ->setDateStart($dateTaskStart); - $validate = $schedulerTaskLog->validate(); - if ($validate) { + if ($schedulerTaskLog->validate()) { $schedulerTaskLog->save(); } + // Текущий день, месяц и год из переданного времени $currentDay = date('d', $time); + echo "Текущее время задачи день: " . $currentDay; $currentMonth = date('m', $time); + echo "Текущее время задачи месяц: " . $currentMonth; $currentYear = date('Y', $time); + echo "Текущее время задачи год: " . $currentYear; - - if ($currentDay == 8) { - // 1-я неделя - $weekRange = Motivation::getWeekRangeForDate(1); - processFirms($weekRange); - } elseif ($currentDay == 15) { - // 1-я и 2-я недели - for ($week = 1; $week <= 2; $week++) { - $weekRange = Motivation::getWeekRangeForDate($week); - processFirms($weekRange); - } - } elseif ($currentDay == 22) { - // 1-я, 2-я и 3-я недели - for ($week = 1; $week <= 3; $week++) { - $weekRange = Motivation::getWeekRangeForDate($week); - processFirms($weekRange); - } - } elseif ($currentDay == 29) { - // 1-я, 2-я, 3-я и 4-я недели - for ($week = 1; $week <= 4; $week++) { - $weekRange = Motivation::getWeekRangeForDate($week); - processFirms($weekRange); - } - } elseif (date('t') == $currentDay) { - // Последний день месяца — все 5 недель - for ($week = 1; $week <= 5; $week++) { - $weekRange = Motivation::getWeekRangeForDate($week); - processFirms($weekRange); - } - } - - - // Логика для запроса данных за предыдущий месяц в начале месяца + // Если это первый день месяца, вычисляем предыдущий месяц if ($currentDay == 1) { - $previousMonth = date('m', strtotime('first day of last month', $time)); - $previousYear = date('Y', strtotime('first day of last month', $time)); + // Получаем предыдущий месяц и год + $previousMonth = date('m', strtotime('-1 month', $time)); + echo "Текущее время задачи месяц: " . $previousMonth; + $previousYear = date('Y', strtotime('-1 month', $time)); + echo "Текущее время задачи год: " . $previousYear; for ($week = 1; $week <= 5; $week++) { $weekRange = Motivation::getWeekRangeForDate($week, $previousMonth, $previousYear); processFirms($weekRange, $time); } + } else { + // Выполняем логику для текущего месяца + processCurrentMonth($currentDay, $currentMonth, $currentYear, $time); } - $info = ' ================ test Task ' . $taskNum . ' stop ================'; - echo $info; - $log .= $info; - $log .= ' date >= ' . strtotime("-1 week", time()); + echo '=============== Task ' . $taskNum . ' stop ================'; $dateTaskStop = date('Y-m-d H:i:s', $time); } else { - $info = ' Task ' . $taskNum . ' skip '; - echo $info; - $log .= $info; + echo 'Task ' . $taskNum . ' skipped'; } } catch (Exception $e) { - $error = 'Exception: ' . $e->getMessage() . ' ' . $e->getFile() . ' >>> ' . $e->getLine(); + $error = 'Exception: ' . $e->getMessage() . ' in ' . $e->getFile() . ' on line ' . $e->getLine(); + echo $error; } +// Сохраняем лог выполнения задачи if (empty($schedulerTaskLog)) { $schedulerTaskLog = new SchedulerTaskLog(); $schedulerTaskLog->setTaskNum($taskNum) @@ -150,13 +111,11 @@ if (empty($schedulerTaskLog)) { ->setLog($log); } -$validate = $schedulerTaskLog->validate(); -if ($validate) { +if ($schedulerTaskLog->validate()) { $schedulerTaskLog->save(); } - -// Функция обработки компаний по неделям +// Функция для обработки фирм по неделям function processFirms($weekRange, $time) { foreach (Firms::getInn() as $key => $firm) { @@ -164,11 +123,15 @@ function processFirms($weekRange, $time) } } +// Функция для создания и сохранения запроса в API function createApiCron($key, $weekRange, $time) { $model = new ApiCronBuh(); $model->date = date('Y-m-d H:i:s', $time); + echo "время задачи: " . $model->date; $model->request_id = strval($time . '_' . $key); + + // Формирование правильных дат на основе $weekRange $model->json_post = Json::encode([ 'request_id' => $model->request_id, 'cost_items' => [ @@ -176,10 +139,45 @@ function createApiCron($key, $weekRange, $time) 'end_time' => date('Y-m-d 23:59:59', strtotime($weekRange['end_time'])), ] ]); + $model->inn = $key; try { $model->save(); } catch (Exception $e) { throw new Exception($e); } +} + +// Логика обработки для текущего месяца +function processCurrentMonth($currentDay, $currentMonth, $currentYear, $time) +{ + if ($currentDay == 8) { + // 1-я неделя + $weekRange = Motivation::getWeekRangeForDate(1, $currentMonth, $currentYear); + processFirms($weekRange, $time); + } elseif ($currentDay == 15) { + // 1-я и 2-я недели + for ($week = 1; $week <= 2; $week++) { + $weekRange = Motivation::getWeekRangeForDate($week, $currentMonth, $currentYear); + processFirms($weekRange, $time); + } + } elseif ($currentDay == 22) { + // 1-я, 2-я и 3-я недели + for ($week = 1; $week <= 3; $week++) { + $weekRange = Motivation::getWeekRangeForDate($week, $currentMonth, $currentYear); + processFirms($weekRange, $time); + } + } elseif ($currentDay == 29) { + // 1-я, 2-я, 3-я и 4-я недели + for ($week = 1; $week <= 4; $week++) { + $weekRange = Motivation::getWeekRangeForDate($week, $currentMonth, $currentYear); + processFirms($weekRange, $time); + } + } elseif (date('t', $time) == $currentDay) { + // Последний день месяца — все 5 недель + for ($week = 1; $week <= 5; $week++) { + $weekRange = Motivation::getWeekRangeForDate($week, $currentMonth, $currentYear); + processFirms($weekRange, $time); + } + } } \ No newline at end of file