停车场管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

109 lines
3.6 KiB

<?php
namespace App\Services;
use App\Models\AdminFloor;
use App\Models\ParkingElectronicMap;
use App\Models\ParkingSpace;
use Exception;
use Illuminate\Support\Facades\DB;
class ParkingElectronicMapService extends BaseService
{
/**
* 构造函数
* @param OperationLogService $logService
*/
public function __construct(OperationLogService $logService)
{
parent::__construct($logService);
$this->logService = $logService;
$this->logService->menuTitle = 'draw_map';
}
/**
* @param array $dataArray
* @return bool
* @throws Exception
*/
public function saveModel(array $dataArray): bool
{
try {
DB::beginTransaction();
foreach ($dataArray as $data) {
$floor_id = $data['floor_id'];
$space_id = $data['parking_space_id'];
$saveData = $where = [
'floor_id' => $floor_id,
'space_id' => $space_id
];
$res = ParkingElectronicMap::query()->where($where)->first();
$saveData['width'] = $data['width'] ?? '0';
$saveData['height'] = $data['height'] ?? '0';
$saveData['coordinate_x'] = $data['coordinate_x'] ?? '';
$saveData['coordinate_y'] = $data['coordinate_y'] ?? '';
$saveData['min_width'] = $data['min_width'] ?? '';
$saveData['min_height'] = $data['min_height'] ?? '';
$saveData['keep_aspect_ratio'] = $data['keep_aspect_ratio'] ?? '0';
$saveData['aspect_ratio'] = $data['aspect_ratio'] ?? '';
if ($res) {
$saveData['update_at'] = get_datetime();
$model = ParkingElectronicMap::query()->findOrFail($res['id']);
$oldValues = $model->toArray();
$model->update($saveData);
$this->logService->logUpdated($model, $oldValues, 'map.save');
} else {
$saveData['create_at'] = get_datetime();
$model = ParkingElectronicMap::query()->create($saveData);
$this->logService->logCreated($model, 'map.save');
}
}
DB::commit();
return true;
} catch (Exception $e) {
DB::rollBack();
throw $e;
}
}
public function getList($params): array
{
$floor_id = $params['floor_id'];
$where = [
'floor_id' => $floor_id
];
if (isset($params['parking_space_id'])
&& !empty($params['parking_space_id'])
) {
$where['space_id'] = $params['parking_space_id'];
}
$columns = [
'id',
'floor_id',
'space_id',
'width',
'height',
'coordinate_x',
'coordinate_y',
'min_width',
'min_height',
'keep_aspect_ratio',
'aspect_ratio'
];
$list = ParkingElectronicMap::query()->where($where)->select($columns)
->get()->toArray();
foreach ($list as &$item) {
$item['floor_name'] = AdminFloor::query()->where('id', $item['floor_id'])
->value('name');
$item['parking_space_number'] = ParkingSpace::query()->where(
'id',
$item['space_id']
)->value('number');
$item['parking_space_id'] = $item['space_id'];
unset($item['floor_id'], $item['space_id']);
}
return $list;
}
}