|
@@ -0,0 +1,215 @@
|
|
|
+package com.qmth.distributed.print;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
+import com.qmth.distributed.print.business.entity.ExamDetailCourse;
|
|
|
+import com.qmth.distributed.print.business.entity.ExamTask;
|
|
|
+import com.qmth.distributed.print.business.entity.ExamTaskDetail;
|
|
|
+import com.qmth.distributed.print.business.service.ExamDetailCourseService;
|
|
|
+import com.qmth.distributed.print.business.service.ExamTaskDetailService;
|
|
|
+import com.qmth.distributed.print.business.service.ExamTaskService;
|
|
|
+import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
|
|
|
+import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
+import com.qmth.teachcloud.common.entity.MarkQuestion;
|
|
|
+import com.qmth.teachcloud.mark.entity.*;
|
|
|
+import com.qmth.teachcloud.mark.service.*;
|
|
|
+import io.swagger.models.auth.In;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.junit.Test;
|
|
|
+import org.junit.runner.RunWith;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.boot.test.context.SpringBootTest;
|
|
|
+import org.springframework.test.context.junit4.SpringRunner;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 处理命题任务详情数据
|
|
|
+ * <p>
|
|
|
+ * 升级3.4.2后,增加了备用卷概念,数据需要处理
|
|
|
+ * 客观题标签单独保存
|
|
|
+ */
|
|
|
+@SpringBootTest
|
|
|
+@RunWith(SpringRunner.class)
|
|
|
+public class DealExamTaskDetailDataTest {
|
|
|
+ @Resource
|
|
|
+ ExamTaskService examTaskService;
|
|
|
+ @Resource
|
|
|
+ ExamTaskDetailService examTaskDetailService;
|
|
|
+ @Resource
|
|
|
+ MarkQuestionService markQuestionService;
|
|
|
+ @Resource
|
|
|
+ MarkQuestionAnswerService markQuestionAnswerService;
|
|
|
+ @Resource
|
|
|
+ ExamDetailCourseService examDetailCourseService;
|
|
|
+ @Resource
|
|
|
+ MarkPaperService markPaperService;
|
|
|
+ @Resource
|
|
|
+ MarkPaperPackageService markPaperPackageService;
|
|
|
+ @Resource
|
|
|
+ MarkStudentService markStudentService;
|
|
|
+ @Resource
|
|
|
+ ScanAnswerCardService scanAnswerCardService;
|
|
|
+
|
|
|
+ private static String DEFAULT_A = "A";
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void deal() {
|
|
|
+ List<ExamTaskDetail> examTaskDetailList = new ArrayList<>();
|
|
|
+ // 拆分电子交卷试卷
|
|
|
+ for (ExamTaskDetail examTaskDetail : examTaskDetailList()) {
|
|
|
+ ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
|
|
|
+ if(examTask == null){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String paperType = examTaskDetail.getPaperType();
|
|
|
+ // 所有卷型
|
|
|
+ String[] paperTypes = paperType.split(",");
|
|
|
+ // 已曝光集合
|
|
|
+ String exposedPaperType = examTaskDetail.getExposedPaperType();
|
|
|
+ List<String> exposePaperTypes = StringUtils.isNotBlank(exposedPaperType) ? Arrays.asList(exposedPaperType.split(",")) : Collections.emptyList();
|
|
|
+ // 已关联集合
|
|
|
+ String relatePaperType = examTaskDetail.getRelatePaperType();
|
|
|
+ List<String> relatePaperTypes = StringUtils.isNotBlank(relatePaperType) ? Arrays.asList(relatePaperType.split(",")) : Collections.emptyList();
|
|
|
+ // 所有上传卷型试卷信息
|
|
|
+ List<PaperInfoVo> paperInfoVoList = examTaskDetail.getPaperInfoVoList();
|
|
|
+ // 只有一个卷型,不处理
|
|
|
+ if (paperType.length() == 1) {
|
|
|
+ examTaskDetail.setExposed(exposePaperTypes.contains(paperType));
|
|
|
+ examTaskDetail.setExposedExamId(examTaskDetail.getExposed() || relatePaperTypes.contains(paperType) ? examTask.getExamId() : null);
|
|
|
+ examTaskDetailList.add(examTaskDetail);
|
|
|
+ } else {
|
|
|
+ for (String type : paperTypes) {
|
|
|
+ // 暂时不处理A
|
|
|
+ if (type.equals(DEFAULT_A)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ ExamTaskDetail taskDetail = new ExamTaskDetail();
|
|
|
+ taskDetail.setId(SystemConstant.getDbUuid());
|
|
|
+ taskDetail.setExamTaskId(examTaskDetail.getExamTaskId());
|
|
|
+ taskDetail.setSerialNumber(calcSerialNumber(type));
|
|
|
+ taskDetail.setPaperType(DEFAULT_A);
|
|
|
+ taskDetail.setPaperAttachmentIds(getPaperTypeIds(paperInfoVoList, type));
|
|
|
+ taskDetail.setExposed(exposePaperTypes.contains(type));
|
|
|
+ taskDetail.setExposedExamId(taskDetail.getExposed() || relatePaperTypes.contains(type) ? examTask.getExamId() : null);
|
|
|
+ taskDetail.setCreateId(examTaskDetail.getCreateId());
|
|
|
+ taskDetail.setCreateTime(examTaskDetail.getCreateTime());
|
|
|
+ taskDetail.setUpdateId(examTaskDetail.getUpdateId());
|
|
|
+ taskDetail.setUpdateTime(examTaskDetail.getUpdateTime());
|
|
|
+ examTaskDetailList.add(taskDetail);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 最后处理A卷,将原数据改为A
|
|
|
+ examTaskDetail.setSerialNumber(1);
|
|
|
+ examTaskDetail.setPaperType(DEFAULT_A);
|
|
|
+ examTaskDetail.setPaperAttachmentIds(getPaperTypeIds(paperInfoVoList, DEFAULT_A));
|
|
|
+ examTaskDetail.setExposed(exposePaperTypes.contains(DEFAULT_A));
|
|
|
+ examTaskDetail.setExposedExamId(examTaskDetail.getExposed() || relatePaperTypes.contains(DEFAULT_A) ? examTask.getExamId() : null);
|
|
|
+ examTaskDetailList.add(examTaskDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ examTaskDetailService.saveOrUpdateBatch(examTaskDetailList);
|
|
|
+
|
|
|
+ // 更新exam_detail_course表serial_number
|
|
|
+ updateExamDetailCourseSerialNumber();
|
|
|
+ // 更新mark_paper表serial_number
|
|
|
+ updateMarkPaperSerialNumber();
|
|
|
+ // 更新mark_paper_package表serial_number
|
|
|
+ updateMarkPaperPackageSerialNumber();
|
|
|
+ // 更新mark_student表serial_number
|
|
|
+ updateMarkStudentSerialNumber();
|
|
|
+ // 更新scan_answer_card表serial_number
|
|
|
+ updateScanAnswerCardSerialNumber();
|
|
|
+
|
|
|
+ // 拆分客观题标答
|
|
|
+ List<MarkQuestionAnswer> markQuestionAnswerList = new ArrayList<>();
|
|
|
+ for (MarkQuestion markQuestion : markQuestionList()) {
|
|
|
+ MarkQuestionAnswer markQuestionAnswer = new MarkQuestionAnswer(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getPaperType(), markQuestion.getMainNumber(), markQuestion.getSubNumber());
|
|
|
+ markQuestionAnswer.setAnswer(markQuestion.getAnswer());
|
|
|
+ markQuestionAnswer.setObjectivePolicy(markQuestion.getObjectivePolicy());
|
|
|
+ markQuestionAnswer.setObjectivePolicyScore(markQuestion.getObjectivePolicyScore());
|
|
|
+ markQuestionAnswerList.add(markQuestionAnswer);
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isNotEmpty(markQuestionAnswerList)) {
|
|
|
+ markQuestionAnswerService.saveBatch(markQuestionAnswerList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateScanAnswerCardSerialNumber() {
|
|
|
+ UpdateWrapper<ScanAnswerCard> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.setSql("serial_number = case paper_type when 'A' then 1 when 'B' then 2 when 'C' then 3 when 'D' then 4 when 'E' then 5 when 'F' then 6 when 'G' then 7 end");
|
|
|
+ updateWrapper.isNull("serial_number");
|
|
|
+ scanAnswerCardService.update(updateWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateMarkStudentSerialNumber() {
|
|
|
+ UpdateWrapper<MarkStudent> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.setSql("serial_number = case paper_type when 'A' then 1 when 'B' then 2 when 'C' then 3 when 'D' then 4 when 'E' then 5 when 'F' then 6 when 'G' then 7 end");
|
|
|
+ updateWrapper.isNull("serial_number");
|
|
|
+ markStudentService.update(updateWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateMarkPaperPackageSerialNumber() {
|
|
|
+ UpdateWrapper<MarkPaperPackage> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.setSql("serial_number = case paper_type when 'A' then 1 when 'B' then 2 when 'C' then 3 when 'D' then 4 when 'E' then 5 when 'F' then 6 when 'G' then 7 end");
|
|
|
+ updateWrapper.isNull("serial_number");
|
|
|
+ markPaperPackageService.update(updateWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateMarkPaperSerialNumber() {
|
|
|
+ UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.setSql("serial_number = case paper_type when 'A' then 1 when 'B' then 2 when 'C' then 3 when 'D' then 4 when 'E' then 5 when 'F' then 6 when 'G' then 7 end");
|
|
|
+ updateWrapper.isNull("serial_number");
|
|
|
+ markPaperService.update(updateWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateExamDetailCourseSerialNumber() {
|
|
|
+ UpdateWrapper<ExamDetailCourse> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.setSql("serial_number = case paper_type when 'A' then 1 when 'B' then 2 when 'C' then 3 when 'D' then 4 when 'E' then 5 when 'F' then 6 when 'G' then 7 end");
|
|
|
+ updateWrapper.isNull("serial_number");
|
|
|
+ examDetailCourseService.update(updateWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取需要拆分数据的命题试卷
|
|
|
+ */
|
|
|
+ private List<ExamTaskDetail> examTaskDetailList() {
|
|
|
+ // paper_attachment_ids为null,是3.4.2增加AB卷没传值
|
|
|
+ QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.isNotNull("paper_confirm_attachment_ids");
|
|
|
+ return examTaskDetailService.list(queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有客观题试卷结构
|
|
|
+ */
|
|
|
+ private List<MarkQuestion> markQuestionList() {
|
|
|
+ // 所有客观题标答,都拆分出来单独存表
|
|
|
+ QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda().eq(MarkQuestion::getObjective, true)
|
|
|
+ .orderByAsc(MarkQuestion::getExamId, MarkQuestion::getPaperNumber);
|
|
|
+ return markQuestionService.list(queryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getPaperTypeIds(List<PaperInfoVo> paperInfoVoList, String oldPaperType) {
|
|
|
+ PaperInfoVo paperInfoVo = paperInfoVoList.stream().filter(m -> m.getName().equals(oldPaperType)).findFirst().get();
|
|
|
+ paperInfoVo.setName("A");
|
|
|
+
|
|
|
+ List<PaperInfoVo> list = new ArrayList<>();
|
|
|
+ list.add(paperInfoVo);
|
|
|
+ return JSON.toJSONString(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Integer calcSerialNumber(String paperType) {
|
|
|
+ String[] letter = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"};
|
|
|
+ List<String> letterList = Arrays.asList(letter);
|
|
|
+ return letterList.indexOf(paperType) + 1;
|
|
|
+ }
|
|
|
+}
|