namespace app\controllers;
+use Yii;
use yii_app\records\SchedulerTask;
use yii_app\records\SchedulerTaskSearch;
use yii\web\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.
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 = '';
&& $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;
$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) {
}
+ // Логика для запроса данных за предыдущий месяц в начале месяца
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);
}
}
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;
}
-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' => [
--- /dev/null
+<?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
--- /dev/null
+<?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