Browse Source

导入车牌数据优化

master
wanghongjun 4 days ago
parent
commit
57e179f669
  1. 35
      app/Http/Controllers/Admin/ParkingLicensePlateController.php
  2. 28
      app/Imports/ParkingLicensePlateImport.php

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

@ -225,20 +225,41 @@ class ParkingLicensePlateController extends BaseController
{
try {
// 1. 验证上传的文件
$params = $request->all();
$request->validate([
'file' => 'required|mimes:xlsx,xls,csv|max:2048' // 限制文件类型和大小
]);
$validator = Validator::make($request->all(), [
'file' => 'required|mimes:xlsx,xls,csv|max:2048'
$validator = Validator::make($params, [
'file' => 'required|mimes:xlsx,xls,csv|max:2048',
'parking_space_type' => 'required|numeric'
], [
'file.required' => __('validation.admin_list_vip.file_empty'),
'file.mimes' => __('validation.admin_list_vip.file_mimes'),
'file.max' => __('validation.admin_list_vip.file_max'),
'file.required' => __(
'validation.admin_list_vip.file_empty'
),
'file.mimes' => __(
'validation.admin_list_vip.file_mimes'
),
'file.max' => __(
'validation.admin_list_vip.file_max'
),
'parking_space_type.required' => __(
'validation.parking_space.type_id_empty'
),
'parking_space_type.numeric' => __(
'validation.parking_space.type_id_numeric'
)
]);
if ($validator->fails()) {
throw new ValidationException($validator);
}
$parking_space_type = $params['parking_space_type'];
if (!ParkingSpaceType::query()->where('id', $parking_space_type)
->exists()
) {
return (new ApiResponseService())->businessError(
__('exception.exception_handler.resource')
);
}
// 2. 获取上传的文件
$file = $request->file('file');
@ -249,7 +270,7 @@ class ParkingLicensePlateController extends BaseController
// 4. 执行导入(使用存储后的绝对路径)
// storage_path('app') 获取 storage/app 的绝对路径
Excel::import(
new ParkingLicensePlateImport(),
new ParkingLicensePlateImport($parking_space_type),
storage_path('app/' . $path)
);

28
app/Imports/ParkingLicensePlateImport.php

@ -3,62 +3,46 @@
namespace App\Imports;
use App\Models\ParkingLicensePlate;
use App\Models\ParkingSpaceType;
use App\Services\ApiResponseService;
use App\Services\OperationLogService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class ParkingLicensePlateImport implements ToModel, WithHeadingRow
{
protected string $parkingSpaceType;
/**
* @var OperationLogService
*/
private OperationLogService $logService;
public function __construct()
public function __construct($parking_space_type)
{
$this->logService = new OperationLogService();
$this->logService->menuTitle = 'cat_attr';
$this->parkingSpaceType = $parking_space_type;
}
/**
* @param array $row
* @return ParkingLicensePlate|JsonResponse
* @return ParkingLicensePlate
*/
public function model(array $row)
{
$request = new Request();
$parking_space_type = $request->post('parking_space_type', '');
if (empty($parking_space_type)) {
return (new ApiResponseService())->businessError(
__('validation.parking_space.type_id_empty')
);
}
if (!ParkingSpaceType::query()->where('id', $parking_space_type)
->exists()
) {
return (new ApiResponseService())->businessError(
__('exception.exception_handler.resource')
);
}
$data = [];
foreach ($row as $value) {
$data[] = $value;
}
$where = [
'number' => $data[0],
'space_type_id' => $parking_space_type
'space_type_id' => $this->parkingSpaceType
];
if (!ParkingLicensePlate::query()->where($where)
->exists()
) {
$model = new ParkingLicensePlate([
'number' => $data[0],
'space_type_id' => $data[1],
'space_type_id' => $this->parkingSpaceType,
'created_at' => get_datetime()
]);
$this->logService->logCreated($model, 'license_plate.create');

Loading…
Cancel
Save