Exemplo n.º 1
0
 /**
  * 下载班级报告
  */
 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');
     }
 }
Exemplo n.º 2
0
    /**
     * 导入
     */
    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);
    }