first()->toArray(); $questionB = json_decode($examConfig['proportion'],true); # 试题列表 $question_num = 0; $score = 0; $questionArr = []; foreach ($questionB as $k=>$v) { $question_num += $v['question_num']; $score += $v['question_num'] * $v['score']; $questionList = $questionModel->where(['question_type'=>$v['question_type'],'status'=>1])->select('id','question_name','question_type','answer','desctext','q_options')->get()->toArray(); $count = count($questionList); if ($v['question_num'] < $count) { # 随机去掉多出的题数 $d_num = $count - $v['question_num']; for ($i=0; $i<$d_num; $i++) { $delKey = rand(0,$count-$i); unset($questionList[$delKey]); # 重新排序 array_values($questionList); } } foreach ($questionList as $k1 => $v1) { $v1['score'] = $v['score']; $v1['q_options'] = json_decode($v1['q_options']); $questionArr[] = $v1; } } $exam['exam_time'] = $examConfig['exam_time']; # 考试时长 $exam['question_num'] = $question_num; # 总题数 $exam['score'] = $score; # 总分数 return dataReturn(0, 'success', compact('questionArr','exam')); } /** * 提交试题 * @return array */ public function submitQuestion($param) { $code = exam_code(); # 提交编号 $examModel = new Exam(); # 试卷 $examData['user_id'] = $param['user_id']; # 答题用户id $examData['score'] = $param['score']; # 试卷分数 $examData['total_score'] = $param['total_score']; # 用户得分 $examData['exam_time'] = $param['exam_time']; # 试卷考试时长 $examData['user_exam_time'] = $param['user_exam_time']; # 用户答卷时长 $examData['exam_code'] = $code; # 试卷编码 $examData['add_time'] = date('Y-m-d H:i:s'); # 试卷编码 $res = $examModel->insert($examData); $questionlogModel = new QuestionLog();# 试卷试题 if ($res) { $questionArr = $param['questionArr']; foreach ($questionArr as $k=>$v) { $inserData = [ 'exam_code' => $code, 'question_id' => $v['id'], 'question_name' => $v['question_name'], 'question_type' => $v['question_type'], 'user_answer' => $v['user_answer'], 'answer' => $v['answer'], 'score' => $v['score'], 'user_score' => $v['user_score'], 'q_options' => empty($v['q_options']) ? '' :json_encode($v['q_options']) ]; $questionlogModel->insert($inserData); } } $reruen['code'] = $code; return dataReturn(0, 'success', compact('reruen')); } }