|
@@ -1,45 +1,81 @@
|
|
|
package cn.com.qmth.stmms.mark;
|
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Calendar;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+
|
|
|
+import net.sf.json.JSONArray;
|
|
|
+import net.sf.json.JSONObject;
|
|
|
+
|
|
|
+import org.apache.commons.lang.StringEscapeUtils;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.data.domain.Sort;
|
|
|
+import org.springframework.data.domain.Sort.Direction;
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMethod;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.bind.annotation.ResponseBody;
|
|
|
+import org.springframework.web.servlet.ModelAndView;
|
|
|
+
|
|
|
import cn.com.qmth.stmms.admin.utils.SessionExamUtils;
|
|
|
import cn.com.qmth.stmms.biz.exam.model.Exam;
|
|
|
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.model.Marker;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.*;
|
|
|
+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.ExamSubjectService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkerClassService;
|
|
|
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
import cn.com.qmth.stmms.biz.file.service.FileService;
|
|
|
import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
-import cn.com.qmth.stmms.biz.mark.model.*;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.MarkResult;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.ProblemType;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.SubmitResult;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.Task;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
|
|
|
+import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
|
|
|
import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
|
|
|
-import cn.com.qmth.stmms.biz.mark.service.*;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.ProblemTypeService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
|
|
|
+import cn.com.qmth.stmms.biz.mark.service.TrialService;
|
|
|
import cn.com.qmth.stmms.biz.user.model.User;
|
|
|
import cn.com.qmth.stmms.biz.user.service.UserService;
|
|
|
import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
import cn.com.qmth.stmms.common.controller.BaseController;
|
|
|
import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
-import cn.com.qmth.stmms.common.enums.*;
|
|
|
+import cn.com.qmth.stmms.common.enums.ExamStatus;
|
|
|
+import cn.com.qmth.stmms.common.enums.ExamType;
|
|
|
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
|
|
|
+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.session.model.StmmsSession;
|
|
|
import cn.com.qmth.stmms.common.session.service.SessionService;
|
|
|
import cn.com.qmth.stmms.common.utils.EncryptUtils;
|
|
|
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 org.apache.commons.lang.StringEscapeUtils;
|
|
|
-import org.apache.commons.lang.StringUtils;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.beans.factory.annotation.Value;
|
|
|
-import org.springframework.data.domain.Sort;
|
|
|
-import org.springframework.data.domain.Sort.Direction;
|
|
|
-import org.springframework.stereotype.Controller;
|
|
|
-import org.springframework.web.bind.annotation.*;
|
|
|
-import org.springframework.web.servlet.ModelAndView;
|
|
|
-
|
|
|
-import javax.servlet.http.HttpServletRequest;
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.util.*;
|
|
|
|
|
|
@Controller
|
|
|
@RequestMapping("/mark")
|
|
@@ -89,6 +125,15 @@ public class MarkController extends BaseController {
|
|
|
@Autowired
|
|
|
private FileService fileService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ExamQuestionService questionService;
|
|
|
+
|
|
|
+ @Value("${slice.split.config}")
|
|
|
+ private String splitConfig;
|
|
|
+
|
|
|
+ @Value("${marker.prefetch.count}")
|
|
|
+ private long prefetchCount;
|
|
|
+
|
|
|
@Value("${marker.forceMode}")
|
|
|
private String forceMarkMode;
|
|
|
|
|
@@ -160,8 +205,7 @@ public class MarkController extends BaseController {
|
|
|
}
|
|
|
|
|
|
@RequestMapping(value = "/subject-select", method = RequestMethod.POST)
|
|
|
- public ModelAndView select(HttpServletRequest request, HttpServletResponse response,
|
|
|
- @RequestParam Integer markerId) {
|
|
|
+ public ModelAndView select(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer markerId) {
|
|
|
WebUser user = RequestUtils.getWebUser(request);
|
|
|
ModelAndView modelAndView = new ModelAndView("modules/mark/subjectSelect");
|
|
|
Calendar rightNow = Calendar.getInstance();
|
|
@@ -171,136 +215,94 @@ public class MarkController extends BaseController {
|
|
|
modelAndView.addObject("examList", examList);
|
|
|
|
|
|
Marker marker = markerService.findById(markerId);
|
|
|
+ if (marker == null) {
|
|
|
+ modelAndView.addObject("message", "评卷分组不存在");
|
|
|
+ return modelAndView;
|
|
|
+ }
|
|
|
Exam exam = examService.findById(marker.getExamId());
|
|
|
modelAndView.addObject("exam", exam);
|
|
|
+ Date now = new Date();
|
|
|
+ if ((exam.getStartTime() != null && now.before(exam.getStartTime()))
|
|
|
+ || (exam.getEndTime() != null && now.after(exam.getEndTime()))) {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ String start = exam.getStartTime() == null ? "" : " 开始时间:" + sdf.format(exam.getStartTime());
|
|
|
+ String end = exam.getEndTime() == null ? "" : " 结束时间:" + sdf.format(exam.getEndTime());
|
|
|
+ modelAndView.addObject("message", "不在评卷时间范围 " + start + " " + end);
|
|
|
+ return modelAndView;
|
|
|
+ }
|
|
|
MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
if (group == null) {
|
|
|
- modelAndView.addObject("message", "user.login.error.group");
|
|
|
+ modelAndView.addObject("message", "评卷分组不存在");
|
|
|
return modelAndView;
|
|
|
}
|
|
|
if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
- modelAndView.addObject("message", "user.login.error.finish");
|
|
|
+ modelAndView.addObject("message", "评卷分组已结束");
|
|
|
return modelAndView;
|
|
|
}
|
|
|
-
|
|
|
user.setMarkerId(marker.getId());
|
|
|
StmmsSession session = RequestUtils.getSession(request);
|
|
|
session.saveWebUser(user);
|
|
|
sessionService.put(request, response, session);
|
|
|
SessionExamUtils.setExamId(request, exam);
|
|
|
- return new ModelAndView("redirect:/mark/index");
|
|
|
- }
|
|
|
-
|
|
|
- @RequestMapping("/index")
|
|
|
- public ModelAndView index(HttpServletRequest request, @RequestParam(value = "mode", required = false) String mode) {
|
|
|
- Marker marker = RequestUtils.getWebUser(request).getMarker();
|
|
|
- if (marker == null) {
|
|
|
- return new ModelAndView("redirect:/mark/subject-select");
|
|
|
- }
|
|
|
- ModelAndView modelAndView = getMarkModeView(marker, MarkMode.findByName(mode));
|
|
|
- preProcess(marker, modelAndView);
|
|
|
- return modelAndView;
|
|
|
- }
|
|
|
-
|
|
|
- private ModelAndView getMarkModeView(Marker marker, MarkMode mode) {
|
|
|
- // 多媒体阅卷
|
|
|
- Exam exam = examService.findById(marker.getExamId());
|
|
|
- boolean forceMode = false;
|
|
|
- MarkMode sysMode = MarkMode.findByName(forceMarkMode);
|
|
|
- MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
- if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
|
|
|
- ModelAndView view = new ModelAndView("modules/mark/markJson");
|
|
|
- view.addObject("forceMode", false);
|
|
|
- view.addObject("sheetView", false);
|
|
|
- view.addObject("isFormal", group.getStatus() == MarkStatus.FORMAL);
|
|
|
- return view;
|
|
|
- }
|
|
|
- if (sysMode != null) {
|
|
|
- // 全局配置的强制评卷模式
|
|
|
- mode = sysMode;
|
|
|
- forceMode = true;
|
|
|
- } else {
|
|
|
- // 没有全局配置,优先从大题配置取强制评卷模式
|
|
|
- if (group != null && group.getMarkMode() != null) {
|
|
|
- mode = group.getMarkMode();
|
|
|
- forceMode = true;
|
|
|
- }
|
|
|
- // 否则取评卷员当前记录的评卷模式
|
|
|
- if (mode == null) {
|
|
|
- mode = marker.getMode();
|
|
|
- }
|
|
|
- if (mode == null) {
|
|
|
- mode = MarkMode.COMMON;
|
|
|
- }
|
|
|
- if (marker.getMode() != mode) {
|
|
|
- marker.setMode(mode);
|
|
|
- markerService.save(marker);
|
|
|
- }
|
|
|
- }
|
|
|
- ModelAndView view = new ModelAndView(
|
|
|
- mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
|
|
|
- view.addObject("forceMode", forceMode);
|
|
|
- view.addObject("sheetView", group.isSheetView());
|
|
|
- view.addObject("enableAllZero", group.isEnableAllZero());
|
|
|
- view.addObject("isFormal", group.getStatus() == MarkStatus.FORMAL);
|
|
|
- return view;
|
|
|
+ return new ModelAndView("redirect:/web/mark");
|
|
|
}
|
|
|
|
|
|
@RequestMapping("/logout")
|
|
|
public ModelAndView logout(HttpServletRequest request) {
|
|
|
WebUser wu = RequestUtils.getWebUser(request);
|
|
|
releaseMarker(wu.getMarker());
|
|
|
- return new ModelAndView("redirect:/logout");
|
|
|
+ StmmsSession session = RequestUtils.getSession(request);
|
|
|
+ String logoutUrl = session.getWebUserLogoutUrl();
|
|
|
+ session.setInvalid(true);
|
|
|
+ if (StringUtils.isNotBlank(logoutUrl)) {
|
|
|
+ return new ModelAndView("redirect:" + logoutUrl);
|
|
|
+ } else {
|
|
|
+ return new ModelAndView("redirect:/mark-login");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 进入评卷界面后的通用预处理
|
|
|
- *
|
|
|
- * @param marker
|
|
|
- * @param modelAndView
|
|
|
- */
|
|
|
- private void preProcess(Marker marker, ModelAndView modelAndView) {
|
|
|
- modelAndView.addObject("fileServer", fileService.getFileServer());
|
|
|
- modelAndView.addObject("marker", marker);
|
|
|
- ExamSubject subject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
|
|
|
- subject.setPaperAnswerUrl(fileService);
|
|
|
- modelAndView.addObject("subject", subject);
|
|
|
+ @RequestMapping(value = "/getSetting", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public JSONObject getSetting(HttpServletRequest request) {
|
|
|
+ JSONObject setting = new JSONObject();
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
+ Marker marker = wu.getMarker();
|
|
|
Exam exam = examService.findById(marker.getExamId());
|
|
|
- modelAndView.addObject("forceSpecialTag", exam.isForceSpecialTag());
|
|
|
- modelAndView.addObject("defaultSetting", StringUtils.trimToNull(marker.getMarkSetting()));
|
|
|
- String sheetConfig = "";
|
|
|
- if (StringUtils.isNotBlank(subject.getSheetConfig())) {
|
|
|
- sheetConfig = buildPictureConfig(subject.getSheetConfig());
|
|
|
- } else if (StringUtils.isNotBlank(exam.getSheetConfig())) {
|
|
|
- sheetConfig = buildPictureConfig(exam.getSheetConfig());
|
|
|
- }
|
|
|
- modelAndView.addObject("sheetConfig", sheetConfig);
|
|
|
- releaseMarker(marker);
|
|
|
-
|
|
|
- List<ProblemType> problemTypes = problemTypeService.findByExamId(marker.getExamId());
|
|
|
- List<Marker> markers = markerService
|
|
|
- .findByExamAndSubjectAndUserIdAndEnable(marker.getExamId(), marker.getSubjectCode(), marker.getUserId(),
|
|
|
- true);
|
|
|
- markers.remove(marker);
|
|
|
- for (Marker m : markers) {
|
|
|
- m.setMarkSetting(null);
|
|
|
- }
|
|
|
- ObjectMapper mapper = new ObjectMapper();
|
|
|
- try {
|
|
|
- modelAndView.addObject("problemTypes", mapper.writeValueAsString(problemTypes));
|
|
|
- modelAndView.addObject("groups", mapper.writeValueAsString(markers));
|
|
|
- } catch (JsonProcessingException e) {
|
|
|
- log.error("MarkController-问题类型获取出错", e);
|
|
|
- }
|
|
|
+ MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
+ setting.accumulate("examType", exam.getType());
|
|
|
+ setting.accumulate("startTime", exam.getStartTime() == null ? 0 : exam.getStartTime().getTime());
|
|
|
+ setting.accumulate("endTime", exam.getEndTime() == null ? 0 : exam.getEndTime().getTime());
|
|
|
+ setting.accumulate("topCount", marker.getTopCount() != null ? marker.getTopCount() : 0);
|
|
|
+ setting.accumulate("sheetView", group.isSheetView() && exam.isSheetView());
|
|
|
+ setting.accumulate("enableAllZero", group.isEnableAllZero());
|
|
|
+ setting.accumulate("statusValue", group.getStatus());
|
|
|
+ setting.accumulate("groupNumber", group.getNumber());
|
|
|
+ group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
|
|
|
+ group.getSubjectCode(), false, group.getNumber()));
|
|
|
+ setting.accumulate("groupTitle", group.getTitle());
|
|
|
+ setting.accumulate("fileServer", fileService.getFileServer());
|
|
|
+ setting.accumulate("forceSpecialTag", exam.isForceSpecialTag());
|
|
|
+ setting.accumulate("uiSetting",
|
|
|
+ StringUtils.isBlank(marker.getMarkSetting()) ? new JSONObject() : marker.getMarkSetting());
|
|
|
+ setting.accumulate("splitConfig", getSplitConfig());
|
|
|
+ setting.accumulate("prefetchCount", prefetchCount);
|
|
|
+ setModeAndForceMode(setting, exam, marker, group);
|
|
|
+ setSubjectAndSheetConfig(setting, marker, exam);
|
|
|
+ setting.accumulate("userName", RequestUtils.getWebUser(request).getName());
|
|
|
+ setProblemType(setting, marker);
|
|
|
+ return setting;
|
|
|
}
|
|
|
|
|
|
- @RequestMapping("/clear")
|
|
|
- @ResponseBody
|
|
|
- public void clear(HttpServletRequest request) {
|
|
|
- releaseMarker(RequestUtils.getWebUser(request).getMarker());
|
|
|
+ private double[] getSplitConfig() {
|
|
|
+ String strs[] = splitConfig.split(",");
|
|
|
+ double[] config = new double[strs.length];
|
|
|
+ for (int i = 0; i < strs.length; i++) {
|
|
|
+ config[i] = Double.parseDouble(strs[i]);
|
|
|
+ }
|
|
|
+ return config;
|
|
|
}
|
|
|
|
|
|
- @RequestMapping("/status")
|
|
|
+ @RequestMapping(value = "/getStatus", method = RequestMethod.POST)
|
|
|
@ResponseBody
|
|
|
public JSONObject status(HttpServletRequest request) {
|
|
|
JSONObject status = new JSONObject();
|
|
@@ -314,11 +316,9 @@ public class MarkController extends BaseController {
|
|
|
long totalCount = 0;
|
|
|
long personCount = 0;
|
|
|
long markedCount = 0;
|
|
|
- long exceptionCount = 0;
|
|
|
- long topCount = 0;
|
|
|
+ long problemCount = 0;
|
|
|
+ long arbitrateCount = 0;
|
|
|
if (group.getStatus() == MarkStatus.FORMAL) {
|
|
|
- topCount = marker.getTopCount() != null ? marker.getTopCount() : 0;
|
|
|
-
|
|
|
MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
|
|
|
query.setExamId(marker.getExamId());
|
|
|
query.setSubjectCode(marker.getSubjectCode());
|
|
@@ -326,18 +326,21 @@ public class MarkController extends BaseController {
|
|
|
totalCount = libraryService.countByQuery(query);
|
|
|
|
|
|
query.setMarkerId(marker.getId());
|
|
|
+ query.addStatus(LibraryStatus.MARKED);
|
|
|
+ query.addStatus(LibraryStatus.INSPECTED);
|
|
|
personCount = libraryService.countByQuery(query);
|
|
|
|
|
|
query.setMarkerId(0);
|
|
|
- query.addStatus(LibraryStatus.MARKED);
|
|
|
query.addStatus(LibraryStatus.ARBITRATED);
|
|
|
- query.addStatus(LibraryStatus.INSPECTED);
|
|
|
markedCount = libraryService.countByQuery(query);
|
|
|
|
|
|
query.clearStatus();
|
|
|
- query.addStatus(LibraryStatus.WAIT_ARBITRATE);
|
|
|
query.addStatus(LibraryStatus.PROBLEM);
|
|
|
- exceptionCount = libraryService.countByQuery(query);
|
|
|
+ problemCount = libraryService.countByQuery(query);
|
|
|
+
|
|
|
+ query.clearStatus();
|
|
|
+ query.addStatus(LibraryStatus.WAIT_ARBITRATE);
|
|
|
+ arbitrateCount = libraryService.countByQuery(query);
|
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
totalCount = trialService.countLibrary(group.getExamId(), group.getSubjectCode(), group.getNumber());
|
|
|
personCount = trialService.countMarkerHistory(marker.getId());
|
|
@@ -346,13 +349,39 @@ public class MarkController extends BaseController {
|
|
|
status.accumulate("personCount", personCount);
|
|
|
status.accumulate("totalCount", totalCount);
|
|
|
status.accumulate("markedCount", markedCount);
|
|
|
- status.accumulate("exceptionCount", exceptionCount);
|
|
|
+ status.accumulate("problemCount", problemCount);
|
|
|
+ status.accumulate("arbitrateCount", arbitrateCount);
|
|
|
status.accumulate("valid", totalCount > 0);
|
|
|
- status.accumulate("topCount", topCount);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
- @RequestMapping("/gettask")
|
|
|
+ @RequestMapping(value = "/getGroup", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ public JSONArray getGroup(HttpServletRequest request) {
|
|
|
+ Marker marker = RequestUtils.getWebUser(request).getMarker();
|
|
|
+ JSONArray array = new JSONArray();
|
|
|
+ List<Marker> markers = markerService.findByExamAndSubjectAndUserIdAndEnable(marker.getExamId(),
|
|
|
+ marker.getSubjectCode(), marker.getUserId(), true);
|
|
|
+ for (Marker m : markers) {
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
+ json.accumulate("markerId", m.getId());
|
|
|
+ json.accumulate("number", m.getGroupNumber());
|
|
|
+ MarkGroup group = groupService.findOne(m.getExamId(), m.getSubjectCode(), m.getGroupNumber());
|
|
|
+ group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
|
|
|
+ group.getSubjectCode(), false, group.getNumber()));
|
|
|
+ json.accumulate("title", group.getTitle());
|
|
|
+ json.accumulate("totalCount", group.getLibraryCount());
|
|
|
+ if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
+ json.accumulate("markedCount", trialService.countMarkerHistory(m.getId()));
|
|
|
+ } else {
|
|
|
+ json.accumulate("markedCount", group.getMarkedCount());
|
|
|
+ }
|
|
|
+ array.add(json);
|
|
|
+ }
|
|
|
+ return array;
|
|
|
+ }
|
|
|
+
|
|
|
+ @RequestMapping(value = "/getTask", method = RequestMethod.POST)
|
|
|
@ResponseBody
|
|
|
public Task getTask(HttpServletRequest request) {
|
|
|
Marker marker = RequestUtils.getWebUser(request).getMarker();
|
|
@@ -365,12 +394,10 @@ public class MarkController extends BaseController {
|
|
|
.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
if (group == null) {
|
|
|
task = new Task();
|
|
|
- task.setExist(false);
|
|
|
- task.setMessage("mark.control.task.not.exist");
|
|
|
+ task.setMessage("评卷大题不存在");
|
|
|
} else if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
task = new Task();
|
|
|
- task.setExist(false);
|
|
|
- task.setMessage("mark.control.task.finish");
|
|
|
+ task.setMessage("评卷已结束");
|
|
|
} else if (group.getStatus() == MarkStatus.TRIAL) {
|
|
|
task = getTrialTask(marker);
|
|
|
} else if (group.getStatus() == MarkStatus.FORMAL) {
|
|
@@ -378,8 +405,7 @@ public class MarkController extends BaseController {
|
|
|
}
|
|
|
if (task == null) {
|
|
|
task = new Task();
|
|
|
- task.setExist(false);
|
|
|
- task.setMessage("mark.control.task.null");
|
|
|
+ task.setMessage("当前无评卷任务");
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.error("get task error", e);
|
|
@@ -393,13 +419,15 @@ public class MarkController extends BaseController {
|
|
|
private Task getFormalTask(Marker marker) {
|
|
|
int retry = 1;
|
|
|
Task task = null;
|
|
|
+ List<MarkLibrary> list = new ArrayList<MarkLibrary>();
|
|
|
while (task == null) {
|
|
|
- List<MarkLibrary> list = new ArrayList<MarkLibrary>();
|
|
|
// 需要判断评卷员是否绑定了班级
|
|
|
+ Set<LibraryStatus> statusSet = new HashSet<>();
|
|
|
+ statusSet.add(LibraryStatus.WAITING);
|
|
|
+ statusSet.add(LibraryStatus.REJECTED);
|
|
|
long classCount = markerClassService.countByUserIdAndExamId(marker.getUserId(), marker.getExamId());
|
|
|
- list = libraryService
|
|
|
- .findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(), marker.getId(),
|
|
|
- marker.getUserId(), classCount > 0, retry, 20);
|
|
|
+ list = libraryService.findUnMarked(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
|
|
|
+ marker.getId(), marker.getUserId(), classCount > 0, retry, 20, statusSet);
|
|
|
if (list.isEmpty()) {
|
|
|
break;
|
|
|
}
|
|
@@ -420,9 +448,8 @@ public class MarkController extends BaseController {
|
|
|
int retry = 1;
|
|
|
Task task = null;
|
|
|
while (task == null) {
|
|
|
- List<TrialLibrary> list = trialService
|
|
|
- .findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
|
|
|
- marker.getId(), retry, 10);
|
|
|
+ List<TrialLibrary> list = trialService.findUnMarkedLibrary(marker.getExamId(), marker.getSubjectCode(),
|
|
|
+ marker.getGroupNumber(), marker.getId(), retry, 10);
|
|
|
if (list.isEmpty()) {
|
|
|
break;
|
|
|
}
|
|
@@ -438,7 +465,7 @@ public class MarkController extends BaseController {
|
|
|
}
|
|
|
|
|
|
@Logging(menu = "评卷", type = LogType.UPDATE)
|
|
|
- @RequestMapping(value = "/savetask", method = RequestMethod.POST)
|
|
|
+ @RequestMapping(value = "/saveTask")
|
|
|
@ResponseBody
|
|
|
public JSONObject saveTask(HttpServletRequest request, @RequestBody MarkResult markResult) {
|
|
|
JSONObject result = new JSONObject();
|
|
@@ -463,32 +490,29 @@ public class MarkController extends BaseController {
|
|
|
lockService.unwatch(LockType.EXAM_SUBJECT, marker.getExamId(), marker.getSubjectCode());
|
|
|
}
|
|
|
result.accumulate("success", success);
|
|
|
- result.accumulate("status", status(request));
|
|
|
+ // result.accumulate("status", status(request));
|
|
|
if (!success) {
|
|
|
- result.accumulate("message", "mark.control.task.error");
|
|
|
+ result.accumulate("message", "评卷任务提交失败,请刷新页面");
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@Logging(menu = "查询回评任务", type = LogType.QUERY)
|
|
|
- @RequestMapping("/gethistory")
|
|
|
+ @RequestMapping(value = "/getHistory", method = RequestMethod.POST)
|
|
|
@ResponseBody
|
|
|
- public Object history(HttpServletRequest request, @RequestParam int pageNumber, @RequestParam int pageSize,
|
|
|
- @RequestParam String order, @RequestParam String sort,
|
|
|
- @RequestParam(required = false, defaultValue = "false") Boolean isTag,
|
|
|
- @RequestParam(required = false) String secretNumber) throws Exception {
|
|
|
+ public Object getHistory(HttpServletRequest request, @RequestParam int pageNumber, @RequestParam int pageSize,
|
|
|
+ @RequestParam String order, @RequestParam String sort, @RequestParam(required = false) String secretNumber)
|
|
|
+ throws Exception {
|
|
|
Marker marker = RequestUtils.getWebUser(request).getMarker();
|
|
|
List<Task> list = new ArrayList<>();
|
|
|
Direction d = Direction.DESC;
|
|
|
Sort querySort = null;
|
|
|
- if (sort.equals("asc")) {
|
|
|
+ if (sort.equalsIgnoreCase("ASC")) {
|
|
|
d = Direction.ASC;
|
|
|
}
|
|
|
- if (order.equals("time")) {
|
|
|
+ if (order.equals("markerTime")) {
|
|
|
querySort = new Sort(d, "markerTime");
|
|
|
- } else if (order.equals("studentId")) {
|
|
|
- querySort = new Sort(d, "studentId");
|
|
|
- } else if (order.equals("score")) {
|
|
|
+ } else if (order.equals("markerScore")) {
|
|
|
querySort = new Sort(d, "markerScore");
|
|
|
}
|
|
|
MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
@@ -510,20 +534,15 @@ public class MarkController extends BaseController {
|
|
|
query.orderByMarkerTimeDesc();
|
|
|
}
|
|
|
list = taskService.findByQuery(query);
|
|
|
- for (Task task : list) {
|
|
|
- task.setPrevious(true);
|
|
|
- }
|
|
|
} else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
|
|
|
// 试评查找给分历史记录
|
|
|
List<TrialHistory> historyList = new ArrayList<TrialHistory>();
|
|
|
if (StringUtils.isNotBlank(secretNumber)) {
|
|
|
- historyList = trialService
|
|
|
- .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
|
|
|
- marker.getId(), secretNumber, pageNumber, pageSize, querySort);
|
|
|
+ historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
|
|
|
+ marker.getGroupNumber(), marker.getId(), secretNumber, pageNumber, pageSize, querySort);
|
|
|
} else {
|
|
|
- historyList = trialService
|
|
|
- .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(),
|
|
|
- marker.getId(), pageNumber, pageSize, querySort, null);
|
|
|
+ historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
|
|
|
+ marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
|
|
|
}
|
|
|
for (TrialHistory history : historyList) {
|
|
|
TrialLibrary library = trialService.findLibrary(history.getLibraryId());
|
|
@@ -538,20 +557,20 @@ public class MarkController extends BaseController {
|
|
|
}
|
|
|
|
|
|
@Logging(menu = "修改密码", type = LogType.UPDATE)
|
|
|
- @RequestMapping("/change-name")
|
|
|
+ @RequestMapping(value = "/changeName", method = RequestMethod.POST)
|
|
|
@ResponseBody
|
|
|
public JSONObject changeName(HttpServletRequest request, @RequestParam String name,
|
|
|
@RequestParam(required = false) String password) {
|
|
|
User user = userService.findById(RequestUtils.getWebUser(request).getId());
|
|
|
JSONObject result = new JSONObject();
|
|
|
user.setName(name);
|
|
|
- if (StringUtils.isNotEmpty(password)) {
|
|
|
+ if (StringUtils.isNotBlank(password)) {
|
|
|
+ password = StringEscapeUtils.unescapeHtml(password);
|
|
|
user.setPassword(EncryptUtils.md5(password));
|
|
|
}
|
|
|
try {
|
|
|
user = userService.save(user);
|
|
|
result.accumulate("success", true);
|
|
|
- result.accumulate("name", user.getName());
|
|
|
} catch (Exception e) {
|
|
|
result.accumulate("success", false);
|
|
|
log.error("MarkController-修改名字出错", e);
|
|
@@ -559,17 +578,59 @@ public class MarkController extends BaseController {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- @RequestMapping("/update-setting")
|
|
|
+ @RequestMapping(value = "/updateSetting", method = RequestMethod.POST)
|
|
|
@ResponseBody
|
|
|
- public JSONObject updateSetting(HttpServletRequest request, @RequestParam String setting) {
|
|
|
+ public JSONObject updateSetting(HttpServletRequest request, @RequestParam(required = false) String uiSetting,
|
|
|
+ @RequestParam(required = false) String mode) {
|
|
|
Marker marker = RequestUtils.getWebUser(request).getMarker();
|
|
|
+ if (uiSetting != null) {
|
|
|
+ marker.setMarkSetting(StringEscapeUtils.unescapeHtml(StringUtils.trimToNull(uiSetting)));
|
|
|
+ }
|
|
|
+ if (mode != null) {
|
|
|
+ marker.setMode(MarkMode.findByName(mode));
|
|
|
+ }
|
|
|
+ markerService.save(marker);
|
|
|
JSONObject result = new JSONObject();
|
|
|
- markerService
|
|
|
- .updateMarkSetting(marker.getId(), StringEscapeUtils.unescapeHtml(StringUtils.trimToNull(setting)));
|
|
|
result.accumulate("success", true);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ @RequestMapping("/clear")
|
|
|
+ @ResponseBody
|
|
|
+ public void clear(HttpServletRequest request) {
|
|
|
+ releaseMarker(RequestUtils.getWebUser(request).getMarker());
|
|
|
+ }
|
|
|
+
|
|
|
+ @ResponseBody
|
|
|
+ @RequestMapping(value = "/subjectSelect", method = RequestMethod.POST)
|
|
|
+ public Object subjectSelect(HttpServletRequest request, HttpServletResponse response, @RequestParam Integer markerId) {
|
|
|
+ WebUser user = RequestUtils.getWebUser(request);
|
|
|
+ Marker old = user.getMarker();
|
|
|
+ Marker marker = markerService.findById(markerId);
|
|
|
+ JSONObject result = new JSONObject();
|
|
|
+ if (marker == null) {
|
|
|
+ result.accumulate("success", false);
|
|
|
+ result.accumulate("message", "评卷分组不存在");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
|
|
|
+ if (group == null) {
|
|
|
+ result.accumulate("success", false);
|
|
|
+ result.accumulate("message", "评卷分组不存在");
|
|
|
+ } else if (group.getStatus() == MarkStatus.FINISH) {
|
|
|
+ result.accumulate("success", false);
|
|
|
+ result.accumulate("message", "评卷分组已结束");
|
|
|
+ } else {
|
|
|
+ releaseMarker(old);
|
|
|
+ user.setMarkerId(marker.getId());
|
|
|
+ StmmsSession session = RequestUtils.getSession(request);
|
|
|
+ session.saveWebUser(user);
|
|
|
+ sessionService.put(request, response, session);
|
|
|
+ result.accumulate("success", true);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
private void releaseMarker(Marker marker) {
|
|
|
if (marker == null) {
|
|
|
return;
|
|
@@ -597,4 +658,71 @@ public class MarkController extends BaseController {
|
|
|
return json;
|
|
|
}
|
|
|
|
|
|
+ private void setProblemType(JSONObject setting, Marker marker) {
|
|
|
+ List<ProblemType> problemTypes = problemTypeService.findByExamId(marker.getExamId());
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ try {
|
|
|
+ setting.accumulate("problemTypes", mapper.writeValueAsString(problemTypes));
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ log.error("MarkController-问题类型获取出错", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setSubjectAndSheetConfig(JSONObject setting, Marker marker, Exam exam) {
|
|
|
+ ExamSubject examSubject = subjectService.find(marker.getExamId(), marker.getSubjectCode());
|
|
|
+ String sheetConfig = "";
|
|
|
+ if (StringUtils.isNotBlank(examSubject.getSheetConfig())) {
|
|
|
+ sheetConfig = buildPictureConfig(examSubject.getSheetConfig());
|
|
|
+ } else if (StringUtils.isNotBlank(exam.getSheetConfig())) {
|
|
|
+ sheetConfig = buildPictureConfig(exam.getSheetConfig());
|
|
|
+ }
|
|
|
+ setting.accumulate("sheetConfig", sheetConfig);
|
|
|
+
|
|
|
+ JSONObject subject = new JSONObject();
|
|
|
+ subject.accumulate("name", examSubject.getName());
|
|
|
+ subject.accumulate("code", examSubject.getCode());
|
|
|
+ examSubject.setPaperAnswerUrl(fileService);
|
|
|
+ subject.accumulate("paperUrl", examSubject.getPaperUrl() == null ? "" : examSubject.getPaperUrl());
|
|
|
+ subject.accumulate("answerUrl", examSubject.getAnswerUrl() == null ? "" : examSubject.getAnswerUrl());
|
|
|
+ setting.accumulate("subject", subject);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setModeAndForceMode(JSONObject setting, Exam exam, Marker marker, MarkGroup group) {
|
|
|
+ MarkMode mode = null;
|
|
|
+ boolean forceMode = false;
|
|
|
+ if (MarkMode.findByName(forceMarkMode) != null) {
|
|
|
+ // 全局配置的强制评卷模式
|
|
|
+ mode = MarkMode.findByName(forceMarkMode);
|
|
|
+ forceMode = true;
|
|
|
+ } else {
|
|
|
+ // 没有全局配置,优先从考试取强制评卷模式
|
|
|
+ if (exam != null && exam.getMarkMode() != null) {
|
|
|
+ mode = exam.getMarkMode();
|
|
|
+ forceMode = true;
|
|
|
+ } else if (group != null && group.getMarkMode() != null) {
|
|
|
+ // 没有全局配置,优先从大题配置取强制评卷模式
|
|
|
+ mode = group.getMarkMode();
|
|
|
+ forceMode = true;
|
|
|
+ }
|
|
|
+ // 否则取评卷员当前记录的评卷模式
|
|
|
+ if (mode == null) {
|
|
|
+ mode = marker.getMode();
|
|
|
+ }
|
|
|
+ if (mode == null) {
|
|
|
+ mode = MarkMode.COMMON;
|
|
|
+ }
|
|
|
+ if (marker.getMode() != mode) {
|
|
|
+ marker.setMode(mode);
|
|
|
+ markerService.save(marker);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ setting.accumulate("mode", mode);
|
|
|
+ setting.accumulate("forceMode", forceMode);
|
|
|
+
|
|
|
+ if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
|
|
|
+ setting.accumulate("forceMode", true);
|
|
|
+ setting.accumulate("sheetView", false);
|
|
|
+ setting.accumulate("forceSpecialTag", false);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|