|
@@ -0,0 +1,407 @@
|
|
|
|
+package com.qmth.distributed.print.upgrade;
|
|
|
|
+
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.qmth.boot.data.upgrade.annotation.DataUpgradeVersion;
|
|
|
|
+import com.qmth.boot.data.upgrade.service.DataUpgradeService;
|
|
|
|
+import com.qmth.boot.data.upgrade.utils.ResourceFileHelper;
|
|
|
|
+import com.qmth.teachcloud.common.bean.dto.mark.PictureConfig;
|
|
|
|
+import com.qmth.teachcloud.common.entity.MarkQuestion;
|
|
|
|
+import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
|
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.MarkQuestionAnswerVo;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkerScoreDTO;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.TaskQuestion;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.TrackDTO;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.score.SheetUrlDto;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.score.StudentObjectiveAnswerDto;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.score.StudentPaperDetailDto;
|
|
|
|
+import com.qmth.teachcloud.mark.entity.*;
|
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
|
+
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.io.FileInputStream;
|
|
|
|
+import java.io.FileNotFoundException;
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.function.Function;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+@DataUpgradeVersion("3.4.4")
|
|
|
|
+public class DataUpgrade_3_4_4 implements DataUpgradeService {
|
|
|
|
+
|
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(DataUpgrade_3_4_4.class);
|
|
|
|
+
|
|
|
|
+ // 一页1000条
|
|
|
|
+ private static int PAGE_SIZE = 500;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void process(JdbcTemplate jdbcTemplate) {
|
|
|
|
+ log.info("process...");
|
|
|
|
+ // 执行升级脚本
|
|
|
|
+// this.execUpgradeSql(jdbcTemplate);
|
|
|
|
+
|
|
|
|
+ // 执行历史数据归档
|
|
|
|
+// this.execDataArchive(jdbcTemplate);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void execDataArchive(JdbcTemplate jdbcTemplate) {
|
|
|
|
+ // 用户数据
|
|
|
|
+ Map<Long, SysUser> sysUserMap = this.mapSysUserSql(jdbcTemplate);
|
|
|
|
+
|
|
|
|
+ List<MarkPaper> markPaperList = this.listMarkPaper(jdbcTemplate);
|
|
|
|
+ for (MarkPaper markPaper : markPaperList) {
|
|
|
|
+ Long examId = markPaper.getExamId();
|
|
|
|
+ String paperNumber = markPaper.getPaperNumber();
|
|
|
|
+ List<MarkStudent> markStudentList = this.listMarkStudent(jdbcTemplate, examId, paperNumber);
|
|
|
|
+ // 客观题数据
|
|
|
|
+ Map<String, List<MarkQuestionAnswerVo>> objectiveQuestionMap = this.mapObjectiveMarkQuestion(jdbcTemplate, examId, paperNumber);
|
|
|
|
+ // 主观题数据
|
|
|
|
+ List<MarkQuestion> markQuestionList = this.listSubjectiveMarkQuestionSql(jdbcTemplate, examId, paperNumber);
|
|
|
|
+
|
|
|
|
+ for (MarkStudent markStudent : markStudentList) {
|
|
|
|
+ MarkArchiveStudent markArchiveStudent = new MarkArchiveStudent();
|
|
|
|
+ markArchiveStudent.setStudentId(markStudent.getId());
|
|
|
|
+ markArchiveStudent.setExamId(examId);
|
|
|
|
+ markArchiveStudent.setPaperNumber(paperNumber);
|
|
|
|
+ markArchiveStudent.setBasicStudentId(markStudent.getBasicStudentId());
|
|
|
|
+ markArchiveStudent.setStudentCode(markStudent.getStudentCode());
|
|
|
|
+ markArchiveStudent.setSheetUrls(buildSheetUrls(jdbcTemplate, markStudent));
|
|
|
|
+ markArchiveStudent.setSubjectiveQuestions(buildSubjectiveQuestions(jdbcTemplate, markStudent, markQuestionList, sysUserMap));
|
|
|
|
+ markArchiveStudent.setObjectiveQuestions(buildObjectiveQuestions(objectiveQuestionMap, markStudent));
|
|
|
|
+ markArchiveStudent.setCardContent(getCardContent(jdbcTemplate, markStudent));
|
|
|
|
+ markArchiveStudent.setCreateTime(System.currentTimeMillis());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 电子卡格式信息
|
|
|
|
+ */
|
|
|
|
+ private String getCardContent(JdbcTemplate jdbcTemplate, MarkStudent markStudent) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 客观题信息
|
|
|
|
+ */
|
|
|
|
+ private String buildObjectiveQuestions(Map<String, List<MarkQuestionAnswerVo>> objectiveQuestionMap, MarkStudent markStudent) {
|
|
|
|
+ List<String> answers = markStudent.getAnswerList();
|
|
|
|
+ List<String> answerScores = markStudent.getAnswerScoreList();
|
|
|
|
+ List<MarkQuestionAnswerVo> questions = objectiveQuestionMap.get(markStudent.getPaperType());
|
|
|
|
+ int questionCount = questions.size();
|
|
|
|
+ int answerCount = answers.size();
|
|
|
|
+ int answerScoreCount = answerScores.size();
|
|
|
|
+
|
|
|
|
+ List<StudentObjectiveAnswerDto> answerDtoList = new ArrayList<>();
|
|
|
|
+ // 已设置客观题
|
|
|
|
+ int maxCount = Math.max(questionCount, answerCount);
|
|
|
|
+ for (int i = 0; i < maxCount; i++) {
|
|
|
|
+ MarkQuestionAnswerVo q = questionCount > i ? questions.get(i) : null;
|
|
|
|
+ String answer = answerCount > i ? answers.get(i) : "#";
|
|
|
|
+ String answerScore = answerScoreCount > i ? answerScores.get(i) : "0";
|
|
|
|
+ StudentObjectiveAnswerDto studentObjectiveAnswerDto = new StudentObjectiveAnswerDto();
|
|
|
|
+ studentObjectiveAnswerDto.setMainNumber(q != null ? q.getMainNumber() : 0);
|
|
|
|
+ studentObjectiveAnswerDto.setSubNumber(q != null ? q.getSubNumber() : 0);
|
|
|
|
+ studentObjectiveAnswerDto.setStandardAnswer(q != null ? q.getAnswer() : null);
|
|
|
|
+ studentObjectiveAnswerDto.setAnswer(answer);
|
|
|
|
+ studentObjectiveAnswerDto.setScore(Double.valueOf(answerScore));
|
|
|
|
+ studentObjectiveAnswerDto.setTotalScore(q != null && q.getTotalScore() != null ? q.getTotalScore() : 0);
|
|
|
|
+ studentObjectiveAnswerDto.setExist(q != null && q.getTotalScore() != null && q.getTotalScore() > 0);
|
|
|
|
+ studentObjectiveAnswerDto.setQuestionType(q != null ? q.getQuestionType() : 0);
|
|
|
|
+ answerDtoList.add(studentObjectiveAnswerDto);
|
|
|
|
+ }
|
|
|
|
+ return JSON.toJSONString(answerDtoList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 主观题信息
|
|
|
|
+ */
|
|
|
|
+ private String buildSubjectiveQuestions(JdbcTemplate jdbcTemplate, MarkStudent markStudent, List<MarkQuestion> sList, Map<Long, SysUser> sysUserMap) {
|
|
|
|
+ Long examId = markStudent.getExamId();
|
|
|
|
+ String paperNumber = markStudent.getPaperNumber();
|
|
|
|
+ Long studentId = markStudent.getId();
|
|
|
|
+ List<TaskQuestion> taskQuestions = new ArrayList<>();
|
|
|
|
+ List<MarkSubjectiveScore> scoreList = this.listMarkSubjectiveScore(jdbcTemplate, studentId);
|
|
|
|
+ for (int i = 0; i < scoreList.size(); i++) {
|
|
|
|
+ MarkQuestion question = sList.get(i);
|
|
|
|
+ TaskQuestion step = buildStep(question);
|
|
|
|
+ // 管理员复核时,默认全部为自己评
|
|
|
|
+ step.setSelfMark(true);
|
|
|
|
+ Double score = scoreList.get(i).getScore();
|
|
|
|
+ if (!scoreList.isEmpty() && scoreList.size() == sList.size()) {
|
|
|
|
+ step.setMarkerScore(score);
|
|
|
|
+ }
|
|
|
|
+ // 增加阅卷轨迹列表获取
|
|
|
|
+ List<MarkTask> markTaskList = this.listMarkTask(jdbcTemplate, studentId, question.getId());
|
|
|
|
+ // 不管单评还是多评显示所有评卷员给分轨迹
|
|
|
|
+ for (MarkTask markTask : markTaskList) {
|
|
|
|
+ for (TrackDTO track : markTask.listMarkerTrack()) {
|
|
|
|
+ SysUser user = sysUserMap.get(markTask.getUserId());
|
|
|
|
+ track.setUserId(markTask.getUserId());
|
|
|
|
+ track.setUserName(user.getRealName() + "(" + user.getLoginName() + ")");
|
|
|
|
+ step.addMarkTrack(track);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (CollectionUtils.isNotEmpty(markTask.listHeaderTrack()) && markTask.getTaskNumber() == 1) {
|
|
|
|
+ for (TrackDTO trackDTO : markTask.listHeaderTrack()) {
|
|
|
|
+ SysUser sysUser = sysUserMap.get(markTask.getHeaderId());
|
|
|
|
+ if (sysUser != null) {
|
|
|
|
+ trackDTO.setUserId(sysUser.getId());
|
|
|
|
+ trackDTO.setUserName(sysUser.getRealName() + "(" + sysUser.getLoginName() + ")");
|
|
|
|
+ }
|
|
|
|
+ trackDTO.setHeaderType(markTask.getStatus());
|
|
|
|
+ step.addHeadTrack(trackDTO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 普通模式无轨迹数据。单独处理评卷员每题得分
|
|
|
|
+ if (CollectionUtils.isEmpty(step.getMarkerTrackList()) && markTask.getMarkerScore() != null) {
|
|
|
|
+ // 评卷员
|
|
|
|
+ MarkerScoreDTO markerScoreDTO = new MarkerScoreDTO();
|
|
|
|
+ markerScoreDTO.setUserId(markTask.getUserId());
|
|
|
|
+ SysUser markerUser = sysUserMap.get(markTask.getUserId());
|
|
|
|
+ if (markerUser != null) {
|
|
|
|
+ markerScoreDTO.setLoginName(markerUser.getLoginName());
|
|
|
|
+ markerScoreDTO.setUserName(markerUser.getRealName());
|
|
|
|
+ }
|
|
|
|
+ markerScoreDTO.setScore(score);
|
|
|
|
+ markerScoreDTO.setHeader(false);
|
|
|
|
+ step.addMarkerList(markerScoreDTO);
|
|
|
|
+
|
|
|
|
+ // 科组长
|
|
|
|
+ if (CollectionUtils.isEmpty(markTask.listHeaderTrack()) && markTask.getTaskNumber() == 1) {
|
|
|
|
+ if (!markTask.getMarkerScore().equals(score)) {
|
|
|
|
+ MarkerScoreDTO headerScoreDTO = new MarkerScoreDTO();
|
|
|
|
+ headerScoreDTO.setUserId(markTask.getHeaderId());
|
|
|
|
+ SysUser headerUser = sysUserMap.get(markTask.getHeaderId());
|
|
|
|
+ if (headerUser != null) {
|
|
|
|
+ headerScoreDTO.setLoginName(headerUser.getLoginName());
|
|
|
|
+ headerScoreDTO.setUserName(headerUser.getRealName());
|
|
|
|
+ }
|
|
|
|
+ headerScoreDTO.setScore(score);
|
|
|
|
+ headerScoreDTO.setHeader(true);
|
|
|
|
+ headerScoreDTO.setHeaderType(markTask.getStatus());
|
|
|
|
+ step.addMarkerList(headerScoreDTO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ taskQuestions.add(step);
|
|
|
|
+ }
|
|
|
|
+ return JSON.toJSONString(taskQuestions);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private TaskQuestion buildStep(MarkQuestion question) {
|
|
|
|
+ TaskQuestion step = new TaskQuestion();
|
|
|
|
+ step.setMainNumber(question.getMainNumber());
|
|
|
|
+ step.setSubNumber(question.getSubNumber());
|
|
|
|
+ step.setQuestionType(question.getQuestionType());
|
|
|
|
+ step.setPicList(StringUtils.isNotBlank(question.getPicList()) ? JSON.parseArray(question.getPicList(), PictureConfig.class) : null);
|
|
|
|
+ step.setQuestionId(question.getId());
|
|
|
|
+ step.setTitle(question.getMainTitle());
|
|
|
|
+ step.setDefaultScore(0d);
|
|
|
|
+ step.setMaxScore(question.getTotalScore());
|
|
|
|
+ step.setMinScore(0d);
|
|
|
|
+ step.setIntervalScore(question.getIntervalScore());
|
|
|
|
+ step.setUncalculate(false);
|
|
|
|
+ return step;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 图片信息
|
|
|
|
+ */
|
|
|
|
+ private String buildSheetUrls(JdbcTemplate jdbcTemplate, MarkStudent markStudent) {
|
|
|
|
+ // 原图
|
|
|
|
+ List<SheetUrlDto> sheetUrls = new ArrayList<>();
|
|
|
|
+ List<StudentPaperDetailDto> studentPaperDetailDtoList = this.listData(jdbcTemplate, getSheetUrlsSql(markStudent.getId()), StudentPaperDetailDto.class);
|
|
|
|
+ for (int i = 0; i < studentPaperDetailDtoList.size(); i++) {
|
|
|
|
+ StudentPaperDetailDto studentPaperDetailDto = studentPaperDetailDtoList.get(i);
|
|
|
|
+ sheetUrls.add(new SheetUrlDto(
|
|
|
|
+ 2 * (studentPaperDetailDto.getPaperIndex() - 1) + studentPaperDetailDto.getPageIndex(),
|
|
|
|
+ studentPaperDetailDto.getSheetPath(),
|
|
|
|
+ studentPaperDetailDto.getRecogData()));
|
|
|
|
+ }
|
|
|
|
+ return JSON.toJSONString(sheetUrls);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void execUpgradeSql(JdbcTemplate jdbcTemplate) {
|
|
|
|
+ String rootPath = System.getProperty("user.dir");
|
|
|
|
+ StringJoiner sj = new StringJoiner(File.separator);
|
|
|
|
+ sj.add(rootPath).add("distributed-print").add("install").add("mysql").add("upgrade").add("3.4.4.sql");
|
|
|
|
+ try {
|
|
|
|
+ FileInputStream inputStream = new FileInputStream(sj.toString());
|
|
|
|
+ String[] sqlList = StringUtils.split(ResourceFileHelper.readContent(inputStream), ";");
|
|
|
|
+ Arrays.stream(sqlList).filter(StringUtils::isNotBlank).forEach(sql -> {
|
|
|
|
+ log.info(sql);
|
|
|
|
+ jdbcTemplate.execute(sql);
|
|
|
|
+ });
|
|
|
|
+ } catch (FileNotFoundException e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private <T> List<T> listData(JdbcTemplate jdbcTemplate, String sql, Class<T> tClass) {
|
|
|
|
+ //将查询的语句封装到List集合中,集合中存储每一个员工实体
|
|
|
|
+ List<T> list = new ArrayList<>();
|
|
|
|
+ try {
|
|
|
|
+ list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(tClass));
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("查询失败:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return list;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private <T> List<T> pageData(JdbcTemplate jdbcTemplate, String sql, Class<T> tClass) {
|
|
|
|
+ if (!sql.contains("limit")) {
|
|
|
|
+ sql += " limit ?,?";
|
|
|
|
+ }
|
|
|
|
+ //将查询的语句封装到List集合中,集合中存储每一个员工实体
|
|
|
|
+ List<T> listAll = new ArrayList<>();
|
|
|
|
+ try {
|
|
|
|
+ List<T> list;
|
|
|
|
+ int pageNumber = 0;
|
|
|
|
+ do {
|
|
|
|
+ int offset = pageNumber * PAGE_SIZE + PAGE_SIZE;
|
|
|
|
+ list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(tClass), pageNumber, offset);
|
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
|
+ listAll.addAll(list);
|
|
|
|
+ pageNumber++;
|
|
|
|
+ }
|
|
|
|
+ } while (CollectionUtils.isNotEmpty(list));
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("查询失败:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return listAll;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private <T> List<T> pageData(JdbcTemplate jdbcTemplate, String sql, Class<T> tClass, int pageNumber) {
|
|
|
|
+ //将查询的语句封装到List集合中,集合中存储每一个员工实体
|
|
|
|
+ List<T> listAll = new ArrayList<>();
|
|
|
|
+ try {
|
|
|
|
+ int offset = pageNumber * PAGE_SIZE + PAGE_SIZE;
|
|
|
|
+ List<T> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(tClass), pageNumber, offset);
|
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
|
+ listAll.addAll(list);
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("查询失败:" + e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return listAll;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String getSheetUrlsSql(Long studentId) {
|
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
|
+ sql.append("SELECT ");
|
|
|
|
+ sql.append("ssp.student_id studentId, ");
|
|
|
|
+ sql.append("ssp.paper_index paperIndex, ");
|
|
|
|
+ sql.append("ssp.paper_id paperId, ");
|
|
|
|
+ sql.append("sp.card_number cardNumber, ");
|
|
|
|
+ sql.append("spp.page_index pageIndex, ");
|
|
|
|
+ sql.append("spp.sheet_path sheetPath, ");
|
|
|
|
+ sql.append("spp.recog_data recogData ");
|
|
|
|
+ sql.append("FROM ");
|
|
|
|
+ sql.append(" (SELECT ");
|
|
|
|
+ sql.append(" student_id, paper_index, paper_id ");
|
|
|
|
+ sql.append(" FROM ");
|
|
|
|
+ sql.append(" scan_student_paper ");
|
|
|
|
+ sql.append(" WHERE ");
|
|
|
|
+ sql.append(" student_id = " + studentId + ") ");
|
|
|
|
+ sql.append(" JOIN ");
|
|
|
|
+ sql.append("scan_paper sp ON ssp.paper_id = sp.id ");
|
|
|
|
+ sql.append("AND ssp.paper_index = sp.number ");
|
|
|
|
+ sql.append("JOIN ");
|
|
|
|
+ sql.append("scan_paper_page spp ON sp.id = spp.paper_id ");
|
|
|
|
+ sql.append("ORDER BY ssp.paper_index , spp.page_index ");
|
|
|
|
+ return sql.toString();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private Map<String, List<MarkQuestionAnswerVo>> mapObjectiveMarkQuestion(JdbcTemplate jdbcTemplate, Long examId, String paperNumber) {
|
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
|
+ sql.append(" SELECT ");
|
|
|
|
+ sql.append(" mqa.answer, ");
|
|
|
|
+ sql.append(" mqa.objective_policy, ");
|
|
|
|
+ sql.append(" mqa.objective_policy_score, ");
|
|
|
|
+ sql.append(" mq.* ");
|
|
|
|
+ sql.append(" FROM ");
|
|
|
|
+ sql.append(" (SELECT ");
|
|
|
|
+ sql.append(" * ");
|
|
|
|
+ sql.append(" FROM ");
|
|
|
|
+ sql.append(" mark_question ");
|
|
|
|
+ sql.append(" WHERE ");
|
|
|
|
+ sql.append(" exam_id = " + examId + " AND paper_number = " + paperNumber + " ");
|
|
|
|
+ sql.append(" AND objective = TRUE) mq ");
|
|
|
|
+ sql.append(" LEFT JOIN ");
|
|
|
|
+ sql.append(" (SELECT ");
|
|
|
|
+ sql.append(" * ");
|
|
|
|
+ sql.append(" FROM ");
|
|
|
|
+ sql.append(" mark_question_answer ");
|
|
|
|
+ sql.append(" WHERE ");
|
|
|
|
+ sql.append(" exam_id = " + examId + " AND paper_number = " + paperNumber + ") mqa ");
|
|
|
|
+ sql.append(" ON mq.main_number = mqa.main_number ");
|
|
|
|
+ sql.append(" AND mq.sub_number = mqa.sub_number ");
|
|
|
|
+ sql.append(" ORDER BY mq.main_number , mq.sub_number ");
|
|
|
|
+
|
|
|
|
+ List<MarkQuestionAnswerVo> questions = this.listData(jdbcTemplate, sql.toString(), MarkQuestionAnswerVo.class);
|
|
|
|
+ Map<String, List<MarkQuestionAnswerVo>> objectiveQuestionMap = questions.stream().collect(Collectors.groupingBy(MarkQuestionAnswerVo::getPaperType));
|
|
|
|
+ return objectiveQuestionMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<MarkQuestion> listSubjectiveMarkQuestionSql(JdbcTemplate jdbcTemplate, Long examId, String paperNumber) {
|
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
|
+ sql.append(" SELECT ");
|
|
|
|
+ sql.append(" * ");
|
|
|
|
+ sql.append(" FROM ");
|
|
|
|
+ sql.append(" mark_question mq ");
|
|
|
|
+ sql.append(" WHERE ");
|
|
|
|
+ sql.append(" mq.exam_id = " + examId + " AND mq.paper_number = " + paperNumber + " ");
|
|
|
|
+ sql.append(" AND mq.objective = FALSE ");
|
|
|
|
+ sql.append(" ORDER BY mq.main_number , mq.sub_number ");
|
|
|
|
+ return this.listData(jdbcTemplate, sql.toString(), MarkQuestion.class);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<MarkSubjectiveScore> listMarkSubjectiveScore(JdbcTemplate jdbcTemplate, Long studentId) {
|
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
|
+ sql.append(" SELECT ");
|
|
|
|
+ sql.append(" * ");
|
|
|
|
+ sql.append(" FROM ");
|
|
|
|
+ sql.append(" mark_subjective_score mss ");
|
|
|
|
+ sql.append(" WHERE ");
|
|
|
|
+ sql.append(" mss.student_id = " + studentId + " ");
|
|
|
|
+ sql.append(" ORDER BY mss.main_number , mss.sub_number ");
|
|
|
|
+ return this.listData(jdbcTemplate, sql.toString(), MarkSubjectiveScore.class);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<MarkTask> listMarkTask(JdbcTemplate jdbcTemplate, Long studentId, Long questionId) {
|
|
|
|
+ StringBuffer sql = new StringBuffer();
|
|
|
|
+ sql.append(" SELECT ");
|
|
|
|
+ sql.append(" * ");
|
|
|
|
+ sql.append(" FROM ");
|
|
|
|
+ sql.append(" mark_task mt ");
|
|
|
|
+ sql.append(" WHERE ");
|
|
|
|
+ sql.append(" mt.student_id = " + studentId + " AND mt.question_id = " + questionId + " ");
|
|
|
|
+ return this.listData(jdbcTemplate, sql.toString(), MarkTask.class);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private Map<Long, SysUser> mapSysUserSql(JdbcTemplate jdbcTemplate) {
|
|
|
|
+ String sql = "select * from sys_user";
|
|
|
|
+ List<SysUser> sysUserList = this.listData(jdbcTemplate, sql, SysUser.class);
|
|
|
|
+ Map<Long, SysUser> sysUserMap = sysUserList.stream().collect(Collectors.toMap(m -> m.getId(), Function.identity()));
|
|
|
|
+ return sysUserMap;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<MarkPaper> listMarkPaper(JdbcTemplate jdbcTemplate) {
|
|
|
|
+ String sql = "select * from mark_paper where status = 'FINISH'";
|
|
|
|
+ return this.listData(jdbcTemplate, sql, MarkPaper.class);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<MarkStudent> listMarkStudent(JdbcTemplate jdbcTemplate, Long examId, String paperNumber) {
|
|
|
|
+ String sql = "select * from mark_student where exam_id = " + examId + " and paper_number = '" + paperNumber + "'";
|
|
|
|
+ return this.listData(jdbcTemplate, sql, MarkStudent.class);
|
|
|
|
+ }
|
|
|
|
+}
|