/*
|
* 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<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();
|
}
|
}
|