Browse Source

车位资讯,车位查询

master
wanghongjun 1 month ago
parent
commit
66e1e88fca
  1. 36
      app/Http/Controllers/Admin/ParkingLicensePlateController.php
  2. 50
      app/Http/Controllers/Admin/ParkingSpaceController.php
  3. 5
      app/Models/ParkingLicensePlate.php
  4. 10
      app/Models/ParkingSpace.php
  5. 41
      app/common.php
  6. 10
      resources/lang/zh-CN/controller.php
  7. 3
      routes/admin/api.php

36
app/Http/Controllers/Admin/ParkingLicensePlateController.php

@ -6,6 +6,8 @@ use App\Exceptions\CustomException;
use App\Exports\ParkingLicensePlateImportTemplateExport; use App\Exports\ParkingLicensePlateImportTemplateExport;
use App\Imports\ParkingLicensePlateImport; use App\Imports\ParkingLicensePlateImport;
use App\Models\ParkingLicensePlate; use App\Models\ParkingLicensePlate;
use App\Models\ParkingSpace;
use App\Models\ParkingSpaceAttributes;
use App\Models\ParkingSpaceType; use App\Models\ParkingSpaceType;
use App\Services\ApiResponseService; use App\Services\ApiResponseService;
use App\Services\ParkingLicensePlateService; use App\Services\ParkingLicensePlateService;
@ -306,4 +308,38 @@ class ParkingLicensePlateController extends BaseController
); );
} }
} }
public function view(Request $request): JsonResponse
{
try {
$license_plate = $request->post('license_plate', '');
$license_plate_id = ParkingLicensePlate::getValueId($license_plate);
if (!$license_plate_id) {
throw new Exception('');
}
$parkingSpace = ParkingSpace::query()->where(
'license_plate_id',
$license_plate_id
)->first(['id', 'number', 'space_attr_id', 'space_type_id']) ?? 0;
if (!$parkingSpace) {
throw new Exception('');
}
$space_attr = ParkingSpaceAttributes::getAttr($parkingSpace['space_attr_id']);
$space_type_name = ParkingSpaceType::getName($parkingSpace['space_type_id']);
$data = [
'license_plate' => $license_plate,
'parking_space_id' => $parkingSpace['id'],
'parking_space_number' => $parkingSpace['number'],
'parking_space_attr' => $space_attr,
'parking_space_type' => $space_type_name
];
return $this->responseService->success($data);
} catch (Exception $e) {
return $this->responseService->systemError(
__('controller.license_plate.not_put')
);
}
}
} }

50
app/Http/Controllers/Admin/ParkingSpaceController.php

@ -244,4 +244,54 @@ class ParkingSpaceController extends Controller
__('exports.parking_space.list') . time() . '.xlsx' __('exports.parking_space.list') . time() . '.xlsx'
); );
} }
public function information(Request $request): JsonResponse
{
try {
$data = [];
$parking_space_id = $request->post('parking_space_id', '');
$item = ParkingSpace::query()->where('id', $parking_space_id)
->first();
if (empty($item)) {
throw new Exception(__('controller.parking_space.not_space'));
}
$statusArr = $this->service->getStatusArr();
$data['parking_space_number'] = $item['number'];
$data['license_plate'] = ParkingLicensePlate::getNumber($item['license_plate_id']);
$data['status'] = $statusArr[$item['status']];
$data['parking_space_type'] = ParkingSpaceType::getName($item['space_type_id']);
$data['berthing_time_str'] = '';
if ($item['berthing_time']) {
$difference = get_time_difference($item['berthing_time']);
if (!isset($difference['error'])) {
if (!empty($difference['days'])) {
$data['berthing_time_str'] .= $difference['days'] . __('controller.parking_space.days');
}
if (!empty($difference['hours']) || !empty($data['berthing_time_str'])) {
$data['berthing_time_str'] .= $difference['hours'] . __('controller.parking_space.hours');
}
if (!empty($difference['minutes']) || !empty($data['berthing_time_str'])) {
$data['berthing_time_str'] .= $difference['minutes'] . __('controller.parking_space.minutes');
}
if (!empty($difference['seconds']) || !empty($data['berthing_time_str'])) {
$data['berthing_time_str'] .= $difference['seconds'] . __('controller.parking_space.seconds');
}
}
}
$data['recognition'] = $this->service->getRecognition(
$item['recognition']
);
$data['space_url'] = '';
return $this->responseService->success($data);
} catch (Exception $e) {
$m_prefix = __('exception.exception_handler.resource');
return $this->responseService->systemError(
$m_prefix . ':' . $e->getMessage()
);
}
}
} }

5
app/Models/ParkingLicensePlate.php

@ -28,6 +28,11 @@ class ParkingLicensePlate extends Model
return self::query()->where('id', $id)->value('number') ?? ''; return self::query()->where('id', $id)->value('number') ?? '';
} }
public static function getValueId($number)
{
return self::query()->where('number', $number)->value('id') ?? '';
}
public static function getId($number) public static function getId($number)
{ {
return self::query()->where('number', 'like', "%{$number}%")->pluck( return self::query()->where('number', 'like', "%{$number}%")->pluck(

10
app/Models/ParkingSpace.php

@ -40,6 +40,16 @@ class ParkingSpace extends Model
); );
} }
public function getBerthingTimeAttribute($value): string
{
return is_null($value)
? ''
: get_datetime(
'date_time',
strtotime($value)
);
}
public static function getNumber($id) public static function getNumber($id)
{ {
return self::query()->where('id', $id)->value('number'); return self::query()->where('id', $id)->value('number');

41
app/common.php

@ -75,3 +75,44 @@ if (!function_exists('get_ratio')) {
return $ratio; return $ratio;
} }
} }
if (!function_exists('get_time_difference')) {
function get_time_difference(string $targetTime): array
{
try {
$target = new DateTime($targetTime);
$now = new DateTime();
// 计算差值
$interval = $now->diff($target);
$totalDays = $interval->days;
$hours = $interval->h;
$minutes = $interval->i;
$seconds = $interval->s;
// 判断是过去还是未来
$isFuture = $now < $target;
return [
'days' => $totalDays,
'hours' => $hours,
'minutes' => $minutes,
'seconds' => $seconds,
'is_future' => $isFuture,
'formatted' => sprintf(
"%s%d天 %02d时 %02d分 %02d秒",
$isFuture ? '' : '-',
$totalDays,
$hours,
$minutes,
$seconds
)
];
} catch (Exception $e) {
return [
'error' => '时间格式错误: ' . $e->getMessage()
];
}
}
}

10
resources/lang/zh-CN/controller.php

@ -28,9 +28,17 @@ return [
'success' => '导入成功' 'success' => '导入成功'
], ],
'license_plate' => [ 'license_plate' => [
'clear_success' => '清除成功' 'clear_success' => '清除成功',
'not_put' => '请输入正确的车牌号'
], ],
'parking_pattern' => [ 'parking_pattern' => [
'not_parking_space' => '当前模式没有 [优越] 车位' 'not_parking_space' => '当前模式没有 [优越] 车位'
],
'parking_space' => [
'days' => '天',
'hours' => '时',
'minutes' => '分',
'seconds' => '秒',
'not_space' => '未查询到车位信息'
] ]
]; ];

3
routes/admin/api.php

@ -87,6 +87,7 @@ Route::group(['prefix' => 'admin'], function () {
Route::get('/parkingSpace/search', [ParkingSpaceController::class, 'search']); Route::get('/parkingSpace/search', [ParkingSpaceController::class, 'search']);
Route::post('parkingSpace/updateType', [ParkingSpaceController::class, 'updateType']); Route::post('parkingSpace/updateType', [ParkingSpaceController::class, 'updateType']);
Route::post('parkingSpace/updateAttr', [ParkingSpaceController::class, 'updateAttr']); Route::post('parkingSpace/updateAttr', [ParkingSpaceController::class, 'updateAttr']);
Route::post('parkingSpace/information', [ParkingSpaceController::class, 'information']);
//车位类型管理 //车位类型管理
Route::get('/spaceType', [ParkingSpaceTypeController::class, 'index']); Route::get('/spaceType', [ParkingSpaceTypeController::class, 'index']);
Route::get('/spaceType/create', [ParkingSpaceTypeController::class, 'create']); Route::get('/spaceType/create', [ParkingSpaceTypeController::class, 'create']);
@ -104,6 +105,8 @@ Route::group(['prefix' => 'admin'], function () {
Route::get('/licensePlate/clear/{id}', [ParkingLicensePlateController::class, 'clear']); Route::get('/licensePlate/clear/{id}', [ParkingLicensePlateController::class, 'clear']);
Route::post('/licensePlate/import', [ParkingLicensePlateController::class, 'import']); Route::post('/licensePlate/import', [ParkingLicensePlateController::class, 'import']);
Route::get('/licensePlate/rule', [ParkingLicensePlateController::class, 'rule']); Route::get('/licensePlate/rule', [ParkingLicensePlateController::class, 'rule']);
Route::post('/licensePlate/view', [ParkingLicensePlateController::class, 'view']);
// 车位属性管理 // 车位属性管理
Route::get('/spaceAttr', [ParkingSpaceAttributesController::class, 'index']); Route::get('/spaceAttr', [ParkingSpaceAttributesController::class, 'index']);
Route::post('/spaceAttr', [ParkingSpaceAttributesController::class, 'store']); Route::post('/spaceAttr', [ParkingSpaceAttributesController::class, 'store']);

Loading…
Cancel
Save