* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace App\Jobs\Mentor; use App\Jobs\Job; use App\Repositories\Enums\TaskMakeStatusEnum; use App\Repositories\Models\Base\Admin; use App\Repositories\Models\Base\Task; use App\Repositories\Models\Mentor\Grade; use App\Repositories\Models\Mentor\Student; use Illuminate\Support\Facades\Storage; class ImportStudentJob extends Job { public $timeout = 1200; private $path = ''; private $disk = ''; public $resource; public $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, Student::class, $this->login_admin_id); if (!Storage::disk($this->disk)->exists($this->path)) { $task->make_status = TaskMakeStatusEnum::FAIL; $task->message = '找不到文件'; $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->message = '读取文件失败:' . $exception->getMessage(); $task->save(); return false; } try { //处理数据 $total = 0; $r_total = 0; $w_total = 0; while (($row = $excel->nextRow()) !== NULL) { list( $account, $truename, $mobile, $sex_index, $class, ) = $row; if (($account && $truename)) { $total++; $sex = 0; switch ($sex_index) { case "男": case 'man': $sex = 1; break; case '女': case 'women': $sex = 2; break; } $data = [ 'truename' => $truename, 'account' => $account, 'mobile' => $mobile, 'password' => $account, 'sex' => $sex, 'class' => $class, ]; $r_total++; if (!Admin::query()->where('username', $account)->exists()) { $data['grade_id'] = 0; if ($data['class']) { $grade = Grade::byNameAndCreate($data['class']); $data['grade_id'] = $grade['id']; } unset($data['class']); Student::query()->create($data); $w_total++; } } } $task->make_status = TaskMakeStatusEnum::OK; $task->result = "共{$total}条,读取{$r_total}条,导入{$w_total}条。"; $task->save(); return true; } catch (\Exception $exception) { $task->make_status = TaskMakeStatusEnum::FAIL; $task->message = '异常错误:' . $exception->getMessage(); $task->save(); return false; } } }