From e587ab8b3284e64830d863464517c4b4d9d54cb0 Mon Sep 17 00:00:00 2001 From: wanghongjun <1445693971@qq.com> Date: Tue, 19 May 2026 15:07:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E7=AE=A1=E7=90=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/AutomaticallyStartActivity.php | 22 ++++---- .../Admin/EventCalendarController.php | 19 +++++-- app/Models/EventCalendar.php | 3 +- app/Services/EventCalendarService.php | 51 +++++++++++++++---- .../2026_01_27_084640_create_admin_table.php | 1 + ..._23_143449_create_event_calendar_table.php | 1 + 6 files changed, 72 insertions(+), 25 deletions(-) diff --git a/app/Console/Commands/AutomaticallyStartActivity.php b/app/Console/Commands/AutomaticallyStartActivity.php index 60e53fe..71d0df1 100644 --- a/app/Console/Commands/AutomaticallyStartActivity.php +++ b/app/Console/Commands/AutomaticallyStartActivity.php @@ -92,20 +92,24 @@ class AutomaticallyStartActivity extends Command ): void { $model = EventCalendar::query()->findOrFail($id); $oldValue = $model->toArray(); + // 默认超级管理员修改 + $user_id = DB::table('admin_users')->where('username', 'Admin') + ->value('id'); $model->update([ - 'status' => $status, - 'updated_at' => date("Y-m-d H:i:s", time()) + 'status' => $status, + 'admin_user_id' => $user_id, + 'updated_at' => date("Y-m-d H:i:s", time()) ]); // 记录日志 - $this->logService->logUpdated($model, $oldValue, 'event_calendar.update'); + $this->logService->logUpdated( + $model, + $oldValue, + 'event_calendar.update' + ); // 记录警报信息, 切换任务 if ($is_notice) { - $data = [ - 'pattern_id' => $oldValue['pattern_id'] - ]; - $user_id = DB::table('admin_users')->where('username', 'Admin') - ->value('id'); - AdminNoticeService::createData(2, 5, $data, $user_id); + $pattern_id = $oldValue['pattern_id']; + AdminNoticeService::addChangeModeNotice($pattern_id, $user_id); } } } diff --git a/app/Http/Controllers/Admin/EventCalendarController.php b/app/Http/Controllers/Admin/EventCalendarController.php index 45b3877..c19d21e 100644 --- a/app/Http/Controllers/Admin/EventCalendarController.php +++ b/app/Http/Controllers/Admin/EventCalendarController.php @@ -81,16 +81,25 @@ class EventCalendarController extends BaseController $statusArr = EventCalendarService::getStatus(); $items = $query->latest()->forPage($page, $perPage)->select() ->get()->each(function ($item) use ($statusArr) { - $item['pattern_name'] = ParkingPattern::getName( - $item['pattern_id'] - ); + $pattern = ParkingPattern::query()->find($item['pattern_id']); + $item['pattern_name'] = ''; + $item['show_release'] = 0; + $item['show_change'] = 0; + if ($pattern) { + $item['pattern_name'] = $pattern['name']; + if ($item['status'] == 1) { + $item['show_release'] = $pattern['release']; + $item['show_change'] = $pattern['change']; + } + } + $item['admin_username'] = AdminUsers::getUsername( $item['admin_user_id'] ); $item['status_index'] = $item['status']; $item['status'] = $statusArr[$item['status']] ?? ''; $item['remake'] = ''; - unset($item['pattern_id'], $item['admin_user_id']); + unset($item['pattern_id'], $item['admin_user_id'], $item['is_manual']); return $item; }); return $this->responseService->success([ @@ -308,7 +317,7 @@ class EventCalendarController extends BaseController { try { $this->validateId($id, EventCalendar::class); - $this->service->endModel($id); + $this->service->endModel($id, $this->adminUserId); return $this->responseService->success( null, __('exception.event_calendar.end_succeeded') diff --git a/app/Models/EventCalendar.php b/app/Models/EventCalendar.php index e0a3811..2a05fce 100644 --- a/app/Models/EventCalendar.php +++ b/app/Models/EventCalendar.php @@ -18,7 +18,8 @@ class EventCalendar extends Model 'start_time', 'end_time', 'admin_user_id', - 'status' + 'status', + 'is_manual' ]; protected $hidden diff --git a/app/Services/EventCalendarService.php b/app/Services/EventCalendarService.php index 01b44ce..c99839c 100644 --- a/app/Services/EventCalendarService.php +++ b/app/Services/EventCalendarService.php @@ -158,7 +158,7 @@ class EventCalendarService extends BaseService DB::beginTransaction(); $model = EventCalendar::query()->findOrFail($id); - if ($model['status'] > 0) { + if ($model['status'] == 1) { throw new Exception(__('service.event_calendar.error_status')); } @@ -174,7 +174,7 @@ class EventCalendarService extends BaseService } } - public function endModel(int $id): bool + public function endModel(int $id, $user_id): bool { try { DB::beginTransaction(); @@ -185,6 +185,7 @@ class EventCalendarService extends BaseService } $update = [ 'status' => 2, + 'admin_user_id' => $user_id, 'updated_at' => get_datetime() ]; $model->update($update); @@ -209,18 +210,47 @@ class EventCalendarService extends BaseService $pattern_id = $data['pattern_id']; $end_time = $data['end_time']; + // 将其他模式未结束,在运行中的全部结束 + $nowWhere = [ + ['status', '=', 1], + ['pattern_id', '<>', $pattern_id] + ]; + $nowQuery = EventCalendar::query()->where($nowWhere)->first(); + if ($nowQuery) { + $model = EventCalendar::query()->findOrFail($nowQuery['id']); + $nowSave = [ + 'status' => 2, + 'updated_at' => get_datetime(), + 'admin_user_id' => $user_id + ]; + $oldValues = $model->toArray(); + // 小于还未到结束时间,自动跳转计划中 + if ($oldValues['end_time']) { + if (time() < strtotime($oldValues['end_time'])) { + $nowSave['status'] = 0; + } + } + $model->update($nowSave); + $this->logService->logUpdated( + $model, + $oldValues, + 'event_calendar.update' + ); + } + $where = [ - 'pattern_id' => $pattern_id, - 'status' => 1 + ['pattern_id', '=', $pattern_id], + ['status', 'in', [0,1]] ]; $query = EventCalendar::query()->where($where)->first(); + $end_time = get_datetime('datetime', strtotime($end_time)); $save = [ - 'pattern_id' => $pattern_id, - 'start_time' => get_datetime(), - 'end_time' => get_datetime('datetime', strtotime($end_time)), - 'status' => 1, - 'admin_user_id' => $user_id + 'pattern_id' => $pattern_id, + 'end_time' => $end_time, + 'status' => 1, + 'admin_user_id' => $user_id, + 'is_manual' => 1 ]; if ($query) { @@ -234,6 +264,7 @@ class EventCalendarService extends BaseService 'event_calendar.update' ); } else { + $save['start_time'] = get_datetime(); $save['created_at'] = get_datetime(); $model = EventCalendar::query()->create($save); $this->logService->logCreated($model, 'event_calendar.create'); @@ -255,7 +286,7 @@ class EventCalendarService extends BaseService $pattern_id = EventCalendar::query()->where('status', 1)->first(['pattern_id']); $columns = ['id as pattern_id', 'name as model_name']; if ($pattern_id) { - $data = ParkingPattern::query()->findOrFail($pattern_id, $columns)->toArray(); + $data = ParkingPattern::query()->find($pattern_id, $columns)->toArray(); } else { $data = ParkingPattern::query()->where('is_default', 1)->first($columns); } diff --git a/database/migrations/2026_01_27_084640_create_admin_table.php b/database/migrations/2026_01_27_084640_create_admin_table.php index 70182f7..d98590c 100644 --- a/database/migrations/2026_01_27_084640_create_admin_table.php +++ b/database/migrations/2026_01_27_084640_create_admin_table.php @@ -58,6 +58,7 @@ return new class extends Migration $table->string('title', 50)->comment('菜单标题'); $table->string('icon', 50)->comment('菜单图标'); $table->string('uri')->nullable()->comment('链接地址'); + $table->string('page_uri')->nullable()->comment('页面链接地址'); $table->string('show')->default(1)->comment('是否显示 0否 1是'); $table->tinyInteger('status')->default(1)->comment('状态 0禁用 1启用'); $table->timestamps(); diff --git a/database/migrations/2026_04_23_143449_create_event_calendar_table.php b/database/migrations/2026_04_23_143449_create_event_calendar_table.php index a95c330..b4eac1f 100644 --- a/database/migrations/2026_04_23_143449_create_event_calendar_table.php +++ b/database/migrations/2026_04_23_143449_create_event_calendar_table.php @@ -18,6 +18,7 @@ return new class extends Migration $table->timestamp('end_time')->comment('结束时间'); $table->integer('admin_user_id')->comment('操作员'); $table->tinyInteger('status')->default(0)->comment('状态 0计划中 1运行中 2已结束 3已停用'); + $table->tinyInteger('is_manual')->default(0)->comment('是否手动操作'); $table->timestamps(); $table->softDeletes(); $table->innoDb();