logService->menuTitle = 'event_calendar'; } /** * @return array|string[] */ public static function getStatus($type = 1): array { $statusArr = self::$statusArr; foreach ($statusArr as $key => $value) { $statusArr[$key] = __('service.event_calendar.' . $value); } if ($type == 2) { unset($statusArr[1], $statusArr[2]); } return $statusArr; } /** * @param array $data * @param $user_id * @return Builder|Model * @throws Exception */ public function createModel(array $data, $user_id): Builder|Model { try { DB::beginTransaction(); if (EventCalendar::query()->whereIn('status', [0, 1])->where( 'pattern_id', $data['pattern_id'] ) ->exists() ) { throw new Exception( __('service.event_calendar.pattern_exists') ); } $start_time = get_datetime( 'datetime', strtotime($data['start_time']) ); $end_time = get_datetime('datetime', strtotime($data['end_time'])); $model = EventCalendar::query()->create([ 'pattern_id' => $data['pattern_id'], 'start_time' => $start_time, 'end_time' => $end_time, 'admin_user_id' => $user_id, 'status' => 0, 'created_at' => get_datetime() ]); $this->logService->logCreated($model, 'event_calendar.create'); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } /** * @param array $data * @param string $id * @throws Exception */ public function updateModel(array $data, string $id) { try { DB::beginTransaction(); $existsWhere = [ ['pattern_id', '=', $data['pattern_id']], ['status', 'in', [0, 1]], ['id', '<>', $id] ]; if (EventCalendar::query()->where($existsWhere)->exists()) { throw new Exception( __('service.event_calendar.pattern_exists') ); } $model = EventCalendar::query()->findOrFail($id); $oldValues = $model->toArray(); $end_time = get_datetime('datetime', strtotime($data['end_time'])); $update = [ 'pattern_id' => $data['pattern_id'], 'end_time' => $end_time, 'admin_user_id' => $data['admin_user_id'], 'updated_at' => get_datetime() ]; if ($oldValues['status'] == 0) { if (isset($data['start_time']) && strtotime( $data['start_time'] ) ) { $update['start_time'] = get_datetime( 'datetime', strtotime($data['start_time']) ); } if (isset($data['status']) && in_array($data['status'], [0, 3]) ) { $update['status'] = $data['status']; } } $model->update($update); $this->logService->logUpdated( $model, $oldValues, 'event_calendar.update' ); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } public function deleteModel(int $id): bool { try { DB::beginTransaction(); $model = EventCalendar::query()->findOrFail($id); if ($model['status'] == 1) { throw new Exception(__('service.event_calendar.error_status')); } $this->logService->logDeleted($model, 'event_calendar.delete'); $model->delete(); DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); throw $e; } } public function endModel(int $id, $user_id): bool { try { DB::beginTransaction(); $model = EventCalendar::query()->findOrFail($id); $oldValues = $model->toArray(); if ($model['status'] != 1) { throw new Exception(__('service.event_calendar.error_end')); } $update = [ 'status' => 2, 'admin_user_id' => $user_id, 'updated_at' => get_datetime() ]; $model->update($update); $this->logService->logUpdated( $model, $oldValues, 'event_calendar.update' ); DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); throw $e; } } public function changeModel($data, $user_id) { try { DB::beginTransaction(); $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', 'in', [0,1]] ]; $query = EventCalendar::query()->where($where)->first(); $end_time = get_datetime('datetime', strtotime($end_time)); $save = [ 'pattern_id' => $pattern_id, 'end_time' => $end_time, 'status' => 1, 'admin_user_id' => $user_id, 'is_manual' => 1 ]; if ($query) { $save['updated_at'] = get_datetime(); $model = EventCalendar::query()->findOrFail($query['id']); $oldValues = $model->toArray(); $model->update($save); $this->logService->logUpdated( $model, $oldValues, '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'); } // 生成警报信息消息 AdminNoticeService::addChangeModeNotice($pattern_id, $user_id); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } public static function targetModel() { $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()->find($pattern_id, $columns)->toArray(); } else { $data = ParkingPattern::query()->where('is_default', 1)->first($columns); } return $data; } }