package com.mindskip.xzs.service.impl;
import com.mindskip.xzs.domain.*;
import com.mindskip.xzs.domain.*;
import com.mindskip.xzs.domain.enums.ExamPaperAnswerStatusEnum;
import com.mindskip.xzs.domain.enums.ExamPaperTypeEnum;
import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
import com.mindskip.xzs.domain.exam.ExamPaperTitleItemObject;
import com.mindskip.xzs.domain.other.KeyValue;
import com.mindskip.xzs.domain.other.ExamPaperAnswerUpdate;
import com.mindskip.xzs.domain.task.TaskItemAnswerObject;
import com.mindskip.xzs.repository.*;
import com.mindskip.xzs.repository.ExamPaperAnswerMapper;
import com.mindskip.xzs.repository.ExamPaperMapper;
import com.mindskip.xzs.repository.TaskExamCustomerAnswerMapper;
import com.mindskip.xzs.service.ExamPaperAnswerService;
import com.mindskip.xzs.service.ExamPaperQuestionCustomerAnswerService;
import com.mindskip.xzs.service.TextContentService;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.ExamUtil;
import com.mindskip.xzs.utility.JsonUtil;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitItemVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.repository.QuestionMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class ExamPaperAnswerServiceImpl extends BaseServiceImpl<ExamPaperAnswer> implements ExamPaperAnswerService {
private final ExamPaperAnswerMapper examPaperAnswerMapper;
private final ExamPaperMapper examPaperMapper;
private final TextContentService textContentService;
private final QuestionMapper questionMapper;
private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
private final TaskExamCustomerAnswerMapper taskExamCustomerAnswerMapper;
@Autowired
public ExamPaperAnswerServiceImpl(ExamPaperAnswerMapper examPaperAnswerMapper, ExamPaperMapper examPaperMapper, TextContentService textContentService, QuestionMapper questionMapper, ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, TaskExamCustomerAnswerMapper taskExamCustomerAnswerMapper) {
super(examPaperAnswerMapper);
this.examPaperAnswerMapper = examPaperAnswerMapper;
this.examPaperMapper = examPaperMapper;
this.textContentService = textContentService;
this.questionMapper = questionMapper;
this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService;
this.taskExamCustomerAnswerMapper = taskExamCustomerAnswerMapper;
}
@Override
public PageInfo<ExamPaperAnswer> studentPage(ExamPaperAnswerPageVM requestVM) {
return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
examPaperAnswerMapper.studentPage(requestVM));
}
@Override
public ExamPaperAnswerInfo calculateExamPaperAnswer(ExamPaperSubmitVM examPaperSubmitVM, User user) {
ExamPaperAnswerInfo examPaperAnswerInfo = new ExamPaperAnswerInfo();
Date now = new Date();
ExamPaper examPaper = examPaperMapper.selectByPrimaryKey(examPaperSubmitVM.getId());
ExamPaperTypeEnum paperTypeEnum = ExamPaperTypeEnum.fromCode(examPaper.getPaperType());
//任务试卷只能做一次
if (paperTypeEnum == ExamPaperTypeEnum.Task) {
ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.getByPidUid(examPaperSubmitVM.getId(), user.getId());
if (null != examPaperAnswer)
return null;
}
String frameTextContent = textContentService.selectById(examPaper.getFrameTextContentId()).getContent();
List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent, ExamPaperTitleItemObject.class);
List<Integer> questionIds = examPaperTitleItemObjects.stream().flatMap(t -> t.getQuestionItems().stream().map(q -> q.getId())).collect(Collectors.toList());
List<Question> questions = questionMapper.selectByIds(questionIds);
//将题目结构的转化为题目答案
List<ExamPaperQuestionCustomerAnswer> examPaperQuestionCustomerAnswers = examPaperTitleItemObjects.stream()
.flatMap(t -> t.getQuestionItems().stream()
.map(q -> {
Question question = questions.stream().filter(tq -> tq.getId().equals(q.getId())).findFirst().get();
ExamPaperSubmitItemVM customerQuestionAnswer = examPaperSubmitVM.getAnswerItems().stream()
.filter(tq -> tq.getQuestionId().equals(q.getId()))
.findFirst()
.orElse(null);
return ExamPaperQuestionCustomerAnswerFromVM(question, customerQuestionAnswer, examPaper, q.getItemOrder(), user, now);
})
).collect(Collectors.toList());
ExamPaperAnswer examPaperAnswer = ExamPaperAnswerFromVM(examPaperSubmitVM, examPaper, examPaperQuestionCustomerAnswers, user, now);
examPaperAnswerInfo.setExamPaper(examPaper);
examPaperAnswerInfo.setExamPaperAnswer(examPaperAnswer);
examPaperAnswerInfo.setExamPaperQuestionCustomerAnswers(examPaperQuestionCustomerAnswers);
return examPaperAnswerInfo;
}
@Override
@Transactional
public String judge(ExamPaperSubmitVM examPaperSubmitVM) {
ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.selectByPrimaryKey(examPaperSubmitVM.getId());
List<ExamPaperSubmitItemVM> judgeItems = examPaperSubmitVM.getAnswerItems().stream().filter(d -> d.getDoRight() == null).collect(Collectors.toList());
List<ExamPaperAnswerUpdate> examPaperAnswerUpdates = new ArrayList<>(judgeItems.size());
Integer customerScore = examPaperAnswer.getUserScore();
Integer questionCorrect = examPaperAnswer.getQuestionCorrect();
for (ExamPaperSubmitItemVM d : judgeItems) {
ExamPaperAnswerUpdate examPaperAnswerUpdate = new ExamPaperAnswerUpdate();
examPaperAnswerUpdate.setId(d.getId());
examPaperAnswerUpdate.setCustomerScore(ExamUtil.scoreFromVM(d.getScore()));
boolean doRight = examPaperAnswerUpdate.getCustomerScore().equals(ExamUtil.scoreFromVM(d.getQuestionScore()));
examPaperAnswerUpdate.setDoRight(doRight);
examPaperAnswerUpdates.add(examPaperAnswerUpdate);
customerScore += examPaperAnswerUpdate.getCustomerScore();
if (examPaperAnswerUpdate.getDoRight()) {
++questionCorrect;
}
}
examPaperAnswer.setUserScore(customerScore);
examPaperAnswer.setQuestionCorrect(questionCorrect);
examPaperAnswer.setStatus(ExamPaperAnswerStatusEnum.Complete.getCode());
examPaperAnswerMapper.updateByPrimaryKeySelective(examPaperAnswer);
examPaperQuestionCustomerAnswerService.updateScore(examPaperAnswerUpdates);
ExamPaperTypeEnum examPaperTypeEnum = ExamPaperTypeEnum.fromCode(examPaperAnswer.getPaperType());
switch (examPaperTypeEnum) {
case Task:
//任务试卷批改完成后,需要更新任务的状态
ExamPaper examPaper = examPaperMapper.selectByPrimaryKey(examPaperAnswer.getExamPaperId());
Integer taskId = examPaper.getTaskExamId();
Integer userId = examPaperAnswer.getCreateUser();
TaskExamCustomerAnswer taskExamCustomerAnswer = taskExamCustomerAnswerMapper.getB
没有合适的资源?快使用搜索试试~ 我知道了~
Thinkphp在线考试系统是一种利用网络技术,实现在线出题、答题、阅卷、成绩查询等一系列考试活动的系统
共2000个文件
png:878个
js:414个
java:197个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 38 浏览量
2023-12-03
12:42:28
上传
评论
收藏 109.37MB ZIP 举报
温馨提示
在线考试系统是一种利用网络技术,实现在线出题、答题、阅卷、成绩查询等一系列考试活动的系统。它不受地理位置限制,可以实现远程考试,大大提高了考试的效率和便利性。此外,它还可以实现个性化考试,即根据每个考生的能力和水平,自动调整题目的难易度。在线考试系统广泛应用于各类学校、教育培训机构、企事业单位等场所。 它利用计算机技术和网络连接,允许学生或参与者在线完成考试,并且可以自动评分和反馈结果。在线考试系统通常由两个主要组成部分构成:考试管理系统和考试平台。考试管理系统用于创建和管理考试,教师或管理员可以使用该系统设置考试的时间、地点、持续时间、考试规则等,他们可以创建试题库并选择相应的试题用于考试。考试管理系统还能生成考试安排、监控考试过程并收集考试数据。考试平台是学生或参与者进行考试的在线环境,考生可以通过登录考试平台,在规定的时间内完成考试,平台提供一个用户友好的界面,展示试题和答题区域,允许考生选择答案、填写文本或上传文件等操作。一旦考试时间到达,系统会自动提交答案并计算得分。在线考试系统具有多项优点,包括提供灵活性和便利性,自动评分功能节省了人工批改的时间和成本,以及提供实时的反馈
资源推荐
资源详情
资源评论
收起资源包目录
Thinkphp在线考试系统是一种利用网络技术,实现在线出题、答题、阅卷、成绩查询等一系列考试活动的系统 (2000个子文件)
.browserslistrc 21B
.browserslistrc 21B
mvnw.cmd 5KB
index.css 414KB
index.css 414KB
index.3329b453.css 253KB
index.3329b453.css 253KB
chunk-vendors.23fc2e8f.css 239KB
chunk-vendors.23fc2e8f.css 239KB
ueditor.css 34KB
ueditor.css 34KB
ueditor.css 34KB
ueditor.min.css 34KB
ueditor.min.css 34KB
ueditor.min.css 34KB
style.664abab6.css 32KB
image.css 14KB
image.css 14KB
image.css 14KB
ui.css 9KB
ui.css 9KB
ui.css 9KB
fui.min.css 7KB
fui.min.css 7KB
fui.min.css 7KB
fui.css 7KB
fui.css 7KB
fui.css 7KB
chunk-e0529864.439404de.css 6KB
chunk-28c9e861.a43e0c22.css 6KB
chunk-e0529864.439404de.css 6KB
chunk-28c9e861.a43e0c22.css 6KB
index.a703c7b0.css 5KB
index.a703c7b0.css 5KB
chunk-29e872af.ee265b23.css 5KB
chunk-29e872af.ee265b23.css 5KB
chunk-29e872af.ee265b23.css 5KB
chunk-29e872af.ee265b23.css 5KB
chunk-vendors.ee57d822.css 3KB
chunk-vendors.ee57d822.css 3KB
chunk-e5a55b30.d650a2aa.css 3KB
chunk-e5a55b30.d650a2aa.css 3KB
codemirror.css 2KB
codemirror.css 2KB
codemirror.css 2KB
chunk-112194b2.4037e603.css 2KB
chunk-112194b2.4037e603.css 2KB
dialogbase.css 1KB
dialogbase.css 1KB
dialogbase.css 1KB
scrollbar.css 1KB
scrollbar.css 1KB
scrollbar.css 1KB
edittable.css 878B
edittable.css 878B
edittable.css 878B
chunk-6637202a.89936c18.css 846B
chunk-6637202a.89936c18.css 846B
chunk-113dc76b.b56209ba.css 712B
chunk-113dc76b.b56209ba.css 712B
webuploader.css 428B
webuploader.css 428B
webuploader.css 428B
base.css 361B
base.css 361B
base.css 361B
chunk-766c7376.ad364b97.css 260B
chunk-54cf4066.54efd6ce.css 260B
chunk-261045d2.f72e8178.css 260B
chunk-766c7376.ad364b97.css 260B
chunk-54cf4066.54efd6ce.css 260B
chunk-261045d2.f72e8178.css 260B
chunk-7f4da1fa.c8588555.css 162B
chunk-7f4da1fa.c8588555.css 162B
chunk-4f968f6e.c306629d.css 114B
chunk-c3daaaa6.c306629d.css 114B
chunk-7f29f698.c306629d.css 114B
chunk-9cf4b2a6.c306629d.css 114B
chunk-28529d14.c306629d.css 114B
chunk-42c0876a.c306629d.css 114B
chunk-7f082044.c306629d.css 114B
chunk-7af902fe.c306629d.css 114B
chunk-4423d042.c306629d.css 114B
chunk-3204336d.c306629d.css 114B
chunk-eab8a8ca.dd8c5d56.css 114B
chunk-352e2714.dd8c5d56.css 114B
chunk-1ecaf02c.dd8c5d56.css 114B
chunk-c04a81d4.dd8c5d56.css 114B
chunk-4f968f6e.c306629d.css 114B
chunk-c3daaaa6.c306629d.css 114B
chunk-7f29f698.c306629d.css 114B
chunk-9cf4b2a6.c306629d.css 114B
chunk-28529d14.c306629d.css 114B
chunk-42c0876a.c306629d.css 114B
chunk-7f082044.c306629d.css 114B
chunk-7af902fe.c306629d.css 114B
chunk-4423d042.c306629d.css 114B
chunk-3204336d.c306629d.css 114B
chunk-eab8a8ca.dd8c5d56.css 114B
chunk-352e2714.dd8c5d56.css 114B
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
瑆箫
- 粉丝: 835
- 资源: 124
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功