Browse Source

活动日历列表数据,优化编辑状态

master
wanghongjun 4 weeks ago
parent
commit
63e776244f
  1. 115
      app/Http/Controllers/Admin/EventCalendarController.php
  2. 17
      app/Models/ParkingPattern.php
  3. 8
      app/Services/EventCalendarService.php
  4. 18
      app/common.php
  5. 2
      routes/admin/api.php

115
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()
);
}
}
}

17
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;
}
}

8
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);

18
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;
}
}

2
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']);

Loading…
Cancel
Save