<?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();
}
echo "time2_" . $time . "_time2 ";
$taskNum = 34;
$dateTask = date('Y-m-d H:i:s', $time);
+echo "Текущее время задачи: " . $dateTask;
$dateTaskStart = null;
$dateTaskStop = null;
$log = '';
$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)
->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)
->setLog($log);
}
-$validate = $schedulerTaskLog->validate();
-if ($validate) {
+if ($schedulerTaskLog->validate()) {
$schedulerTaskLog->save();
}
-
-// Функция обработки компаний по неделям
+// Функция для обработки фирм по неделям
function processFirms($weekRange, $time)
{
foreach (Firms::getInn() as $key => $firm) {
}
}
+// Функция для создания и сохранения запроса в 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' => [
'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