diff --git a/app/Http/Controllers/Admin/ParkingSpaceController.php b/app/Http/Controllers/Admin/ParkingSpaceController.php index 4da4196..a98b9a1 100644 --- a/app/Http/Controllers/Admin/ParkingSpaceController.php +++ b/app/Http/Controllers/Admin/ParkingSpaceController.php @@ -19,12 +19,8 @@ use Illuminate\Validation\ValidationException; use Maatwebsite\Excel\Facades\Excel; use Symfony\Component\HttpFoundation\BinaryFileResponse; -class ParkingSpaceController extends Controller +class ParkingSpaceController extends BaseController { - /** - * @var ApiResponseService - */ - protected ApiResponseService $responseService; /** * @var ParkingSpaceService @@ -32,6 +28,7 @@ class ParkingSpaceController extends Controller protected ParkingSpaceService $service; /** + * 构造函数 * @param ApiResponseService $responseService * @param ParkingSpaceService $service */ @@ -39,7 +36,7 @@ class ParkingSpaceController extends Controller ApiResponseService $responseService, ParkingSpaceService $service ) { - $this->responseService = $responseService; + parent::__construct($responseService); $this->service = $service; } @@ -295,4 +292,40 @@ class ParkingSpaceController extends Controller ); } } + + public function updateStatus(Request $request): JsonResponse + { + try { + $data = $request->all(); + $statusArr = $this->service->getStatusArrKey(); + $statusStr = implode(',', $statusArr); + $rules = [ + 'status' => 'required|numeric|in:'.$statusStr + ]; + $messages = [ + 'status.required' => __( + 'validation.parking_space.status_empty' + ), + 'status.numeric' => __( + 'validation.parking_space.status_numeric' + ), + 'status.in' => __('validation.parking_space.status_in') + ]; + $validator = Validator::make($data, $rules, $messages); + if ($validator->fails()) { + throw new ValidationException($validator); + } + $parking_space_id = $data['parking_space_id']; + $status = $data['status']; + $number = $data['license_plate']; + $this->validateId($parking_space_id, ParkingSpace::class); + $this->service->updateStatus($parking_space_id, $status, $number); + return $this->responseService->success('', __('admin.save_succeeded')); + } catch (Exception $e) { + $m_prefix = __('exception.exception_handler.resource'); + return $this->responseService->systemError( + $m_prefix . ':' . $e->getMessage() + ); + } + } } diff --git a/app/Services/ParkingSpaceService.php b/app/Services/ParkingSpaceService.php index b3e1064..e7de70c 100644 --- a/app/Services/ParkingSpaceService.php +++ b/app/Services/ParkingSpaceService.php @@ -73,6 +73,11 @@ class ParkingSpaceService extends BaseService return $arr; } + public function getStatusArrKey(): array + { + return array_keys($this->statusArr); + } + public function optionItems($item) { $item['floor'] = AdminFloor::getName($item['floor_id']); @@ -215,4 +220,46 @@ class ParkingSpaceService extends BaseService $columns )->get()->toArray(); } + + // 更新状态和车牌 + public function updateStatus($id, $status, $license_plate) + { + try { + DB::beginTransaction(); + $model = ParkingSpace::query()->findOrFail($id); + $oldValues = $model->toArray(); + $update = [ + 'status' => $status, + 'updated_at' => get_datetime() + ]; + if (!empty($license_plate) && $status == 1) { + $number_id = ParkingLicensePlate::getValueId($license_plate); + if (!$number_id) { + $licensePlateService = new ParkingLicensePlateService($this->logService); + $create = [ + 'number' => $license_plate, + 'space_type_id' => $oldValues['space_type_id'] + ]; + $licensePlateService->createData($create); + $number_id = ParkingLicensePlate::getNumber($license_plate); + } + if ($number_id) { + $update['license_plate_id'] = $number_id; + $update['berthing_time'] = get_datetime(); + $update['recognition'] = 'high'; + } + } + $model->update($update); + $this->logService->logUpdated( + $model, + $oldValues, + 'space_attributes.update' + ); + DB::commit(); + return $model; + } catch (Exception $e) { + DB::rollBack(); + throw $e; + } + } } diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index fb84e35..9c2c0ec 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -76,6 +76,9 @@ return [ 'attr_id_numeric' => 'Parking space attribute data must be numeric', 'ids_empty' => 'Parking data cannot be empty', 'ids_array' => 'Parking data must be an array', + 'status_empty' => 'The parking space status cannot be empty', + 'status_numeric' => 'The parking space status must be a number', + 'status_in' => 'The parking status can only be 0 or 1' ], 'map' => [ 'f_empty' => 'The floor number cannot be empty', diff --git a/resources/lang/zh-CN/validation.php b/resources/lang/zh-CN/validation.php index e2beb9f..ddbaf18 100644 --- a/resources/lang/zh-CN/validation.php +++ b/resources/lang/zh-CN/validation.php @@ -76,6 +76,9 @@ return [ 'attr_id_numeric' => '车位属性数据必须是数字', 'ids_empty' => '车位数据不能为空', 'ids_array' => '车位数据必须是数组', + 'status_empty' => '车位状态不能为空', + 'status_numeric' => '车位状态必须是数字', + 'status_in' => '车位状态只能是0或1' ], 'map' => [ 'f_empty' => '楼层编号不能为空', diff --git a/resources/lang/zh-TW/validation.php b/resources/lang/zh-TW/validation.php index bbbce1e..2299bde 100644 --- a/resources/lang/zh-TW/validation.php +++ b/resources/lang/zh-TW/validation.php @@ -76,6 +76,9 @@ return [ 'attr_id_numeric' => '車位内容數據必須是數位', 'ids_empty' => '車位數據不能為空', 'ids_array' => '車位數據必須是數組', + 'status_empty' => '車位狀態不能為空', + 'status_numeric' => '車位狀態必須是數位', + 'status_in' => '車位狀態只能是0或1' ], 'map' => [ 'f_empty' => '樓層編號不能為空', diff --git a/routes/admin/api.php b/routes/admin/api.php index 0ab2267..92f5f29 100644 --- a/routes/admin/api.php +++ b/routes/admin/api.php @@ -88,6 +88,7 @@ Route::group(['prefix' => 'admin'], function () { Route::post('parkingSpace/updateType', [ParkingSpaceController::class, 'updateType']); Route::post('parkingSpace/updateAttr', [ParkingSpaceController::class, 'updateAttr']); Route::post('parkingSpace/information', [ParkingSpaceController::class, 'information']); + Route::post('parkingSpace/updateStatus', [ParkingSpaceController::class, 'updateStatus']); //车位类型管理 Route::get('/spaceType', [ParkingSpaceTypeController::class, 'index']); Route::get('/spaceType/create', [ParkingSpaceTypeController::class, 'create']);