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 |  389 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 384 insertions(+), 5 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 dde57a4..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
@@ -16,13 +16,26 @@
  */
 package org.springblade.modules.exam.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springblade.modules.exam.entity.ExamPaper;
+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.ExamPaperSubjectVO;
-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.*;
 
 /**
  * 服务实现类
@@ -32,11 +45,377 @@
 @Service
 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> 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