ImportStudentJob.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. /*
  3. * This file is part of the Jiannei/lumen-api-starter.
  4. *
  5. * (c) Jiannei <longjian.huang@foxmail.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace App\Jobs\Mentor;
  11. use App\Jobs\Job;
  12. use App\Repositories\Enums\TaskMakeStatusEnum;
  13. use App\Repositories\Models\Base\Admin;
  14. use App\Repositories\Models\Base\Task;
  15. use App\Repositories\Models\Mentor\Grade;
  16. use App\Repositories\Models\Mentor\Student;
  17. use Illuminate\Support\Facades\Storage;
  18. class ImportStudentJob extends Job
  19. {
  20. public $timeout = 1200;
  21. private $path = '';
  22. private $disk = '';
  23. public $resource;
  24. public $login_admin_id;
  25. /**
  26. * Create a new job instance.
  27. */
  28. public function __construct($resource, $login_admin_id)
  29. {
  30. $this->resource = $resource;
  31. $this->disk = $resource['disk'];
  32. $this->path = $resource['path'];
  33. $this->login_admin_id = $login_admin_id;
  34. }
  35. /**
  36. * Execute the job.
  37. */
  38. public function handle()
  39. {
  40. $task = Task::importTask($this->resource, Student::class, $this->login_admin_id);
  41. if (!Storage::disk($this->disk)->exists($this->path)) {
  42. $task->make_status = TaskMakeStatusEnum::FAIL;
  43. $task->message = '找不到文件';
  44. $task->save();
  45. return false;
  46. }
  47. try {
  48. $config = ['path' => ''];
  49. $excel = new \Vtiful\Kernel\Excel($config);
  50. $excel->openFile(Storage::disk($this->disk)->path($this->path))
  51. ->openSheet()
  52. ->setSkipRows(1);
  53. } catch (\Exception $exception) {
  54. $task->make_status = TaskMakeStatusEnum::FAIL;
  55. $task->message = '读取文件失败:' . $exception->getMessage();
  56. $task->save();
  57. return false;
  58. }
  59. try {
  60. //处理数据
  61. $total = 0;
  62. $r_total = 0;
  63. $w_total = 0;
  64. while (($row = $excel->nextRow()) !== NULL) {
  65. list(
  66. $account,
  67. $truename,
  68. $mobile,
  69. $sex_index,
  70. $class,
  71. ) = $row;
  72. if (($account && $truename)) {
  73. $total++;
  74. $sex = 0;
  75. switch ($sex_index) {
  76. case "男":
  77. case 'man':
  78. $sex = 1;
  79. break;
  80. case '女':
  81. case 'women':
  82. $sex = 2;
  83. break;
  84. }
  85. $data = [
  86. 'truename' => $truename,
  87. 'account' => $account,
  88. 'mobile' => $mobile,
  89. 'password' => $account,
  90. 'sex' => $sex,
  91. 'class' => $class,
  92. ];
  93. $r_total++;
  94. if (!Admin::query()->where('username', $account)->exists()) {
  95. $data['grade_id'] = 0;
  96. if ($data['class']) {
  97. $grade = Grade::byNameAndCreate($data['class']);
  98. $data['grade_id'] = $grade['id'];
  99. }
  100. unset($data['class']);
  101. Student::query()->create($data);
  102. $w_total++;
  103. }
  104. }
  105. }
  106. $task->make_status = TaskMakeStatusEnum::OK;
  107. $task->result = "共{$total}条,读取{$r_total}条,导入{$w_total}条。";
  108. $task->save();
  109. return true;
  110. } catch (\Exception $exception) {
  111. $task->make_status = TaskMakeStatusEnum::FAIL;
  112. $task->message = '异常错误:' . $exception->getMessage();
  113. $task->save();
  114. return false;
  115. }
  116. }
  117. }