diff --git a/app/Http/Controllers/Admin/EventCalendarController.php b/app/Http/Controllers/Admin/EventCalendarController.php index c19d21e..8712a5e 100644 --- a/app/Http/Controllers/Admin/EventCalendarController.php +++ b/app/Http/Controllers/Admin/EventCalendarController.php @@ -81,17 +81,10 @@ class EventCalendarController extends BaseController $statusArr = EventCalendarService::getStatus(); $items = $query->latest()->forPage($page, $perPage)->select() ->get()->each(function ($item) use ($statusArr) { - $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']; - } - } + $pattern = ParkingPattern::getPatternInfo($item['pattern_id'], $item['status']); + $item['pattern_name'] = $pattern['pattern_name']; + $item['show_release'] = $pattern['show_release']; + $item['show_change'] = $pattern['show_change']; $item['admin_username'] = AdminUsers::getUsername( $item['admin_user_id'] @@ -412,4 +405,104 @@ class EventCalendarController extends BaseController ); } } + + /** + * 获取日历活动事例 + * @param Request $request + * @return JsonResponse + */ + public function calendarList(Request $request): JsonResponse + { + try { + $year_month = $request->get('year_month', date('Y-m', time())); + $days = get_year_month_days($year_month); + $items = []; + $year_month_times = strtotime($year_month); + $statusArr = [0, 1]; + foreach ($days as $day) { + $date = date("Y-m", $year_month_times) . '-' . $day; + $count = EventCalendar::query()->whereIn('status', $statusArr) + ->where(function ($query) use ($date) { + $query->whereRaw( + "'{$date}' BETWEEN start_time AND end_time" + ) + ->orWhereBetween( + 'start_time', + [$date . ' 00:00:00', $date . ' 23:59:59'] + ); + })->count(); + if ($count > 0) { + $items[] = $date; + } + } + return $this->responseService->success([ + 'items' => $items, + ]); + } catch (Exception $e) { + $m_prefix = __('exception.exception_handler.resource'); + return $this->responseService->systemError( + $m_prefix . ':' . $e->getMessage() + ); + } + } + + /** + * 通过日期查询活动模式 + * @param Request $request + * @return JsonResponse + */ + public function calendarDayList(Request $request): JsonResponse + { + try { + $query = EventCalendar::query(); + $data = $request->all(); + $date = $data ['date'] ?? date("Y-m-d", time()); + $date_times = strtotime($date); + if (!$date_times) { + throw new Exception(''); + } + + $start_date = date("Y-m-d", $date_times); + $start_time = $start_date . ' 00:00:00'; + $end_time = $start_date . ' 23:59:59'; + $statusIndexArr = [0, 1]; + $query->whereIn('status', $statusIndexArr); + + $query->where( + function ($query) use ($start_date, $start_time, $end_time) { + $query->whereRaw( + "'{$start_date}' BETWEEN start_time AND end_time" + ) + ->orWhereBetween( + 'start_time', + [$start_time, $end_time] + ); + } + ); + + $columns = ['id', 'pattern_id', 'start_time', 'end_time', 'status']; + $statusArr = EventCalendarService::getStatus(); + $total = $query->count(); + $items = $query->select($columns)->get()->each( + function ($item) use ($statusArr) { + $pattern = ParkingPattern::getPatternInfo($item['pattern_id'], $item['status']); + $item['pattern_name'] = $pattern['pattern_name']; + $item['show_release'] = $pattern['show_release']; + $item['show_change'] = $pattern['show_change']; + $item['status_index'] = $item['status']; + $item['status'] = $statusArr[$item['status']] ?? ''; + return $item; + } + ); + return $this->responseService->success([ + 'items' => $items, + 'total' => $total + ]); + } catch (Exception $e) { + $m_prefix = __('exception.exception_handler.resource'); + return $this->responseService->systemError( + $m_prefix . ':' . $e->getMessage() + ); + } + } } diff --git a/app/Models/ParkingPattern.php b/app/Models/ParkingPattern.php index a710b2c..1e5c231 100644 --- a/app/Models/ParkingPattern.php +++ b/app/Models/ParkingPattern.php @@ -45,4 +45,21 @@ class ParkingPattern extends Model { return self::query()->where('name', $name)->value('id'); } + + public static function getPatternInfo($id, $status): array + { + $data = []; + $pattern = self::query()->find($id); + $data['pattern_name'] = ''; + $data['show_release'] = 0; + $data['show_change'] = 0; + if ($pattern) { + $data['pattern_name'] = $pattern['name']; + if ($status == 1) { + $data['show_release'] = $pattern['release']; + $data['show_change'] = $pattern['change']; + } + } + return $data; + } } diff --git a/app/Services/EventCalendarService.php b/app/Services/EventCalendarService.php index bfa5018..e2ac6f2 100644 --- a/app/Services/EventCalendarService.php +++ b/app/Services/EventCalendarService.php @@ -130,11 +130,9 @@ class EventCalendarService extends BaseService strtotime($data['start_time']) ); } - if (isset($data['status']) - && in_array($data['status'], [0, 3]) - ) { - $update['status'] = $data['status']; - } + } + if (isset($data['status']) && in_array($data['status'], [0, 3])) { + $update['status'] = $data['status']; } $model->update($update); diff --git a/app/common.php b/app/common.php index d47b2e1..170267b 100644 --- a/app/common.php +++ b/app/common.php @@ -131,3 +131,21 @@ if (!function_exists('set_space_underline')) { return str_replace(' ', '_', $str); } } + +// 返回年月所有天 +if (!function_exists('get_year_month_days')) { + function get_year_month_days($year_month): array + { + $year_month_times = strtotime($year_month); + if (!$year_month_times) { + return []; + } + $monthTimes = strtotime('+1 month', $year_month_times); + $monthEndDay = date('d', strtotime('-1 day', $monthTimes)); + $dayArr = []; + for ($i = 1; $i <= $monthEndDay; $i++) { + $dayArr[] = strlen($i) > 1 ? $i : '0' . $i; + } + return $dayArr; + } +} diff --git a/routes/admin/api.php b/routes/admin/api.php index 373496c..434ad05 100644 --- a/routes/admin/api.php +++ b/routes/admin/api.php @@ -58,6 +58,8 @@ Route::group(['prefix' => 'admin'], function () { Route::post('/eventCalendar/import', [EventCalendarController::class, 'import']); Route::get('/eventCalendar/targetMode', [EventCalendarController::class, 'targetMode']); Route::get('/eventCalendar/rule', [EventCalendarController::class, 'rule']); + Route::get('/eventCalendar/index', [EventCalendarController::class, 'calendarList']); + Route::post('/eventCalendar/index', [EventCalendarController::class, 'calendarDayList']); // 模式管理 Route::get('/pattern', [ParkingPatternController::class, 'index']);