/** * 下载班级报告 */ public function down_teacher_report($rule_id = 0) { $rule_id = intval($rule_id); $rule_id && ($rule = EvaluateRuleModel::get_evaluate_rule($rule_id)); if (empty($rule)) { message('不存在该评估规则'); } $save_file = realpath(dirname(APPPATH)) . "/cache/down_teacher_report/" . $rule_id . '.zip'; if (!file_exists($save_file)) { $teacher_list = TeacherStudentModel::examTeacherList($rule['exam_pid']); if (!$teacher_list) { message('当前评估规则没有关联教师,无法下载教师报告!'); } $dir_name = realpath(dirname(APPPATH)) . "/cache/down_teacher_report/" . $rule_id; if (!is_dir($dir_name)) { @mkdir($dir_name, 0777, true); } $pdf_dir = C('html2pdf_path') . '/zeming/report/'; $pdf_ready = false; foreach ($teacher_list as $ct_id => $item) { $dir = $pdf_dir . "{$rule_id}/teacher_{$ct_id}"; if (!is_dir($dir)) { continue; } $pdf_ready = true; $teacher_name = $item['ct_name']; $f = @dir($dir); if ($f) { while (false !== ($entry = $f->read())) { if ($entry != '.' && $entry != '..') { @copy($dir . '/' . $entry, $dir_name . '/' . $teacher_name . '_' . $entry); } } } } if ($pdf_ready) { require_once APPPATH . 'libraries/Pclzip.php'; $archive = new PclZip($save_file); //将文件进行压缩 $archive->create($dir_name, PCLZIP_OPT_REMOVE_PATH, realpath(dirname(APPPATH)) . "/cache/down_teacher_report"); $this->rm_dir($dir_name); } else { message('教师报告PDF文件还未生成,无法下载!'); } } if (file_exists($save_file)) { $exam_name = ExamModel::get_exam($rule['exam_pid'], 'exam_name'); $subject_name = ''; if ($rule['subject_id'] > 0) { $subject_name = $this->_subject_name($rule['exam_pid'], $rule['subject_id']); } $filename = $exam_name . $subject_name . '教师报告'; Func::dumpFile('application/zip', $save_file, $filename . '.zip'); } }
/** * 导入 */ public function import($exam_pid = 0) { if ($_GET['dl'] == '1') { Func::dumpFile('application/vnd.ms-excel', 'file/import_teacher_stundent_template.xlsx', '师生关联模板.xlsx'); exit; } if (!$exam_pid) { message('参数错误'); } $data = array(); while (isset($_FILES['file'])) { $param = $_POST; $col_char = array(); $rows = Excel::readSimpleUploadFile2($_FILES['file']); if (!is_array($rows)) { $data['error'] = $rows; break; } $subject_map = array_flip(C('subject')); $db = Fn::db(); $exam_ticket_maprule = ExamModel::get_exam($exam_pid, 'exam_ticket_maprule'); $sql = "SELECT subject_id, exam_id FROM rd_exam\n WHERE exam_pid = {$exam_pid}"; $subject_exam = $db->fetchPairs($sql); if (!is_array($subject_exam)) { $data['error'] = '考试期次没有考试学科'; break; } $exam_subjectid = array_keys($subject_exam); $list = array(); $subject_key = array(); foreach ($rows as $k => $row) { if ($k == 0) { for ($i = 2; $i <= count($row); $i++) { $subject_id = $subject_map[str_replace("'", "", trim($row[$i]))]; if ($subject_id && in_array($subject_id, $exam_subjectid)) { $subject_key[$i] = $subject_id; } } } else { $student = array(); for ($i = 1; $i <= count($row); $i++) { if ($i == 1) { $exam_ticket = trim($row[$i]); if (!$exam_ticket) { break; } $exam_ticket = exam_ticket_maprule_encode($exam_ticket, $exam_ticket_maprule); $sql = "SELECT uid, school_id FROM rd_student\n WHERE exam_ticket = '{$exam_ticket}'"; $student = $db->fetchRow($sql); if (!$student) { break; } $list[$student['uid']]['uid'] = $student['uid']; } else { $ct_name = str_replace("'", "", trim($row[$i])); if (!$ct_name) { continue; } $sql = "SELECT ct_id FROM t_cteacher \n LEFT JOIN t_cteacher_school ON scht_ctid = ct_id\n WHERE scht_schid = {$student['school_id']} \n AND ct_name = '{$ct_name}'"; $ct_id = $db->fetchOne($sql); if (!$ct_id) { continue; } $list[$student['uid']]['teacher'][$subject_key[$i]] = $ct_id; } } } } try { if (!$db->beginTransaction()) { throw new Exception('开始导入事务处理失败'); } $insert = 0; // 导入教师 foreach ($list as $uid => $row) { foreach ($row['teacher'] as $subject_id => $ct_id) { $bind = array('tstu_ctid' => $ct_id, 'tstu_stuid' => $uid, 'tstu_exampid' => $exam_pid, 'tstu_examid' => $subject_exam[$subject_id], 'tstu_subjectid' => $subject_id); TeacherStudentModel::addTeacherStudent($bind); $insert++; } } if ($db->commit()) { $data['success'] = <<<EOT 导入Excel文件({$_FILES['file']['name']})成功,共插入{$insert}条师生记录 EOT; admin_log('import', 'teacher_student', $data['success']); } else { $err = $db->errorInfo()[2]; $db->rollBack(); throw new Exception($err); } } catch (Exception $e) { $data['error'] = $e->getMessage(); } break; } $data['exam_pid'] = $exam_pid; $data['param'] = $param; $this->load->view('teacher_student/import', $data); }