setName('exam') ->setDescription('试卷未完成,到时间自动提交'); } protected function execute(Input $input, Output $output) { Log::close(NULL); // 关闭日志 $output->writeln("自动提交开始处理:" . date('Y-m-d H:i:s')); // 批改未完成的approve_status=-1,系统批改paper.checkway=sys,考试时间结束的 $now = time(); $data = ExamEmpResult::with('paperInfo')->where([ ['approve_status', '=', -1], ['endmaketime', '<', $now] ])->select(); foreach ($data as $item) { // 如果考试时间结束,则自动提交,更新状态为已提交未批改,考试时间为试卷规定时间 $item->save(['approve_status' => 0, 'time_spend' => round(($item->endmaketime - strtotime($item->startmaketime)) / 60), 'addtime' => date('Y-m-d H:i:s', $now)]); // 如果试卷不是机器审核的 if ($item->paperInfo->checkway != 'sys') continue; // 对试卷进行机器审核 $this->correct_papers_system($item); $output->writeln("处理完成:" . $item->id); } $output->writeln("自动提交结束处理: " . date('Y-m-d H:i:s')); } /** * 机器审核试卷 * * @param [type] $paperid * @param [type] $employee_id * @param integer $from * @return void */ public function correct_papers_system($result) { $emp_answer_arr = json_decode($result->answer, true); // 查找试题 $paperInfo = ExamPaper::with('questions')->find($result->paper_id); // 总分 $totalScore = 0; $json = []; foreach ($paperInfo->questions as &$item) { if (!isset($emp_answer_arr[$item->id])) { $json[$item->id] = 0; continue; } $json[$item->id] = $this->fraction($emp_answer_arr[$item->id], $item['answer'], $item['type'], (int)$item['pivot']['score'], $result->id, $item->id); //得分总和 $totalScore += (int)$json[$item->id]; } $u['final_score'] = $totalScore; $u['approve_status'] = 2; $u['aprove_time'] = date('Y-m-d H:i:s'); $u['data'] = json_encode($json); $result->save($u); } //计算分数 public function fraction($emp_answer, $answer, $type, $score = 0, $requestid = 0, $questionsid = 0) { if (!$emp_answer) return 0; switch ($type) { case '判断': case '单选': if (trim($answer) == trim($emp_answer)) return $score; else return 0; case '多选': $answer = explode(',', $answer); $emp_answer = explode(',', $emp_answer); $rs = array_intersect($answer, $emp_answer); return $score / count($answer) * count($rs); case '简答': case '问答': $checkedAnswer = ExamEmpResult::autoPaperAnswerCheck($emp_answer, $answer, $score); if ($requestid && $questionsid) { $tw[] = ['id', '=', $requestid]; $tw[] = ['from', '=', 0]; $json = ExamEmpResult::where($tw)->value('answer'); $json = json_decode($json, true); if (isset($json[$questionsid])) { $json[$questionsid] = $checkedAnswer['emp_answer']; ExamEmpResult::where($tw)->update(['answer' => json_encode($json)]); } } return $checkedAnswer['got_score']; } return 0; } }