コード例 #1
0
 public function index($exam_pid = 0)
 {
     if (!$exam_pid) {
         message('请指定考试期次!');
     }
     $exam = ExamModel::get_exam_by_id($exam_pid);
     if (!$exam) {
         message('考试期次不存在!');
     }
     $data = array();
     $cond_param['exam_pid'] = $exam_pid;
     $cond_param['ct_name'] = trim($this->input->get('ct_name'));
     $cond_param['stu_name'] = trim($this->input->get('stu_name'));
     $cond_param['subject_id'] = intval($this->input->get('subject_id'));
     $page = intval($this->input->get('page'));
     $page = $page ? $page : 1;
     $perpage = C('default_perpage_num');
     $total = TeacherStudentModel::teacherStudentListCount($cond_param);
     if ($total) {
         $data['list'] = TeacherStudentModel::teacherStudentList('*', $cond_param, $page, $perpage);
     }
     $purl = site_url('admin/teacher_student/index/' . $exam_pid) . ($cond_param ? '?' . implode('&', $cond_param) : '');
     $data['pagination'] = multipage($total, $perpage, $page, $purl);
     $data['search'] = $cond_param;
     $data['exam'] = $exam;
     $data['subject'] = C('subject');
     $this->load->view('teacher_student/index', $data);
 }
コード例 #2
0
ファイル: ExamTestPaper.php プロジェクト: Vincent-Shen/origin
    /**
     * 设定学生考卷(每科考试随机选一份试卷)
     *
     * @param    int            考试场次id(place_id)
     * @param    int            学生id
     * @return  array
     */
    public static function set_student_test_paper($place_id, $uid, $is_trans = true)
    {
        $subjects = ExamPlaceModel::get_exam_place_subject($place_id);
        if (empty($subjects)) {
            return FALSE;
        }
        $test_papers = array();
        $no_paper_subjects = false;
        foreach ($subjects as $row) {
            $sql = <<<EOT
SELECT paper_id, exam_pid FROM rd_exam_subject_paper WHERE exam_id = ?
ORDER BY RAND() LIMIT 1
EOT;
            $arr = Fn::db()->fetchRow($sql, $row['exam_id']);
            if (!isset($arr['paper_id'])) {
                $no_paper_subjects = true;
                break;
            }
            $exam = ExamModel::get_exam_by_id($row['exam_id'], 'total_score, class_id, grade_id');
            $total_score = $exam['total_score'];
            $class_id = $exam['class_id'];
            $grade_id = $exam['grade_id'];
            $test_papers[] = array('exam_pid' => $row['exam_pid'], 'exam_id' => $row['exam_id'], 'uid' => $uid, 'paper_id' => $arr['paper_id'], 'place_id' => $place_id, 'subject_id' => $row['subject_id'], 'full_score' => $total_score, 'test_score' => '0.00', 'etp_flag' => 0, 'ctime' => time());
        }
        if ($no_paper_subjects) {
            return false;
        }
        $db = Fn::db();
        if ($is_trans) {
            $db->beginTransaction();
        }
        // save
        $insert_ids = array();
        foreach ($test_papers as $val) {
            $sql = "SELECT etp_id FROM rd_exam_test_paper\n                    WHERE exam_pid = {$val['exam_pid']} AND exam_id = {$val['exam_id']}\n                    AND uid = {$val['uid']} AND paper_id = {$val['paper_id']}\n                    AND place_id = {$val['place_id']} AND subject_id = {$val['subject_id']} ";
            $res1 = $db->fetchRow($sql);
            if (isset($res1['etp_id']) && $res1['etp_id'] > 0) {
                $res = $db->update('rd_exam_test_paper', $val, 'etp_id = ' . $res1['etp_id']);
                $etp_id = $res1['etp_id'];
            } else {
                $res = $db->insert('rd_exam_test_paper', $val);
                //添加试卷试题
                $etp_id = $db->lastInsertId('rd_exam_test_paper', 'etp_id');
            }
            if ($etp_id) {
                $etp_id_where = "etp_id = {$etp_id}";
                $db->delete('rd_exam_test_paper_question', $etp_id_where);
                $sql = "SELECT q.ques_id,q.type\n                        FROM rd_exam_question eq\n                        LEFT JOIN rd_question q ON eq.ques_id=q.ques_id\n                        LEFT JOIN rd_relate_class rc ON rc.ques_id=q.ques_id AND rc.grade_id={$grade_id}\n                        AND rc.class_id={$class_id} WHERE eq.paper_id={$val['paper_id']}\n                        ORDER BY rc.difficulty DESC,q.ques_id ASC";
                $result = $db->fetchAll($sql);
                if ($val['subject_id'] == 3) {
                    $types = array('12', '1', '0', '5', '4', '8', '3', '15', '11', '7', '6', '2', '9', '10', '13', '14');
                } else {
                    $types = array('1', '2', '3', '0', '10', '14', '15', '11');
                }
                $paper_array = array();
                foreach ($types as $type) {
                    foreach ($result as $key => $row) {
                        if ($row['type'] != $type) {
                            continue;
                        }
                        $paper_array[] = $row['ques_id'];
                        unset($result[$key]);
                    }
                }
                $ques_ids = implode(',', $paper_array);
                $res = $db->insert('rd_exam_test_paper_question', array('etp_id' => $etp_id, 'ques_id' => $ques_ids));
            }
            if (!$res) {
                break;
            }
        }
        if ($is_trans && $res) {
            $res = $db->commit();
            if (!$res) {
                $db->rollBack();
            }
        } else {
            if ($is_trans && !$res) {
                $db->rollBack();
                return false;
            }
        }
        return $res;
    }
コード例 #3
0
 /**
  * 目标匹配度 XX%
  * note:
  *   xx%=班级的学科总得分/期望得分(班级考的试卷每题期望得分累加)
  *
  * @param Number $rule_id   评估规则id
  * @param number $exam_id   考试学科
  * @param number $schcls_id 班级id
  */
 public function module_match_percent($rule_id = 0, $exam_id = 0, $schcls_id = 0)
 {
     $rule_id = intval($rule_id);
     $exam_id = intval($exam_id);
     $schcls_id = intval($schcls_id);
     if (!$rule_id || !$exam_id || !$schcls_id) {
         return array();
     }
     $match_percent = array();
     $class = $this->class_common_model->get_class_info($schcls_id);
     $total_score = ExamModel::get_exam_by_id($exam_id, 'total_score');
     $paper_id = $this->class_common_model->get_class_exam_paper($schcls_id, $exam_id);
     if (!$paper_id) {
         return array();
     }
     if (!isset(self::$_data['paper_question_score'][$exam_id][$paper_id])) {
         $paper = PaperModel::get_paper_by_id($paper_id);
         $score = json_decode($paper['question_score'], true);
         self::$_data['paper_question_score'][$exam_id][$paper_id] = $score;
     } else {
         $score = self::$_data['paper_question_score'][$exam_id][$paper_id];
     }
     // 获取该班级所考到的试卷题目
     $sql = "SELECT etpq.ques_id\n        \t    FROM rd_exam_test_paper_question etpq\n        \t    LEFT JOIN rd_exam_test_paper etp ON etpq.etp_id=etp.etp_id\n        \t    WHERE etp.exam_id={$exam_id} AND etp.paper_id={$paper_id} AND etp.etp_flag=2\n        \t    ";
     $ques_id = trim(self::$_db->fetchOne($sql));
     if (!$ques_id) {
         return array();
     }
     $ques_ids = @explode(',', $ques_id);
     if (!is_array($ques_ids) || !$ques_ids) {
         return array();
     }
     // 获取这些题目的难易度
     $sql = "SELECT rc.ques_id,rc.difficulty\n        \t    FROM rd_relate_class rc\n        \t    LEFT JOIN rd_exam e ON rc.grade_id=e.grade_id AND rc.class_id=e.class_id\n        \t    AND rc.subject_type=e.subject_type\n        \t    WHERE e.exam_id={$exam_id} AND rc.ques_id IN({$ques_id})\n        \t    ";
     $ques_difficulties = self::$_db->fetchPairs($sql);
     //本次考试班级试题得分情况
     $sql = "SELECT ques_id, ROUND(total_score / student_amount) AS full_score, avg_score\n        \t    FROM rd_summary_region_question\n        \t    WHERE exam_id = {$exam_id} AND region_id = {$schcls_id}\n        \t    AND is_school = 0 AND is_class = 1 AND ques_id IN ({$ques_id})";
     $class_score = self::$_db->fetchAssoc($sql);
     //本次考试年级试题得分情况
     $sql = "SELECT ques_id, ROUND(total_score / student_amount) AS full_score, avg_score\n        \t    FROM rd_summary_region_question\n        \t    WHERE exam_id = {$exam_id} AND region_id = {$class['school_id']}\n        \t    AND is_school = 1 AND is_class = 0 AND ques_id IN ({$ques_id})";
     $grade_score = self::$_db->fetchAssoc($sql);
     $data = array(array('难易度', '低', '中', '高', '合计'), array('本班平均分', -1, -1, -1, 0), array('年级平均分', -1, -1, -1, 0), array('期望得分', -1, -1, -1, 0), array('总分', -1, -1, -1, 0));
     $level = array('低' => 1, '中' => 2, '高' => 3);
     foreach ($ques_ids as $ques_id) {
         if (!isset($ques_difficulties[$ques_id])) {
             continue;
         }
         $q_diffculty = $ques_difficulties[$ques_id];
         $cls_full_score = 0;
         $cls_test_score = 0;
         $grd_test_score = 0;
         if (isset($class_score[$ques_id])) {
             $cls_full_score = isset($score[$ques_id]) ? array_sum($score[$ques_id]) : $class_score[$ques_id]['full_score'];
             $cls_test_score = $class_score[$ques_id]['avg_score'];
         }
         if (isset($grade_score[$ques_id])) {
             $grd_test_score = $grade_score[$ques_id]['avg_score'];
         }
         $d_level = $this->class_common_model->convert_question_difficulty($q_diffculty);
         $expect_score = $cls_full_score * $q_diffculty / 100;
         $k = $level[$d_level];
         if ($data[1][$k] == -1) {
             $data[1][$k] = 0;
         }
         $data[1][$k] += $cls_test_score;
         $data[1][4] += $cls_test_score;
         if ($data[2][$k] == -1) {
             $data[2][$k] = 0;
         }
         $data[2][$k] += $grd_test_score;
         $data[2][4] += $grd_test_score;
         if ($data[3][$k] == -1) {
             $data[3][$k] = 0;
         }
         $data[3][$k] += $expect_score;
         $data[3][4] += $expect_score;
         if ($data[4][$k] == -1) {
             $data[4][$k] = 0;
         }
         $data[4][$k] += $cls_full_score;
     }
     $data[4][4] = $total_score;
     return array('data' => $data, 'percent' => round(end($data[1]) / end($data[3]) * 100));
 }