From 8853292babb2ad94de4a3207966f1e83b767cd2d Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Sun, 17 Sep 2023 16:38:34 +0800
Subject: [PATCH] 新增流程节点进程查询接口
---
src/main/java/org/springblade/modules/simulateexam/service/impl/SimulateExamRecordServiceImpl.java | 316 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 314 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/springblade/modules/simulateexam/service/impl/SimulateExamRecordServiceImpl.java b/src/main/java/org/springblade/modules/simulateexam/service/impl/SimulateExamRecordServiceImpl.java
index e1c66c5..19b9c38 100644
--- a/src/main/java/org/springblade/modules/simulateexam/service/impl/SimulateExamRecordServiceImpl.java
+++ b/src/main/java/org/springblade/modules/simulateexam/service/impl/SimulateExamRecordServiceImpl.java
@@ -3,16 +3,39 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.redisson.misc.Hash;
+import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.support.Condition;
+import org.springblade.modules.apply.entity.Apply;
+import org.springblade.modules.exam.entity.ExamAnswerRecord;
+import org.springblade.modules.exam.entity.ExamPaper;
+import org.springblade.modules.exam.entity.ExamScore;
+import org.springblade.modules.exam.entity.ExamSubjectChoices;
+import org.springblade.modules.exam.service.ExamPaperService;
+import org.springblade.modules.exam.service.ExamSubjectChoicesService;
+import org.springblade.modules.exam.vo.ExamResultVO;
+import org.springblade.modules.exam.vo.ExamSubjectChoicesVO;
+import org.springblade.modules.simulateexam.entity.SimulateExamAnswerRecord;
import org.springblade.modules.simulateexam.entity.SimulateExamRecord;
import org.springblade.modules.simulateexam.mapper.SimulateExamRecordMapper;
+import org.springblade.modules.simulateexam.service.SimulateExamAnswerRecordService;
import org.springblade.modules.simulateexam.service.SimulateExamRecordService;
import org.springblade.modules.simulateexam.vo.SimulateExamRecordVO;
+import org.springblade.modules.simulateexam.vo.SimulateExamScoreVO;
+import org.springblade.modules.system.entity.User;
+import org.springblade.modules.system.service.IUserService;
+import org.springblade.modules.system.vo.UserVO;
import org.springblade.modules.training.entity.TrainingRegistration;
+import org.springblade.modules.vip.entity.VipTopic;
+import org.springblade.modules.vip.service.UserVipService;
+import org.springblade.modules.vip.service.VipTopicService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.Date;
-import java.util.List;
+import java.lang.reflect.Array;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* 模拟考试记录服务实现类
@@ -23,6 +46,23 @@
@Service
public class SimulateExamRecordServiceImpl extends ServiceImpl<SimulateExamRecordMapper, SimulateExamRecord> implements SimulateExamRecordService {
+ @Autowired
+ private ExamSubjectChoicesService examSubjectChoicesService;
+
+ @Autowired
+ private VipTopicService vipTopicService;
+
+ @Autowired
+ private UserVipService userVipService;
+
+ @Autowired
+ private IUserService userService;
+
+ @Autowired
+ private ExamPaperService examPaperService;
+
+ @Autowired
+ private SimulateExamAnswerRecordService simulateExamAnswerRecordService;
/**
* 自定义分页查询模拟考试记录数据
@@ -34,4 +74,276 @@
public IPage<SimulateExamRecordVO> selectSimulateExamRecordPage(IPage<SimulateExamRecordVO> page, SimulateExamRecordVO simulateExamRecord) {
return page.setRecords(baseMapper.selectSimulateExamRecordPage(page, simulateExamRecord));
}
+
+// /**
+// * 首次点击开始考试,创建模拟考试,并返回考试
+// * @param simulateExamRecord 模拟考试记录对象信息
+// * @return
+// */
+// @Override
+// public Object insertSimulateExamRecord(SimulateExamRecord simulateExamRecord) {
+// //创建返回信息map
+// Map<String, Object> map = new HashMap<>();
+// //使用身份证号码匹配人员信息(user_id)
+// User user = new User();
+// user.setIsDeleted(0);
+// user.setStatus(1);
+// user.setCardid(simulateExamRecord.getIdCardNo());
+// List<User> list = userService.list(Condition.getQueryWrapper(user));
+// List<ExamSubjectChoicesVO> choicesVOList = new ArrayList<>();
+// boolean status = false;
+// if (list.size()>0){
+// User user1 = list.get(0);
+// //查询当前人员是否已缴费
+// VipTopic vipTopic = new VipTopic();
+// vipTopic.setUserId(user1.getId());
+// VipTopic topic = vipTopicService.getOne(Condition.getQueryWrapper(vipTopic));
+// //从当前人员考试题库随机取60题存入
+// if (null!=topic){
+// List<String> list1 = Arrays.asList(topic.getTopicIds().split(","));
+// //获取随机的题目
+// List<String> radio = list1.subList(0, 49);
+// List<String> checkbox = list1.subList(50, 69);
+// List<String> judge = list1.subList(70, 109);
+// List<String> sort = list1.subList(110, 119);
+// //随机题目
+// List<ExamSubjectChoicesVO> radioRandomSubjectList = examPaperService.queryRandomSubjectList(radio,25);
+// List<ExamSubjectChoicesVO> checkboxRandomSubjectList = examPaperService.queryRandomSubjectList(checkbox,10);
+// List<ExamSubjectChoicesVO> judgeRandomSubjectList = examPaperService.queryRandomSubjectList(judge,20);
+// List<ExamSubjectChoicesVO> sortRandomSubjectList = examPaperService.queryRandomSubjectList(sort,5);
+//
+// //合并集合数据
+// choicesVOList.addAll(radioRandomSubjectList);
+// choicesVOList.addAll(checkboxRandomSubjectList);
+// choicesVOList.addAll(judgeRandomSubjectList);
+// choicesVOList.addAll(sortRandomSubjectList);
+// }else {
+// //未缴费人员从大题库随机抽取100道题目
+// choicesVOList = examPaperService.simulateQueryRandomSubjectList();
+// }
+// //取出考试id
+// List<Long> longList = choicesVOList.stream().map(ExamSubjectChoicesVO::getId).collect(Collectors.toList());
+// //装换为字符串
+// List<String> list2 = new ArrayList<>();
+// for (Long aLong : longList) {
+// list2.add(aLong.toString());
+// }
+// String collect = list2.stream().collect(Collectors.joining(","));
+// //设置题目信息
+// simulateExamRecord.setSubjectIds(collect);
+// simulateExamRecord.setStartTime(new Date());
+// //考试剩余时长初始值为90分钟
+// simulateExamRecord.setAnswerTime(90*60*1000L);
+// //考试中,开始计时
+// simulateExamRecord.setStatus(1);
+// //新增模拟考试记录信息
+// status = this.save(simulateExamRecord);
+//
+//// ExamSubjectChoices examSubjectChoices = new ExamSubjectChoices();
+//// examSubjectChoices.setId(choicesVOList.get(0).getId());
+//// ExamSubjectChoicesVO examSubjectChoicesVO = examSubjectChoicesService.selectExamSubjectChoicesInfo(examSubjectChoices);
+// if (status){
+// map.put("simulateExamRecord",simulateExamRecord);
+// map.put("examSubjectInfo",choicesVOList);
+//// map.put("examSubjectChoicesVO",examSubjectChoicesVO);
+// //返回信息
+// return map;
+// }
+// }else {
+// throw new ServiceException("未查询到该人员信息");
+// }
+// //返回数据
+// return map;
+// }
+
+
+ /**
+ * 首次点击开始考试,创建模拟考试,并返回考试
+ * @param simulateExamRecord 模拟考试记录对象信息
+ * @return
+ */
+ @Override
+ public Object insertSimulateExamRecord(SimulateExamRecord simulateExamRecord) {
+ //创建返回信息map
+ Map<String, Object> map = new HashMap<>();
+ //使用身份证号码匹配人员信息(user_id)
+ User user = new User();
+ user.setIsDeleted(0);
+ user.setStatus(1);
+ user.setCardid(simulateExamRecord.getIdCardNo());
+ List<User> list = userService.list(Condition.getQueryWrapper(user));
+ List<ExamSubjectChoicesVO> choicesVOList = new ArrayList<>();
+ boolean status = false;
+ if (list.size()>0){
+ User user1 = list.get(0);
+ //从大题库随机抽取100道题目
+ choicesVOList = examPaperService.simulateQueryRandomSubjectList();
+ //取出考试id
+ List<Long> longList = choicesVOList.stream().map(ExamSubjectChoicesVO::getId).collect(Collectors.toList());
+ //装换为字符串
+ List<String> list2 = new ArrayList<>();
+ for (Long aLong : longList) {
+ list2.add(aLong.toString());
+ }
+ String collect = list2.stream().collect(Collectors.joining(","));
+ //设置题目信息
+ simulateExamRecord.setSubjectIds(collect);
+ simulateExamRecord.setStartTime(new Date());
+ //考试剩余时长初始值为90分钟
+ simulateExamRecord.setAnswerTime(90*60*1000L);
+ //考试中,开始计时
+ simulateExamRecord.setStatus(1);
+ //新增模拟考试记录信息
+ status = this.save(simulateExamRecord);
+
+ if (status){
+ map.put("simulateExamRecord",simulateExamRecord);
+ map.put("examSubjectInfo",choicesVOList);
+// map.put("examSubjectChoicesVO",examSubjectChoicesVO);
+ //返回信息
+ return map;
+ }
+ }else {
+ throw new ServiceException("未查询到该人员信息");
+ }
+ //返回数据
+ return map;
+ }
+
+ /**
+ * 暂停模拟考试
+ * @param simulateExamRecord
+ * @return
+ */
+ @Override
+ public Object pauseExam(SimulateExamRecord simulateExamRecord) {
+ simulateExamRecord.setStatus(2);
+ //计算时长
+ return this.updateById(simulateExamRecord);
+ }
+
+ /**
+ * 模拟考试开始页面,查询是否有暂停中的模拟考试
+ * @param simulateExamRecord 模拟考试记录对象信息(必须包含 idCardNo)
+ * @return
+ */
+ @Override
+ public Object getSimulateExamRecordInfo(SimulateExamRecord simulateExamRecord) {
+ simulateExamRecord.setStatus(2);
+ return this.getOne(Condition.getQueryWrapper(simulateExamRecord));
+ }
+
+ /**
+ * 考试暂停后继续,1查询所有的答题信息,2查询所有的已答信息 3其他信息
+ * @param simulateExamRecord 必须包含 模拟考试id,, type 1: 继续考试 2: 放弃之前的考试,重新生成题目考试
+ * @return
+ */
+ @Override
+ public Object getSimulateExamRefreshInfo(SimulateExamRecordVO simulateExamRecord) {
+ if (null!=simulateExamRecord.getId()) {
+ Map<String, Object> map = new HashMap<>();
+ //1. 继续考试
+ if (simulateExamRecord.getType().equals(1)){
+ //其他信息
+ SimulateExamRecord simulateExamRecord1 = this.getById(simulateExamRecord.getId());
+ List<String> list = Arrays.asList(simulateExamRecord1.getSubjectIds().split(","));
+ List<Long> list1 = new ArrayList<>();
+ //装换为Long 类型,不然返回的题目顺序会乱
+ for (String s : list) {
+ list1.add(Long.parseLong(s));
+ }
+
+ //修改信息,修改回考试中的状态
+ simulateExamRecord1.setStatus(1);
+ this.updateById(simulateExamRecord1);
+
+ //1.查询当前人员当前模拟考试的考试题目信息
+ List<ExamSubjectChoicesVO> examSubjectChoicesVOSList = baseMapper.getSimulateExamRefreshList(list1);
+
+ //2.查询当前人员已答的题目信息
+ SimulateExamAnswerRecord simulateExamAnswerRecord = new SimulateExamAnswerRecord();
+ simulateExamAnswerRecord.setSimulateExamId(simulateExamRecord.getId());
+ List<SimulateExamAnswerRecord> simulateExamAnswerRecordList = simulateExamAnswerRecordService.list(Condition.getQueryWrapper(simulateExamAnswerRecord));
+
+ //3.查询正在答题的信息
+ int count = simulateExamAnswerRecordList.size();
+ //查询下一题题目信息
+ ExamSubjectChoicesVO examSubjectChoicesVO = new ExamSubjectChoicesVO();
+ ExamSubjectChoices examSubjectChoices = new ExamSubjectChoices();
+ if (count>0) {
+ examSubjectChoices.setId(examSubjectChoicesVOSList.get(count).getId());
+ examSubjectChoicesVO = examSubjectChoicesService.selectExamSubjectChoicesInfo(examSubjectChoices);
+ }
+ if (count==0) {
+ examSubjectChoices.setId(examSubjectChoicesVOSList.get(0).getId());
+ examSubjectChoicesVO = examSubjectChoicesService.selectExamSubjectChoicesInfo(examSubjectChoices);
+ }
+
+ //5.数据封装
+ map.put("simulateExamRecord",simulateExamRecord1);
+ map.put("examSubjectInfo",examSubjectChoicesVOSList);
+ map.put("simulateExamAnswerRecordList",simulateExamAnswerRecordList);
+ map.put("examSubjectChoicesVO",examSubjectChoicesVO);
+
+ //6.返回数据
+ return map;
+ }
+
+ //2. 放弃之前的考试,重新获取题目返回
+ if (simulateExamRecord.getType().equals(2)){
+ SimulateExamRecord examRecord = this.getById(simulateExamRecord.getId());
+ //修改当前模拟考试状态为废弃
+ examRecord.setStatus(4);
+ //修改信息
+ this.updateById(examRecord);
+ //重新获取题目
+ SimulateExamRecord simulateExamRecord1 = new SimulateExamRecord();
+ simulateExamRecord1.setIdCardNo(examRecord.getIdCardNo());
+ //去获取题目
+ return insertSimulateExamRecord(simulateExamRecord1);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 提交考试
+ * @param simulateExamScore 模拟考试成绩信息对象
+ * @return
+ */
+ @Override
+ public Object saveSimulateExam(SimulateExamScoreVO simulateExamScore) {
+ //取出考试结果
+ if (simulateExamScore.getExamResultVOS().size() > 0) {
+ List<ExamResultVO> examResultVOS = simulateExamScore.getExamResultVOS();
+ //查询模拟考试信息
+ SimulateExamRecord simulateExamRecord = this.getById(simulateExamScore.getSimulateExamId());
+ int count = 0;
+ //计算考试得分,并存入考试答题记录
+ for (ExamResultVO examResultVO : examResultVOS) {
+ SimulateExamAnswerRecord answerRecord = new SimulateExamAnswerRecord();
+ answerRecord.setSimulateExamId(simulateExamScore.getSimulateExamId());
+ answerRecord.setSubjectChoicesId(examResultVO.getSubjectChoicesId());
+ answerRecord.setAnswerOption(examResultVO.getValue());
+ answerRecord.setAnswerScore(examResultVO.getGrade());
+ if (examResultVO.getGrade() > 0) {
+ answerRecord.setAnswerResult(1);
+ } else {
+ answerRecord.setAnswerResult(2);
+ }
+ count = count + examResultVO.getGrade();
+ answerRecord.setAnswerTime(new Date());
+ //新增
+ simulateExamAnswerRecordService.save(answerRecord);
+ }
+ //设置总分
+ simulateExamRecord.setScore(count);
+ //更新模拟考试信息
+ this.updateById(simulateExamRecord);
+ //返回
+ return true;
+ }
+ //返回结果
+ return false;
+ }
}
--
Gitblit v1.9.3