|
@@ -222,37 +222,111 @@ public class PaperController extends BaseExamController {
|
|
|
}
|
|
|
subjectService.updateScore(examId, subject.getCode(), objective, dto.getTotalScore());
|
|
|
} else {
|
|
|
- for (MarkGroup group : dto.getGroups().values()) {
|
|
|
- MarkGroup old = groupService.findOne(examId, group.getSubjectCode(), group.getNumber());
|
|
|
- // 已存在的评卷分组跳过
|
|
|
- if (old == null && group.getImportQuestionList() != null) {
|
|
|
- boolean validate = true;
|
|
|
- for (ExamQuestion question : group.getImportQuestionList()) {
|
|
|
- if (questionService.countByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(
|
|
|
- question.getExamId(), question.getSubjectCode(),
|
|
|
- question.isObjective(), question.getMainNumber(),
|
|
|
- question.getSubNumber()) > 0) {
|
|
|
- error.add("[" + group.getSubjectCode() + "_" + group.getNumber()
|
|
|
- + "] 有小题已存在");
|
|
|
- validate = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- // 校验通过小题才保存
|
|
|
- if (validate && !group.getImportQuestionList().isEmpty()) {
|
|
|
- questionService.save(group.getImportQuestionList());
|
|
|
- }
|
|
|
- // 有题目的分组才保存
|
|
|
- if (questionService.countByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
- group.getSubjectCode(), objective, group.getNumber()) != 0) {
|
|
|
- groupService.save(group);
|
|
|
- studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId,
|
|
|
- group.getSubjectCode(), SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
|
+ int questionCount = 0;
|
|
|
+ for (ExamQuestion question : dto.getQuestionList()) {
|
|
|
+ ExamQuestion old = questionService
|
|
|
+ .findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
|
|
|
+ subject.getCode(), objective, question.getMainNumber(),
|
|
|
+ question.getSubNumber());
|
|
|
+ if (old != null) {
|
|
|
+ if (old.getGroupNumber() != null) {
|
|
|
+ error.add("[" + subject.getCode() + "] 大题号" + question.getMainNumber() + " 小题号"
|
|
|
+ + question.getSubNumber() + "已有分组");
|
|
|
+ continue;
|
|
|
}
|
|
|
+ old.setTotalScore(question.getTotalScore());
|
|
|
+ old.setIntervalScore(question.getIntervalScore());
|
|
|
+ old.setMainTitle(question.getMainTitle());
|
|
|
+ questionService.save(old);
|
|
|
+ } else {
|
|
|
+ question.setGroupNumber(null);
|
|
|
+ questionService.save(question);
|
|
|
+ questionCount++;
|
|
|
}
|
|
|
}
|
|
|
+ if (questionCount > 0) {
|
|
|
+ studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId, subject.getCode(),
|
|
|
+ SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
|
+ }
|
|
|
subjectService.updateScore(examId, subject.getCode(), objective,
|
|
|
- groupService.sumTotalScore(examId, dto.getSubjectCode()));
|
|
|
+ questionService.sumTotalScore(examId, subject.getCode(), objective));
|
|
|
+ }
|
|
|
+ success++;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ error.add("[" + dto.getSubjectCode() + "] 科目代码不存在;");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ error.add(0, success + "个科目导入成功;");
|
|
|
+ if (success > 0) {
|
|
|
+ subjectService.updateTotalScore(examId);
|
|
|
+ }
|
|
|
+ RequestUtils.setLog(request, success + "个科目导入成功;");
|
|
|
+ }
|
|
|
+ if (error.size() > 0) {
|
|
|
+ error.add("<br\\> 导入完毕后请重新统分!");
|
|
|
+ addMessage(redirectAttributes, StringUtils.join(error, "<br\\>"));
|
|
|
+ }
|
|
|
+ return "redirect:/admin/exam/paper";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Logging(menu = "导入主观题分组", type = LogType.IMPORT_FILE)
|
|
|
+ @RequestMapping(value = "/importGroup", method = RequestMethod.POST)
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
+ public String importGroupFile(HttpServletRequest request, MultipartFile file, RedirectAttributes redirectAttributes) {
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
+ List<String> error = new LinkedList<String>();
|
|
|
+ Map<String, SubjectQuestionDTO> map = parseQuestion(file, examId, false, error);
|
|
|
+ if (error.isEmpty()) {
|
|
|
+ int success = 0;
|
|
|
+ for (SubjectQuestionDTO dto : map.values()) {
|
|
|
+ // 每次导入都需要重新统分
|
|
|
+ examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
|
|
|
+ ExamSubject subject = subjectService.find(examId, dto.getSubjectCode());
|
|
|
+ if (subject != null) {
|
|
|
+ // 验证是否存在分组
|
|
|
+ List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subject.getCode());
|
|
|
+ if (groups != null && groups.size() > 0) {
|
|
|
+ error.add("[" + subject.getCode() + "] 已存在分组");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Map<Integer, String> titleMap = new HashMap<>();
|
|
|
+ List<ExamQuestion> current = questionService.findByExamAndSubjectAndObjective(examId,
|
|
|
+ subject.getCode(), false);
|
|
|
+ for (ExamQuestion question : current) {
|
|
|
+ titleMap.put(question.getMainNumber(), question.getMainTitle());
|
|
|
+ }
|
|
|
+ if (dto.validate(error, titleMap) && dto.validateGroupNumber(error)
|
|
|
+ && dto.getQuestionList().size() == current.size()) {
|
|
|
+ for (MarkGroup group : dto.getGroups().values()) {
|
|
|
+ if (group.getImportQuestionList() != null) {
|
|
|
+ boolean validate = true;
|
|
|
+ List<ExamQuestion> questionGroup = new ArrayList<ExamQuestion>();
|
|
|
+ for (ExamQuestion question : group.getImportQuestionList()) {
|
|
|
+ ExamQuestion old = questionService
|
|
|
+ .findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
|
|
|
+ subject.getCode(), false, question.getMainNumber(),
|
|
|
+ question.getSubNumber());
|
|
|
+ if (old == null) {
|
|
|
+ error.add("[" + group.getSubjectCode() + "_" + group.getNumber() + "] 有小题不存在");
|
|
|
+ validate = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ old.setGroupNumber(group.getNumber());
|
|
|
+ questionGroup.add(old);
|
|
|
+ }
|
|
|
+ // 校验通过小题才保存
|
|
|
+ if (validate && !questionGroup.isEmpty()) {
|
|
|
+ questionService.save(questionGroup);
|
|
|
+ }
|
|
|
+ // 有题目的分组才保存
|
|
|
+ if (questionService.countByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
+ group.getSubjectCode(), false, group.getNumber()) != 0) {
|
|
|
+ groupService.save(group);
|
|
|
+ studentService.updateSubjectiveStatusAndScoreAndInspectorId(examId,
|
|
|
+ group.getSubjectCode(), SubjectiveStatus.UNMARK, 0, null, null, null);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
success++;
|
|
|
}
|
|
@@ -331,6 +405,23 @@ public class PaperController extends BaseExamController {
|
|
|
return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode();
|
|
|
}
|
|
|
|
|
|
+ @Logging(menu = "删除题目", type = LogType.DELETE)
|
|
|
+ @RequestMapping(value = "/question-delete/{questionId}", method = RequestMethod.POST)
|
|
|
+ @RoleRequire(Role.SCHOOL_ADMIN)
|
|
|
+ public String delete(HttpServletRequest request, @PathVariable Integer questionId) {
|
|
|
+ ExamQuestion question = questionService.findById(questionId);
|
|
|
+ int examId = getSessionExamId(request);
|
|
|
+ String subjectCode = question.getSubjectCode();
|
|
|
+ boolean objective = question.isObjective();
|
|
|
+ questionService.deleteById(questionId);
|
|
|
+ if (objective) {
|
|
|
+ examService.updateObjectiveStatus(examId, ObjectiveStatus.WAITING);
|
|
|
+ }
|
|
|
+ subjectService.updateScore(examId, subjectCode, objective,
|
|
|
+ questionService.sumTotalScore(examId, subjectCode, objective));
|
|
|
+ return "redirect:/admin/exam/paper/detail?subjectCode=" + subjectCode;
|
|
|
+ }
|
|
|
+
|
|
|
@Logging(menu = "客观题统分", type = LogType.UPDATE)
|
|
|
@RequestMapping("/calculate")
|
|
|
@RoleRequire(Role.SCHOOL_ADMIN)
|