Ejemplo n.º 1
0
 /**
  * 试卷详细信息
  * @param   int|array   $paper_id    试卷id
  * @return  array       $paper_detail
  */
 private static function paperDetail($paper_id)
 {
     if (!$paper_id) {
         return array();
     }
     $db = fn::db();
     $paper_id_str = implode(',', $paper_id);
     $sql = "SELECT e.exam_id, esp.paper_id, e.subject_id, e.grade_id,\n                e.class_id, e.total_score, e.qtype_score, ep.question_score\n                FROM rd_exam e \n                LEFT JOIN rd_exam_subject_paper esp ON e.exam_id = esp.exam_id \n                LEFT JOIN rd_exam_paper ep ON ep.paper_id = esp.paper_id\n                WHERE esp.paper_id IN ({$paper_id_str})";
     $exam = $db->fetchAll($sql);
     if (!$exam) {
         return array();
     }
     $grade_id = $exam[0]['grade_id'];
     $class_id = $exam[0]['class_id'];
     $sql = "SELECT eq.paper_id, q.ques_id, q.type, q.score_factor\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 \n                          AND rc.grade_id={$grade_id} AND rc.class_id={$class_id}\n                WHERE eq.paper_id IN ({$paper_id_str}) \n                ORDER BY rc.difficulty DESC,q.ques_id ASC";
     $paper = $db->fetchAll($sql);
     $exam_paper_question = array();
     //考试试卷试题
     foreach ($paper as $item) {
         $exam_paper_question[$item['paper_id']][$item['ques_id']] = $item;
     }
     $paper_detail = array();
     foreach ($exam as $item) {
         if ($item['subject_id'] == 3) {
             $groups = array(1 => array(), 4 => array(), 0 => array(), 5 => array(), 6 => array(), 7 => array(), 2 => array(), 3 => array(), 8 => array(), 9 => array(), 14 => array());
         } else {
             $groups = array(1 => array(), 2 => array(), 3 => array(), 0 => array(), 14 => array());
         }
         $question_score = @json_decode($item['question_score'], true);
         $qtype_score = explode(',', $item['qtype_score']);
         $index = 1;
         $tmp_data = $exam_paper_question[$item['paper_id']];
         $total_score_factor = 0;
         // 题组试题总的分值系数
         $total_score = $item['total_score'];
         //试卷总分
         foreach ($groups as $type => &$group) {
             foreach ($tmp_data as $ques_id => $val) {
                 if ($val['type'] == $type) {
                     $group[$ques_id]['ques_index'] = $index++;
                     if ($val['type'] > 0) {
                         if (isset($question_score[$ques_id]) && $question_score[$ques_id]) {
                             $group[$ques_id]['full_score'] = array_sum($question_score[$ques_id]);
                             $total_score -= $group[$ques_id]['full_score'];
                         } else {
                             $total_score -= $qtype_score[$val['type'] - 1];
                             $group[$ques_id]['full_score'] = $qtype_score[$val['type'] - 1];
                         }
                     }
                     if ($type == 0) {
                         $total_score_factor += $val['score_factor'];
                     }
                 }
             }
         }
         $groups = array_filter($groups);
         if (!empty($groups[0])) {
             foreach ($groups[0] as $ques_id => &$list) {
                 $list['full_score'] = round($total_score * $tmp_data[$ques_id]['score_factor'] / $total_score_factor);
             }
         }
         $paper_detail[$item['paper_id']] = $groups;
         $paper_detail[$item['paper_id']]['question_score'] = $question_score;
     }
     return $paper_detail;
 }