/** * 导入教师记录(从excel文件中), */ public function importteacher($sch_id = 0) { if ($_GET['dl'] == '1') { Func::dumpFile('application/vnd.ms-excel', 'file/import_school_teacher_template.xlsx', '教师导入模板.xlsx'); exit; } if (!$sch_id || !SchoolModel::schoolInfo($sch_id)) { message('学校不存在,无法导入教师!'); } $data = array(); $data['sch_id'] = $sch_id; while (isset($_FILES['file'])) { $param = $_POST; $title = array('姓名', '年级', '学科', '简介'); $col_char = array(); $rows = Excel::readSimpleUploadFile($_FILES['file'], $title, $col_char); if (!is_array($rows)) { $data['error'] = $rows; break; } $grade_map = array_flip(C('grades')); $subject_map = array_flip(C('subject')); $ct_list = array(); foreach ($rows as $k => $row) { ////////////////////////////// // 姓名0 年级1 学科2 简介3 ////////////////////////////// // 姓名 if ($row[0] == '') { $data['error'] == $col_char[0] . ($k + 2) . ' - "姓名"不可为空'; break; } if (mb_strlen($row[0], 'UTF-8') > 30) { $data['error'] = $col_char[0] . ($k + 2) . ' - "姓名"内容太长了,不可超过30个字符'; break; } // 年级 if ($row[1] == '') { $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"不能为空'; break; } $row[1] = str_replace(array(',', ' ', ' ', '、', "\r\n", "\r", "\n"), ',', $row[1]); $row['ctg_gradeid'] = array(); $arr = explode(',', $row[1]); foreach ($arr as $v) { $v = trim($v); if ($v == '') { continue; } if (isset($grade_map[$v])) { $row['ctg_gradeid'][] = $grade_map[$v]; } else { $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"里有不正确的选项'; break; } } if (isset($data['error'])) { break; } if (empty($row['ctg_gradeid'])) { $data['error'] = $col_char[1] . ($k + 2) . ' - "年级"不能为空'; break; } $row['ctg_gradeid'] = array_unique($row['ctg_gradeid']); // 学科 if ($row[2] == '') { $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"不能为空'; break; } $row[2] = str_replace(array(',', ' ', ' ', '、', "\r\n", "\r", "\n"), ',', $row[2]); $row['cts_subjectid'] = array(); $arr = explode(',', $row[2]); foreach ($arr as $v) { $v = trim($v); if ($v == '') { continue; } if (isset($subject_map[$v])) { $row['cts_subjectid'][] = $subject_map[$v]; } else { $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"里有不正确的选项空'; break; } } if (isset($data['error'])) { break; } if (empty($row['cts_subjectid'])) { $data['error'] = $col_char[2] . ($k + 2) . ' - "学科"不能为空'; break; } $row['cts_subjectid'] = array_unique($row['cts_subjectid']); // 简介 if ($row[3] == '') { $row[3] = NULL; } $ct_list[] = array('index' => $k + 2, 'ct_name' => $row[0], 'ct_memo' => $row[3], 'ctg_gradeid' => $row['ctg_gradeid'], 'cts_subjectid' => $row['cts_subjectid']); } if (isset($data['error'])) { break; } unset($grade_map); unset($subject_map); unset($rows); // 这里开始导入 $db = Fn::db(); try { $time = time(); $adduid = Fn::sess()->userdata('admin_id'); if (!$db->beginTransaction()) { throw new Exception('开始导入事务处理失败'); } $ct_insert = 0; // 导入教师 foreach ($ct_list as $k => $row) { // insert $db->insert('t_cteacher', array('ct_name' => $row['ct_name'], 'ct_memo' => $row['ct_memo'], 'ct_flag' => $param['ct_flag'])); $ct_id = $db->lastInsertId('t_cteacher', 'ct_id'); $bind = array('scht_schid' => $sch_id, 'scht_ctid' => $ct_id); $db->insert('t_cteacher_school', $bind); foreach ($row['ctg_gradeid'] as $v) { $db->insert('t_cteacher_gradeid', array('ctg_ctid' => $ct_id, 'ctg_gradeid' => $v)); } foreach ($row['cts_subjectid'] as $v) { $db->insert('t_cteacher_subjectid', array('cts_ctid' => $ct_id, 'cts_subjectid' => $v)); } $ct_insert++; } if ($db->commit()) { $data['success'] = <<<EOT 导入Excel文件({$_FILES['file']['name']})成功,共插入{$ct_insert}条教师记录 EOT; admin_log('add', 'cteacher', $data['success']); } else { $err = $db->errorInfo()[2]; $db->rollBack(); throw new Exception($err); } } catch (Exception $e) { $data['error'] = $e->getMessage(); } break; } if (!isset($_FILES['file'])) { $param = array('ct_flag' => time()); } $data['param'] = $param; $this->load->view('school/importteacher', $data); }