/** * 试卷详细信息 * @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; }