|
@@ -1,6 +1,7 @@
|
|
|
package cn.com.qmth.stmms.admin.exam;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@@ -31,7 +32,6 @@ 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.lock.LockService;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
|
|
|
import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
|
|
@@ -40,8 +40,10 @@ import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
|
|
|
import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
|
|
|
import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
|
|
|
import cn.com.qmth.stmms.biz.utils.ScoreItem;
|
|
|
+import cn.com.qmth.stmms.common.domain.WebUser;
|
|
|
import cn.com.qmth.stmms.common.enums.LibraryStatus;
|
|
|
import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
|
|
|
+import cn.com.qmth.stmms.common.utils.RequestUtils;
|
|
|
|
|
|
@Controller("inspectedController")
|
|
|
@RequestMapping("/admin/exam/inspected")
|
|
@@ -73,6 +75,9 @@ public class InspectedController extends BaseExamController {
|
|
|
@Autowired
|
|
|
private MarkGroupService groupService;
|
|
|
|
|
|
+ // 并发处理互斥锁
|
|
|
+ private Map<Integer, Integer> currentTaskMap = new HashMap<Integer, Integer>();
|
|
|
+
|
|
|
@Value("${slice.image.server}")
|
|
|
private String sliceServer;
|
|
|
|
|
@@ -109,41 +114,48 @@ public class InspectedController extends BaseExamController {
|
|
|
|
|
|
@RequestMapping("/info")
|
|
|
@ResponseBody
|
|
|
- public Object info(@RequestParam Integer libraryId) {
|
|
|
+ public Object info(HttpServletRequest request, @RequestParam Integer libraryId) {
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
MarkLibrary library = libraryService.findById(libraryId);
|
|
|
- ExamStudent student = studentService.findById(library.getStudentId());
|
|
|
JSONObject result = new JSONObject();
|
|
|
- result.accumulate("id", libraryId);
|
|
|
- result.accumulate("studentId", library.getStudentId());
|
|
|
- result.accumulate("subjectCode", library.getSubjectCode());
|
|
|
- result.accumulate("subjectName", student.getSubjectName());
|
|
|
- Marker marker = markerService.findById(library.getMarkerId());
|
|
|
- result.accumulate("markerName", marker.getLoginName());
|
|
|
- result.accumulate("markerScore", library.getMarkerScore());
|
|
|
-
|
|
|
- JSONArray array = new JSONArray();
|
|
|
- List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
|
- library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
|
|
|
- List<ScoreItem> scores = library.getScoreList();
|
|
|
- for (int i = 0; i < questions.size(); i++) {
|
|
|
- ExamQuestion question = questions.get(i);
|
|
|
- JSONObject obj = new JSONObject();
|
|
|
- obj.accumulate("questionNumber", question.getMainTitle() + " " + question.getQuestionNumber());
|
|
|
- obj.accumulate("score", scores.get(i).getScore());
|
|
|
- array.add(obj);
|
|
|
+ if (setCurrent(library.getId(), wu.getUser().getId())) {
|
|
|
+ ExamStudent student = studentService.findById(library.getStudentId());
|
|
|
+ result.accumulate("id", libraryId);
|
|
|
+ result.accumulate("studentId", library.getStudentId());
|
|
|
+ result.accumulate("subjectCode", library.getSubjectCode());
|
|
|
+ result.accumulate("subjectName", student.getSubjectName());
|
|
|
+ Marker marker = markerService.findById(library.getMarkerId());
|
|
|
+ result.accumulate("markerName", marker.getLoginName());
|
|
|
+ result.accumulate("markerScore", library.getMarkerScore());
|
|
|
+
|
|
|
+ JSONArray array = new JSONArray();
|
|
|
+ List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
|
|
|
+ library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
|
|
|
+ List<ScoreItem> scores = library.getScoreList();
|
|
|
+ for (int i = 0; i < questions.size(); i++) {
|
|
|
+ ExamQuestion question = questions.get(i);
|
|
|
+ JSONObject obj = new JSONObject();
|
|
|
+ obj.accumulate("questionNumber", question.getMainTitle() + " " + question.getQuestionNumber());
|
|
|
+ obj.accumulate("score", scores.get(i).getScore());
|
|
|
+ array.add(obj);
|
|
|
+ }
|
|
|
+ result.accumulate("questions", array);
|
|
|
+
|
|
|
+ MarkGroup group = groupService.findOne(student.getExamId(), student.getSubjectCode(),
|
|
|
+ library.getGroupNumber());
|
|
|
+ Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
|
|
|
+ List<String> picUrls = PictureUrlBuilder.getSliceUrls(student.getExamId(), campus.getId(),
|
|
|
+ student.getSubjectCode(), student.getExamNumber(), student.getSliceCount());
|
|
|
+ List<MarkTrack> markTracks = markTrackService.findByLibraryId(library.getId());
|
|
|
+ List<MarkSpecialTag> markSpecialTagList = markSpecialTagService.findByLibraryId(library.getId());
|
|
|
+ result.accumulate("picUrls", picUrls);
|
|
|
+ result.accumulate("pictureConfig", group.getPictureConfigList());
|
|
|
+ result.accumulate("markTracks", markTracks);
|
|
|
+ result.accumulate("markSpecialTagList", markSpecialTagList);
|
|
|
+ result.accumulate("success", true);
|
|
|
+ } else {
|
|
|
+ result.accumulate("success", false);
|
|
|
}
|
|
|
- result.accumulate("questions", array);
|
|
|
-
|
|
|
- MarkGroup group = groupService.findOne(student.getExamId(), student.getSubjectCode(), library.getGroupNumber());
|
|
|
- Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
|
|
|
- List<String> picUrls = PictureUrlBuilder.getSliceUrls(student.getExamId(), campus.getId(),
|
|
|
- student.getSubjectCode(), student.getExamNumber(), student.getSliceCount());
|
|
|
- List<MarkTrack> markTracks = markTrackService.findByLibraryId(library.getId());
|
|
|
- List<MarkSpecialTag> markSpecialTagList = markSpecialTagService.findByLibraryId(library.getId());
|
|
|
- result.accumulate("picUrls", picUrls);
|
|
|
- result.accumulate("pictureConfig", group.getPictureConfigList());
|
|
|
- result.accumulate("markTracks", markTracks);
|
|
|
- result.accumulate("markSpecialTagList", markSpecialTagList);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -151,12 +163,39 @@ public class InspectedController extends BaseExamController {
|
|
|
@ResponseBody
|
|
|
public Object save(HttpServletRequest request, @RequestParam Integer libraryId) {
|
|
|
MarkLibrary library = libraryService.findById(libraryId);
|
|
|
+ WebUser wu = RequestUtils.getWebUser(request);
|
|
|
if (library != null && library.getStatus().equals(LibraryStatus.MARKED)) {
|
|
|
library.setStatus(LibraryStatus.INSPECTED);
|
|
|
+ library.setHeaderId(wu.getUser().getId());
|
|
|
+ library.setHeaderTime(new Date());
|
|
|
libraryService.save(library);
|
|
|
+ releaseTask(libraryId);
|
|
|
return true;
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private boolean setCurrent(Integer taskId, Integer userId) {
|
|
|
+ Integer value = currentTaskMap.get(taskId);
|
|
|
+ if (value == null) {
|
|
|
+ synchronized (currentTaskMap) {
|
|
|
+ value = currentTaskMap.get(taskId);
|
|
|
+ if (value == null) {
|
|
|
+ currentTaskMap.put(taskId, userId);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void releaseTask(Integer taskId) {
|
|
|
+ synchronized (currentTaskMap) {
|
|
|
+ currentTaskMap.remove(taskId);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|