find($item['space_id']); $item['parking_space_number'] = ''; $item['floor'] = ''; $item['parking'] = ''; if ($ParkingSpace) { $item['parking_space_number'] = $ParkingSpace['number']; $Floor = AdminFloor::getFirst($ParkingSpace['floor_id']); $item['floor'] = $Floor['name']; $item['parking'] = Parking::getName($Floor['building_floor']); } $item['admin_user'] = AdminUsers::getUsername($item['admin_user_id']); $syncStatusArr = $this->getSyncStatus(); $item['sync_status_str'] = $syncStatusArr[$item['sync_status']] ?? ''; unset($item['admin_user_id'], $item['space_id']); return $item; } /** * @return array|string[] */ public function getSyncStatus(): array { $syncStatusArr = $this->syncStatusArr; foreach ($syncStatusArr as $key => $value) { $syncStatusArr[$key] = __service($this->menuTitle . '.' . $value); } return $syncStatusArr; } /** * @param array $data * @throws Exception */ public function createModel(array $data) { try { DB::beginTransaction(); $spaceNameArr = explode(',', $data['parking_space_name']); foreach ($spaceNameArr as $parking_space_name) { $space_id = ParkingSpace::getValueId($parking_space_name); if (!$space_id) { throw new CustomException( __service($this->menuTitle . '.space_not_exists') . ':' . $parking_space_name ); } $model = $this->createData( $space_id, $data['admin_user_id'], $data['start_at'], $data['end_at'] ); } DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } // 创建维修数据 public function createData($space_id,$admin_user_id, $start_at, $end_at) { $model = ParkingSpaceRepair::query()->create([ 'space_id' => $space_id, 'admin_user_id' => $admin_user_id, 'start_at' => $start_at, 'end_at' => $end_at, 'created_at' => get_datetime() ]); $this->logService->logCreated( $model, $this->menuTitle . '.create' ); return $model; } /** * @param array $data * @param int $id * @throws Exception */ public function updateModel(array $data, int $id) { try { DB::beginTransaction(); $space_id = ParkingSpace::getValueId($data['parking_space_name']); // 更新 $model = ParkingSpaceRepair::query()->findOrFail($id); $oldValues = $model->toArray(); $model->update([ 'space_id' => $space_id, 'admin_user_id' => $data['admin_user_id'], 'start_at' => $data['start_at'], 'end_at' => $data['end_at'], 'updated_at' => get_datetime() ]); $this->logService->logUpdated( $model, $oldValues, $this->menuTitle . '.update' ); DB::commit(); return $model; } catch (Exception $e) { DB::rollBack(); throw $e; } } /** * @param $id * @return bool * @throws Exception */ public function deleteModel($id): bool { try { DB::beginTransaction(); $model = ParkingSpaceRepair::query()->findOrFail($id); $item = $model->toArray(); $this->logService->logDeleted($model, $this->menuTitle . '.delete'); $model->delete(); // 判断 并修改车位状态为空闲 (new ParkingSpaceService( $this->logService ))->syncUpdateParkingSpaceStatus( $item['space_id'], $item['start_at'], $item['end_at'] ); DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); throw $e; } } /** * @param $ids * @return bool * @throws Exception */ public function batchDeleteModel($ids): bool { try { DB::beginTransaction(); $ParkingSpaceService = new ParkingSpaceService($this->logService); foreach ($ids as $id) { $model = ParkingSpaceRepair::query()->findOrFail($id); $item = $model->toArray(); $this->logService->logDeleted( $model, $this->menuTitle . '.delete' ); $model->delete(); $ParkingSpaceService->syncUpdateParkingSpaceStatus( $item['space_id'], $item['start_at'], $item['end_at'] ); } DB::commit(); return true; } catch (Exception $e) { DB::rollBack(); throw $e; } } }