Browse Source

更改paperType非空和字母验证;上传试卷答案接口返回;修复评卷质量显示,评卷员下拉姓名显示,回评标记缺失坐标,查询员科组长看到原图信息问题

ting.yin 4 years ago
parent
commit
f5b9b6ff57

+ 1 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -477,6 +477,7 @@ public class MarkServiceImpl implements MarkService {
                 history.setMarkerTime(new Date());
                 history.setMarkerTime(new Date());
                 history.setMarkerScore(result.getTotalScore());
                 history.setMarkerScore(result.getTotalScore());
                 history.setMarkerScoreList(result.getScoreList());
                 history.setMarkerScoreList(result.getScoreList());
+                history.setSecretNumber(library.getSecretNumber());
                 history = trialHistoryDao.save(history);
                 history = trialHistoryDao.save(history);
                 if (history != null) {
                 if (history != null) {
                     if (result.getTrackList() != null) {
                     if (result.getTrackList() != null) {

+ 34 - 35
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

@@ -85,17 +85,16 @@ public class TaskServiceImpl implements TaskService {
         task.setLibraryId(history.getId());
         task.setLibraryId(history.getId());
         task.setStudentNumber(history.getSecretNumber());
         task.setStudentNumber(history.getSecretNumber());
         task.setMarkStepList(buildMarkStep(group, null));
         task.setMarkStepList(buildMarkStep(group, null));
-        task.setPictureUrls(
-                fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1, student.getSliceCount()));
+        task.setPictureUrls(fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
+                student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
         task.setPictureConfig(group.getPictureConfigList());
         task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
         task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
         if (subject.getPaperFileType() != null) {
         if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(
-                    fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
+            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
         }
         }
         if (subject.getAnswerFileType() != null) {
         if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(
-                    fileService.getAnswerUri(subject.getExamId(), subject.getCode(), subject.getAnswerFileType()));
+            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
+                    subject.getAnswerFileType()));
         }
         }
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setMarkTime(history.getUpdateTime());
         task.setMarkTime(history.getUpdateTime());
@@ -133,17 +132,16 @@ public class TaskServiceImpl implements TaskService {
         // 正评显示考生密号
         // 正评显示考生密号
         task.setStudentNumber(library.getSecretNumber());
         task.setStudentNumber(library.getSecretNumber());
         task.setMarkStepList(buildMarkStep(group, library.getId()));
         task.setMarkStepList(buildMarkStep(group, library.getId()));
-        task.setPictureUrls(
-                fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1, student.getSliceCount()));
+        task.setPictureUrls(fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1,
+                student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
         task.setPictureConfig(group.getPictureConfigList());
         task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
         task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
         if (subject.getPaperFileType() != null) {
         if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(
-                    fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
+            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
         }
         }
         if (subject.getAnswerFileType() != null) {
         if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(
-                    fileService.getAnswerUri(subject.getExamId(), subject.getCode(), subject.getAnswerFileType()));
+            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
+                    subject.getAnswerFileType()));
         }
         }
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setMarkTime(library.getMarkerTime());
         task.setMarkTime(library.getMarkerTime());
@@ -176,17 +174,16 @@ public class TaskServiceImpl implements TaskService {
         task.setStudentId(library.getStudentId());
         task.setStudentId(library.getStudentId());
         task.setLibraryId(library.getId());
         task.setLibraryId(library.getId());
         task.setMarkStepList(buildTrialStep(group, history));
         task.setMarkStepList(buildTrialStep(group, history));
-        task.setPictureUrls(
-                fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1, student.getSliceCount()));
+        task.setPictureUrls(fileService.getSliceUris(library.getExamId(), library.getSecretNumber(), 1,
+                student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
         task.setPictureConfig(group.getPictureConfigList());
         task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
         task.setJsonUrl(fileService.getJsonUri(library.getExamId(), library.getSecretNumber()));
         if (subject.getPaperFileType() != null) {
         if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(
-                    fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
+            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
         }
         }
         if (subject.getAnswerFileType() != null) {
         if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(
-                    fileService.getAnswerUri(subject.getExamId(), subject.getCode(), subject.getAnswerFileType()));
+            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
+                    subject.getAnswerFileType()));
         }
         }
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         if (history != null) {
         if (history != null) {
@@ -200,9 +197,8 @@ public class TaskServiceImpl implements TaskService {
 
 
     private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer libraryId) {
     private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer libraryId) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService
-                .findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
-                        group.getNumber());
+        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
+                group.getSubjectCode(), false, group.getNumber());
         int number = 0;
         int number = 0;
         for (ExamQuestion question : sList) {
         for (ExamQuestion question : sList) {
             number++;
             number++;
@@ -225,9 +221,8 @@ public class TaskServiceImpl implements TaskService {
 
 
     private List<MarkStepDTO> buildTrialStep(MarkGroup group, TrialHistory history) {
     private List<MarkStepDTO> buildTrialStep(MarkGroup group, TrialHistory history) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService
-                .findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
-                        group.getNumber());
+        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
+                group.getSubjectCode(), false, group.getNumber());
         int number = 0;
         int number = 0;
         for (ExamQuestion question : sList) {
         for (ExamQuestion question : sList) {
             number++;
             number++;
@@ -274,6 +269,9 @@ public class TaskServiceImpl implements TaskService {
                 specialTagDTO.setTagName(list.get(i).getTagName());
                 specialTagDTO.setTagName(list.get(i).getTagName());
                 specialTagDTO.setPositionX(list.get(i).getPositionX());
                 specialTagDTO.setPositionX(list.get(i).getPositionX());
                 specialTagDTO.setPositionY(list.get(i).getPositionY());
                 specialTagDTO.setPositionY(list.get(i).getPositionY());
+                specialTagDTO.setOffsetIndex(list.get(i).getOffsetIndex());
+                specialTagDTO.setOffsetX(list.get(i).getOffsetX());
+                specialTagDTO.setOffsetY(list.get(i).getOffsetY());
                 specialTags[i] = specialTagDTO;
                 specialTags[i] = specialTagDTO;
             }
             }
         }
         }
@@ -290,6 +288,9 @@ public class TaskServiceImpl implements TaskService {
                 specialTagDTO.setTagName(list.get(i).getContent());
                 specialTagDTO.setTagName(list.get(i).getContent());
                 specialTagDTO.setPositionX(list.get(i).getPositionX());
                 specialTagDTO.setPositionX(list.get(i).getPositionX());
                 specialTagDTO.setPositionY(list.get(i).getPositionY());
                 specialTagDTO.setPositionY(list.get(i).getPositionY());
+                specialTagDTO.setOffsetIndex(list.get(i).getOffsetIndex());
+                specialTagDTO.setOffsetX(list.get(i).getOffsetX());
+                specialTagDTO.setOffsetY(list.get(i).getOffsetY());
                 specialTags[i] = specialTagDTO;
                 specialTags[i] = specialTagDTO;
             }
             }
         }
         }
@@ -305,16 +306,15 @@ public class TaskServiceImpl implements TaskService {
         task.setStudentId(studentId);
         task.setStudentId(studentId);
         task.setStudentNumber(student.getSecretNumber());
         task.setStudentNumber(student.getSecretNumber());
         task.setMarkStepList(buildMarkStep(student));
         task.setMarkStepList(buildMarkStep(student));
-        task.setPictureUrls(
-                fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1, student.getSliceCount()));
+        task.setPictureUrls(fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
+                student.getSliceCount()));
         task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
         task.setJsonUrl(fileService.getJsonUri(student.getExamId(), student.getSecretNumber()));
         if (subject.getPaperFileType() != null) {
         if (subject.getPaperFileType() != null) {
-            task.setPaperUrl(
-                    fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
+            task.setPaperUrl(fileService.getPaperUri(subject.getExamId(), subject.getCode(), subject.getPaperFileType()));
         }
         }
         if (subject.getAnswerFileType() != null) {
         if (subject.getAnswerFileType() != null) {
-            task.setAnswerUrl(
-                    fileService.getAnswerUri(subject.getExamId(), subject.getCode(), subject.getAnswerFileType()));
+            task.setAnswerUrl(fileService.getAnswerUri(subject.getExamId(), subject.getCode(),
+                    subject.getAnswerFileType()));
         }
         }
         task.setObjectiveScore(student.getObjectiveScore());
         task.setObjectiveScore(student.getObjectiveScore());
         task.setBack(true);
         task.setBack(true);
@@ -331,8 +331,8 @@ public class TaskServiceImpl implements TaskService {
 
 
     private List<MarkStepDTO> buildMarkStep(ExamStudent student) {
     private List<MarkStepDTO> buildMarkStep(ExamStudent student) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService
-                .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
+        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+                student.getSubjectCode(), false);
         int number = 0;
         int number = 0;
         for (ExamQuestion question : sList) {
         for (ExamQuestion question : sList) {
             number++;
             number++;
@@ -368,9 +368,8 @@ public class TaskServiceImpl implements TaskService {
                 stepTask.setBack(task.isBack());
                 stepTask.setBack(task.isBack());
                 stepTask.setLibraryId(library.getId());
                 stepTask.setLibraryId(library.getId());
                 stepTask.setHeaderId(task.getHeaderId());
                 stepTask.setHeaderId(task.getHeaderId());
-                List<ExamQuestion> sList = questionService
-                        .findByExamAndSubjectAndObjectiveAndGroupNumber(library.getExamId(), library.getSubjectCode(),
-                                false, library.getGroupNumber());
+                List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
+                        library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
                 if (start == end) {
                 if (start == end) {
                     end = end + sList.size() * 2 - 1;
                     end = end + sList.size() * 2 - 1;
                 } else {
                 } else {

+ 7 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/AnswerCheckController.java

@@ -13,6 +13,7 @@ import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.LogType;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 import net.sf.json.JSONObject;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.ModelAndView;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.List;
@@ -31,6 +33,8 @@ import java.util.Map;
 @RequestMapping("/admin/exam/check/answer")
 @RequestMapping("/admin/exam/check/answer")
 public class AnswerCheckController extends BaseExamController {
 public class AnswerCheckController extends BaseExamController {
 
 
+    private static final String PAPER_TYPES_REGEX = "[a-zA-Z#]";
+
     @Autowired
     @Autowired
     private ExamStudentService studentService;
     private ExamStudentService studentService;
 
 
@@ -107,7 +111,9 @@ public class AnswerCheckController extends BaseExamController {
                 student.setAbsent(absent);
                 student.setAbsent(absent);
             }
             }
             student.setAnswers(answers);
             student.setAnswers(answers);
-            student.setPaperType(paperType);
+            if (paperType.matches(PAPER_TYPES_REGEX)) {
+                student.setPaperType(paperType);
+            }
             return saveUploadStudent(student);
             return saveUploadStudent(student);
         } else {
         } else {
             return false;
             return false;

+ 6 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/LibraryController.java

@@ -119,8 +119,12 @@ public class LibraryController extends BaseExamController {
         model.addAttribute("groupList", groupList);
         model.addAttribute("groupList", groupList);
         model.addAttribute("statusList", LibraryStatus.getOptionList());
         model.addAttribute("statusList", LibraryStatus.getOptionList());
         model.addAttribute("status", status);
         model.addAttribute("status", status);
-        model.addAttribute("markerList",
-                markerService.findByExamAndSubjectAndGroup(examId, query.getSubjectCode(), query.getGroupNumber()));
+        List<Marker> markerList = markerService.findByExamAndSubjectAndGroup(examId, query.getSubjectCode(),
+                query.getGroupNumber());
+        for (Marker marker : markerList) {
+            marker.setLoginName(userService.findById(marker.getUserId()).getLoginName());
+        }
+        model.addAttribute("markerList", markerList);
         model.addAttribute("inspectedCount", inspectedCount);
         model.addAttribute("inspectedCount", inspectedCount);
         Exam exam = examService.findById(examId);
         Exam exam = examService.findById(examId);
         model.addAttribute("examType", exam.getType());
         model.addAttribute("examType", exam.getType());

+ 6 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/StudentController.java

@@ -75,6 +75,8 @@ public class StudentController extends BaseExamController {
 
 
     private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
     private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
 
 
+    private static final String PAPER_TYPES_REGEX = "[a-zA-Z#]";
+
     @Logging(menu = "查询考生", type = LogType.QUERY)
     @Logging(menu = "查询考生", type = LogType.QUERY)
     @RequestMapping
     @RequestMapping
     public String list(Model model, HttpServletRequest request, ExamStudentSearchQuery query) {
     public String list(Model model, HttpServletRequest request, ExamStudentSearchQuery query) {
@@ -191,6 +193,7 @@ public class StudentController extends BaseExamController {
                 student.setObjectiveScore(0d);
                 student.setObjectiveScore(0d);
                 student.setSubjectiveScore(0d);
                 student.setSubjectiveScore(0d);
                 student.setSubjectiveStatus(SubjectiveStatus.UNMARK);
                 student.setSubjectiveStatus(SubjectiveStatus.UNMARK);
+                student.setPaperType(NULL_PAPER_TYPE_PLACEHOLDER);
                 ExamStudent old = checkExamNumber(student, new HashMap<String, ExamStudent>(),
                 ExamStudent old = checkExamNumber(student, new HashMap<String, ExamStudent>(),
                         new HashMap<String, ExamStudent>());
                         new HashMap<String, ExamStudent>());
                 if (old != null) {
                 if (old != null) {
@@ -509,8 +512,9 @@ public class StudentController extends BaseExamController {
                     student.setBatchCode(null);
                     student.setBatchCode(null);
                     student.setSliceCount(0);
                     student.setSliceCount(0);
                     student.setSheetCount(0);
                     student.setSheetCount(0);
-                    student.setPaperType(StringUtils.trimToNull(studentVO.getPaperType()));
-                    if (student.getPaperType() == null) {
+                    if (student.getPaperType() != null && student.getPaperType().matches(PAPER_TYPES_REGEX)) {
+                        student.setPaperType(StringUtils.trimToNull(studentVO.getPaperType()));
+                    } else {
                         student.setPaperType(NULL_PAPER_TYPE_PLACEHOLDER);
                         student.setPaperType(NULL_PAPER_TYPE_PLACEHOLDER);
                     }
                     }
                     // 同步更新评卷任务
                     // 同步更新评卷任务

+ 7 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/SubjectController.java

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 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.ExamSubject;
@@ -56,8 +57,13 @@ public class SubjectController extends BaseExamController {
 
 
     @RequestMapping("/edit")
     @RequestMapping("/edit")
     @RoleRequire(Role.SCHOOL_ADMIN)
     @RoleRequire(Role.SCHOOL_ADMIN)
-    public String edit(HttpServletRequest request, @RequestParam String code, Model model) {
+    public String edit(HttpServletRequest request, @RequestParam String code, Model model,
+            RedirectAttributes redirectAttributes) {
         ExamSubject subject = subjectService.find(getSessionExamId(request), code);
         ExamSubject subject = subjectService.find(getSessionExamId(request), code);
+        if (subject == null) {
+            addMessage(redirectAttributes, "科目代码有误,科目不存在");
+            return "redirect:/admin/exam/paper";
+        }
         model.addAttribute("subject", subject);
         model.addAttribute("subject", subject);
         model.addAttribute("pictureConfig", buildPictureConfig(subject.getSheetConfig()));
         model.addAttribute("pictureConfig", buildPictureConfig(subject.getSheetConfig()));
         model.addAttribute("passScore", subject.getPassScore());
         model.addAttribute("passScore", subject.getPassScore());

+ 27 - 12
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/CoreController.java

@@ -17,6 +17,7 @@ import cn.com.qmth.stmms.common.utils.DateUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 import net.sf.json.JSONObject;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+
 import java.text.DecimalFormat;
 import java.text.DecimalFormat;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
@@ -37,6 +39,10 @@ public class CoreController extends BaseApiController {
 
 
     private static final int MAX_QUERY_PAGE_SIZE = 100;
     private static final int MAX_QUERY_PAGE_SIZE = 100;
 
 
+    private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
+
+    private static final String PAPER_TYPES_REGEX = "[a-zA-Z#]";
+
     @Autowired
     @Autowired
     private ExamService examService;
     private ExamService examService;
 
 
@@ -130,7 +136,12 @@ public class CoreController extends BaseApiController {
             student.setCollege(validate("college", college, true, 32));
             student.setCollege(validate("college", college, true, 32));
             student.setClassName(validate("className", className, true, 32));
             student.setClassName(validate("className", className, true, 32));
             student.setTeacher(validate("teacher", teacher, true, 32));
             student.setTeacher(validate("teacher", teacher, true, 32));
-            student.setPaperType(validate("paperType", paperType, false, 16));
+            validate("paperType", paperType, false, 16);
+            if (paperType != null && paperType.matches(PAPER_TYPES_REGEX)) {
+                student.setPaperType(paperType);
+            } else {
+                student.setPaperType(NULL_PAPER_TYPE_PLACEHOLDER);
+            }
             student.setExamSite(validate("examSite", examSite, false, 32));
             student.setExamSite(validate("examSite", examSite, false, 32));
             student.setExamRoom(validate("examRoom", examRoom, false, 32));
             student.setExamRoom(validate("examRoom", examRoom, false, 32));
             student.setAbsent(false);
             student.setAbsent(false);
@@ -160,7 +171,7 @@ public class CoreController extends BaseApiController {
                 student.setSubjectName(subjectName);
                 student.setSubjectName(subjectName);
             }
             }
             paperType = validate(paperType, true, 16);
             paperType = validate(paperType, true, 16);
-            if (paperType != null) {
+            if (paperType != null && paperType.matches(PAPER_TYPES_REGEX)) {
                 student.setPaperType(paperType);
                 student.setPaperType(paperType);
             }
             }
             college = validate(college, true, 32);
             college = validate(college, true, 32);
@@ -278,14 +289,15 @@ public class CoreController extends BaseApiController {
             obj.accumulate("totalScore", df.format(student.getTotalScore()));
             obj.accumulate("totalScore", df.format(student.getTotalScore()));
             obj.accumulate("objectiveScore", df.format(student.getObjectiveScore()));
             obj.accumulate("objectiveScore", df.format(student.getObjectiveScore()));
             obj.accumulate("subjectiveScore", df.format(student.getSubjectiveScore()));
             obj.accumulate("subjectiveScore", df.format(student.getSubjectiveScore()));
-            //obj.accumulate("objectiveScoreDetail", StringUtils.trimToEmpty(student.getObjectiveScoreList()));
-            //obj.accumulate("subjectiveScoreDetail", StringUtils.trimToEmpty(student.getSubjectiveScoreList()));
+            // obj.accumulate("objectiveScoreDetail",
+            // StringUtils.trimToEmpty(student.getObjectiveScoreList()));
+            // obj.accumulate("subjectiveScoreDetail",
+            // StringUtils.trimToEmpty(student.getSubjectiveScoreList()));
             // 构造客观题得分明细
             // 构造客观题得分明细
             JSONArray objective = new JSONArray();
             JSONArray objective = new JSONArray();
             List<ScoreItem> scoreList = student.getScoreList(true);
             List<ScoreItem> scoreList = student.getScoreList(true);
-            List<ExamQuestion> questionList = questionService
-                    .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true,
-                            student.getPaperType());
+            List<ExamQuestion> questionList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(
+                    student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
             int i = 0;
             int i = 0;
             for (ScoreItem item : scoreList) {
             for (ScoreItem item : scoreList) {
                 i++;
                 i++;
@@ -307,8 +319,8 @@ public class CoreController extends BaseApiController {
             // 构造主观题得分明细
             // 构造主观题得分明细
             JSONArray subjective = new JSONArray();
             JSONArray subjective = new JSONArray();
             scoreList = student.getScoreList(false);
             scoreList = student.getScoreList(false);
-            questionList = questionService
-                    .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
+            questionList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
+                    student.getSubjectCode(), false);
             i = 0;
             i = 0;
             for (ScoreItem item : scoreList) {
             for (ScoreItem item : scoreList) {
                 i++;
                 i++;
@@ -328,9 +340,12 @@ public class CoreController extends BaseApiController {
             obj.accumulate("subjectiveScoreDetail", subjective);
             obj.accumulate("subjectiveScoreDetail", subjective);
             // 构造原图下载地址
             // 构造原图下载地址
             if (student.isUpload()) {
             if (student.isUpload()) {
-                obj.accumulate("sheetUrls", fileService
-                        .getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount()).stream()
-                        .map(uri -> fileService.getFileServer().concat(uri)).collect(Collectors.toList()));
+                obj.accumulate(
+                        "sheetUrls",
+                        fileService
+                                .getSheetUris(student.getExamId(), student.getExamNumber(), 1, student.getSheetCount())
+                                .stream().map(uri -> fileService.getFileServer().concat(uri))
+                                .collect(Collectors.toList()));
             } else {
             } else {
                 obj.accumulate("sheetUrls", new JSONArray());
                 obj.accumulate("sheetUrls", new JSONArray());
             }
             }

+ 10 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/FileController.java

@@ -196,7 +196,11 @@ public class FileController extends BaseApiController {
             @RequestParam MultipartFile file) {
             @RequestParam MultipartFile file) {
         ApiUser au = RequestUtils.getApiUser(request);
         ApiUser au = RequestUtils.getApiUser(request);
         Exam exam = validateExam(au, examId);
         Exam exam = validateExam(au, examId);
-        ExamSubject subject = validateExamSubject(examId, subjectCode);
+        // ExamSubject subject = validateExamSubject(examId, subjectCode);
+        ExamSubject subject = subjectService.find(examId, subjectCode);
+        if (subject == null) {
+            return result(false);
+        }
         if (exam.getType() == ExamType.SCAN_IMAGE) {
         if (exam.getType() == ExamType.SCAN_IMAGE) {
             validateFormatType(format, FormatType.PDF);
             validateFormatType(format, FormatType.PDF);
         } else if (exam.getType() == ExamType.MULTI_MEDIA) {
         } else if (exam.getType() == ExamType.MULTI_MEDIA) {
@@ -221,7 +225,11 @@ public class FileController extends BaseApiController {
             @RequestParam MultipartFile file) {
             @RequestParam MultipartFile file) {
         ApiUser au = RequestUtils.getApiUser(request);
         ApiUser au = RequestUtils.getApiUser(request);
         Exam exam = validateExam(au, examId);
         Exam exam = validateExam(au, examId);
-        ExamSubject subject = validateExamSubject(examId, subjectCode);
+        // ExamSubject subject = validateExamSubject(examId, subjectCode);
+        ExamSubject subject = subjectService.find(examId, subjectCode);
+        if (subject == null) {
+            return result(false);
+        }
         if (exam.getType() == ExamType.SCAN_IMAGE) {
         if (exam.getType() == ExamType.SCAN_IMAGE) {
             validateFormatType(format, FormatType.PDF);
             validateFormatType(format, FormatType.PDF);
         } else if (exam.getType() == ExamType.MULTI_MEDIA) {
         } else if (exam.getType() == ExamType.MULTI_MEDIA) {

+ 8 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/ScanController.java

@@ -43,6 +43,8 @@ public class ScanController extends BaseApiController {
 
 
     private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
     private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
 
 
+    private static final String PAPER_TYPES_REGEX = "[a-zA-Z#]";
+
     /**
     /**
      * 上传考生识别结果
      * 上传考生识别结果
      *
      *
@@ -75,9 +77,12 @@ public class ScanController extends BaseApiController {
                     student.setBatchCode(sc.getBatchCode());
                     student.setBatchCode(sc.getBatchCode());
                     student.setSliceCount(sc.getSliceCount());
                     student.setSliceCount(sc.getSliceCount());
                     student.setSheetCount(sc.getSheetCount());
                     student.setSheetCount(sc.getSheetCount());
-                    student.setPaperType(StringUtils.trimToNull(sc.getPaperType()));
-                    if (student.getPaperType() == null) {
-                        student.setPaperType(NULL_PAPER_TYPE_PLACEHOLDER);
+                    if (sc.getPaperType() != null) {
+                        if (sc.getPaperType().matches(PAPER_TYPES_REGEX)) {
+                            student.setPaperType(sc.getPaperType());
+                        } else {
+                            student.setPaperType(NULL_PAPER_TYPE_PLACEHOLDER);
+                        }
                     }
                     }
                     // 同步更新评卷任务
                     // 同步更新评卷任务
                     if (saveUploadStudent(student)) {
                     if (saveUploadStudent(student)) {

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/libraryList.jsp

@@ -131,7 +131,7 @@
                         <a class="json-link" href="${ctx}/admin/exam/library/getJson?studentId=${result.studentId}&groupNumber=${result.groupNumber}" target="_blank">原图</a>
                         <a class="json-link" href="${ctx}/admin/exam/library/getJson?studentId=${result.studentId}&groupNumber=${result.groupNumber}" target="_blank">原图</a>
                     </c:if>
                     </c:if>
                     <c:if test="${examType!='MULTI_MEDIA'}">
                     <c:if test="${examType!='MULTI_MEDIA'}">
-                        <a class="track-link" href="#" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.id}" data-title="${result.examNumber}">阅卷轨迹</a>
+                        <a class="track-link" href="#" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.id}" data-title="${result.secretNumber}">阅卷轨迹</a>
                     </c:if>
                     </c:if>
                 </c:if>
                 </c:if>
                 <c:if test="${result.status.value==1 || result.status.value==5 ||result.status.value==6}">
                 <c:if test="${result.status.value==1 || result.status.value==5 ||result.status.value==6}">

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/problemHistory.jsp

@@ -86,7 +86,7 @@
                     <a class="json-link" href="${ctx}/admin/exam/library/getJson?studentId=${result.id}&groupNumber=${result.number}" target="_blank">原图</a>
                     <a class="json-link" href="${ctx}/admin/exam/library/getJson?studentId=${result.id}&groupNumber=${result.number}" target="_blank">原图</a>
                 </c:if>
                 </c:if>
                 <c:if test="${examType!='MULTI_MEDIA'}">
                 <c:if test="${examType!='MULTI_MEDIA'}">
-                    <a class="track-link" href="#" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.libraryId}" data-title="${result.examNumber}">阅卷轨迹</a>
+                    <a class="track-link" href="#" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.libraryId}" data-title="${result.secretNumber}">阅卷轨迹</a>
                 </c:if>
                 </c:if>
                 &nbsp;
                 &nbsp;
                 <a href="##" data-id="${result.libraryId}" class="back-link">打回</a>
                 <a href="##" data-id="${result.libraryId}" class="back-link">打回</a>

+ 1 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/qualityProcess.jsp

@@ -32,6 +32,7 @@
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/single-image-view.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/single-image-view.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/view-sidebar.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/view-sidebar.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/quality-process.js"></script>
     <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/quality-process.js"></script>
+    <script type="text/javascript" src="${ctxStatic}/utils/image-utils.js"></script>
 
 
 </head>
 </head>
 <body>
 <body>

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/scoreList.jsp

@@ -189,7 +189,7 @@
                     <c:if test="${examType!='MULTI_MEDIA'}">
                     <c:if test="${examType!='MULTI_MEDIA'}">
                         <a class="sheet-link" href="##" data-id="${student.id}" data-sheet-url="${student.sheetUrlString}"
                         <a class="sheet-link" href="##" data-id="${student.id}" data-sheet-url="${student.sheetUrlString}"
                            data-answer-url="<c:if test="${student.answerUrl!=null}">${fileServer}${student.answerUrl}</c:if>"
                            data-answer-url="<c:if test="${student.answerUrl!=null}">${fileServer}${student.answerUrl}</c:if>"
-                           data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a>
+                           data-title="<c:if test='${web_user.schoolAdmin==true}'>${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;</c:if>客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a>
                         <a href="${ctx}/admin/exam/track/student/${student.id}" target="_blank">轨迹图</a>
                         <a href="${ctx}/admin/exam/track/student/${student.id}" target="_blank">轨迹图</a>
                     </c:if>
                     </c:if>
                     <c:if test="${examType=='MULTI_MEDIA'}">
                     <c:if test="${examType=='MULTI_MEDIA'}">