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

28
app/Imports/ParkingLicensePlateImport.php

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

Loading…
Cancel
Save