|
@@ -76,65 +76,6 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
return this.list(queryWrapper);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<MarkQuestion> listQuestionByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType) {
|
|
|
- QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
|
|
|
- LambdaQueryWrapper<MarkQuestion> lambdaQueryWrapper = queryWrapper.lambda();
|
|
|
- lambdaQueryWrapper.eq(MarkQuestion::getExamId, examId)
|
|
|
- .eq(MarkQuestion::getPaperNumber, paperNumber)
|
|
|
- .and(m -> m.isNull(MarkQuestion::getPaperType).or().eq(MarkQuestion::getPaperType, paperType));
|
|
|
- lambdaQueryWrapper.orderByAsc(MarkQuestion::getMainNumber)
|
|
|
- .orderByAsc(MarkQuestion::getSubNumber);
|
|
|
- return this.list(queryWrapper);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<MarkQuestion> listQuestionByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType, Boolean objective) {
|
|
|
- if (objective == null) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("objective参数必传");
|
|
|
- }
|
|
|
- QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
|
|
|
- LambdaQueryWrapper<MarkQuestion> lambdaQueryWrapper = queryWrapper.lambda();
|
|
|
- lambdaQueryWrapper.eq(MarkQuestion::getExamId, examId)
|
|
|
- .eq(MarkQuestion::getPaperNumber, paperNumber);
|
|
|
- if (objective) {
|
|
|
- if (StringUtils.isBlank(paperType)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("查询客观题时,卷型必传");
|
|
|
- }
|
|
|
- lambdaQueryWrapper.eq(MarkQuestion::getPaperType, paperType);
|
|
|
- } else {
|
|
|
- lambdaQueryWrapper.isNull(MarkQuestion::getPaperType);
|
|
|
- }
|
|
|
- lambdaQueryWrapper.orderByAsc(MarkQuestion::getMainNumber)
|
|
|
- .orderByAsc(MarkQuestion::getSubNumber);
|
|
|
- return this.list(queryWrapper);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<MarkQuestion> listQuestionByExamIdAndPaperNumberAndSerialNumberAndObjectiveFalse(Long examId, String paperNumber, Integer serialNumber) {
|
|
|
- QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
|
|
|
- LambdaQueryWrapper<MarkQuestion> lambdaQueryWrapper = queryWrapper.lambda();
|
|
|
- lambdaQueryWrapper.eq(MarkQuestion::getExamId, examId)
|
|
|
- .eq(MarkQuestion::getPaperNumber, paperNumber)
|
|
|
- .eq(MarkQuestion::getObjective, false);
|
|
|
- lambdaQueryWrapper.orderByAsc(MarkQuestion::getMainNumber)
|
|
|
- .orderByAsc(MarkQuestion::getSubNumber);
|
|
|
- return this.list(queryWrapper);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public List<MarkQuestion> listQuestionByExamIdAndPaperNumberAndSerialNumberAndPaperTypeAndObjectiveTrue(Long examId, String paperNumber, Integer serialNumber, String paperType) {
|
|
|
- QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
|
|
|
- LambdaQueryWrapper<MarkQuestion> lambdaQueryWrapper = queryWrapper.lambda();
|
|
|
- lambdaQueryWrapper.eq(MarkQuestion::getExamId, examId)
|
|
|
- .eq(MarkQuestion::getPaperNumber, paperNumber)
|
|
|
- .eq(MarkQuestion::getPaperType, paperType)
|
|
|
- .eq(MarkQuestion::getObjective, true);
|
|
|
- lambdaQueryWrapper.orderByAsc(MarkQuestion::getMainNumber)
|
|
|
- .orderByAsc(MarkQuestion::getSubNumber);
|
|
|
- return this.list(queryWrapper);
|
|
|
- }
|
|
|
-
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public void saveQuestions(MarkQuestionParams markQuestionParams) {
|
|
@@ -206,7 +147,6 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
// 客观题变主观题
|
|
|
if (markQuestion.getObjective() && !question.getObjective()) {
|
|
|
// 清除判分策略
|
|
|
- markQuestion.setOptionCount(0);
|
|
|
markQuestionAnswerService.deleteByExamIdAndPaperNumberAndMainNumberAndSubNumber(examId, paperNumber, markQuestion.getMainNumber(), markQuestion.getSubNumber());
|
|
|
}
|
|
|
// 客观题
|
|
@@ -259,7 +199,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
this.saveOrUpdateBatch(saveOrUpdateList);
|
|
|
}
|
|
|
// 更新客观题满分、主观题满分、总分
|
|
|
- List<MarkQuestion> markQuestions = this.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null);
|
|
|
+ List<MarkQuestion> markQuestions = this.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
Double objectiveScore = markQuestions.stream().filter(m -> m.getObjective()).collect(Collectors.summingDouble(m -> m.getTotalScore()));
|
|
|
Double subjectiveScore = markQuestions.stream().filter(m -> !m.getObjective()).collect(Collectors.summingDouble(m -> m.getTotalScore()));
|
|
|
Double totalScore = markQuestions.stream().collect(Collectors.summingDouble(m -> m.getTotalScore()));
|
|
@@ -312,32 +252,29 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void objectiveAnswerSettingModelExport(Long examId, String paperNumber, HttpServletResponse response)
|
|
|
+ public void objectiveAnswerSettingModelExport(Long examId, String paperNumber, String paperType, HttpServletResponse response)
|
|
|
throws Exception {
|
|
|
- List<ObjectiveAnswerDto> datasource = this.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber,
|
|
|
- null, true).stream().flatMap(e -> {
|
|
|
+ List<MarkQuestionAnswerVo> datasource = this.listQuestionAnswerByExamIdAndPaperNumberAndPaperType(examId, paperNumber,
|
|
|
+ paperType, true);
|
|
|
+ List<ObjectiveAnswerDto> objectiveAnswerDtoList = datasource.stream().flatMap(e -> {
|
|
|
ObjectiveAnswerDto dto = new ObjectiveAnswerDto();
|
|
|
dto.setMainNumber(String.valueOf(e.getMainNumber()));
|
|
|
dto.setSubNumber(String.valueOf(e.getSubNumber()));
|
|
|
dto.setMainTitle(e.getMainTitle());
|
|
|
- // todo 2024-10-16
|
|
|
-// dto.setAnswer(e.getAnswer());
|
|
|
+ dto.setAnswer(e.getAnswer());
|
|
|
return Stream.of(dto);
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
|
// 生成excel文件
|
|
|
- ExcelUtil.excelExport("客观题标答模板", ObjectiveAnswerDto.class, datasource, response);
|
|
|
+ ExcelUtil.excelExport("客观题标答模板", ObjectiveAnswerDto.class, objectiveAnswerDtoList, response);
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public void objectiveAnswerSettingImport(Long examId, String paperNumber, MultipartFile file) throws Exception {
|
|
|
- List<MarkQuestion> willEditList = new ArrayList<>();
|
|
|
+ public void objectiveAnswerSettingImport(Long examId, String paperNumber, String paperType, MultipartFile file) throws Exception {
|
|
|
// 试卷结构
|
|
|
- List<MarkQuestion> datasource = this.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, null,
|
|
|
- true);
|
|
|
- ExcelResult<ObjectiveAnswerDto> excelResult = ConvertUtil.analyzeExcel(file.getInputStream(), ObjectiveAnswerDto.class,
|
|
|
- false, 0);
|
|
|
+ List<MarkQuestionAnswer> datasource = markQuestionAnswerService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
|
|
|
+ ExcelResult<ObjectiveAnswerDto> excelResult = ConvertUtil.analyzeExcel(file.getInputStream(), ObjectiveAnswerDto.class, false, 0);
|
|
|
if (!excelResult.isSuccess()) {
|
|
|
throw ExceptionResultEnum.ERROR.exception(excelResult.getErrorMsg());
|
|
|
}
|
|
@@ -348,10 +285,11 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
logicErrorList.add("试卷结构试题数量和导入文件中的试题数量不一致");
|
|
|
}
|
|
|
Set<String> questionNumberSet = new HashSet<>();
|
|
|
+ Map<String, MarkQuestion> markQuestionMap = this.listQuestionByExamIdAndPaperNumber(examId, paperNumber).stream().collect(Collectors.toMap(k -> k.getMainNumber() + SystemConstant.HYPHEN + k.getSubNumber(), v -> v));
|
|
|
// 构建题号-试题结构map
|
|
|
- Map<String, MarkQuestion> markQuestionMap = datasource.stream()
|
|
|
- .collect(Collectors.toMap(k -> k.getMainNumber() + SystemConstant.HYPHEN + k.getSubNumber(), v -> v));
|
|
|
+ Map<String, MarkQuestionAnswer> markQuestionAnswerMapMap = datasource.stream().collect(Collectors.toMap(k -> k.getMainNumber() + SystemConstant.HYPHEN + k.getSubNumber(), v -> v));
|
|
|
|
|
|
+ List<MarkQuestionAnswer> willEditList = new ArrayList<>();
|
|
|
for (int i = 0; i < objectiveAnswerDtoList.size(); i++) {
|
|
|
int rowIndex = i + 2;
|
|
|
ObjectiveAnswerDto cell = objectiveAnswerDtoList.get(i);
|
|
@@ -368,17 +306,16 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
rowException.add("题号和前面重复");
|
|
|
} else {
|
|
|
questionNumberSet.add(key);
|
|
|
- if (markQuestionMap.containsKey(key)) {
|
|
|
- MarkQuestion markQuestion = markQuestionMap.get(key);
|
|
|
- // todo 2024-10-16
|
|
|
-// markQuestion.setAnswer(exAnswer);
|
|
|
+ if (markQuestionAnswerMapMap.containsKey(key)) {
|
|
|
+ MarkQuestionAnswer markQuestion = markQuestionAnswerMapMap.get(key);
|
|
|
+ markQuestion.setAnswer(exAnswer);
|
|
|
willEditList.add(markQuestion);
|
|
|
String mainTitle = markQuestion.getMainTitle();
|
|
|
if (!Objects.equals(exMainTitle, mainTitle)) {
|
|
|
rowException.add(String.format("大题名称[%s]错误", exMainTitle));
|
|
|
} else {
|
|
|
- Integer questionType = markQuestion.getQuestionType();
|
|
|
- Integer optionCount = markQuestion.getOptionCount();
|
|
|
+ Integer questionType = markQuestionMap.get(key).getQuestionType();
|
|
|
+ Integer optionCount = markQuestionMap.get(key).getOptionCount();
|
|
|
List<String> optionScope = new ArrayList<>();
|
|
|
try {
|
|
|
for (int j = 1; j <= optionCount; j++) {
|
|
@@ -442,7 +379,7 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
if (CollectionUtils.isNotEmpty(logicErrorList)) {
|
|
|
throw ExceptionResultEnum.ERROR.exception(String.join(";\n", logicErrorList));
|
|
|
}
|
|
|
- this.saveOrUpdateBatch(willEditList);
|
|
|
+ markQuestionAnswerService.saveOrUpdateBatch(willEditList);
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
@@ -526,11 +463,11 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public MarkQuestionDto pageQuestionsByExamIdAndPaperNumberAndSerialNumberAndPaperType(Long examId, String paperNumber, Integer serialNumber, String paperType) {
|
|
|
+ public MarkQuestionDto pageQuestionsByExamIdAndPaperNumber(Long examId, String paperNumber) {
|
|
|
MarkQuestionDto markQuestionDto = new MarkQuestionDto();
|
|
|
- MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumberAndSerialNumber(examId, paperNumber, serialNumber);
|
|
|
+ MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
// 试卷结构,默认只取A卷
|
|
|
- List<MarkQuestion> markQuestionList = this.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, SystemConstant.DEFAULT_PAPER_TYPE_A);
|
|
|
+ List<MarkQuestion> markQuestionList = this.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
markQuestionDto.setQuestionSubmit(markPaper.getQuestionStatus());
|
|
|
markQuestionDto.setObjectiveSubmit(markQuestionAnswerService.countByExamIdAndPaperNumber(examId, paperNumber) > 0);
|
|
|
markQuestionDto.setQuestions(markQuestionList);
|
|
@@ -558,17 +495,12 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<MarkQuestion> listByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType, Boolean objective) {
|
|
|
+ public List<MarkQuestion> listByExamIdAndPaperNumberAndObjective(Long examId, String paperNumber, Boolean objective) {
|
|
|
QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
|
|
|
LambdaQueryWrapper<MarkQuestion> lambdaQueryWrapper = queryWrapper.lambda();
|
|
|
lambdaQueryWrapper.eq(MarkQuestion::getExamId, examId)
|
|
|
- .eq(MarkQuestion::getPaperNumber, paperNumber);
|
|
|
- if (StringUtils.isNotBlank(paperType)) {
|
|
|
- lambdaQueryWrapper.eq(MarkQuestion::getPaperType, paperType);
|
|
|
- }
|
|
|
- if (objective != null) {
|
|
|
- lambdaQueryWrapper.eq(MarkQuestion::getObjective, objective);
|
|
|
- }
|
|
|
+ .eq(MarkQuestion::getPaperNumber, paperNumber)
|
|
|
+ .eq(MarkQuestion::getObjective, objective);
|
|
|
lambdaQueryWrapper.orderByAsc(MarkQuestion::getMainNumber)
|
|
|
.orderByAsc(MarkQuestion::getSubNumber);
|
|
|
return this.list(queryWrapper);
|
|
@@ -584,8 +516,8 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public void updateMarkPaperScore(Long examId, String paperNumber, String paperType) {
|
|
|
- List<MarkQuestion> markQuestions = this.listQuestionByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
|
|
|
+ public void updateMarkPaperScore(Long examId, String paperNumber) {
|
|
|
+ List<MarkQuestion> markQuestions = this.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
Double objectiveScore = markQuestions.stream().filter(MarkQuestion::getObjective)
|
|
|
.mapToDouble(MarkQuestion::getTotalScore).sum();
|
|
|
Double subjectiveScore = markQuestions.stream().filter(m -> !m.getObjective())
|
|
@@ -604,4 +536,12 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
|
|
|
public List<MarkQuestionAnswerVo> listQuestionAnswerByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType, Boolean objective) {
|
|
|
return this.baseMapper.listQuestionAnswerByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType, objective);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<MarkQuestion> listByExamIdAndPaperNumber(Long examId, String paperNumber) {
|
|
|
+ QueryWrapper<MarkQuestion> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda().eq(MarkQuestion::getExamId, examId)
|
|
|
+ .eq(MarkQuestion::getPaperNumber, paperNumber);
|
|
|
+ return this.list(queryWrapper);
|
|
|
+ }
|
|
|
}
|