]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Интерфейс проверки задач и тестирование
authorvladfo <fvv2011@gmail.com>
Wed, 2 Oct 2024 14:50:59 +0000 (17:50 +0300)
committervladfo <fvv2011@gmail.com>
Wed, 2 Oct 2024 14:50:59 +0000 (17:50 +0300)
erp24/controllers/SchedulerTaskController.php
erp24/scripts/tasks/task_34_create_request_for_1c_buh.php

index 40837664113580fc51314f1be712bd8e2492e848..64d765cc295259f04fd53c4669b424ad4b1295a6 100755 (executable)
@@ -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;
     }
 
     /**
index 0ad8d9c2d00c30ec651461fcb16d9ea1adccf5e3..42b4aad456b3b991d7c551bed4559a08ad1792e1 100644 (file)
@@ -1,24 +1,19 @@
 <?php
-
 /**
  * @var $time integer
  */
 
 use yii\helpers\Json;
-use yii_app\records\Admin;
-use yii_app\records\AdminGroup;
-use yii_app\records\ApiCronBuh;
+use yii_app\records\SchedulerTaskLog;
 use yii_app\records\Firms;
 use yii_app\records\Motivation;
-use yii_app\records\SchedulerTaskLog;
+use yii_app\records\ApiCronBuh;
 
 ini_set('max_execution_time', (string)(60 * 60 * 1)); // 1 час
 ini_set('display_errors', 'on');
-ini_set('display_errors', 1);
-ini_set('display_startup_errors', 1);
 error_reporting(E_ALL);
 
-// Ð\95Ñ\81ли Ð¿ÐµÑ\80еменнаÑ\8f $time Ð½Ðµ Ð¾Ð¿Ñ\80еделена, Ð¸Ñ\81полÑ\8cзÑ\83ем текущее время
+// Ð\95Ñ\81ли Ð¿ÐµÑ\80еменнаÑ\8f $time Ð¿ÐµÑ\80едана, Ð¸Ñ\81полÑ\8cзÑ\83ем ÐµÐµ, Ð¸Ð½Ð°Ñ\87е Ð±ÐµÑ\80ем текущее время
 if (!isset($time)) {
     $time = time();
 }
@@ -26,6 +21,7 @@ if (!isset($time)) {
 echo "time2_" . $time . "_time2 ";
 $taskNum = 34;
 $dateTask = date('Y-m-d H:i:s', $time);
+echo "Текущее время задачи: " . $dateTask;
 $dateTaskStart = null;
 $dateTaskStop = null;
 $log = '';
@@ -36,29 +32,20 @@ $description = '';
 $result = 0;
 
 $enable = true;
-$start = false;
 $force = false;
 
-$minuetTimeInTask = date('i', $time);
-$fullTimeInTask = date('Y-m-d H:i:s', $time);
-
 try {
+    // Начинаем выполнение задачи только в определенное время или если принудительно (force) разрешено
     if (
         (
-            (
-                date('H:i', $time) == "06:00" ||
-                date('H:i', $time) == "18:00"
-            )
-            || $force
+            date('H:i', $time) == "06:00" ||
+            date('H:i', $time) == "18:00" ||
+            $force
         )
         && $enable
     ) {
-
         $dateTaskStart = date('Y-m-d H:i:s', $time);
-        $info = ' ================ test Task ' . $taskNum . ' start ================';
-        echo $info;
-        $log .= $info;
-        $log .= $time;
+        echo '=============== Task ' . $taskNum . ' start ================';
 
         $schedulerTaskLog = new SchedulerTaskLog();
         $schedulerTaskLog->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