| | |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.mindskip.xzs.domain.*; |
| | | import com.mindskip.xzs.domain.enums.AnswerInvalidEnum; |
| | | import com.mindskip.xzs.domain.enums.ExamPaperAnswerStatusEnum; |
| | | import com.mindskip.xzs.domain.enums.ExamPaperTypeEnum; |
| | | import com.mindskip.xzs.domain.enums.QuestionTypeEnum; |
| | |
| | | import com.mindskip.xzs.domain.other.ExamPaperAnswerUpdate; |
| | | import com.mindskip.xzs.domain.other.KeyValue; |
| | | import com.mindskip.xzs.domain.task.TaskItemAnswerObject; |
| | | import com.mindskip.xzs.domain.vo.ScoreTemplatesCountVO; |
| | | import com.mindskip.xzs.domain.vo.ExamPaperDataExportVO; |
| | | import com.mindskip.xzs.domain.vo.ExamPaperDataVO; |
| | | import com.mindskip.xzs.domain.vo.ExamPaperStatisticVO; |
| | | import com.mindskip.xzs.repository.ExamPaperAnswerMapper; |
| | | import com.mindskip.xzs.repository.ExamPaperMapper; |
| | | import com.mindskip.xzs.repository.QuestionMapper; |
| | |
| | | import com.mindskip.xzs.utility.ExamUtil; |
| | | import com.mindskip.xzs.utility.JsonUtil; |
| | | import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM; |
| | | import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradeQuery; |
| | | import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitItemVM; |
| | | import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitVM; |
| | | import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Service |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Integer selectAllCount() { |
| | | return examPaperAnswerMapper.selectAllCount(); |
| | | public Integer selectAllCount(List<Integer> deptIds) { |
| | | return examPaperAnswerMapper.selectAllCount(deptIds); |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public PageInfo<ExamPaperAnswer> adminPage(com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM requestVM) { |
| | | return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "user_score desc").doSelectPageInfo(() -> |
| | | return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "create_time desc").doSelectPageInfo(() -> |
| | | examPaperAnswerMapper.adminPage(requestVM)); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<ExamPaperAnswer> getByCreatUser(ScoreTemplatesCountVO scoreTemplatesCountVO) { |
| | | return PageHelper.startPage(scoreTemplatesCountVO.getPageIndex(), scoreTemplatesCountVO.getPageSize(), "id desc").doSelectPageInfo(() -> |
| | | examPaperAnswerMapper.getByCreatUser(scoreTemplatesCountVO)); |
| | | public PageInfo<ExamPaperAnswer> getByCreatUser(ExamPaperGradeQuery query) { |
| | | query.setFullTime(); |
| | | return PageHelper.startPage(query.getPageIndex(), query.getPageSize(), "id desc").doSelectPageInfo(() -> |
| | | examPaperAnswerMapper.getByCreatUser(query)); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> statistic(ExamPaperStatisticVO examPaperStatisticVO) { |
| | | // 获取原始数据 |
| | | Map<String, Object> histogram; |
| | | ExamPaperDataExportVO examPaperDataExportVO; |
| | | if (Objects.equals(examPaperStatisticVO.getExamPaperType(), 7)) { |
| | | histogram = examPaperAnswerMapper.histogramByTemplate(examPaperStatisticVO); |
| | | examPaperDataExportVO = examPaperAnswerMapper.totalByTemplate(new ExamPaperDataVO().setId(examPaperStatisticVO.getExamPaperId()).setDeptIds(examPaperStatisticVO.getDepartmentId())); |
| | | } else { |
| | | histogram = examPaperAnswerMapper.histogram(examPaperStatisticVO); |
| | | examPaperDataExportVO = examPaperAnswerMapper.totalByPaper(new ExamPaperDataVO().setId(examPaperStatisticVO.getExamPaperId()).setDeptIds(examPaperStatisticVO.getDepartmentId())); |
| | | } |
| | | |
| | | // 不存在时填充0 |
| | | if (Objects.isNull(examPaperDataExportVO)) { |
| | | examPaperDataExportVO = new ExamPaperDataExportVO() |
| | | .setExamTotal(examPaperAnswerMapper.getExamTotal(examPaperStatisticVO)) |
| | | .setFactPeopleTotal(0) |
| | | .setAverageScore(BigDecimal.ZERO) |
| | | .setReferencePercentage(BigDecimal.ZERO); |
| | | } |
| | | |
| | | Map<String, Object> pieChart = examPaperAnswerMapper.pieChart(examPaperStatisticVO); |
| | | // 初始化结果容器 |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | List<Map<String, Object>> score = new ArrayList<>(); |
| | | List<Map<String, Object>> age = new ArrayList<>(); |
| | | List<Map<String, Object>> examPeopleNum = new ArrayList<>(); |
| | | // 处理成绩与年龄分布 |
| | | histogram.forEach((k, v) -> { |
| | | Map<String, Object> hashMap = new HashMap<>(); |
| | | hashMap.put(k, v); |
| | | if (k.contains("score")) { |
| | | score.add(hashMap); |
| | | } |
| | | if (k.contains("age")) { |
| | | age.add(hashMap); |
| | | } |
| | | }); |
| | | // 处理参考人数(出席与缺席) |
| | | pieChart.forEach((k, v) -> { |
| | | Map<String, Object> hashMap = new HashMap<>(); |
| | | hashMap.put(k, v); |
| | | if ("totalAttended".equals(k)) { |
| | | examPeopleNum.add(hashMap); |
| | | } |
| | | if ("totalAbsent".equals(k)) { |
| | | examPeopleNum.add(hashMap); |
| | | } |
| | | }); |
| | | map.put("score", score); |
| | | map.put("age", age); |
| | | map.put("examPeopleNum", examPeopleNum); |
| | | map.put("total", examPaperDataExportVO); |
| | | return map; |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Object> data(ExamPaperDataVO examPaperDataVO) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | // 随机试卷 |
| | | if (Objects.equals(examPaperDataVO.getType(), 7)) { |
| | | map.put("data", examPaperAnswerMapper.dataByTemplate(examPaperDataVO)); |
| | | map.put("total", examPaperAnswerMapper.totalByTemplate(examPaperDataVO)); |
| | | } else { |
| | | map.put("data", examPaperAnswerMapper.dataByPaper(examPaperDataVO)); |
| | | map.put("total", examPaperAnswerMapper.totalByPaper(examPaperDataVO)); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | @Override |
| | | public List<ExamPaperDataExportVO> dataExport(ExamPaperDataVO examPaperDataVO) { |
| | | // 随机试卷 |
| | | if (Objects.equals(examPaperDataVO.getType(), 7)) { |
| | | List<ExamPaperDataExportVO > dataByTemplate = examPaperAnswerMapper.dataByTemplate(examPaperDataVO); |
| | | ExamPaperDataExportVO totalByTemplate = examPaperAnswerMapper.totalByTemplate(examPaperDataVO); |
| | | dataByTemplate.add(0, totalByTemplate.setName("所有部门")); |
| | | return dataByTemplate; |
| | | } else { |
| | | List<ExamPaperDataExportVO > dataByPaper = examPaperAnswerMapper.dataByPaper(examPaperDataVO); |
| | | ExamPaperDataExportVO totalByPaper = examPaperAnswerMapper.totalByPaper(examPaperDataVO); |
| | | dataByPaper.add(0, totalByPaper.setName("所有部门")); |
| | | return dataByPaper; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void maxGrade(ExamPaperAnswer examPaperAnswer, Integer templateId) { |
| | | // 获取某一场考试曾经的最高成绩 |
| | | ExamPaperAnswer maxGrade; |
| | | if (Objects.equals(examPaperAnswer.getPaperType(), 7)) { |
| | | maxGrade = examPaperAnswerMapper.getTemplateOtherExamAnswer(examPaperAnswer, templateId); |
| | | } else { |
| | | maxGrade = examPaperAnswerMapper.getPaperOtherExamAnswer(examPaperAnswer); |
| | | } |
| | | if (Objects.isNull(maxGrade)) { |
| | | return; |
| | | } |
| | | // 本次考试分数不如之前,本次无效 |
| | | if (maxGrade.getUserScore() > examPaperAnswer.getUserScore()) { |
| | | // 之前的成绩有效 |
| | | maxGrade.setInvalid(AnswerInvalidEnum.VALID); |
| | | examPaperAnswerMapper.updateByPrimaryKeySelective(maxGrade); |
| | | // 本次的不是最高分,无效 |
| | | examPaperAnswer.setInvalid(AnswerInvalidEnum.INVALID); |
| | | examPaperAnswerMapper.updateByPrimaryKeySelective(examPaperAnswer); |
| | | } |
| | | } |
| | | |
| | | } |