yin пре 8 месеци
родитељ
комит
f419fc1fab

+ 2 - 1
src/main/java/cn/com/qmth/scancentral/controller/admin/CheckAbsentController.java

@@ -280,7 +280,7 @@ public class CheckAbsentController extends BaseController {
 
     @ApiOperation(value = "缺考校验导入")
     @RequestMapping(value = "exam-status/import", method = RequestMethod.POST)
-    public TaskIdVo examStatusImportFile(@RequestParam Long examId, @RequestParam ExamStatusCheckMode mode,
+    public TaskIdVo examStatusImportFile(@RequestParam Long examId,@RequestParam String subjectCode, @RequestParam ExamStatusCheckMode mode,
             @RequestParam MultipartFile file) throws IOException {
         ExamEntity exam = examService.getById(examId);
         if (exam == null) {
@@ -306,6 +306,7 @@ public class CheckAbsentController extends BaseController {
                 vo.setTaskId(taskId);
                 vo.setTotalCount(list.size() - 1);
                 vo.setExamId(examId);
+                vo.setSubjectCode(subjectCode);
                 vo.setMode(mode);
                 vo.setStatus(AsyncTaskStatus.RUNNING);
                 vo.setProgress(0.0);

+ 1 - 0
src/main/java/cn/com/qmth/scancentral/service/impl/OmrGroupServiceImpl.java

@@ -99,6 +99,7 @@ public class OmrGroupServiceImpl extends ServiceImpl<OmrGroupDao, OmrGroupEntity
                 buildTaskByStudent(group, dataList);
             }
         }.setDataForBatch(studentIds, 1000);
+        this.updateTotalCount(group.getId());
     }
 
     private void buildTaskByStudent(OmrGroupEntity group, List<Long> studentIds) {

+ 55 - 37
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -1695,13 +1695,18 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     public void importExamStatus(ExamStatusImportTaskVo vo) {
         Map<String, StudentEntity> examNumbers = new HashMap<>();
         Map<String, Boolean> absentMap = new HashMap<>();
-        List<String> lineList = null;
         InputStream in = null;
         try {
             in = new FileInputStream(vo.getFile());
-            lineList = IOUtils.readLines(in, "UTF-8");
-        } catch (IOException e) {
-            throw new ParameterException("读取文件出错", e);
+            examStatusImportCheck(vo, in,examNumbers,absentMap);
+        } catch (ParameterException e) {
+            vo.setErrMsg(e.getMessage());
+            vo.setStatus(AsyncTaskStatus.FAILED);
+            throw e;
+        } catch (Exception e) {
+            vo.setErrMsg("系统错误");
+            vo.setStatus(AsyncTaskStatus.FAILED);
+            throw new ParameterException("系统错误", e);
         } finally {
             if (in != null) {
                 try {
@@ -1710,6 +1715,49 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
                 }
             }
         }
+
+        if (ExamStatusCheckMode.OVERRIDE.equals(vo.getMode())) {
+            for (StudentEntity student : examNumbers.values()) {
+                concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
+                try {
+                    if (absentMap.get(student.getExamNumber())) {
+                        student.setExamStatus(ExamStatus.ABSENT);
+                    } else {
+                        student.setExamStatus(ExamStatus.OK);
+                    }
+                    saveOrUpdate(student);
+                    vo.setProgressCount(vo.getProgressCount() + 1);
+                } finally {
+                    concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
+                }
+            }
+        }
+        if (ExamStatusCheckMode.COMPARE.equals(vo.getMode())) {
+            for (StudentEntity student : examNumbers.values()) {
+                concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
+                try {
+                    if (absentMap.get(student.getExamNumber()) && !ExamStatus.ABSENT.equals(student.getExamStatus())) {
+                        student.setExamStatus(ExamStatus.UNCHECK3);
+                    }
+                    if (!absentMap.get(student.getExamNumber()) && !ExamStatus.OK.equals(student.getExamStatus())) {
+                        student.setExamStatus(ExamStatus.UNCHECK3);
+                    }
+                    saveOrUpdate(student);
+                    vo.setProgressCount(vo.getProgressCount() + 1);
+                } finally {
+                    concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
+                }
+            }
+        }
+    }
+
+    private void examStatusImportCheck(ExamStatusImportTaskVo vo, InputStream in,Map<String, StudentEntity> examNumbers , Map<String, Boolean> absentMap) {
+        List<String> lineList = null;
+        try {
+            lineList = IOUtils.readLines(in, "UTF-8");
+        } catch (IOException e) {
+            throw new ParameterException("读取文件出错", e);
+        }
         for (int i = 1; i < lineList.size(); i++) {
             String line = lineList.get(i);
             if (StringUtils.isBlank(line)) {
@@ -1725,6 +1773,9 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
             String examNumber = str[0];
             String absent = str[1];
             String subjectCode = str[2];
+            if(StringUtils.isBlank(subjectCode)||!vo.getSubjectCode().equals(subjectCode)){
+                msg.append("  科目代码不正确");
+            }
             if (StringUtils.isBlank(examNumber)) {
                 examNumber = null;
                 msg.append("  准考证号不能为空");
@@ -1755,39 +1806,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
                 throw new ParameterException(newError(i + 1, msg.toString()));
             }
         }
-        if (ExamStatusCheckMode.OVERRIDE.equals(vo.getMode())) {
-            for (StudentEntity student : examNumbers.values()) {
-                concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
-                try {
-                    if (absentMap.get(student.getExamNumber())) {
-                        student.setExamStatus(ExamStatus.ABSENT);
-                    } else {
-                        student.setExamStatus(ExamStatus.OK);
-                    }
-                    saveOrUpdate(student);
-                    vo.setProgressCount(vo.getProgressCount() + 1);
-                } finally {
-                    concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
-                }
-            }
-        }
-        if (ExamStatusCheckMode.COMPARE.equals(vo.getMode())) {
-            for (StudentEntity student : examNumbers.values()) {
-                concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
-                try {
-                    if (absentMap.get(student.getExamNumber()) && !ExamStatus.ABSENT.equals(student.getExamStatus())) {
-                        student.setExamStatus(ExamStatus.UNCHECK3);
-                    }
-                    if (!absentMap.get(student.getExamNumber()) && !ExamStatus.OK.equals(student.getExamStatus())) {
-                        student.setExamStatus(ExamStatus.UNCHECK3);
-                    }
-                    saveOrUpdate(student);
-                    vo.setProgressCount(vo.getProgressCount() + 1);
-                } finally {
-                    concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
-                }
-            }
-        }
     }
 
     private String newError(int lineNum, String msg) {

+ 9 - 0
src/main/java/cn/com/qmth/scancentral/vo/asynctask/ExamStatusImportTaskVo.java

@@ -6,6 +6,8 @@ public class ExamStatusImportTaskVo extends AsyncTaskVo {
 
     private Long examId;
 
+    private String subjectCode;
+
     private ExamStatusCheckMode mode;
 
     public Long getExamId() {
@@ -24,4 +26,11 @@ public class ExamStatusImportTaskVo extends AsyncTaskVo {
         this.mode = mode;
     }
 
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
 }