You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.0 KiB
131 lines
4.0 KiB
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\EventCalendar;
|
|
use App\Services\AdminNoticeService;
|
|
use App\Services\EventCalendarService;
|
|
use App\Services\OperationLogService;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class AutomaticallyStartActivity extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
* @var string
|
|
*/
|
|
protected $signature = 'run:automatically-start-activity';
|
|
|
|
/**
|
|
* The console command description.
|
|
* @var string
|
|
*/
|
|
protected $description = 'Command description';
|
|
|
|
protected OperationLogService $logService;
|
|
|
|
protected int $user_id;
|
|
|
|
public function __construct(OperationLogService $log)
|
|
{
|
|
parent::__construct();
|
|
$this->logService = $log;
|
|
$this->logService->menuTitle = 'event_calendar';
|
|
|
|
// 默认超级管理员修改
|
|
$this->user_id = DB::table('admin_users')->where('username', 'Admin')
|
|
->value('id');
|
|
}
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*/
|
|
public function handle()
|
|
{
|
|
$now_times = time();
|
|
$now_time = date("Y-m-d H:i:s", $now_times);
|
|
// 结束活动,调整为默认模式
|
|
$where = [
|
|
['status', '=', 1]
|
|
];
|
|
$runRes = EventCalendar::query()->where($where)->orderBy('created_at')
|
|
->first();
|
|
|
|
$start = true;
|
|
// 数据存在,且结束时间到了,结束时间
|
|
if ($runRes) {
|
|
$end_time = $runRes['end_time'];
|
|
$run_id = $runRes['id'];
|
|
$is_manual = $runRes['is_manual'];
|
|
if ($end_time && strtotime($end_time) <= $now_times) {
|
|
$this->updateStatus($run_id, 2);
|
|
} elseif ($is_manual == 1) {
|
|
// 手动开始的不切换模式
|
|
$start = false;
|
|
}
|
|
}
|
|
|
|
// 启动 新模式
|
|
if ($start) {
|
|
$where = [
|
|
['status', '=', 0],
|
|
['start_time', '>=', $now_time],
|
|
['end_time', '<=', $now_time]
|
|
];
|
|
$res = EventCalendar::query()->where($where)->orderBy('start_time')
|
|
->first(['id']);
|
|
if ($res) {
|
|
// 新活动运行 直接关闭旧活动
|
|
$new_id = $res['id'];
|
|
if ($runRes && $runRes['id'] != $new_id) {
|
|
$this->updateStatus($run_id, 2);
|
|
}
|
|
$this->updateStatus($new_id, 1, true);
|
|
} else {
|
|
// 如果不存在新活动模式,撤回默认模式
|
|
$pattern_id = EventCalendarService::getTargetModeId();
|
|
if ($pattern_id) {
|
|
// 更新车位类型
|
|
(new EventCalendarService($this->logService))->syncUpdateSpaceType($pattern_id);
|
|
// 记录日志
|
|
AdminNoticeService::addChangeModeNotice($pattern_id, $this->user_id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $id
|
|
* @param int $status // 1运行 、 2结束
|
|
* @param bool $is_notice
|
|
* @return void
|
|
*/
|
|
protected function updateStatus(
|
|
$id,
|
|
int $status = 1,
|
|
bool $is_notice = false
|
|
): void {
|
|
$model = EventCalendar::query()->findOrFail($id);
|
|
$oldValue = $model->toArray();
|
|
$model->update([
|
|
'status' => $status,
|
|
'admin_user_id' => $this->user_id,
|
|
'updated_at' => date("Y-m-d H:i:s", time())
|
|
]);
|
|
// 记录日志
|
|
$this->logService->logUpdated(
|
|
$model,
|
|
$oldValue,
|
|
'event_calendar.update'
|
|
);
|
|
// 记录警报信息, 切换任务, 同步更新指定模式车位类型
|
|
if ($is_notice) {
|
|
$pattern_id = $oldValue['pattern_id'];
|
|
// 更新车位类型
|
|
(new EventCalendarService($this->logService))->syncUpdateSpaceType($pattern_id);
|
|
// 记录日志
|
|
AdminNoticeService::addChangeModeNotice($pattern_id, $this->user_id);
|
|
}
|
|
}
|
|
}
|
|
|