|
@@ -289,7 +289,8 @@ public class MarkGroupController extends BaseExamController {
|
|
|
List<MarkGroup> questionList = new ArrayList<MarkGroup>();
|
|
|
String[] mainNumbers = group.getMainNumber().split(",");
|
|
|
for (String mainNumber : mainNumbers) {
|
|
|
- List<ExamQuestion> list = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false, Integer.parseInt(mainNumber));
|
|
|
+ List<ExamQuestion> list = questionService.findByExamAndSubjectAndObjectiveAndMainNumber(examId,
|
|
|
+ subjectCode, false, Integer.parseInt(mainNumber));
|
|
|
StringBuilder score = new StringBuilder();
|
|
|
DecimalFormat format = new DecimalFormat("###.#");
|
|
|
String title = "";
|
|
@@ -358,86 +359,98 @@ public class MarkGroupController extends BaseExamController {
|
|
|
int examId = getSessionExamId(request);
|
|
|
MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
|
if (group != null) {
|
|
|
- if (questionDetail != null && reset.booleanValue()) {
|
|
|
- // advance update
|
|
|
- questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
|
|
|
- JSONArray array = JSONArray.fromObject(questionDetail);
|
|
|
- List<ExamQuestionDTO> detailList = JSONArray.toList(array, new ExamQuestionDTO(), new JsonConfig());
|
|
|
- List<ExamQuestion> all = questionService.findByExamAndSubjectAndObjective(examId, subjectCode,false);
|
|
|
- List<ExamQuestion> old = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,false,number);
|
|
|
- Set<Integer> mainNumbers = new HashSet<Integer>();
|
|
|
- for (ExamQuestion examQuestion : all) {
|
|
|
- mainNumbers.add(examQuestion.getMainNumber());
|
|
|
- }
|
|
|
- for (ExamQuestion examQuestion : old) {
|
|
|
- mainNumbers.remove(examQuestion.getMainNumber());
|
|
|
- }
|
|
|
- for (int i = 0; i < detailList.size(); i++) {
|
|
|
- ExamQuestionDTO dto = detailList.get(i);
|
|
|
- if (mainNumbers.contains(dto.getMainNumber())) {
|
|
|
- addMessage(redirectAttributes, "大题号不能重复");
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
- redirectAttributes.addAttribute("number", number);
|
|
|
- return "redirect:/admin/exam/group/edit-full";
|
|
|
+ try {
|
|
|
+ if (questionDetail != null && reset.booleanValue()) {
|
|
|
+ // advance update
|
|
|
+ questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
|
|
|
+ JSONArray array = JSONArray.fromObject(questionDetail);
|
|
|
+ List<ExamQuestionDTO> detailList = JSONArray.toList(array, new ExamQuestionDTO(), new JsonConfig());
|
|
|
+ List<ExamQuestion> all = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, false);
|
|
|
+ List<ExamQuestion> old = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
+ subjectCode, false, number);
|
|
|
+ Set<Integer> mainNumbers = new HashSet<Integer>();
|
|
|
+ for (ExamQuestion examQuestion : all) {
|
|
|
+ mainNumbers.add(examQuestion.getMainNumber());
|
|
|
}
|
|
|
- Object scoreListArray[] = array.getJSONObject(i).getJSONArray("scoreList").toArray();
|
|
|
- List<Double> scoreList = new ArrayList<Double>();
|
|
|
- for (int j = 0; j < scoreListArray.length; j++) {
|
|
|
- scoreList.add(Double.parseDouble(scoreListArray[j].toString()));
|
|
|
+ for (ExamQuestion examQuestion : old) {
|
|
|
+ mainNumbers.remove(examQuestion.getMainNumber());
|
|
|
}
|
|
|
- dto.setScoreList(scoreList);
|
|
|
- }
|
|
|
- if (detailList != null && detailList.size() > 0) {
|
|
|
- ScorePolicy policy = scorePolicy != null ? ScorePolicy.findByValue(scorePolicy) : null;
|
|
|
- try {
|
|
|
- lockService.waitlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),group.getNumber());
|
|
|
- markService.updateGroup(group, buildQuestionList(group, detailList), policy);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("update group error", e);
|
|
|
- throw new RuntimeException("重置更新大题失败", e);
|
|
|
- } finally {
|
|
|
- lockService.unlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),group.getNumber());
|
|
|
+ for (int i = 0; i < detailList.size(); i++) {
|
|
|
+ ExamQuestionDTO dto = detailList.get(i);
|
|
|
+ if (mainNumbers.contains(dto.getMainNumber())) {
|
|
|
+ addMessage(redirectAttributes, "大题号不能重复");
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
+ redirectAttributes.addAttribute("number", number);
|
|
|
+ return "redirect:/admin/exam/group/edit-full";
|
|
|
+ }
|
|
|
+ Object scoreListArray[] = array.getJSONObject(i).getJSONArray("scoreList").toArray();
|
|
|
+ List<Double> scoreList = new ArrayList<Double>();
|
|
|
+ for (int j = 0; j < scoreListArray.length; j++) {
|
|
|
+ scoreList.add(Double.parseDouble(scoreListArray[j].toString()));
|
|
|
+ }
|
|
|
+ dto.setScoreList(scoreList);
|
|
|
}
|
|
|
- }
|
|
|
- } else {
|
|
|
- // simple update
|
|
|
- List<Double> intervalScores = buildDoubleList(intervalScoreList);
|
|
|
- List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
|
- examId, subjectCode, false, number);
|
|
|
- if (intervalScores.size() == questionList.size()) {
|
|
|
- for (int i = 0; i < questionList.size(); i++) {
|
|
|
- ExamQuestion q = questionList.get(i);
|
|
|
- q.setIntervalScore(intervalScores.get(i));
|
|
|
- questionService.save(q);
|
|
|
+ if (detailList != null && detailList.size() > 0) {
|
|
|
+ ScorePolicy policy = scorePolicy != null ? ScorePolicy.findByValue(scorePolicy) : null;
|
|
|
+ try {
|
|
|
+ lockService.waitlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),
|
|
|
+ group.getNumber());
|
|
|
+ markService.updateGroup(group, buildQuestionList(group, detailList), policy);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("update group error", e);
|
|
|
+ throw new RuntimeException("重置更新大题失败", e);
|
|
|
+ } finally {
|
|
|
+ lockService.unlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),
|
|
|
+ group.getNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // simple update
|
|
|
+ List<Double> intervalScores = buildDoubleList(intervalScoreList);
|
|
|
+ List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
|
+ examId, subjectCode, false, number);
|
|
|
+ if (intervalScores.size() == questionList.size()) {
|
|
|
+ for (int i = 0; i < questionList.size(); i++) {
|
|
|
+ ExamQuestion q = questionList.get(i);
|
|
|
+ q.setIntervalScore(intervalScores.get(i));
|
|
|
+ questionService.save(q);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ // quick update
|
|
|
+ picList = StringEscapeUtils.unescapeHtml(picList);
|
|
|
+ JSONArray array = JSONArray.fromObject(picList);
|
|
|
+ List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
|
|
|
+ if (list != null && !list.isEmpty()) {
|
|
|
+ groupService.updatePicList(examId, subjectCode, number, list);
|
|
|
+ }
|
|
|
+ if (doubleRate != null) {
|
|
|
+ groupService.updateDoubleRate(examId, subjectCode, number, doubleRate);
|
|
|
+ }
|
|
|
+ if (arbitrateThreshold != null) {
|
|
|
+ groupService.updateArbitrateThreshold(examId, subjectCode, number, arbitrateThreshold);
|
|
|
+ }
|
|
|
+ groupService.updateMarkMode(examId, subjectCode, number, markMode);
|
|
|
+ if (trialCount != null && trialCount > 0 && group.getStatus() == MarkStatus.TRIAL) {
|
|
|
+ groupService.updateTrialCount(examId, subjectCode, number, trialCount);
|
|
|
+ }
|
|
|
+ groupService.updateSheetView(examId, subjectCode, number, sheetView);
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
+ redirectAttributes.addAttribute("number", number);
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("edit markgroup error", e);
|
|
|
+ addMessage(redirectAttributes, "参数有误");
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
+ redirectAttributes.addAttribute("number", number);
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
}
|
|
|
- // quick update
|
|
|
- picList = StringEscapeUtils.unescapeHtml(picList);
|
|
|
- JSONArray array = JSONArray.fromObject(picList);
|
|
|
- List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
|
|
|
- if (list != null && !list.isEmpty()) {
|
|
|
- groupService.updatePicList(examId, subjectCode, number, list);
|
|
|
- }
|
|
|
- if (doubleRate != null) {
|
|
|
- groupService.updateDoubleRate(examId, subjectCode, number, doubleRate);
|
|
|
- }
|
|
|
- if (arbitrateThreshold != null) {
|
|
|
- groupService.updateArbitrateThreshold(examId, subjectCode, number, arbitrateThreshold);
|
|
|
- }
|
|
|
- groupService.updateMarkMode(examId, subjectCode, number, markMode);
|
|
|
- if (trialCount != null && trialCount > 0 && group.getStatus() == MarkStatus.TRIAL) {
|
|
|
- groupService.updateTrialCount(examId, subjectCode, number, trialCount);
|
|
|
- }
|
|
|
- groupService.updateSheetView(examId, subjectCode, number, sheetView);
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
- redirectAttributes.addAttribute("number", number);
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
} else {
|
|
|
addMessage(redirectAttributes, "找不到对应大题");
|
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
redirectAttributes.addAttribute("number", number);
|
|
|
- return "redirect:/admin/exam/group/edit-simple";
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -466,44 +479,51 @@ public class MarkGroupController extends BaseExamController {
|
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
return "redirect:/admin/exam/group/add";
|
|
|
} else {
|
|
|
- // create group
|
|
|
- // build picList
|
|
|
- picList = StringEscapeUtils.unescapeHtml(picList);
|
|
|
- JSONArray array = JSONArray.fromObject(picList);
|
|
|
- List<PictureConfigItem> picConfigList = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
|
|
|
- // build questionDetail
|
|
|
- questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
|
|
|
- array = JSONArray.fromObject(questionDetail);
|
|
|
- List<ExamQuestionDTO> detailList = JSONArray.toList(array, new ExamQuestionDTO(), new JsonConfig());
|
|
|
- for (int i = 0; i < detailList.size(); i++) {
|
|
|
- ExamQuestionDTO dto = detailList.get(i);
|
|
|
- Object o[] = array.getJSONObject(i).getJSONArray("scoreList").toArray();
|
|
|
- List<Double> scoreList = new ArrayList<Double>();
|
|
|
- for (int j = 0; j < o.length; j++) {
|
|
|
- scoreList.add(Double.parseDouble(o[j].toString()));
|
|
|
+ try {
|
|
|
+ // create group
|
|
|
+ // build picList
|
|
|
+ picList = StringEscapeUtils.unescapeHtml(picList);
|
|
|
+ JSONArray array = JSONArray.fromObject(picList);
|
|
|
+ List<PictureConfigItem> picConfigList = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
|
|
|
+ // build questionDetail
|
|
|
+ questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
|
|
|
+ array = JSONArray.fromObject(questionDetail);
|
|
|
+ List<ExamQuestionDTO> detailList = JSONArray.toList(array, new ExamQuestionDTO(), new JsonConfig());
|
|
|
+ for (int i = 0; i < detailList.size(); i++) {
|
|
|
+ ExamQuestionDTO dto = detailList.get(i);
|
|
|
+ Object o[] = array.getJSONObject(i).getJSONArray("scoreList").toArray();
|
|
|
+ List<Double> scoreList = new ArrayList<Double>();
|
|
|
+ for (int j = 0; j < o.length; j++) {
|
|
|
+ scoreList.add(Double.parseDouble(o[j].toString()));
|
|
|
+ }
|
|
|
+ dto.setScoreList(scoreList);
|
|
|
}
|
|
|
- dto.setScoreList(scoreList);
|
|
|
- }
|
|
|
- if (picConfigList != null && detailList != null && picConfigList.size() > 0 && detailList.size() > 0) {
|
|
|
- for (ExamQuestionDTO detail : detailList) {
|
|
|
- if (questionService.countByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
|
|
|
- detail.getMainNumber()) > 0) {
|
|
|
- addMessage(redirectAttributes, "大题号不能重复");
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
- return "redirect:/admin/exam/group/add";
|
|
|
+ if (picConfigList != null && detailList != null && picConfigList.size() > 0 && detailList.size() > 0) {
|
|
|
+ for (ExamQuestionDTO detail : detailList) {
|
|
|
+ if (questionService.countByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
|
|
|
+ detail.getMainNumber()) > 0) {
|
|
|
+ addMessage(redirectAttributes, "大题号不能重复");
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
+ return "redirect:/admin/exam/group/add";
|
|
|
+ }
|
|
|
}
|
|
|
+ group = new MarkGroup(examId, subjectCode, number, picConfigList, 0d, doubleRate, arbitrateThreshold,
|
|
|
+ scorePolicy, markMode, trialCount, sheetView);
|
|
|
+ // clear and replace exam_question
|
|
|
+ questionService.deleteByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
|
|
|
+ List<ExamQuestion> list = buildQuestionList(group, detailList);
|
|
|
+ questionService.save(list);
|
|
|
+ groupService.save(group);
|
|
|
+ subjectService.updateScore(examId, subjectCode, false, groupService.sumTotalScore(examId, subjectCode));
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
+ return "redirect:/admin/exam/group";
|
|
|
+ } else {
|
|
|
+ addMessage(redirectAttributes, "参数有误");
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
+ return "redirect:/admin/exam/group/add";
|
|
|
}
|
|
|
- group = new MarkGroup(examId, subjectCode, number, picConfigList, 0d, doubleRate, arbitrateThreshold,
|
|
|
- scorePolicy, markMode, trialCount, sheetView);
|
|
|
- // clear and replace exam_question
|
|
|
- questionService.deleteByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
|
|
|
- List<ExamQuestion> list = buildQuestionList(group, detailList);
|
|
|
- questionService.save(list);
|
|
|
- groupService.save(group);
|
|
|
- subjectService.updateScore(examId, subjectCode, false, groupService.sumTotalScore(examId, subjectCode));
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
- return "redirect:/admin/exam/group";
|
|
|
- } else {
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("add markgroup error", e);
|
|
|
addMessage(redirectAttributes, "参数有误");
|
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
return "redirect:/admin/exam/group/add";
|