|
@@ -32,7 +32,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
-import java.text.DecimalFormat;
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
@Controller("markGroupController")
|
|
@Controller("markGroupController")
|
|
@@ -278,35 +277,27 @@ public class MarkGroupController extends BaseExamController {
|
|
int examId = getSessionExamId(request);
|
|
int examId = getSessionExamId(request);
|
|
MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
if (group != null) {
|
|
if (group != null) {
|
|
- String pictureConfig = buildPictureConfig(group);
|
|
|
|
- group.setPicList(pictureConfig);
|
|
|
|
- group.setQuestionList(
|
|
|
|
- questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number));
|
|
|
|
- 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));
|
|
|
|
- StringBuilder score = new StringBuilder();
|
|
|
|
- DecimalFormat format = new DecimalFormat("####.###");
|
|
|
|
- String title = "";
|
|
|
|
- for (ExamQuestion question : list) {
|
|
|
|
- if (score.length() > 0) {
|
|
|
|
- score.append(",");
|
|
|
|
- }
|
|
|
|
- score.append(format.format(question.getTotalScore()));
|
|
|
|
- title = question.getMainTitle();
|
|
|
|
|
|
+ group.setPicList(buildPictureConfig(group));
|
|
|
|
+ List<ExamQuestion> list = questionService
|
|
|
|
+ .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
|
|
|
|
+ List<ExamQuestionDTO> questionList = new ArrayList<>();
|
|
|
|
+ Map<Integer, ExamQuestionDTO> mainMap = new HashMap<>();
|
|
|
|
+ for (ExamQuestion question : list) {
|
|
|
|
+ ExamQuestionDTO dto = mainMap.get(question.getMainNumber());
|
|
|
|
+ if (dto == null) {
|
|
|
|
+ dto = new ExamQuestionDTO();
|
|
|
|
+ dto.setMainNumber(question.getMainNumber());
|
|
|
|
+ dto.setMainTitle(question.getMainTitle());
|
|
|
|
+ dto.setSubNumber(question.getSubNumber());
|
|
|
|
+ dto.setScoreList(new ArrayList<>());
|
|
|
|
+ mainMap.put(question.getMainNumber(), dto);
|
|
|
|
+ questionList.add(dto);
|
|
}
|
|
}
|
|
- MarkGroup question = new MarkGroup();
|
|
|
|
- question.setMainNumber(mainNumber);
|
|
|
|
- question.setTitle(title);
|
|
|
|
- question.setScoreList(score.toString());
|
|
|
|
- questionList.add(question);
|
|
|
|
|
|
+ dto.getScoreList().add(question.getTotalScore());
|
|
}
|
|
}
|
|
model.addAttribute("group", group);
|
|
model.addAttribute("group", group);
|
|
model.addAttribute("questionList", questionList);
|
|
model.addAttribute("questionList", questionList);
|
|
- model.addAttribute("pictureConfig", pictureConfig);
|
|
|
|
|
|
+ model.addAttribute("pictureConfig", group.getPicList());
|
|
model.addAttribute("markModeList", MarkMode.values());
|
|
model.addAttribute("markModeList", MarkMode.values());
|
|
model.addAttribute("scorePolicyList", ScorePolicy.values());
|
|
model.addAttribute("scorePolicyList", ScorePolicy.values());
|
|
model.addAttribute("thirdPolicyList", ThirdPolicy.values());
|
|
model.addAttribute("thirdPolicyList", ThirdPolicy.values());
|
|
@@ -359,8 +350,8 @@ public class MarkGroupController extends BaseExamController {
|
|
@RequestParam(required = false) Double arbitrateThreshold,
|
|
@RequestParam(required = false) Double arbitrateThreshold,
|
|
@RequestParam(required = false) Integer thirdPolicy, @RequestParam(required = false) Integer scorePolicy,
|
|
@RequestParam(required = false) Integer thirdPolicy, @RequestParam(required = false) Integer scorePolicy,
|
|
@RequestParam(required = false) MarkMode markMode, @RequestParam(required = false) Integer trialCount,
|
|
@RequestParam(required = false) MarkMode markMode, @RequestParam(required = false) Integer trialCount,
|
|
- @RequestParam(defaultValue = "false") Boolean sheetView,
|
|
|
|
- @RequestParam(defaultValue = "false") Boolean enableAllZero,
|
|
|
|
|
|
+ @RequestParam(required = false, defaultValue = "false") Boolean sheetView,
|
|
|
|
+ @RequestParam(required = false, defaultValue = "false") Boolean enableAllZero,
|
|
@RequestParam(required = false) String questionDetail,
|
|
@RequestParam(required = false) String questionDetail,
|
|
@RequestParam(required = false) String intervalScoreList) {
|
|
@RequestParam(required = false) String intervalScoreList) {
|
|
int examId = getSessionExamId(request);
|
|
int examId = getSessionExamId(request);
|
|
@@ -372,25 +363,8 @@ public class MarkGroupController extends BaseExamController {
|
|
questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
|
|
questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
|
|
JSONArray array = JSONArray.fromObject(questionDetail);
|
|
JSONArray array = JSONArray.fromObject(questionDetail);
|
|
List<ExamQuestionDTO> detailList = JSONArray.toList(array, new ExamQuestionDTO(), new JsonConfig());
|
|
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++) {
|
|
for (int i = 0; i < detailList.size(); i++) {
|
|
ExamQuestionDTO dto = detailList.get(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();
|
|
Object scoreListArray[] = array.getJSONObject(i).getJSONArray("scoreList").toArray();
|
|
List<Double> scoreList = new ArrayList<Double>();
|
|
List<Double> scoreList = new ArrayList<Double>();
|
|
for (int j = 0; j < scoreListArray.length; j++) {
|
|
for (int j = 0; j < scoreListArray.length; j++) {
|
|
@@ -398,14 +372,29 @@ public class MarkGroupController extends BaseExamController {
|
|
}
|
|
}
|
|
dto.setScoreList(scoreList);
|
|
dto.setScoreList(scoreList);
|
|
}
|
|
}
|
|
- if (detailList != null && detailList.size() > 0) {
|
|
|
|
|
|
+ List<ExamQuestion> questionList = buildQuestionList(group, detailList);
|
|
|
|
+ List<ExamQuestion> others = questionService
|
|
|
|
+ .findByExamAndSubjectAndObjectiveAndGroupNumberNotEqual(examId, subjectCode, false, number);
|
|
|
|
+ Set<String> numbers = new HashSet<>();
|
|
|
|
+ for (ExamQuestion examQuestion : others) {
|
|
|
|
+ numbers.add(examQuestion.getQuestionNumber());
|
|
|
|
+ }
|
|
|
|
+ for (ExamQuestion question : questionList) {
|
|
|
|
+ if (numbers.contains(question.getQuestionNumber())) {
|
|
|
|
+ addMessage(redirectAttributes, "题号不能重复");
|
|
|
|
+ redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
+ redirectAttributes.addAttribute("number", number);
|
|
|
|
+ return "redirect:/admin/exam/group/edit-full";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (!questionList.isEmpty()) {
|
|
ScorePolicy policy = scorePolicy != null ? ScorePolicy.findByValue(scorePolicy) : null;
|
|
ScorePolicy policy = scorePolicy != null ? ScorePolicy.findByValue(scorePolicy) : null;
|
|
ThirdPolicy third =
|
|
ThirdPolicy third =
|
|
thirdPolicy != null ? ThirdPolicy.findByValue(thirdPolicy) : ThirdPolicy.DISABLE;
|
|
thirdPolicy != null ? ThirdPolicy.findByValue(thirdPolicy) : ThirdPolicy.DISABLE;
|
|
try {
|
|
try {
|
|
lockService.waitlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),
|
|
lockService.waitlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),
|
|
group.getNumber());
|
|
group.getNumber());
|
|
- markService.updateGroup(group, buildQuestionList(group, detailList), policy, third);
|
|
|
|
|
|
+ markService.updateGroup(group, questionList, policy, third);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("update group error", e);
|
|
log.error("update group error", e);
|
|
throw new RuntimeException("重置更新大题失败", e);
|
|
throw new RuntimeException("重置更新大题失败", e);
|
|
@@ -476,11 +465,12 @@ public class MarkGroupController extends BaseExamController {
|
|
@Transactional
|
|
@Transactional
|
|
public String insert(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
public String insert(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
|
|
@RequestParam String subjectCode, @RequestParam Integer number, @RequestParam String questionDetail,
|
|
@RequestParam String subjectCode, @RequestParam Integer number, @RequestParam String questionDetail,
|
|
- @RequestParam(required = false) String picList, @RequestParam(required = false) Double doubleRate,
|
|
|
|
|
|
+ @RequestParam String picList, @RequestParam(required = false) Double doubleRate,
|
|
@RequestParam(required = false) Double arbitrateThreshold,
|
|
@RequestParam(required = false) Double arbitrateThreshold,
|
|
@RequestParam(required = false) Integer thirdPolicy, @RequestParam(required = false) Integer scorePolicy,
|
|
@RequestParam(required = false) Integer thirdPolicy, @RequestParam(required = false) Integer scorePolicy,
|
|
@RequestParam(required = false) String markMode, @RequestParam(required = false) Integer trialCount,
|
|
@RequestParam(required = false) String markMode, @RequestParam(required = false) Integer trialCount,
|
|
- @RequestParam boolean sheetView, @RequestParam boolean enableAllZero) {
|
|
|
|
|
|
+ @RequestParam(required = false, defaultValue = "false") boolean sheetView,
|
|
|
|
+ @RequestParam(defaultValue = "false") boolean enableAllZero) {
|
|
int examId = getSessionExamId(request);
|
|
int examId = getSessionExamId(request);
|
|
Exam exam = examService.findById(examId);
|
|
Exam exam = examService.findById(examId);
|
|
MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
@@ -492,17 +482,13 @@ public class MarkGroupController extends BaseExamController {
|
|
addMessage(redirectAttributes, "大题详情必须设置");
|
|
addMessage(redirectAttributes, "大题详情必须设置");
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
return "redirect:/admin/exam/group/add";
|
|
return "redirect:/admin/exam/group/add";
|
|
- } else if (StringUtils.isBlank(picList) && !exam.getType().equals(ExamType.MULTI_MEDIA)) {
|
|
|
|
- addMessage(redirectAttributes, "图片范围必须设置");
|
|
|
|
- redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
|
- return "redirect:/admin/exam/group/add";
|
|
|
|
} else {
|
|
} else {
|
|
try {
|
|
try {
|
|
// create group
|
|
// create group
|
|
// build picList
|
|
// build picList
|
|
List<PictureConfigItem> picConfigList = null;
|
|
List<PictureConfigItem> picConfigList = null;
|
|
if (!exam.getType().equals(ExamType.MULTI_MEDIA)) {
|
|
if (!exam.getType().equals(ExamType.MULTI_MEDIA)) {
|
|
- picList = StringEscapeUtils.unescapeHtml(picList);
|
|
|
|
|
|
+ picList = StringEscapeUtils.unescapeHtml(StringUtils.trimToNull(picList));
|
|
JSONArray array = JSONArray.fromObject(picList);
|
|
JSONArray array = JSONArray.fromObject(picList);
|
|
picConfigList = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
|
|
picConfigList = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
|
|
}
|
|
}
|
|
@@ -520,21 +506,22 @@ public class MarkGroupController extends BaseExamController {
|
|
dto.setScoreList(scoreList);
|
|
dto.setScoreList(scoreList);
|
|
}
|
|
}
|
|
if (detailList != null && detailList.size() > 0) {
|
|
if (detailList != null && detailList.size() > 0) {
|
|
- for (ExamQuestionDTO detail : detailList) {
|
|
|
|
- if (questionService.countByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
|
|
|
|
- detail.getMainNumber()) > 0) {
|
|
|
|
- addMessage(redirectAttributes, "大题号不能重复");
|
|
|
|
|
|
+ group = new MarkGroup(examId, subjectCode, number, picConfigList, 0d, doubleRate,
|
|
|
|
+ arbitrateThreshold, scorePolicy, markMode, trialCount, sheetView, enableAllZero,
|
|
|
|
+ thirdPolicy);
|
|
|
|
+ List<ExamQuestion> list = buildQuestionList(group, detailList);
|
|
|
|
+ for (ExamQuestion question : list) {
|
|
|
|
+ if (questionService
|
|
|
|
+ .countByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId, subjectCode, false,
|
|
|
|
+ question.getMainNumber(), question.getSubNumber()) > 0) {
|
|
|
|
+ addMessage(redirectAttributes, "题号不能重复");
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
return "redirect:/admin/exam/group/add";
|
|
return "redirect:/admin/exam/group/add";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- group = new MarkGroup(examId, subjectCode, number, picConfigList, 0d, doubleRate,
|
|
|
|
- arbitrateThreshold, scorePolicy, markMode, trialCount, sheetView, enableAllZero,
|
|
|
|
- thirdPolicy);
|
|
|
|
// clear and replace exam_question
|
|
// clear and replace exam_question
|
|
questionService
|
|
questionService
|
|
.deleteByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
|
|
.deleteByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, number);
|
|
- List<ExamQuestion> list = buildQuestionList(group, detailList);
|
|
|
|
questionService.save(list);
|
|
questionService.save(list);
|
|
groupService.save(group);
|
|
groupService.save(group);
|
|
subjectService
|
|
subjectService
|
|
@@ -604,19 +591,19 @@ public class MarkGroupController extends BaseExamController {
|
|
for (ExamQuestionDTO detail : detailList) {
|
|
for (ExamQuestionDTO detail : detailList) {
|
|
int i = 0;
|
|
int i = 0;
|
|
for (double score : detail.getScoreList()) {
|
|
for (double score : detail.getScoreList()) {
|
|
- i++;
|
|
|
|
totalScore += score;
|
|
totalScore += score;
|
|
ExamQuestion question = new ExamQuestion();
|
|
ExamQuestion question = new ExamQuestion();
|
|
question.setExamId(group.getExamId());
|
|
question.setExamId(group.getExamId());
|
|
question.setSubjectCode(group.getSubjectCode());
|
|
question.setSubjectCode(group.getSubjectCode());
|
|
question.setMainTitle(detail.getMainTitle());
|
|
question.setMainTitle(detail.getMainTitle());
|
|
question.setMainNumber(detail.getMainNumber());
|
|
question.setMainNumber(detail.getMainNumber());
|
|
- question.setSubNumber(i);
|
|
|
|
|
|
+ question.setSubNumber(detail.getSubNumber() + i);
|
|
question.setGroupNumber(group.getNumber());
|
|
question.setGroupNumber(group.getNumber());
|
|
question.setObjective(false);
|
|
question.setObjective(false);
|
|
question.setTotalScore(score);
|
|
question.setTotalScore(score);
|
|
question.setIntervalScore(1d);
|
|
question.setIntervalScore(1d);
|
|
list.add(question);
|
|
list.add(question);
|
|
|
|
+ i++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
group.setTotalScore(totalScore);
|
|
group.setTotalScore(totalScore);
|