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/exam/service/impl/ExamPaperServiceImpl.java | 398 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 388 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java b/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java
index d4f0a0b..f68e219 100644
--- a/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java
+++ b/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java
@@ -17,13 +17,25 @@
package org.springblade.modules.exam.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.modules.exam.entity.ExamPaper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import liquibase.pro.packaged.L;
+import org.springblade.common.utils.TimeSwitchUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.modules.apply.entity.Apply;
+import org.springblade.modules.exam.entity.*;
import org.springblade.modules.exam.mapper.ExamPaperMapper;
-import org.springblade.modules.exam.service.ExamPaperService;
-import org.springblade.modules.exam.vo.ExamPaperVO;
+import org.springblade.modules.exam.service.*;
+import org.springblade.modules.exam.vo.*;
+import org.springblade.modules.training.entity.TrainingRegistration;
+import org.springblade.modules.training.service.TrainingRegistrationService;
+import org.springblade.modules.vip.entity.VipTopic;
+import org.springblade.modules.vip.service.VipTopicService;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
/**
* 服务实现类
@@ -31,13 +43,379 @@
* @author Chill
*/
@Service
-public class ExamPaperServiceImpl extends BaseServiceImpl<ExamPaperMapper, ExamPaper> implements ExamPaperService {
+public class ExamPaperServiceImpl extends ServiceImpl<ExamPaperMapper, ExamPaper> implements ExamPaperService {
+
+ @Autowired
+ private VipTopicService vipTopicService;
+
+ @Autowired
+ private ExamAnswerRecordService examAnswerRecordService;
+
+ @Autowired
+ private ExamSubjectChoicesService examSubjectChoicesService;
+
+ @Autowired
+ private ExamScoreService examScoreService;
+
+ @Autowired
+ private TrainingRegistrationService trainingRegistrationService;
+
+
@Override
- public IPage<ExamPaperVO> selectExamPaperPage(IPage<ExamPaperVO> page, ExamPaperVO exam) {
- // 若不使用mybatis-plus自带的分页方法,则不会自动带入tenantId,所以我们需要自行注入
- exam.setTenantId(AuthUtil.getTenantId());
- return page.setRecords(baseMapper.selectNoticePage(page, exam));
+ public IPage<ExamPaperVO> selectExamPaperPages(IPage<ExamScoreVO> page, ExamPaperVO exam) {
+ return baseMapper.selectExamPaperPages(page,exam);
}
+
+ /**
+ * 自定义查询
+ * @param page 分页条件
+ * @param examPaperVO 查询参数
+ * @return
+ */
+ @Override
+ public IPage<ExamPaperVO> selectExamPaperPage(IPage<ExamScoreVO> page, ExamPaperVO examPaperVO) {
+ IPage<ExamPaperVO> examPaperVOIPage = baseMapper.selectExamPaperPage(page, examPaperVO);
+ List<ExamPaperVO> records = examPaperVOIPage.getRecords();
+ records.forEach(examPaperVO1 -> {
+ //查询每个考试的报名人员数量
+ if (examPaperVO1.getExamType()==1) {
+ examPaperVO1.setNum(baseMapper.getApplyNumber(examPaperVO1));
+ }
+ //模拟考试
+ if (examPaperVO1.getExamType()==2) {
+ examPaperVO1.setNum(baseMapper.getTrainNumber(examPaperVO1));
+ examPaperVO1.setExamNum(baseMapper.getExamNumber(examPaperVO1));
+ //计算截止时间
+ long nowTime = System.currentTimeMillis();
+ long examStartTime = examPaperVO1.getStartTime().getTime();
+ long examEndTime = examPaperVO1.getEndTime().getTime();
+ //判断时间
+ if (nowTime-examEndTime>0){
+ //剩余时间大于1天
+ examPaperVO1.setDeadline("考试已结束");
+ }else if(nowTime-examStartTime>=0 && nowTime-examEndTime<=0){
+ //已到考试时间
+ examPaperVO1.setDeadline("已到考试时间");
+ }else {
+ long time = examStartTime - nowTime;
+ examPaperVO1.setDeadline(TimeSwitchUtil.secondToTime(time));
+ }
+ }
+ });
+ return examPaperVOIPage;
+ }
+
+ @Override
+ public ExamPaperSubjectVO queryPagerSubject(ExamPaper paper) {
+ //查询试卷分类信息
+ return baseMapper.queryPagerSubject(paper);
+ }
+
+// @Override
+// public List<ExamSubjectChoicesVO> queryRandomSubject(ExamPaperVO paper) {
+// //保存题目信息
+// if (null!=paper.getScoreId()){
+// //查询该保安员是否为会员
+// ExamScore score = examScoreService.getById(paper.getScoreId());
+// TrainingRegistration trainingRegistration = trainingRegistrationService.getById(score.getApplyId());
+//
+// List<ExamSubjectChoicesVO> examSubjectChoicesVOS = new ArrayList<>();
+// if (null!=trainingRegistration.getVipStatus()){
+// //如果是会员,从会员库里取题目
+// if (trainingRegistration.getVipStatus().equals(1)){
+// //查询该vip 用户的 vip 库,从该120题中取出题目
+// VipTopic vipTopic = new VipTopic();
+// vipTopic.setUserId(Long.parseLong(score.getUserId()));
+//// vipTopic.setApplyId(score.getApplyId());
+// VipTopic topic = vipTopicService.getOne(Condition.getQueryWrapper(vipTopic));
+// if (null!=topic){
+// List<String> list = Arrays.asList(topic.getTopicIds().split(","));
+//// System.out.println("list.size() = " + list.size());
+// List<String> radio = list.subList(0, 49);
+// List<String> checkbox = list.subList(50, 69);
+// List<String> judge = list.subList(70, 109);
+// List<String> sort = list.subList(110, 119);
+// //随机题目
+// List<ExamSubjectChoicesVO> radioRandomSubjectList = baseMapper.queryRandomSubjectList(radio,25);
+// List<ExamSubjectChoicesVO> checkboxRandomSubjectList = baseMapper.queryRandomSubjectList(checkbox,10);
+// List<ExamSubjectChoicesVO> judgeRandomSubjectList = baseMapper.queryRandomSubjectList(judge,20);
+// List<ExamSubjectChoicesVO> sortRandomSubjectList = baseMapper.queryRandomSubjectList(sort,5);
+// //合并集合数据
+// examSubjectChoicesVOS.addAll(radioRandomSubjectList);
+// examSubjectChoicesVOS.addAll(checkboxRandomSubjectList);
+// examSubjectChoicesVOS.addAll(judgeRandomSubjectList);
+// examSubjectChoicesVOS.addAll(sortRandomSubjectList);
+// }
+// }else {
+// //随机分类信息
+// examSubjectChoicesVOS = baseMapper.queryRandomSubject(paper);
+// }
+// }else {
+// //随机分类信息
+// examSubjectChoicesVOS = baseMapper.queryRandomSubject(paper);
+// }
+//// long before = System.currentTimeMillis();
+// List<ExamExaminationSubject> list = new ArrayList<>();
+// examSubjectChoicesVOS.forEach(examSubjectChoicesVO -> {
+// //新增个人对应每场考试成绩试卷
+// ExamExaminationSubject ksxtSginup = new ExamExaminationSubject();
+// ksxtSginup.setExaminationId(paper.getScoreId());
+// ksxtSginup.setCategoryId(examSubjectChoicesVO.getChoicesType());
+// ksxtSginup.setSubjectId(examSubjectChoicesVO.getId());
+// //新增
+//// examExaminationSubjectService.save(ksxtSginup);
+// list.add(ksxtSginup);
+// //将题目答案设置为空字符串,不让前端看到
+// examSubjectChoicesVO.setAnswer("");
+// });
+// //批量新增
+// baseMapper.insertBatch(list);
+//// long after = System.currentTimeMillis();
+//// System.out.println("时间差"+(after-before));
+// //新增试卷关联信息
+// return examSubjectChoicesVOS;
+// }
+// //返回
+// return null;
+// }
+
+
+ @Override
+ public List<ExamSubjectChoicesVO> queryRandomSubject(ExamPaperVO paper) {
+ //保存题目信息
+ if (null!=paper.getScoreId()){
+ //查询该保安员是否为会员
+// ExamScore score = examScoreService.getById(paper.getScoreId());
+ List<ExamSubjectChoicesVO> examSubjectChoicesVOS = new ArrayList<>();
+ examSubjectChoicesVOS = baseMapper.queryRandomSubject(paper);
+// long before = System.currentTimeMillis();
+ List<ExamExaminationSubject> list = new ArrayList<>();
+ examSubjectChoicesVOS.forEach(examSubjectChoicesVO -> {
+ //新增个人对应每场考试成绩试卷
+ ExamExaminationSubject ksxtSginup = new ExamExaminationSubject();
+ ksxtSginup.setExaminationId(paper.getScoreId());
+ ksxtSginup.setCategoryId(examSubjectChoicesVO.getChoicesType());
+ ksxtSginup.setSubjectId(examSubjectChoicesVO.getId());
+ //新增
+// examExaminationSubjectService.save(ksxtSginup);
+ list.add(ksxtSginup);
+ //将题目答案设置为空字符串,不让前端看到
+ examSubjectChoicesVO.setAnswer("");
+ });
+ //批量新增
+ baseMapper.insertBatch(list);
+ //新增试卷关联信息
+ return examSubjectChoicesVOS;
+ }
+ //返回
+ return null;
+ }
+
+ @Override
+ public ExamPaperSubjectVO PagerSubject(ExamPaper paper) {
+ //查询试卷分类信息
+ return baseMapper.PagerSubject(paper);
+ }
+
+ /**
+ * 自定义树
+ * @param examPaper 试卷对象
+ * @return
+ */
+ @Override
+ public List<ExamPaper> selectExamPaperPageTree(ExamPaper examPaper) {
+ return baseMapper.selectExamPaperPageTree(examPaper);
+ }
+
+ @Override
+ public boolean UnbindSubject(String paperid, String subjectid) {
+ return baseMapper.UnbindSubject(paperid,subjectid);
+ }
+
+
+ /**
+ * 查询考生考试信息
+ * @param examPaper 用户id
+ * @return
+ */
+ @Override
+ public List<ExamPaperVO> getExamDetail(ExamPaperVO examPaper) {
+ //查询考试信息
+ return baseMapper.getExamDetail(examPaper);
+ }
+
+ /**
+ * 查询是当前前缀已生成准考证号码最大的一位
+ * @param result 前缀
+ * @return
+ */
+ @Override
+ public int getCandidateNoCount(String result) {
+ return baseMapper.getCandidateNoCount(result);
+ }
+
+ /**
+ * 查询当前考试已报名的人员培训报名数据集合
+ * @param id 考试id
+ * @return
+ */
+ @Override
+ public List<TrainingRegistration> getTrainList(Long id) {
+ return baseMapper.getTrainList(id);
+ }
+
+ /**
+ * 使用考试名称匹配考试信息
+ * @param examName 考试名称
+ * @return
+ */
+ @Override
+ public List<ExamPaper> getExamInfoByExamName(String examName) {
+ return baseMapper.getExamInfoByExamName(examName);
+ }
+
+ /**
+ * 根据用户id查询报名信息
+ * @param userId 用户id
+ * @return
+ */
+ @Override
+ public List<Apply> getApplyDetail(String userId) {
+ return baseMapper.getApplyDetail(userId);
+ }
+
+ /**
+ * 考试中页面刷新,1查询所有的答题信息,2查询所有的已答信息 3.下一题信息 3其他信息
+ * @param examPaperVO 必须包含 scoreId
+ * @return
+ */
+ @Override
+ public Map<String, Object> getExamRefreshInfo(ExamPaperVO examPaperVO) {
+ if (null!=examPaperVO.getScoreId()) {
+ Map<String, Object> map = new HashMap<>(4);
+ //1.查询当前人员当前考试的考试题目信息
+ List<ExamSubjectChoicesVO> examSubjectChoicesVOSList = baseMapper.getExaminationSubjectList(examPaperVO);
+
+ //2.查询当前人员已答的题目信息
+ ExamAnswerRecord examAnswerRecord = new ExamAnswerRecord();
+ examAnswerRecord.setScoreId(examPaperVO.getScoreId());
+ List<ExamAnswerRecord> examAnswerRecordList = examAnswerRecordService.list(Condition.getQueryWrapper(examAnswerRecord));
+
+ //3.查询正在答题的信息
+ int count = examAnswerRecordList.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);
+ }
+
+ //4.其他信息
+ ExamScore examScore = examScoreService.getById(examPaperVO.getScoreId());
+
+ //5.数据封装
+ map.put("examSubjectChoicesVOSList",examSubjectChoicesVOSList);
+ map.put("examAnswerRecordList",examAnswerRecordList);
+ map.put("examSubjectChoicesVO",examSubjectChoicesVO);
+ map.put("examScore",examScore);
+
+ //6.返回数据
+ return map;
+ }
+ return null;
+ }
+
+
+ /**
+ * 查询考试统计信息
+ * @param examPaperVO
+ * @param page
+ * @return
+ */
+ @Override
+ public IPage<ExamStatisticsVO> getExamStatistics(IPage<ExamStatisticsVO> page, ExamPaperVO examPaperVO) {
+ return page.setRecords(baseMapper.getExamStatistics(page,examPaperVO));
+ }
+
+ /**
+ * 根据考试id 统计查询考试信息
+ * @param examPaperVO
+ * @return
+ */
+ @Override
+ public IPage<ExamStatisticsVO> getExamInfoByExamId(IPage<ExamStatisticsVO> page, ExamStatisticsVO examPaperVO) {
+ List<ExamStatisticsVO> statisticsVOS = baseMapper.getExamInfoByExamId(page, examPaperVO);
+ //遍历,计算占比
+ if (statisticsVOS.size()>0){
+ statisticsVOS.forEach(examStatisticsVO -> {
+ //格式化小数
+ DecimalFormat df = new DecimalFormat("0.00");
+ //返回的是String类型
+ examStatisticsVO.setAbsentProportion(df.format((float)examStatisticsVO.getQknum()/examStatisticsVO.getZnum()*100));
+ DecimalFormat df1 = new DecimalFormat("0.00");
+ examStatisticsVO.setQualifiedProportion(df1.format((float)examStatisticsVO.getYknum()/examStatisticsVO.getZnum()*100));
+ });
+ }
+ return page.setRecords(statisticsVOS);
+ }
+
+ /**
+ * 根据考试id 统计查询考试信息
+ * @param examScoreVO
+ * @return
+ */
+ @Override
+ public List<ExamStatisticsVO> getExamInfoByExamIdList(ExamScoreVO examScoreVO) {
+ List<ExamStatisticsVO> statisticsVOS = baseMapper.getExamInfoByExamIdList(examScoreVO);
+ //遍历,计算占比
+ if (statisticsVOS.size()>0){
+ statisticsVOS.forEach(examStatisticsVO -> {
+ //格式化小数
+ DecimalFormat df = new DecimalFormat("0.00");
+ //返回的是String类型
+ examStatisticsVO.setAbsentProportion(df.format((float)examStatisticsVO.getQknum()/examStatisticsVO.getZnum()*100));
+ DecimalFormat df1 = new DecimalFormat("0.00");
+ examStatisticsVO.setQualifiedProportion(df1.format((float)examStatisticsVO.getYknum()/examStatisticsVO.getZnum()*100));
+ });
+ }
+ return statisticsVOS;
+ }
+
+ /**
+ * 查询考试成绩明细
+ * @param examScoreVO
+ * @return
+ */
+ @Override
+ public List<ExamScoreVO> getExamScoreList(ExamScoreVO examScoreVO) {
+ return baseMapper.getExamScoreList(examScoreVO);
+ }
+
+
+ /**
+ * 根据id 取出题目信息(随机取)
+ * @param list 题目id集合
+ * @param number 题目梳理
+ * @return
+ */
+ @Override
+ public List<ExamSubjectChoicesVO> queryRandomSubjectList(List<String> list, int number) {
+ return baseMapper.queryRandomSubjectList(list,number);
+ }
+
+ /**
+ * 模拟考试随机抽题,未缴费人员
+ * @return
+ */
+ @Override
+ public List<ExamSubjectChoicesVO> simulateQueryRandomSubjectList() {
+ return baseMapper.simulateQueryRandomSubjectList();
+ }
}
--
Gitblit v1.9.3