智慧保安后台管理-外网项目备份
zhongrj
2023-09-17 8853292babb2ad94de4a3207966f1e83b767cd2d
src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java
@@ -16,11 +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.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.*;
/**
 * 服务实现类
@@ -30,5 +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();
   }
}