|
@@ -29,20 +29,18 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
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.model.SubjectiveScore;
|
|
|
import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
|
|
|
import cn.com.qmth.stmms.biz.exam.query.SubjectiveScoreSearchQuery;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
|
|
|
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
|
|
|
import cn.com.qmth.stmms.biz.exam.service.SubjectiveScoreService;
|
|
|
import cn.com.qmth.stmms.biz.file.service.FileService;
|
|
|
import cn.com.qmth.stmms.biz.lock.LockService;
|
|
|
-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.MarkSpecialTagService;
|
|
|
import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
|
|
|
-import cn.com.qmth.stmms.biz.user.service.UserService;
|
|
|
-import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
import cn.com.qmth.stmms.common.annotation.Logging;
|
|
|
import cn.com.qmth.stmms.common.annotation.RoleRequire;
|
|
|
import cn.com.qmth.stmms.common.domain.WebUser;
|
|
@@ -58,12 +56,6 @@ public class InspectedController extends BaseExamController {
|
|
|
|
|
|
protected static Logger log = LoggerFactory.getLogger(InspectedController.class);
|
|
|
|
|
|
- @Autowired
|
|
|
- private MarkLibraryService libraryService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private MarkerService markerService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ExamStudentService studentService;
|
|
|
|
|
@@ -79,9 +71,6 @@ public class InspectedController extends BaseExamController {
|
|
|
@Autowired
|
|
|
private MarkGroupService groupService;
|
|
|
|
|
|
- @Autowired
|
|
|
- private UserService userService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private FileService fileService;
|
|
|
|
|
@@ -91,6 +80,9 @@ public class InspectedController extends BaseExamController {
|
|
|
@Autowired
|
|
|
private SubjectiveScoreService scoreService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private MarkService markService;
|
|
|
+
|
|
|
// 并发处理互斥锁
|
|
|
private Map<Integer, Integer> currentTaskMap = new HashMap<Integer, Integer>();
|
|
|
|
|
@@ -127,7 +119,12 @@ public class InspectedController extends BaseExamController {
|
|
|
group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
|
|
|
group.getSubjectCode(), false, group.getNumber()));
|
|
|
}
|
|
|
+ SubjectiveStatus status = query.getSubjectiveStatus();
|
|
|
+ query.setSubjectiveStatus(SubjectiveStatus.MARKED);
|
|
|
+ long inspectCount = studentService.countByQuery(query);
|
|
|
+ query.setSubjectiveStatus(status);
|
|
|
model.addAttribute("query", query);
|
|
|
+ model.addAttribute("inspectCount", inspectCount);
|
|
|
model.addAttribute("groupList", groupList);
|
|
|
model.addAttribute("groupNumber", groupNumber);
|
|
|
model.addAttribute("groupStartScore", groupStartScore);
|
|
@@ -153,6 +150,8 @@ public class InspectedController extends BaseExamController {
|
|
|
query.setUpload(true);
|
|
|
query.setAbsent(false);
|
|
|
query.setBreach(false);
|
|
|
+ query.setSubjectiveStatus(SubjectiveStatus.MARKED);
|
|
|
+ query.setPageSize(Integer.MAX_VALUE);
|
|
|
List<ExamSubject> subjectList = getExamSubject(examId, wu);
|
|
|
if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
|
|
|
query.setSubjectCode(subjectList.get(0).getCode());
|
|
@@ -174,6 +173,26 @@ public class InspectedController extends BaseExamController {
|
|
|
for (ExamStudent student : query.getResult()) {
|
|
|
ids.add(student.getId());
|
|
|
}
|
|
|
+ view.addObject("inspectCount", query.getTotalCount());
|
|
|
+ view.addObject("fileServer", fileService.getFileServer());
|
|
|
+ view.addObject("ids", StringUtils.join(ids, ","));
|
|
|
+ view.addObject("message", ids.size() > 0 ? "" : "没有待复核的任务");
|
|
|
+ return view;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Logging(menu = "开始复核", type = LogType.QUERY)
|
|
|
+ @RequestMapping("/startById")
|
|
|
+ public ModelAndView startById(HttpServletRequest request, RedirectAttributes redirectAttributes,
|
|
|
+ @RequestParam Integer studentId) {
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
+ releaseByUser(wu.getUser().getId());
|
|
|
+ ModelAndView view = new ModelAndView("modules/exam/inspected");
|
|
|
+ List<Integer> ids = new ArrayList<Integer>();
|
|
|
+ ExamStudent student = studentService.findById(studentId);
|
|
|
+ if (student != null && student.getSubjectiveStatus().equals(SubjectiveStatus.MARKED)) {
|
|
|
+ ids.add(studentId);
|
|
|
+ }
|
|
|
+ view.addObject("inspectCount", 1);
|
|
|
view.addObject("fileServer", fileService.getFileServer());
|
|
|
view.addObject("ids", StringUtils.join(ids, ","));
|
|
|
return view;
|
|
@@ -187,30 +206,39 @@ public class InspectedController extends BaseExamController {
|
|
|
JSONObject result = new JSONObject();
|
|
|
if (setCurrent(student.getId(), wu.getUser().getId())) {
|
|
|
result.accumulate("id", student.getId());
|
|
|
+ result.accumulate("secretNumber", student.getSecretNumber());
|
|
|
result.accumulate("subjectCode", student.getSubjectCode());
|
|
|
result.accumulate("subjectName", student.getSubjectName());
|
|
|
- JSONArray array = new JSONArray();
|
|
|
- List<ScoreItem> scores = student.getScoreList(false);
|
|
|
- for (ScoreItem scoreItem : scores) {
|
|
|
- JSONObject obj = new JSONObject();
|
|
|
- obj.accumulate("questionNumber", scoreItem.getMainNumber() + "-" + scoreItem.getSubNumber());
|
|
|
- obj.accumulate("score", scoreItem.getScore());
|
|
|
- array.add(obj);
|
|
|
- }
|
|
|
- result.accumulate("questions", array);
|
|
|
+ result.accumulate("totalScore", student.getTotalScore());
|
|
|
|
|
|
+ List<MarkGroup> groups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
|
|
|
+ JSONArray groupArray = new JSONArray();
|
|
|
+ for (MarkGroup markGroup : groups) {
|
|
|
+ JSONObject group = new JSONObject();
|
|
|
+ group.accumulate("groupNumber", markGroup.getNumber());
|
|
|
+ List<SubjectiveScore> scores = scoreService.findByStudentIdAndGroupNumber(student.getId(),
|
|
|
+ markGroup.getNumber());
|
|
|
+ JSONArray array = new JSONArray();
|
|
|
+ for (SubjectiveScore scoreItem : scores) {
|
|
|
+ JSONObject obj = new JSONObject();
|
|
|
+ obj.accumulate("questionNumber", scoreItem.getMainNumber() + "-" + scoreItem.getSubNumber());
|
|
|
+ obj.accumulate("score", scoreItem.getScore());
|
|
|
+ array.add(obj);
|
|
|
+ }
|
|
|
+ group.accumulate("questions", array);
|
|
|
+ groupArray.add(group);
|
|
|
+ }
|
|
|
+ result.accumulate("groups", groupArray);
|
|
|
// MarkGroup group = groupService.findOne(student.getExamId(),
|
|
|
// student.getSubjectCode(),
|
|
|
// library.getGroupNumber());
|
|
|
- // List<String> picUrls =
|
|
|
- // fileService.getSliceUris(student.getExamId(),
|
|
|
- // student.getSecretNumber(), 1,
|
|
|
- // student.getSliceCount());
|
|
|
+ List<String> picUrls = fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
|
|
|
+ student.getSliceCount());
|
|
|
// List<MarkTrack> markTracks =
|
|
|
// markTrackService.findByLibraryId(library.getId());
|
|
|
// List<MarkSpecialTag> markSpecialTagList =
|
|
|
// markSpecialTagService.findByLibraryId(library.getId());
|
|
|
- // result.accumulate("picUrls", picUrls);
|
|
|
+ result.accumulate("picUrls", picUrls);
|
|
|
// result.accumulate("pictureConfig", group.getPictureConfigList());
|
|
|
// result.accumulate("markTracks", markTracks);
|
|
|
// result.accumulate("markSpecialTagList", markSpecialTagList);
|
|
@@ -237,10 +265,10 @@ public class InspectedController extends BaseExamController {
|
|
|
@RequestMapping("/clear")
|
|
|
@ResponseBody
|
|
|
@RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
|
|
|
- public Object clear(HttpServletRequest request, @RequestParam(required = false) Integer libraryId) {
|
|
|
+ public Object clear(HttpServletRequest request, @RequestParam(required = false) Integer studentId) {
|
|
|
WebUser wu = RequestUtils.getWebUser(request);
|
|
|
- if (libraryId != null) {
|
|
|
- releaseTask(libraryId);
|
|
|
+ if (studentId != null) {
|
|
|
+ releaseTask(studentId);
|
|
|
} else {
|
|
|
releaseByUser(wu.getUser().getId());
|
|
|
}
|
|
@@ -248,10 +276,10 @@ public class InspectedController extends BaseExamController {
|
|
|
}
|
|
|
|
|
|
@Logging(menu = "取消复核", type = LogType.UPDATE)
|
|
|
- @RequestMapping(value = "/back", method = RequestMethod.POST)
|
|
|
+ @RequestMapping(value = "/cancel", method = RequestMethod.POST)
|
|
|
@ResponseBody
|
|
|
@RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
|
|
|
- public JSONObject back(HttpServletRequest request, @RequestParam Integer id) {
|
|
|
+ public JSONObject cancel(HttpServletRequest request, @RequestParam Integer id) {
|
|
|
JSONObject obj = new JSONObject();
|
|
|
ExamStudent student = studentService.findById(id);
|
|
|
WebUser wu = RequestUtils.getWebUser(request);
|
|
@@ -283,6 +311,47 @@ public class InspectedController extends BaseExamController {
|
|
|
return obj;
|
|
|
}
|
|
|
|
|
|
+ @Logging(menu = "复核打回", type = LogType.UPDATE)
|
|
|
+ @RequestMapping(value = "/back", method = RequestMethod.POST)
|
|
|
+ @ResponseBody
|
|
|
+ @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
|
|
|
+ public JSONObject back(HttpServletRequest request, @RequestParam Integer studentId,
|
|
|
+ @RequestParam Integer groupNumber) {
|
|
|
+ JSONObject obj = new JSONObject();
|
|
|
+ ExamStudent student = studentService.findById(studentId);
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
+ if (student != null && student.getSubjectiveStatus().equals(SubjectiveStatus.MARKED)) {
|
|
|
+ if (subjectCheck(student.getSubjectCode(), wu)) {
|
|
|
+ try {
|
|
|
+ lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
|
|
|
+ lockService.watch(LockType.GROUP, student.getExamId(), student.getSubjectCode(), groupNumber);
|
|
|
+ if (lockService.trylock(LockType.STUDENT, student.getId())
|
|
|
+ && markService.backStudentByGroup(student, groupNumber, wu.getId())) {
|
|
|
+ obj.accumulate("success", true);
|
|
|
+ } else {
|
|
|
+ obj.accumulate("success", false);
|
|
|
+ obj.accumulate("message", "无法打回");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ obj.accumulate("success", false);
|
|
|
+ obj.accumulate("message", "打回失败");
|
|
|
+ log.error("back inspected error", e);
|
|
|
+ } finally {
|
|
|
+ lockService.unwatch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
|
|
|
+ lockService.unwatch(LockType.GROUP, student.getExamId(), student.getSubjectCode(), groupNumber);
|
|
|
+ lockService.unlock(LockType.STUDENT, student.getId());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ obj.accumulate("success", false);
|
|
|
+ obj.accumulate("message", "没有操作该评卷任务的权限");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ obj.accumulate("success", false);
|
|
|
+ obj.accumulate("message", "无法取消复核");
|
|
|
+ }
|
|
|
+ return obj;
|
|
|
+ }
|
|
|
+
|
|
|
private boolean setCurrent(Integer taskId, Integer userId) {
|
|
|
Integer value = currentTaskMap.get(taskId);
|
|
|
if (value == null) {
|