* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace App\Jobs\Base; use App\Jobs\Job; use App\Repositories\Enums\Base\TaskMakeStatusEnum; use App\Repositories\Models\Base\Admin; use App\Repositories\Models\Base\Department; use App\Repositories\Models\Base\Role; use App\Repositories\Models\Base\Task; use Illuminate\Support\Facades\Storage; class ImportAdminJob extends Job { public $timeout = 1200; private $path = ''; private $disk = ''; private $resource = ''; private $login_admin_id = ''; /** * Create a new job instance. */ public function __construct($resource, $login_admin_id) { $this->resource = $resource; $this->disk = $resource['disk']; $this->path = $resource['path']; $this->login_admin_id = $login_admin_id; } /** * Execute the job. */ public function handle() { $task = Task::importTask($this->resource, Admin::class, $this->login_admin_id); if (!Storage::disk($this->disk)->exists($this->path)) { $task->make_status = TaskMakeStatusEnum::FAIL; $task->result = '找不到文件'; $task->save(); return false; } try { $config = ['path' => '']; $excel = new \Vtiful\Kernel\Excel($config); $excel->openFile(Storage::disk($this->disk)->path($this->path)) ->openSheet() ->setSkipRows(1); } catch (\Exception $exception) { $task->make_status = TaskMakeStatusEnum::FAIL; $task->result = '读取文件失败:' . $exception->getMessage(); $task->save(); return false; } $msg = ''; try { //处理数据 $total = 0; $r_total = 0; $w_total = 0; $errAccount = []; while (($row = $excel->nextRow()) !== NULL) { list( $name, $mobile, $email, $class_name, $role_name, ) = $row; if ($mobile && $mobile) { $total++; $account = rk($mobile); if ($mobile) $data['mobile'] = rk($mobile); if ($email) $data['email'] = rk($email); if ($name) $data['name'] = rk($name); $data['username'] = $account; $data['department_id'] = 0; if ($class_name) { $class_name = rk($class_name); $grade_id = Department::byNameGetId($class_name, true); $data['department_id'] = $grade_id; } $model = Admin::query()->where('account', $account)->first(); if ($model) { if (count($data)) { $model->fill($data); $model->save(); $w_total++; } } else { $model = Admin::query()->create($data); } if ($role_name) { $role_id = Role::query()->where('name', $role_name)->value('id') ?? 0; if ($role_id) $model->syncRoles([$role_id]); } $r_total++; } } if (count($errAccount)) $msg = "工号错误:" . arr2str($errAccount); $task->make_status = TaskMakeStatusEnum::OK; $task->result = "共{$total}条,读取{$r_total}条,导入{$w_total}条。{$msg}"; $task->save(); return true; } catch (\Exception $exception) { $task->make_status = TaskMakeStatusEnum::FAIL; $task->result = '异常错误:' . $exception->getMessage(); $task->save(); return false; } } }