ting.yin 1 anno fa
parent
commit
ba0ae7a893

+ 20 - 17
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -64,8 +64,10 @@ import cn.com.qmth.stmms.common.enums.SubjectiveStatus;
 
 @Service
 public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implements ExamStudentService {
-	@PersistenceContext
-	private EntityManager entityManager;
+
+    @PersistenceContext
+    private EntityManager entityManager;
+
     @Autowired
     private ExamStudentDao studentDao;
 
@@ -165,6 +167,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
                 subject.setUploadCount(0);
                 subject.setRemark(es.getRemark());
                 subject.setDisplayQuestionName(false);
+                subject.setInspectRound(1);
             } else {
                 subject.setLevel(es.getLevel());
                 subject.setCategory(es.getCategory());
@@ -1195,9 +1198,8 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
 
     @Override
     public Set<String> findSubjectUnInspectedByExamId(int examId) {
-    	return studentDao.findSubjectUnInspectedByExamId(examId, SubjectiveStatus.MARKED);
+        return studentDao.findSubjectUnInspectedByExamId(examId, SubjectiveStatus.MARKED);
     }
-    
 
     @Override
     public List<String> findDistinctCollege(int examId) {
@@ -1299,27 +1301,28 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
     public int batchUpdate(List<ExamStudent> updateList) {
         int i = 0;
         for (ExamStudent student : updateList) {
-            i = i + this.studentDao.updateInfo(student.getId(), student.getCollege(), student.getClassName(),
+            i = i
+                    + this.studentDao.updateInfo(student.getId(), student.getCollege(), student.getClassName(),
                             student.getTeacher(), student.getExamRoom(), student.getExamSite(), student.getRemark());
         }
         return i;
     }
-    
+
     @Transactional
     @Override
-    public void scoreVerifyTag(Integer userId,Integer studentId,Boolean tag) {
-    	studentDao.scoreVerifyTag(userId, new Date(), tag, studentId);
+    public void scoreVerifyTag(Integer userId, Integer studentId, Boolean tag) {
+        studentDao.scoreVerifyTag(userId, new Date(), tag, studentId);
     }
 
     @Transactional
-	@Override
-	public void inspect(Integer studentId, Date inspectTime, Integer inspectorId) {
-		studentDao.inspect(studentId, inspectTime, inspectorId);
-	}
-    
+    @Override
+    public void inspect(Integer studentId, Date inspectTime, Integer inspectorId) {
+        studentDao.inspect(studentId, inspectTime, inspectorId);
+    }
+
     @Transactional
-	@Override
-	public void cancelInspect(Integer studentId) {
-		studentDao.cancelInspect(studentId);
-	}
+    @Override
+    public void cancelInspect(Integer studentId) {
+        studentDao.cancelInspect(studentId);
+    }
 }

+ 92 - 89
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -70,7 +70,7 @@ public class InspectedController extends BaseExamController {
 
     @Autowired
     private InspectedService inspectedService;
-    
+
     @Autowired
     private InspectHistoryService inspectHistoryService;
 
@@ -119,25 +119,25 @@ public class InspectedController extends BaseExamController {
             subjectList.forEach(e -> subjectCodeIn.add(e.getCode()));
             query.setSubjectCodeIn(StringUtils.join(subjectCodeIn, ","));
         }
-        List<ExamStudentVo> list = inspectedService
-                .findByQuery(query, status, mainNumber, mainStartScore, mainEndScore,  selectiveStatus);
+        List<ExamStudentVo> list = inspectedService.findByQuery(query, status, mainNumber, mainStartScore,
+                mainEndScore, selectiveStatus);
         for (ExamStudentVo e : list) {
             e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
-//            e.setInspectHistoryList(inspectHistoryService.findByStudentIdLimit3(e.getId()));
+            // e.setInspectHistoryList(inspectHistoryService.findByStudentIdLimit3(e.getId()));
         }
-        int maxInspectRound=1;
-        if(list!=null&&list.size()>0) {
-        	Set<String> subjectCodes=list.stream().map(e->e.getSubjectCode()).collect(Collectors.toSet());
-        	maxInspectRound=subjectService.findMaxInspectRound(examId,subjectCodes);
-        	inspectedService.fillInspectHistoryMap(list,maxInspectRound);
+        int maxInspectRound = 1;
+        if (list != null && list.size() > 0) {
+            Set<String> subjectCodes = list.stream().map(e -> e.getSubjectCode()).collect(Collectors.toSet());
+            maxInspectRound = subjectService.findMaxInspectRound(examId, subjectCodes);
+            inspectedService.fillInspectHistoryMap(list, maxInspectRound);
         }
-        Boolean inspected=query.getInspected();
+        Boolean inspected = query.getInspected();
         query.setInspected(null);
-        Integer totalCount = inspectedService
-                .countByQuery(query, status, mainNumber, mainStartScore, mainEndScore,  selectiveStatus);
+        Integer totalCount = inspectedService.countByQuery(query, status, mainNumber, mainStartScore, mainEndScore,
+                selectiveStatus);
         query.setInspected(false);
-        Integer inspectCount = inspectedService
-                .needInspectCount(query,mainNumber, mainStartScore, mainEndScore,  selectiveStatus);
+        Integer inspectCount = inspectedService.needInspectCount(query, mainNumber, mainStartScore, mainEndScore,
+                selectiveStatus);
         query.setResult(list);
         query.setTotalCount(totalCount);
         model.addAttribute("query", query);
@@ -154,11 +154,11 @@ public class InspectedController extends BaseExamController {
         model.addAttribute("status", status);
         model.addAttribute("selectiveStatus", selectiveStatus);
         model.addAttribute("exam", exam);
-        if(StringUtils.isNotBlank(query.getSubjectCode())) {
-        	ExamSubject es=subjectService.find(examId, query.getSubjectCode());
-        	if(inspectedService.inspectFinish(examId, query.getSubjectCode(),es.getInspectRound())) {
-        		model.addAttribute("showNextInspect", true);
-        	}
+        if (StringUtils.isNotBlank(query.getSubjectCode())) {
+            ExamSubject es = subjectService.find(examId, query.getSubjectCode());
+            if (inspectedService.inspectFinish(examId, query.getSubjectCode(), es.getInspectRound())) {
+                model.addAttribute("showNextInspect", true);
+            }
         }
         query.setInspected(inspected);
         return "modules/exam/inspectedList";
@@ -167,7 +167,8 @@ public class InspectedController extends BaseExamController {
     @Logging(menu = "开始考生复核", type = LogType.QUERY)
     @RequestMapping(value = "/getTask", method = RequestMethod.POST)
     @ResponseBody
-    public Task getTask(HttpServletRequest request,HttpServletResponse response, RedirectAttributes ra, InspectQuery query,
+    public Task getTask(HttpServletRequest request, HttpServletResponse response, RedirectAttributes ra,
+            InspectQuery query,
             @RequestParam(required = false, defaultValue = "false") SelectiveStatus selectiveStatus,
             @RequestParam(required = false) Integer mainNumber, @RequestParam(required = false) Double mainStartScore,
             @RequestParam(required = false) Double mainEndScore, @RequestParam(required = false) Double questionScore,
@@ -177,11 +178,11 @@ public class InspectedController extends BaseExamController {
         Exam exam = examService.findById(examId);
         Task task = null;
         if (studentId != null) {
-        	ExamStudent student = studentService.findById(studentId);
-        	if(exam.getInspectUnrepeated()&&inspectHistoryService.existByStudentIdAndUserId(studentId, wu.getId())) {
-        		errMessage("考试已设置为全卷多次复核时不能为同一账号",response);
-        		return null;
-        	}
+            ExamStudent student = studentService.findById(studentId);
+            if (exam.getInspectUnrepeated() && inspectHistoryService.existByStudentIdAndUserId(studentId, wu.getId())) {
+                errMessage("考试已设置为全卷多次复核时不能为同一账号", response);
+                return null;
+            }
             releaseStudent(studentId);
             if (inspectedService.applyStudent(ExamStudentVo.of(student), wu.getId())) {
                 task = taskService.build(student);
@@ -192,9 +193,9 @@ public class InspectedController extends BaseExamController {
             if (student == null) {
                 return null;
             }
-            if(exam.getInspectUnrepeated()&&inspectHistoryService.existByStudentIdAndUserId(studentId, wu.getId())) {
-            	errMessage("考试已设置为全卷多次复核时不能为同一账号",response);
-            	return null;
+            if (exam.getInspectUnrepeated() && inspectHistoryService.existByStudentIdAndUserId(studentId, wu.getId())) {
+                errMessage("考试已设置为全卷多次复核时不能为同一账号", response);
+                return null;
             }
             releaseStudent(student.getId());
             if (inspectedService.applyStudent(ExamStudentVo.of(student), wu.getId())) {
@@ -215,8 +216,8 @@ public class InspectedController extends BaseExamController {
             query.setInspected(false);
             query.setInspectUnrepeated(exam.getInspectUnrepeated());
             query.setInspectorId(wu.getId());
-            list = inspectedService
-                    .findByQuery(query, SubjectiveStatus.MARKED, mainNumber, mainStartScore, mainEndScore,selectiveStatus);
+            list = inspectedService.findByQuery(query, SubjectiveStatus.MARKED, mainNumber, mainStartScore,
+                    mainEndScore, selectiveStatus);
             if (list.isEmpty()) {
                 break;
             }
@@ -241,7 +242,8 @@ public class InspectedController extends BaseExamController {
         ExamStudent student = studentService.findById(studentId);
         JSONObject obj = new JSONObject();
         try {
-            if (student != null && lockService.trylock(LockType.STUDENT, studentId) && inspectedService.inspect(student, wu.getId())) {
+            if (student != null && lockService.trylock(LockType.STUDENT, studentId)
+                    && inspectedService.inspect(student, wu.getId())) {
                 inspectedService.releaseByStudent(student);
                 obj.accumulate("success", true);
             } else {
@@ -306,18 +308,18 @@ public class InspectedController extends BaseExamController {
         }
         return obj;
     }
-    
+
     @Logging(menu = "再次复核", type = LogType.UPDATE)
     @RequestMapping(value = "nextround", method = RequestMethod.POST)
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.INSPECTOR, Role.COLLEGE_ADMIN })
-    public String nextround(RedirectAttributes ra,HttpServletRequest request, @RequestParam String subjectCode) {
-    	int examId = getSessionExamId(request);
-    	ExamSubject es=subjectService.find(examId, subjectCode);
-    	if(!inspectedService.inspectFinish(examId, subjectCode,es.getInspectRound())) {
-    		ra.addFlashAttribute("errmsg", "该科目第"+es.getInspectRound()+"次复核还未完成");
-    		return "redirect:/admin/exam/inspected/list?subjectCode=" + subjectCode;
-    	}
-    	subjectService.nextInspectRound(examId, subjectCode);
+    public String nextround(RedirectAttributes ra, HttpServletRequest request, @RequestParam String subjectCode) {
+        int examId = getSessionExamId(request);
+        ExamSubject es = subjectService.find(examId, subjectCode);
+        if (!inspectedService.inspectFinish(examId, subjectCode, es.getInspectRound())) {
+            ra.addFlashAttribute("errmsg", "该科目第" + es.getInspectRound() + "次复核还未完成");
+            return "redirect:/admin/exam/inspected/list?subjectCode=" + subjectCode;
+        }
+        subjectService.nextInspectRound(examId, subjectCode);
         return "redirect:/admin/exam/inspected/list?subjectCode=" + subjectCode;
     }
 
@@ -334,8 +336,8 @@ public class InspectedController extends BaseExamController {
             obj.accumulate("message", "无法打回");
             return obj;
         }
-        if (inspectedService.hasApplied(student, wu.getId()) && (student.getSubjectiveStatus()
-                .equals(SubjectiveStatus.MARKED))) {
+        if (inspectedService.hasApplied(student, wu.getId())
+                && (student.getSubjectiveStatus().equals(SubjectiveStatus.MARKED))) {
             if (subjectCheck(student.getSubjectCode(), wu) && lockService.trylock(LockType.STUDENT, student.getId())) {
                 try {
                     lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
@@ -366,8 +368,8 @@ public class InspectedController extends BaseExamController {
     @Logging(menu = "回看全卷复核任务", type = LogType.QUERY)
     @RequestMapping(value = "/getHistory", method = RequestMethod.POST)
     @ResponseBody
-    public Object getHistory(HttpServletRequest request, @RequestParam String subjectCode, @RequestParam int pageNumber,
-            @RequestParam int pageSize) throws Exception {
+    public Object getHistory(HttpServletRequest request, @RequestParam String subjectCode,
+            @RequestParam int pageNumber, @RequestParam int pageSize) throws Exception {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
         List<Task> list = new ArrayList<>();
@@ -397,8 +399,8 @@ public class InspectedController extends BaseExamController {
         JSONObject status = new JSONObject();
         int examId = getSessionExamId(request);
         query.setExamId(examId);
-        Integer totalCount = inspectedService
-                .countByQuery(query, SubjectiveStatus.MARKED, mainNumber, mainStartScore, mainEndScore, selectiveStatus);
+        Integer totalCount = inspectedService.countByQuery(query, SubjectiveStatus.MARKED, mainNumber, mainStartScore,
+                mainEndScore, selectiveStatus);
         status.accumulate("totalCount", totalCount);
         status.accumulate("valid", true);
         return status;
@@ -415,6 +417,8 @@ public class InspectedController extends BaseExamController {
         setting.accumulate("fileServer", fileService.getFileServer());
         setting.accumulate("userName", wu.getName());
         setting.accumulate("splitConfig", getSplitConfig());
+        setting.accumulate("inspectScroll", exam.getInspectScrollBottom());
+        setting.accumulate("doubleTrack", false);
 
         ExamSubject examSubject = subjectService.find(examId, subjectCode);
         JSONObject subject = new JSONObject();
@@ -527,18 +531,17 @@ public class InspectedController extends BaseExamController {
             long totalCount = studentService.countByQuery(sQuery);
             vo.setTotalCount(totalCount);
             vo.setLeftCount(totalCount - inspectedCount);
-            String percent = totalCount > 0 ?
-                    (new DecimalFormat("####.###").format(inspectedCount * 100.0 / totalCount) + "%") :
-                    "100%";
+            String percent = totalCount > 0 ? (new DecimalFormat("####.###")
+                    .format(inspectedCount * 100.0 / totalCount) + "%") : "100%";
             vo.setPercent(percent);
-            if(unFinishSet.contains(vo.getSubject().getCode())) {
-            	vo.setFinishCount(vo.getSubject().getInspectRound()-1);
-            }else {
-            	if(totalCount==0) {
-            		vo.setFinishCount(vo.getSubject().getInspectRound()-1);
-            	}else {
-            		vo.setFinishCount(vo.getSubject().getInspectRound());
-            	}
+            if (unFinishSet.contains(vo.getSubject().getCode())) {
+                vo.setFinishCount(vo.getSubject().getInspectRound() - 1);
+            } else {
+                if (totalCount == 0) {
+                    vo.setFinishCount(vo.getSubject().getInspectRound() - 1);
+                } else {
+                    vo.setFinishCount(vo.getSubject().getInspectRound());
+                }
             }
             list.add(vo);
         }
@@ -562,15 +565,15 @@ public class InspectedController extends BaseExamController {
         model.addAttribute("subjectList", getExamSubject(examId, wu));
         return "modules/exam/inspectedInfo";
     }
-    
+
     @RequestMapping(value = "list/export", method = RequestMethod.POST)
     public String exportListFile(HttpServletRequest request, HttpServletResponse response,
-            RedirectAttributes redirectAttributes,InspectQuery query,
+            RedirectAttributes redirectAttributes, InspectQuery query,
             @RequestParam(required = false) SubjectiveStatus status,
             @RequestParam(required = false) SelectiveStatus selectiveStatus,
             @RequestParam(required = false) Integer mainNumber, @RequestParam(required = false) Double mainStartScore,
             @RequestParam(required = false) Double mainEndScore) {
-    	int examId = getSessionExamId(request);
+        int examId = getSessionExamId(request);
         Exam exam = examService.findById(examId);
         if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
             return "modules/exam/permission";
@@ -584,54 +587,54 @@ public class InspectedController extends BaseExamController {
             query.setSubjectCodeIn(StringUtils.join(subjectCodeIn, ","));
         }
         query.setExport(true);
-        List<ExamStudentVo> list = inspectedService
-                .findByQuery(query, status, mainNumber, mainStartScore, mainEndScore,  selectiveStatus);
+        List<ExamStudentVo> list = inspectedService.findByQuery(query, status, mainNumber, mainStartScore,
+                mainEndScore, selectiveStatus);
         for (ExamStudentVo e : list) {
             e.setSubjectiveScoreList(e.getSubjectiveScoreList().replace(UN_SELECTIVE_SCORE, "/"));
         }
-        int maxInspectRound=1;
-        if(list!=null&&list.size()>0) {
-        	Set<String> subjectCodes=list.stream().map(e->e.getSubjectCode()).collect(Collectors.toSet());
-        	maxInspectRound=subjectService.findMaxInspectRound(examId,subjectCodes);
-        	inspectedService.fillInspectHistoryMap(list,maxInspectRound);
+        int maxInspectRound = 1;
+        if (list != null && list.size() > 0) {
+            Set<String> subjectCodes = list.stream().map(e -> e.getSubjectCode()).collect(Collectors.toSet());
+            maxInspectRound = subjectService.findMaxInspectRound(examId, subjectCodes);
+            inspectedService.fillInspectHistoryMap(list, maxInspectRound);
         }
         try {
-        	String fileName = "复核列表.xlsx";
-        	List<String> headerList = getInspectHeader(maxInspectRound);
-        	ExportInspectExcel excel = new ExportInspectExcel("复核列表", headerList, ExamStudentVo.class);
+            String fileName = "复核列表.xlsx";
+            List<String> headerList = getInspectHeader(maxInspectRound);
+            ExportInspectExcel excel = new ExportInspectExcel("复核列表", headerList, ExamStudentVo.class);
             excel.setDataList(list);
             excel.write(response, fileName).dispose();
             return null;
         } catch (Exception e) {
-        	addErrMessage(redirectAttributes,e, "导出数据失败");
+            addErrMessage(redirectAttributes, e, "导出数据失败");
         }
         return "redirect:/admin/exam/inspected/list";
     }
+
     private List<String> getInspectHeader(int maxInspectRound) {
-    	List<String> ret=new ArrayList<>();
-    	for(int i=1;i<=maxInspectRound;i++) {
-    		ret.add("复核人"+i);
-    		ret.add("复核时间"+i);
-    	}
-		return ret;
-	}
-
-	@RequestMapping(value = "work/export", method = RequestMethod.POST)
+        List<String> ret = new ArrayList<>();
+        for (int i = 1; i <= maxInspectRound; i++) {
+            ret.add("复核人" + i);
+            ret.add("复核时间" + i);
+        }
+        return ret;
+    }
+
+    @RequestMapping(value = "work/export", method = RequestMethod.POST)
     public String exportWorkFile(HttpServletRequest request, HttpServletResponse response,
             RedirectAttributes redirectAttributes) {
-    	Integer examId = getSessionExamId(request);
-		Exam exam = examService.findById(examId);
-		if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
-			return "modules/exam/permission";
-		}
+        Integer examId = getSessionExamId(request);
+        Exam exam = examService.findById(examId);
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            return "modules/exam/permission";
+        }
         try {
-        	List<InspectWorkVo> list = inspectHistoryService.findInspectWork(examId);
+            List<InspectWorkVo> list = inspectHistoryService.findInspectWork(examId);
             String fileName = "复核工作量.xlsx";
-            new ExportExcel("复核工作量", InspectWorkVo.class).setDataList(list).write(response, fileName)
-                    .dispose();
+            new ExportExcel("复核工作量", InspectWorkVo.class).setDataList(list).write(response, fileName).dispose();
             return null;
         } catch (Exception e) {
-        	addErrMessage(redirectAttributes,e, "导出数据失败");
+            addErrMessage(redirectAttributes, e, "导出数据失败");
         }
         return "redirect:/admin/exam/inspected/list";
     }

+ 2 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -310,6 +310,8 @@ public class MarkController extends BaseController {
         Exam exam = examService.findById(marker.getExamId());
         MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
         setting.accumulate("examType", exam.getType());
+        setting.accumulate("remarkCount", exam.getRemarkCount());
+        setting.accumulate("showObjectiveScore", exam.getShowObjectiveScore());
         setting.accumulate("startTime", exam.getStartTime() == null ? 0 : exam.getStartTime().getTime());
         setting.accumulate("endTime", exam.getEndTime() == null ? 0 : exam.getEndTime().getTime());
         setting.accumulate("topCount", marker.getTopCount() != null ? marker.getTopCount() : 0);