ting.yin 5 years ago
parent
commit
8d16e4fb4a

+ 2 - 2
stmms-common/src/main/java/cn/com/qmth/stmms/common/enums/LockType.java

@@ -2,8 +2,8 @@ package cn.com.qmth.stmms.common.enums;
 
 public enum LockType {
     GROUP("group"), STUDENT("student"), MARKER("marker"), USER("user"), FORMAL_LIBRARY("formal_library"), TRIAL_LIBRARY(
-            "trial_library"), ARBITRATE("arbitrate"), BATCH_QUALITY(
-                    "batch_quality"), SAVE_SHEET("save_sheet"), SCORE_CALCULATE("score_calculate");
+            "trial_library"), ARBITRATE("arbitrate"), BATCH_QUALITY("batch_quality"), SAVE_SHEET("save_sheet"), SCORE_CALCULATE(
+            "score_calculate"), GROUP_LIBRARY("group_library");
 
     private String name;
 

+ 13 - 11
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ExamController.java

@@ -63,10 +63,10 @@ public class ExamController extends BaseExamController {
 
     @Autowired
     private ExamSubjectService examSubjectService;
-    
+
     @Autowired
     private CampusService campusService;
-    
+
     @Value("${sheet.image.server}")
     private String imageServer;
 
@@ -119,8 +119,8 @@ public class ExamController extends BaseExamController {
     @SuppressWarnings("unchecked")
     @RequestMapping(value = "/exam-edit", method = RequestMethod.POST)
     @RoleRequire(Role.SCHOOL_ADMIN)
-    public String examEdit(HttpServletRequest request, Exam exam, int StatusValue, @RequestParam String picList,
-            RedirectAttributes redirectAttributes) {
+    public String examEdit(HttpServletRequest request, Exam exam, int StatusValue,
+            @RequestParam(required = false) String picList, RedirectAttributes redirectAttributes) {
         User user = RequestUtils.getWebUser(request).getUser();
         Exam oldExam = examService.findById(exam.getId());
         if (oldExam != null && oldExam.getCreatorId().intValue() == user.getId().intValue()) {
@@ -131,10 +131,12 @@ public class ExamController extends BaseExamController {
             oldExam.setForceSpecialTag(exam.isForceSpecialTag());
             oldExam.setPassScore(exam.getPassScore());
             oldExam.setExcellentScore(exam.getExcellentScore());
-            String sheetConfig = StringEscapeUtils.unescapeHtml(picList);
-            JSONArray array = JSONArray.fromObject(sheetConfig);
-            List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
-            oldExam.setSheetConfig(list==null?null:StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
+            if (StringUtils.isNotBlank(picList)) {
+                String sheetConfig = StringEscapeUtils.unescapeHtml(picList);
+                JSONArray array = JSONArray.fromObject(sheetConfig);
+                List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
+                oldExam.setSheetConfig(list == null ? null : StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
+            }
             examService.save(oldExam);
         }
         return "redirect:/admin/exam-list";
@@ -220,11 +222,11 @@ public class ExamController extends BaseExamController {
         exam.setStatus(ExamStatus.FINISH);
         examService.save(exam);
     }
-    
+
     @RequestMapping("/exam/getSheetConfig")
     @RoleRequire(Role.SCHOOL_ADMIN)
     public String get(HttpServletRequest request, Model model, RedirectAttributes redirectAttributes,
-           @RequestParam Integer examId,@RequestParam(required=false) String subjectCode) {
+            @RequestParam Integer examId, @RequestParam(required = false) String subjectCode) {
         Exam exam = examService.findById(examId);
         ExamSubject subject = examSubjectService.find(examId, subjectCode);
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
@@ -234,7 +236,7 @@ public class ExamController extends BaseExamController {
         List<ExamStudent> examStudents = examStudentService.findByQuery(query).getResult();
         if (examStudents.size() > 0) {
             model.addAttribute("picUrls", buildPicUrl(examStudents.get(0)));
-            String sheetConfig = subject!=null? subject.getSheetConfig():exam.getSheetConfig();
+            String sheetConfig = subject != null ? subject.getSheetConfig() : exam.getSheetConfig();
             model.addAttribute("pictureConfig", buildPictureConfig(sheetConfig));
             model.addAttribute("imageServer", imageServer);
             return "modules/mark/picConfig";

+ 4 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/SubjectController.java

@@ -41,19 +41,17 @@ public class SubjectController extends BaseExamController {
     @SuppressWarnings("unchecked")
     @RequestMapping(value = "/save", method = RequestMethod.POST)
     @RoleRequire(Role.SCHOOL_ADMIN)
-    public String save(HttpServletRequest request, ExamSubject subject, Model model,@RequestParam String picList) {
+    public String save(HttpServletRequest request, ExamSubject subject, Model model, @RequestParam String picList) {
         ExamSubject previous = subjectService.find(getSessionExamId(request), subject.getCode());
         if (previous != null && StringUtils.isNotBlank(picList)) {
             String sheetConfig = StringEscapeUtils.unescapeHtml(picList);
             JSONArray array = JSONArray.fromObject(sheetConfig);
             List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
-            previous.setSheetConfig(list==null?null:StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
+            previous.setSheetConfig(list == null ? null : StringUtils.join(list, PictureConfigItem.DB_ITEM_JOINER));
             subjectService.save(previous);
         }
-        model.addAttribute("subject", previous);
-        model.addAttribute("pictureConfig", buildPictureConfig(subject.getSheetConfig()));
         model.addAttribute("message", "修改成功");
-        return "modules/exam/subjectEdit";
+        return "redirect:/admin/exam/paper";
     }
-    
+
 }

+ 11 - 9
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -157,8 +157,7 @@ public class MarkController extends BaseController {
                 markerService.save(marker);
             }
         }
-        ModelAndView view = new ModelAndView(
-                mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
+        ModelAndView view = new ModelAndView(mode == MarkMode.TRACK ? "modules/mark/markTrack" : "modules/mark/markNew");
         view.addObject("forceMode", forceMode);
         view.addObject("sheetView", group.isSheetView());
         return view;
@@ -189,9 +188,9 @@ public class MarkController extends BaseController {
         modelAndView.addObject("forceSpecialTag", exam.isForceSpecialTag());
         modelAndView.addObject("defaultSetting", StringUtils.trimToNull(marker.getMarkSetting()));
         String sheetConfig = "";
-        if(StringUtils.isNotBlank(subject.getSheetConfig())){
+        if (StringUtils.isNotBlank(subject.getSheetConfig())) {
             sheetConfig = buildPictureConfig(subject.getSheetConfig());
-        }else if(StringUtils.isNotBlank(exam.getSheetConfig())){
+        } else if (StringUtils.isNotBlank(exam.getSheetConfig())) {
             sheetConfig = buildPictureConfig(exam.getSheetConfig());
         }
         modelAndView.addObject("sheetConfig", sheetConfig);
@@ -264,8 +263,8 @@ public class MarkController extends BaseController {
             lockService.watch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
             lockService.watch(LockType.MARKER, marker.getId());
 
-            MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(),
-                    marker.getGroupNumber());
+            MarkGroup group = groupService
+                    .findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
             if (group == null) {
                 task = new Task();
                 task.setExist(false);
@@ -347,12 +346,15 @@ public class MarkController extends BaseController {
             lockService.watch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
             lockService.watch(LockType.STUDENT, markResult.getStudentId());
             lockService.watch(LockType.MARKER, marker.getId());
-
+            lockService.waitlock(LockType.GROUP_LIBRARY, markResult.getStudentId(), marker.getExamId(),
+                    marker.getSubjectCode(), marker.getGroupNumber());
             success = markService.submitTask(markResult, marker);
         } catch (Exception e) {
             success = false;
             log.error("save task error", e);
         } finally {
+            lockService.unlock(LockType.GROUP_LIBRARY, markResult.getStudentId(), marker.getExamId(),
+                    marker.getSubjectCode(), marker.getGroupNumber());
             lockService.unwatch(LockType.MARKER, marker.getId());
             lockService.unwatch(LockType.STUDENT, markResult.getStudentId());
             lockService.unwatch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
@@ -418,7 +420,7 @@ public class MarkController extends BaseController {
                         marker.getGroupNumber(), marker.getId(), studentId, pageNumber, pageSize, querySort);
             } else {
                 historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort,null);
+                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort, null);
             }
             for (TrialHistory history : historyList) {
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());
@@ -488,7 +490,7 @@ public class MarkController extends BaseController {
             lockService.unlock(LockType.MARKER, marker.getId());
         }
     }
-    
+
     protected String buildPictureConfig(String sheetConfig) {
         String json = "";
         if (StringUtils.isNotBlank(sheetConfig)) {

+ 15 - 8
stmms-web/src/main/webapp/static/mark-new/js/modules/sheet-view.js

@@ -109,14 +109,21 @@ SheetView.prototype.renderContent = function(content, sheetId) {
         image.canvas.height = image.height * scale;
         ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, image.canvas.width, image.canvas.height);
         ctx.fillStyle = "#FFFFFF";
-        //      if(show){
-        //          ctx.fillRect(0, 0, this.canvas.width/2, this.canvas.height*3.7/10);
-        //      }
-        for (var j = 0; j < self.sheetConfig.length; j++) {
-            var config = self.sheetConfig[j];
-            if (config.i == (i + 1)) {
-                ctx.fillRect(config.x * scale, config.y * scale, config.w * scale, config.h * scale);
-            }
+        if(self.sheetConfig.length!=0){
+        	for (var j = 0; j < self.sheetConfig.length; j++) {
+        		var config = self.sheetConfig[j];
+        		var index = parseNumber(i) + 1;
+        		if (config.i == index) {
+        			//兼容简单模式1:0:0:0:0
+        			if(config.x==0 && config.y==0 && config.w==0 && config.h==0){
+        				ctx.fillRect(0, 0, image.width * scale, image.height * scale);
+        			}else{
+        				ctx.fillRect(config.x * scale, config.y * scale, config.w * scale, config.h * scale);
+        			}
+        		}
+        	}
+        }else{
+        	ctx.fillRect(0, 0, this.canvas.width/2, this.canvas.height*3.7/10);
         }
         //this.canvas.toDataURL("image/jpeg");
     }