/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.exam.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; 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.*; 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.*; /** * 服务实现类 * * @author Chill */ @Service public class ExamPaperServiceImpl extends ServiceImpl 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 selectExamPaperPages(IPage page, ExamPaperVO exam) { return baseMapper.selectExamPaperPages(page,exam); } /** * 自定义查询 * @param page 分页条件 * @param examPaperVO 查询参数 * @return */ @Override public IPage selectExamPaperPage(IPage page, ExamPaperVO examPaperVO) { IPage examPaperVOIPage = baseMapper.selectExamPaperPage(page, examPaperVO); List 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 queryRandomSubject(ExamPaperVO paper) { // //保存题目信息 // if (null!=paper.getScoreId()){ // //查询该保安员是否为会员 // ExamScore score = examScoreService.getById(paper.getScoreId()); // TrainingRegistration trainingRegistration = trainingRegistrationService.getById(score.getApplyId()); // // List 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 list = Arrays.asList(topic.getTopicIds().split(",")); //// System.out.println("list.size() = " + list.size()); // List radio = list.subList(0, 49); // List checkbox = list.subList(50, 69); // List judge = list.subList(70, 109); // List sort = list.subList(110, 119); // //随机题目 // List radioRandomSubjectList = baseMapper.queryRandomSubjectList(radio,25); // List checkboxRandomSubjectList = baseMapper.queryRandomSubjectList(checkbox,10); // List judgeRandomSubjectList = baseMapper.queryRandomSubjectList(judge,20); // List 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 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 queryRandomSubject(ExamPaperVO paper) { //保存题目信息 if (null!=paper.getScoreId()){ //查询该保安员是否为会员 // ExamScore score = examScoreService.getById(paper.getScoreId()); List examSubjectChoicesVOS = new ArrayList<>(); examSubjectChoicesVOS = baseMapper.queryRandomSubject(paper); // long before = System.currentTimeMillis(); List 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 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 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 getTrainList(Long id) { return baseMapper.getTrainList(id); } /** * 使用考试名称匹配考试信息 * @param examName 考试名称 * @return */ @Override public List getExamInfoByExamName(String examName) { return baseMapper.getExamInfoByExamName(examName); } /** * 根据用户id查询报名信息 * @param userId 用户id * @return */ @Override public List getApplyDetail(String userId) { return baseMapper.getApplyDetail(userId); } /** * 考试中页面刷新,1查询所有的答题信息,2查询所有的已答信息 3.下一题信息 3其他信息 * @param examPaperVO 必须包含 scoreId * @return */ @Override public Map getExamRefreshInfo(ExamPaperVO examPaperVO) { if (null!=examPaperVO.getScoreId()) { Map map = new HashMap<>(4); //1.查询当前人员当前考试的考试题目信息 List examSubjectChoicesVOSList = baseMapper.getExaminationSubjectList(examPaperVO); if (examSubjectChoicesVOSList.size()==0) { examSubjectChoicesVOSList = baseMapper.queryRandomSubject(null); List list = new ArrayList<>(); examSubjectChoicesVOSList.forEach(examSubjectChoicesVO -> { //新增个人对应每场考试成绩试卷 ExamExaminationSubject ksxtSginup = new ExamExaminationSubject(); ksxtSginup.setExaminationId(examPaperVO.getScoreId()); ksxtSginup.setCategoryId(examSubjectChoicesVO.getChoicesType()); ksxtSginup.setSubjectId(examSubjectChoicesVO.getId()); //新增 list.add(ksxtSginup); //将题目答案设置为空字符串,不让前端看到 examSubjectChoicesVO.setAnswer(""); }); //批量新增 baseMapper.insertBatch(list); } //2.查询当前人员已答的题目信息 ExamAnswerRecord examAnswerRecord = new ExamAnswerRecord(); examAnswerRecord.setScoreId(examPaperVO.getScoreId()); List 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 getExamStatistics(IPage page, ExamPaperVO examPaperVO) { return page.setRecords(baseMapper.getExamStatistics(page,examPaperVO)); } /** * 根据考试id 统计查询考试信息 * @param examPaperVO * @return */ @Override public IPage getExamInfoByExamId(IPage page, ExamStatisticsVO examPaperVO) { List 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 getExamInfoByExamIdList(ExamScoreVO examScoreVO) { List 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 getExamScoreList(ExamScoreVO examScoreVO) { return baseMapper.getExamScoreList(examScoreVO); } /** * 根据id 取出题目信息(随机取) * @param list 题目id集合 * @param number 题目梳理 * @return */ @Override public List queryRandomSubjectList(List list, int number) { return baseMapper.queryRandomSubjectList(list,number); } /** * 模拟考试随机抽题,未缴费人员 * @return */ @Override public List simulateQueryRandomSubjectList() { return baseMapper.simulateQueryRandomSubjectList(); } @Override public List getList(ExamPaperVO examPaperVO) { return baseMapper.getList(examPaperVO); } @Override public ExamPaperVO getLatest(ExamPaperVO examPaperVO) { return baseMapper.getLatest(examPaperVO); } }