round = $round; } /** * @param array $row * * @return Model|Model[]|null */ public function model(array $row) { //写导入的逻辑关系 // $user = Orderuser::where('phone', '=', $row['电话'])->where('name', '=',$row['姓名'])->first(); // dd($row); // // 数据库对应的字段 return null; } public function collection(Collection $rows) { //导入的表格所有数据都在此处显示 $list = $rows->toArray(); if(empty($list)){ throw new \Exception("请勿上传空文件"); } //入库 $insertData = []; foreach($list as $key => $item){ $arr = [ "mobile" => trim($item["手机号"]), "name" => trim($item["姓名"]), "idCard" => trim($item["身份证"]), "admission_college" => trim($item["录取学院"]), "admitted_major" => trim($item["录取专业"]), "admission_code" => trim($item["学号"]), "is_five_year" => trim($item["是否五年一贯制"]), "create_time" => time(), "annual_session" => trim($item["学年"]), "is_new_student" => AdmissionNewStudents::IS_NEW_STUDENT_NO, "old_student_bed_info" => trim($item["床位信息"]), "is_push" => AdmissionNewStudents::IS_PUSH_YES, //老生标记已推送 "is_register" => AdmissionNewStudents::REGISTER_YES, //老生标记已注册 ]; //检测必有字段是否为空 if(empty($arr["annual_session"]) || empty($arr["old_student_bed_info"])){ throw new \Exception("学年及床位信息字段不能为空"); } //检测性别 if(trim($item["性别"]) == "男"){ $arr["sex"] = 1; }else if(trim($item["性别"]) == "女"){ $arr["sex"] = 2; } //检测专业 //取出所有二级学院 $secondaryCollegeList = SecondaryCollege::query()->where([ "status" => SecondaryCollege::STATUS_YES ])->get()->toArray(); if(empty($secondaryCollegeList)){ throw new \Exception("识别失败,二级学院信息为空"); } //以学院名作为键 $secondaryCollegeList = array_column($secondaryCollegeList, null, "name"); //初识化专业id $speciality_id = 0; //取出指定学院下面的专业 $specialityInfo = Speciality::query()->where([ "secondary_college_id" => $secondaryCollegeList[trim($item["录取学院"])]["id"], "speciality_name" => trim($item["录取专业"]), "status" => Speciality::STATUS_YES ])->first(); if(!empty($specialityInfo)){ $speciality_id = $specialityInfo->id; } //专业ID为空时提示 if(empty($speciality_id)){ throw new \Exception("识别失败,请检查二级学院或专业名称是否和后台录入的一致"); } $arr["speciality_id"] = $speciality_id; array_push($insertData, $arr); } DB::beginTransaction(); try { $chunk_list = array_chunk($insertData, 1000); foreach ($chunk_list as $new_list) { $add = AdmissionNewStudents::query()->insert($new_list); if($add != count($new_list)){ throw new \Exception("导入数据失败,请重试"); } } DB::commit(); }catch (\PDOException $e){ DB::rollBack(); if ($e->getCode() === '23000') { // 唯一性约束错误处理逻辑 $errorMessage = "导入表格中存在已入库学生信息,请勿重复导入"; // 可以根据需要进行相关处理 throw new \Exception($errorMessage); } else { // 其他类型的错误处理逻辑 throw new \Exception("导入数据失败,请重试"); } }catch (\Exception $e){ DB::rollBack(); throw new \Exception("导入数据失败,请重试"); } } //批量导入1000条 public function batchSize(): int { return 1000; } //以1000条数据基准切割数据 public function chunkSize(): int { return 1000; } }