|
@@ -3,21 +3,30 @@ package com.qmth.distributed.print.api.mark;
|
|
import com.qmth.boot.api.annotation.Aac;
|
|
import com.qmth.boot.api.annotation.Aac;
|
|
import com.qmth.boot.api.constant.ApiConstant;
|
|
import com.qmth.boot.api.constant.ApiConstant;
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
|
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
import com.qmth.teachcloud.common.enums.mark.MarkMode;
|
|
import com.qmth.teachcloud.common.enums.mark.MarkMode;
|
|
import com.qmth.teachcloud.common.service.SysUserService;
|
|
import com.qmth.teachcloud.common.service.SysUserService;
|
|
import com.qmth.teachcloud.common.util.Result;
|
|
import com.qmth.teachcloud.common.util.Result;
|
|
import com.qmth.teachcloud.common.util.ResultUtil;
|
|
import com.qmth.teachcloud.common.util.ResultUtil;
|
|
import com.qmth.teachcloud.common.util.ServletUtil;
|
|
import com.qmth.teachcloud.common.util.ServletUtil;
|
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.mark.SubmitResult;
|
|
|
|
+import com.qmth.teachcloud.mark.entity.MarkUserQuestion;
|
|
|
|
+import com.qmth.teachcloud.mark.enums.LockType;
|
|
import com.qmth.teachcloud.mark.enums.QuestionModel;
|
|
import com.qmth.teachcloud.mark.enums.QuestionModel;
|
|
|
|
+import com.qmth.teachcloud.mark.lock.LockService;
|
|
import com.qmth.teachcloud.mark.params.MarkResult;
|
|
import com.qmth.teachcloud.mark.params.MarkResult;
|
|
|
|
+import com.qmth.teachcloud.mark.params.MarkResultQuestion;
|
|
import com.qmth.teachcloud.mark.service.MarkService;
|
|
import com.qmth.teachcloud.mark.service.MarkService;
|
|
import com.qmth.teachcloud.mark.service.MarkUserPaperService;
|
|
import com.qmth.teachcloud.mark.service.MarkUserPaperService;
|
|
|
|
+import com.qmth.teachcloud.mark.service.MarkUserQuestionService;
|
|
import com.qmth.teachcloud.mark.utils.TaskLock;
|
|
import com.qmth.teachcloud.mark.utils.TaskLock;
|
|
import com.qmth.teachcloud.mark.utils.TaskLockUtil;
|
|
import com.qmth.teachcloud.mark.utils.TaskLockUtil;
|
|
import io.lettuce.core.GeoArgs.Sort;
|
|
import io.lettuce.core.GeoArgs.Sort;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.Api;
|
|
import org.apache.commons.lang.StringEscapeUtils;
|
|
import org.apache.commons.lang.StringEscapeUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
@@ -38,6 +47,7 @@ import java.util.Map;
|
|
@RestController
|
|
@RestController
|
|
@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/mark")
|
|
@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/mark")
|
|
public class MarkController extends BaseController {
|
|
public class MarkController extends BaseController {
|
|
|
|
+ private final static Logger log = LoggerFactory.getLogger(MarkController.class);
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private MarkService markService;
|
|
private MarkService markService;
|
|
@@ -45,6 +55,10 @@ public class MarkController extends BaseController {
|
|
private MarkUserPaperService markUserPaperService;
|
|
private MarkUserPaperService markUserPaperService;
|
|
@Autowired
|
|
@Autowired
|
|
private SysUserService userService;
|
|
private SysUserService userService;
|
|
|
|
+ @Resource
|
|
|
|
+ private MarkUserQuestionService markUserQuestionService;
|
|
|
|
+ @Resource
|
|
|
|
+ LockService lockService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 查询内存数据
|
|
* 查询内存数据
|
|
@@ -95,10 +109,37 @@ public class MarkController extends BaseController {
|
|
|
|
|
|
@RequestMapping(value = "/saveTask", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/saveTask", method = RequestMethod.POST)
|
|
public Result saveTask(@RequestParam Long examId, @RequestParam String paperNumber,
|
|
public Result saveTask(@RequestParam Long examId, @RequestParam String paperNumber,
|
|
- @RequestBody MarkResult markResult) {
|
|
|
|
|
|
+ @RequestBody MarkResult result) {
|
|
validMarkPaperForMark(examId, paperNumber);
|
|
validMarkPaperForMark(examId, paperNumber);
|
|
SysUser user = (SysUser) ServletUtil.getRequestUser();
|
|
SysUser user = (SysUser) ServletUtil.getRequestUser();
|
|
- return ResultUtil.ok(markService.saveTask(examId, paperNumber, user.getId(), markResult));
|
|
|
|
|
|
+ Long userId = user.getId();
|
|
|
|
+
|
|
|
|
+ for (MarkResultQuestion question : result.getQuestionList()) {
|
|
|
|
+ MarkUserQuestion markUserQuestion = markUserQuestionService.getByExamIdAndPaperNumberAndQuestionIdAndUserId(examId, paperNumber, question.getQuestionId(), userId);
|
|
|
|
+ if (markUserQuestion == null) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("评卷员未绑定题目" + question.getMainNumber() + "-" + question.getSubNumber());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ SubmitResult sr;
|
|
|
|
+ try {
|
|
|
|
+ lockService.watch(LockType.EXAM_SUBJECT, examId, paperNumber);
|
|
|
|
+ lockService.watch(LockType.MARK_USER_QUESTION, userId);
|
|
|
|
+ lockService.waitlock(LockType.STUDENT, result.getStudentId());
|
|
|
|
+ sr = markService.saveTask(examId, paperNumber, user.getId(), result);
|
|
|
|
+ for (MarkResultQuestion markResultQuestion : result.getQuestionList()) {
|
|
|
|
+ markService.updateMarkedCount(examId, paperNumber, markResultQuestion.getQuestionId());
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("save task error", e);
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
|
+ } finally {
|
|
|
|
+ lockService.unlock(LockType.STUDENT, result.getStudentId());
|
|
|
|
+ lockService.unwatch(LockType.MARK_USER_QUESTION, userId);
|
|
|
|
+ lockService.unwatch(LockType.EXAM_SUBJECT, examId, paperNumber);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ResultUtil.ok(sr);
|
|
}
|
|
}
|
|
|
|
|
|
@RequestMapping(value = "/getHistory", method = RequestMethod.POST)
|
|
@RequestMapping(value = "/getHistory", method = RequestMethod.POST)
|