|
@@ -1,18 +1,25 @@
|
|
|
package cn.com.qmth.stmms.admin.exam;
|
|
|
|
|
|
-import java.text.DecimalFormat;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.HashSet;
|
|
|
-import java.util.LinkedList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Set;
|
|
|
-
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-
|
|
|
+import cn.com.qmth.stmms.admin.dto.ExamQuestionDTO;
|
|
|
+import cn.com.qmth.stmms.biz.campus.model.Campus;
|
|
|
+import cn.com.qmth.stmms.biz.campus.service.CampusService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.model.*;
|
|
|
+import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.*;
|
|
|
+import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
+import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
+import cn.com.qmth.stmms.common.annotation.RoleRequire;
|
|
|
+import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
+import cn.com.qmth.stmms.common.enums.*;
|
|
|
+import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
|
|
|
+import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
+import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import net.sf.json.JSONArray;
|
|
|
import net.sf.json.JSONObject;
|
|
|
import net.sf.json.JsonConfig;
|
|
|
-
|
|
|
import org.apache.commons.lang.StringEscapeUtils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
@@ -27,40 +34,9 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|
|
import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
|
|
-import cn.com.qmth.stmms.admin.dto.ExamQuestionDTO;
|
|
|
-import cn.com.qmth.stmms.biz.campus.model.Campus;
|
|
|
-import cn.com.qmth.stmms.biz.campus.service.CampusService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.Exam;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
|
|
|
-import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
|
|
|
-import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
-import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
-import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
|
|
|
-import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
-import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
-import cn.com.qmth.stmms.common.annotation.RoleRequire;
|
|
|
-import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
-import cn.com.qmth.stmms.common.enums.ExamType;
|
|
|
-import cn.com.qmth.stmms.common.enums.LockType;
|
|
|
-import cn.com.qmth.stmms.common.enums.LogType;
|
|
|
-import cn.com.qmth.stmms.common.enums.MarkMode;
|
|
|
-import cn.com.qmth.stmms.common.enums.MarkStatus;
|
|
|
-import cn.com.qmth.stmms.common.enums.Role;
|
|
|
-import cn.com.qmth.stmms.common.enums.ScorePolicy;
|
|
|
-import cn.com.qmth.stmms.common.enums.ThirdPolicy;
|
|
|
-import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
|
|
|
-import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
-
|
|
|
-import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
-import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.text.DecimalFormat;
|
|
|
+import java.util.*;
|
|
|
|
|
|
@Controller("markGroupController")
|
|
|
@RequestMapping("/admin/exam/group")
|
|
@@ -115,12 +91,12 @@ public class MarkGroupController extends BaseExamController {
|
|
|
}
|
|
|
List<MarkGroup> list = groupService.findByExamAndSubject(examId, subjectCode);
|
|
|
for (MarkGroup group : list) {
|
|
|
- group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
|
|
|
- false, group.getNumber()));
|
|
|
+ group.setQuestionList(questionService
|
|
|
+ .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, group.getNumber()));
|
|
|
group.setMarkerCount(markerService.countByExamAndSubjectAndGroup(examId, subjectCode, group.getNumber()));
|
|
|
group.setCurrentCount(markService.applyCount(group));
|
|
|
- int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group
|
|
|
- .getLibraryCount()) : 0;
|
|
|
+ int percent =
|
|
|
+ group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group.getLibraryCount()) : 0;
|
|
|
group.setPercent(percent);
|
|
|
}
|
|
|
model.addAttribute("resultList", list);
|
|
@@ -137,13 +113,14 @@ public class MarkGroupController extends BaseExamController {
|
|
|
@RequestParam(required = false) Boolean withDouble, @RequestParam(required = false) MarkStatus status) {
|
|
|
int examId = getSessionExamId(request);
|
|
|
JSONArray array = new JSONArray();
|
|
|
- List<MarkGroup> list = withDouble != null && withDouble ? groupService.findByExamAndSubjectWithDouble(examId,
|
|
|
- subjectCode) : (status != null ? groupService
|
|
|
- .findByExamAndSubjectAndStatus(examId, subjectCode, status) : groupService.findByExamAndSubject(examId,
|
|
|
- subjectCode));
|
|
|
+ List<MarkGroup> list = withDouble != null && withDouble ?
|
|
|
+ groupService.findByExamAndSubjectWithDouble(examId, subjectCode) :
|
|
|
+ (status != null ?
|
|
|
+ groupService.findByExamAndSubjectAndStatus(examId, subjectCode, status) :
|
|
|
+ groupService.findByExamAndSubject(examId, subjectCode));
|
|
|
for (MarkGroup group : list) {
|
|
|
- group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
|
|
|
- false, group.getNumber()));
|
|
|
+ group.setQuestionList(questionService
|
|
|
+ .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, group.getNumber()));
|
|
|
JSONObject obj = new JSONObject();
|
|
|
obj.accumulate("number", group.getNumber());
|
|
|
obj.accumulate("title", group.getTitle());
|
|
@@ -280,13 +257,12 @@ public class MarkGroupController extends BaseExamController {
|
|
|
if (group != null) {
|
|
|
String pictureConfig = buildPictureConfig(group);
|
|
|
group.setPicList(pictureConfig);
|
|
|
- group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
|
|
|
- false, group.getNumber()));
|
|
|
+ group.setQuestionList(questionService
|
|
|
+ .findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, group.getNumber()));
|
|
|
model.addAttribute("group", group);
|
|
|
- model.addAttribute(
|
|
|
- "questions",
|
|
|
- questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
|
|
|
- group.getSubjectCode(), false, group.getNumber()));
|
|
|
+ model.addAttribute("questions", questionService
|
|
|
+ .findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
|
|
|
+ group.getNumber()));
|
|
|
model.addAttribute("pictureConfig", pictureConfig);
|
|
|
model.addAttribute("markModeList", MarkMode.values());
|
|
|
model.addAttribute("scorePolicyList", ScorePolicy.values());
|
|
@@ -309,13 +285,14 @@ public class MarkGroupController extends BaseExamController {
|
|
|
if (group != null) {
|
|
|
String pictureConfig = buildPictureConfig(group);
|
|
|
group.setPicList(pictureConfig);
|
|
|
- group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
|
|
|
- false, number));
|
|
|
+ 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));
|
|
|
+ List<ExamQuestion> list = questionService
|
|
|
+ .findByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
|
|
|
+ Integer.parseInt(mainNumber));
|
|
|
StringBuilder score = new StringBuilder();
|
|
|
DecimalFormat format = new DecimalFormat("####.###");
|
|
|
String title = "";
|
|
@@ -385,7 +362,8 @@ public class MarkGroupController extends BaseExamController {
|
|
|
@RequestParam(required = false) Double arbitrateThreshold,
|
|
|
@RequestParam(required = false) Integer thirdPolicy, @RequestParam(required = false) Integer scorePolicy,
|
|
|
@RequestParam(required = false) MarkMode markMode, @RequestParam(required = false) Integer trialCount,
|
|
|
- @RequestParam(required = false) boolean sheetView, @RequestParam(required = false) String questionDetail,
|
|
|
+ @RequestParam boolean sheetView, @RequestParam boolean enableAllZero,
|
|
|
+ @RequestParam(required = false) String questionDetail,
|
|
|
@RequestParam(required = false) String intervalScoreList) {
|
|
|
int examId = getSessionExamId(request);
|
|
|
MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
@@ -396,10 +374,10 @@ public class MarkGroupController extends BaseExamController {
|
|
|
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);
|
|
|
+ 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());
|
|
@@ -424,8 +402,8 @@ public class MarkGroupController extends BaseExamController {
|
|
|
}
|
|
|
if (detailList != null && detailList.size() > 0) {
|
|
|
ScorePolicy policy = scorePolicy != null ? ScorePolicy.findByValue(scorePolicy) : null;
|
|
|
- ThirdPolicy third = thirdPolicy != null ? ThirdPolicy.findByValue(thirdPolicy)
|
|
|
- : ThirdPolicy.DISABLE;
|
|
|
+ ThirdPolicy third =
|
|
|
+ thirdPolicy != null ? ThirdPolicy.findByValue(thirdPolicy) : ThirdPolicy.DISABLE;
|
|
|
try {
|
|
|
lockService.waitlock(LockType.GROUP, true, group.getExamId(), group.getSubjectCode(),
|
|
|
group.getNumber());
|
|
@@ -441,8 +419,8 @@ public class MarkGroupController extends BaseExamController {
|
|
|
} else {
|
|
|
// simple update
|
|
|
List<Double> intervalScores = buildDoubleList(intervalScoreList);
|
|
|
- List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
|
- examId, subjectCode, false, number);
|
|
|
+ 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);
|
|
@@ -469,6 +447,7 @@ public class MarkGroupController extends BaseExamController {
|
|
|
groupService.updateTrialCount(examId, subjectCode, number, trialCount);
|
|
|
}
|
|
|
groupService.updateSheetView(examId, subjectCode, number, sheetView);
|
|
|
+ groupService.updateEnableAllZero(examId, subjectCode, number, enableAllZero);
|
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
redirectAttributes.addAttribute("number", number);
|
|
|
return "redirect:/admin/exam/group";
|
|
@@ -499,7 +478,7 @@ public class MarkGroupController extends BaseExamController {
|
|
|
@RequestParam(required = false) Double arbitrateThreshold,
|
|
|
@RequestParam(required = false) Integer thirdPolicy, @RequestParam(required = false) Integer scorePolicy,
|
|
|
@RequestParam(required = false) String markMode, @RequestParam(required = false) Integer trialCount,
|
|
|
- @RequestParam(required = false) boolean sheetView) {
|
|
|
+ @RequestParam boolean sheetView, @RequestParam boolean enableAllZero) {
|
|
|
int examId = getSessionExamId(request);
|
|
|
Exam exam = examService.findById(examId);
|
|
|
MarkGroup group = groupService.findOne(examId, subjectCode, number);
|
|
@@ -548,15 +527,16 @@ public class MarkGroupController extends BaseExamController {
|
|
|
}
|
|
|
}
|
|
|
group = new MarkGroup(examId, subjectCode, number, picConfigList, 0d, doubleRate,
|
|
|
- arbitrateThreshold, scorePolicy, markMode, trialCount, sheetView, thirdPolicy);
|
|
|
+ arbitrateThreshold, scorePolicy, markMode, trialCount, sheetView, enableAllZero,
|
|
|
+ thirdPolicy);
|
|
|
// 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));
|
|
|
+ subjectService
|
|
|
+ .updateScore(examId, subjectCode, false, groupService.sumTotalScore(examId, subjectCode));
|
|
|
redirectAttributes.addAttribute("subjectCode", subjectCode);
|
|
|
return "redirect:/admin/exam/group";
|
|
|
} else {
|
|
@@ -614,8 +594,9 @@ public class MarkGroupController extends BaseExamController {
|
|
|
|
|
|
private List<String> buildPicUrl(ExamStudent examStudent) {
|
|
|
Campus campus = campusService.findBySchoolAndName(examStudent.getSchoolId(), examStudent.getCampusName());
|
|
|
- List<String> picUrls = PictureUrlBuilder.getSliceUrls(examStudent.getExamId(), campus.getId(),
|
|
|
- examStudent.getSubjectCode(), examStudent.getExamNumber(), examStudent.getSliceCount());
|
|
|
+ List<String> picUrls = PictureUrlBuilder
|
|
|
+ .getSliceUrls(examStudent.getExamId(), campus.getId(), examStudent.getSubjectCode(),
|
|
|
+ examStudent.getExamNumber(), examStudent.getSliceCount());
|
|
|
return picUrls;
|
|
|
}
|
|
|
|