]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Интерфейс проверки задач
authorvladfo <fvv2011@gmail.com>
Wed, 2 Oct 2024 11:19:01 +0000 (14:19 +0300)
committervladfo <fvv2011@gmail.com>
Wed, 2 Oct 2024 11:19:01 +0000 (14:19 +0300)
erp24/controllers/SchedulerTaskController.php
erp24/scripts/tasks/task_34_create_request_for_1c_buh.php
erp24/views/scheduler_task/result.php [new file with mode: 0644]
erp24/views/scheduler_task/test.php [new file with mode: 0644]

index bcb6fb34114957dca3da5cc5dc3316c7acca9cc6..40837664113580fc51314f1be712bd8e2492e848 100755 (executable)
@@ -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.
index 53d51ab8c6f44885dcb34a966a4282a6f893e45c..0ad8d9c2d00c30ec651461fcb16d9ea1adccf5e3 100644 (file)
@@ -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 (file)
index 0000000..9e68b97
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+/* @var $this yii\web\View */
+/* @var $output string */
+
+use yii\helpers\Html;
+
+$this->title = 'Результат выполнения задачи';
+?>
+<div class="task-test-result p-4">
+    <h1><?= Html::encode($this->title) ?></h1>
+
+    <pre><?= Html::encode($output) ?></pre>
+
+    <p><?= Html::a('Вернуться назад', ['test'], ['class' => 'btn btn-default']) ?></p>
+</div>
\ 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 (file)
index 0000000..2968b9e
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/* @var $this yii\web\View */
+/* @var $error string */
+
+use yii\helpers\Html;
+use yii\helpers\Url;
+
+$this->title = 'Тестовый запуск задачи';
+?>
+<div class="task-test-index p-4">
+    <h1><?= Html::encode($this->title) ?></h1>
+
+    <?php if (isset($error)): ?>
+        <div class="alert alert-danger"><?= Html::encode($error) ?></div>
+    <?php endif; ?>
+
+    <form action="<?= Url::to(['scheduler-task/run-task']) ?>" method="post">
+        <?= Html::hiddenInput(Yii::$app->request->csrfParam, Yii::$app->request->getCsrfToken()) ?>
+
+        <div class="form-group">
+            <label for="date">Дата (YYYY-MM-DD):</label>
+            <input type="date" id="date" name="date" class="form-control" required>
+        </div>
+
+        <div class="form-group">
+            <label for="time">Время (HH:MM):</label>
+            <input type="time" id="time" name="time" class="form-control" required>
+        </div>
+
+        <div class="form-group">
+            <label for="task_num">Номер задачи:</label>
+            <input type="text" id="task_num" name="task_num" class="form-control" value="task_34_create_request_for_1c_buh" required>
+        </div>
+
+        <button type="submit" class="btn btn-primary">Запустить задачу</button>
+    </form>
+</div>
\ No newline at end of file