123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- namespace app\command;
- use app\model\ExamEmpResult;
- use app\model\ExamPaper;
- use think\console\Command;
- use think\console\Input;
- use think\console\Output;
- use think\facade\Log;
- class Exam extends Command
- {
- protected function configure()
- {
- $this->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;
- }
- }
|