Pārlūkot izejas kodu

update student api

deason 9 mēneši atpakaļ
vecāks
revīzija
1339c29432

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

@@ -32,7 +32,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
 @RestController("adminStudentController")
-@Api(tags = "管理功能-考生接口")
+@Api(tags = "考生相关接口")
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/admin/student")
 @Aac(strict = false, auth = true)
 public class StudentController extends BaseController {

+ 83 - 0
src/main/java/cn/com/qmth/scancentral/controller/admin/StudentImportController.java

@@ -0,0 +1,83 @@
+package cn.com.qmth.scancentral.controller.admin;
+
+import cn.com.qmth.scancentral.controller.BaseController;
+import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.service.StudentService;
+import cn.com.qmth.scancentral.util.ResouceUtil;
+import cn.com.qmth.scancentral.vo.ResultVo;
+import cn.com.qmth.scancentral.vo.studentimport.StudentCountVo;
+import cn.com.qmth.scancentral.vo.studentimport.StudentImportConfigVo;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.constant.ApiConstant;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@Api(tags = "考生导入相关接口")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/admin/student")
+@Aac(strict = false, auth = false)
+public class StudentImportController extends BaseController {
+
+    @Autowired
+    private StudentService studentService;
+
+    @Autowired
+    private ExamService examService;
+
+    @ApiOperation(value = "考生导入")
+    @PostMapping("/import")
+    public Map<String, Object> studentImport(@RequestParam Long examId, @RequestParam MultipartFile file) {
+        Map<String, Object> result = new HashMap<>();
+        result.put("taskId", 1L);
+        return result;
+    }
+
+    @ApiOperation(value = "考生导入进度查询")
+    @PostMapping("/import/progress")
+    public Map<String, Object> studentImportProgress(@RequestParam Long taskId) {
+        Map<String, Object> result = new HashMap<>();
+        result.put("progress", 100);
+        result.put("errFileUrl", "");
+        return result;
+    }
+
+    @ApiOperation(value = "查询科目考生数")
+    @PostMapping("/count")
+    public List<StudentCountVo> countStudent(@RequestParam Long examId) {
+        return studentService.countStudent(examId);
+    }
+
+    @ApiOperation(value = "考生清空")
+    @PostMapping(value = "/clear")
+    public ResultVo studentClean(@RequestParam Long examId, @RequestParam String subjectCode) {
+        // studentService.studentClean(examId);
+        return new ResultVo(System.currentTimeMillis());
+    }
+
+    @ApiOperation(value = "获取考生导入参数设置")
+    @PostMapping(value = "/import/config")
+    public StudentImportConfigVo getStudentImportConfig(@RequestParam Long examId) {
+        return examService.getStudentImportConfig(examId);
+    }
+
+    @ApiOperation(value = "保存考生导入参数设置")
+    @PostMapping(value = "/import/config/save")
+    public ResultVo saveStudentImportConfig(StudentImportConfigVo config) {
+        examService.saveStudentImportConfig(config);
+        return new ResultVo(System.currentTimeMillis());
+    }
+
+    @ApiOperation(value = "考生导入模版下载")
+    @GetMapping("/import/template")
+    public void importTemplate() {
+        super.exportFile("考生导入模板.txt", ResouceUtil.getStream("templates/student-import.txt"));
+    }
+
+}

+ 15 - 49
src/main/java/cn/com/qmth/scancentral/service/StudentService.java

@@ -1,67 +1,31 @@
 package cn.com.qmth.scancentral.service;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collection;
-import java.util.List;
-
-import org.springframework.web.multipart.MultipartFile;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.boot.core.collection.PageResult;
-
-import cn.com.qmth.scancentral.bean.AbsentQueryDomain;
-import cn.com.qmth.scancentral.bean.AnswerDeleteDomain;
-import cn.com.qmth.scancentral.bean.AnswerQueryDomain;
-import cn.com.qmth.scancentral.bean.AssignedQueryDomain;
-import cn.com.qmth.scancentral.bean.ImportCetAbsentDomain;
-import cn.com.qmth.scancentral.bean.ImportStudentDomain;
-import cn.com.qmth.scancentral.bean.PageDeleteDomain;
-import cn.com.qmth.scancentral.bean.User;
+import cn.com.qmth.scancentral.bean.*;
 import cn.com.qmth.scancentral.bean.omredit.OmrEditDomain;
 import cn.com.qmth.scancentral.bean.omredit.OmrFieldEditDomain;
 import cn.com.qmth.scancentral.bean.refix.AnswerRefixDomain;
 import cn.com.qmth.scancentral.entity.StudentEntity;
 import cn.com.qmth.scancentral.entity.StudentPaperEntity;
-import cn.com.qmth.scancentral.enums.ExamStatus;
-import cn.com.qmth.scancentral.enums.ExamStatusCheckMode;
-import cn.com.qmth.scancentral.enums.GroupType;
-import cn.com.qmth.scancentral.enums.OP;
-import cn.com.qmth.scancentral.enums.ScanStatus;
-import cn.com.qmth.scancentral.enums.UploadStatus;
-import cn.com.qmth.scancentral.vo.AbsentInfoVo;
-import cn.com.qmth.scancentral.vo.AbsentManualImportVo;
-import cn.com.qmth.scancentral.vo.AbsentQueryVo;
-import cn.com.qmth.scancentral.vo.AnswerDeleteVo;
-import cn.com.qmth.scancentral.vo.AnswerExportK12Vo;
-import cn.com.qmth.scancentral.vo.AnswerExportVo;
-import cn.com.qmth.scancentral.vo.AnswerRefixVo;
-import cn.com.qmth.scancentral.vo.CampusVo;
-import cn.com.qmth.scancentral.vo.ExamSiteVo;
-import cn.com.qmth.scancentral.vo.ExportCetMarkingQueryVo;
-import cn.com.qmth.scancentral.vo.ExportCetVo;
-import cn.com.qmth.scancentral.vo.ImportBreachResult;
-import cn.com.qmth.scancentral.vo.ImportResult;
-import cn.com.qmth.scancentral.vo.ImportStudentQueryVo;
-import cn.com.qmth.scancentral.vo.ImportStudentVo;
-import cn.com.qmth.scancentral.vo.PaperDeleteVo;
-import cn.com.qmth.scancentral.vo.ScanAnswerInfoVo;
-import cn.com.qmth.scancentral.vo.StudentUploadVo;
-import cn.com.qmth.scancentral.vo.UpdateTimeVo;
+import cn.com.qmth.scancentral.enums.*;
+import cn.com.qmth.scancentral.vo.*;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryVo;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssginedTaskResult;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssignedCheckExport;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssignedTaskSaveVo;
 import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
 import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
-import cn.com.qmth.scancentral.vo.student.StudentAnswerVo;
-import cn.com.qmth.scancentral.vo.student.StudentExamRoomVo;
-import cn.com.qmth.scancentral.vo.student.StudentPageQuery;
-import cn.com.qmth.scancentral.vo.student.StudentPageVo;
-import cn.com.qmth.scancentral.vo.student.StudentQuery;
-import cn.com.qmth.scancentral.vo.student.StudentVo;
+import cn.com.qmth.scancentral.vo.student.*;
+import cn.com.qmth.scancentral.vo.studentimport.StudentCountVo;
 import cn.com.qmth.scancentral.vo.subject.SubjectScanProgressVo;
 import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.boot.core.collection.PageResult;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.List;
 
 public interface StudentService extends IService<StudentEntity> {
 
@@ -223,4 +187,6 @@ public interface StudentService extends IService<StudentEntity> {
 
     ImportBreachResult custStatusImport(Long examId, String subjectCode, MultipartFile file);
 
+    List<StudentCountVo> countStudent(Long examId);
+
 }

+ 56 - 131
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -1,63 +1,6 @@
 package cn.com.qmth.scancentral.service.impl;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.LineNumberReader;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import javax.validation.constraints.NotNull;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.gson.Gson;
-import com.qmth.boot.core.collection.PageResult;
-import com.qmth.boot.core.concurrent.service.ConcurrentService;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.core.retrofit.utils.SignatureInfo;
-import com.qmth.boot.tools.excel.ExcelReader;
-import com.qmth.boot.tools.excel.enums.ExcelType;
-import com.qmth.boot.tools.io.IOUtils;
-import com.qmth.boot.tools.signature.SignatureType;
-import com.qmth.boot.tools.uuid.FastUUID;
-
-import cn.com.qmth.scancentral.bean.AbsentQueryDomain;
-import cn.com.qmth.scancentral.bean.AnswerDeleteDomain;
-import cn.com.qmth.scancentral.bean.AnswerQueryDomain;
-import cn.com.qmth.scancentral.bean.AssignedQueryDomain;
-import cn.com.qmth.scancentral.bean.ImportCetAbsentDomain;
-import cn.com.qmth.scancentral.bean.ImportStudentDomain;
-import cn.com.qmth.scancentral.bean.PageDeleteDomain;
-import cn.com.qmth.scancentral.bean.SchoolSession;
-import cn.com.qmth.scancentral.bean.User;
+import cn.com.qmth.scancentral.bean.*;
 import cn.com.qmth.scancentral.bean.answersave.ArrayResult;
 import cn.com.qmth.scancentral.bean.answersave.BoolResult;
 import cn.com.qmth.scancentral.bean.answersave.StringResult;
@@ -69,72 +12,19 @@ import cn.com.qmth.scancentral.bean.refix.PageRefixDomain;
 import cn.com.qmth.scancentral.bean.refix.PaperRefixDomain;
 import cn.com.qmth.scancentral.config.SysProperty;
 import cn.com.qmth.scancentral.dao.StudentDao;
-import cn.com.qmth.scancentral.entity.AnswerCardEntity;
-import cn.com.qmth.scancentral.entity.ExamEntity;
-import cn.com.qmth.scancentral.entity.OmrGroupEntity;
-import cn.com.qmth.scancentral.entity.PaperEntity;
-import cn.com.qmth.scancentral.entity.PaperPageEntity;
-import cn.com.qmth.scancentral.entity.QuestionEntity;
-import cn.com.qmth.scancentral.entity.StudentEntity;
-import cn.com.qmth.scancentral.entity.StudentPaperEntity;
-import cn.com.qmth.scancentral.entity.SubjectEntity;
-import cn.com.qmth.scancentral.entity.UserEntity;
-import cn.com.qmth.scancentral.enums.ExamMode;
-import cn.com.qmth.scancentral.enums.ExamStatus;
-import cn.com.qmth.scancentral.enums.ExamStatusCheckMode;
-import cn.com.qmth.scancentral.enums.GroupType;
-import cn.com.qmth.scancentral.enums.LockType;
-import cn.com.qmth.scancentral.enums.OP;
-import cn.com.qmth.scancentral.enums.OmrField;
-import cn.com.qmth.scancentral.enums.OmrType;
-import cn.com.qmth.scancentral.enums.Role;
-import cn.com.qmth.scancentral.enums.ScanStatus;
-import cn.com.qmth.scancentral.enums.UploadStatus;
+import cn.com.qmth.scancentral.entity.*;
+import cn.com.qmth.scancentral.enums.*;
 import cn.com.qmth.scancentral.exception.NotFoundExceptions;
 import cn.com.qmth.scancentral.exception.ParameterExceptions;
 import cn.com.qmth.scancentral.model.ManualAbsentImportDTO;
-import cn.com.qmth.scancentral.service.AnswerCardService;
-import cn.com.qmth.scancentral.service.AnswerCardSubjectService;
-import cn.com.qmth.scancentral.service.AssignedCheckHistoryService;
-import cn.com.qmth.scancentral.service.BatchService;
-import cn.com.qmth.scancentral.service.ExamService;
-import cn.com.qmth.scancentral.service.FileService;
-import cn.com.qmth.scancentral.service.OmrGroupService;
-import cn.com.qmth.scancentral.service.OmrTaskService;
-import cn.com.qmth.scancentral.service.PaperPageService;
-import cn.com.qmth.scancentral.service.PaperService;
-import cn.com.qmth.scancentral.service.QuestionService;
-import cn.com.qmth.scancentral.service.SessionService;
-import cn.com.qmth.scancentral.service.StudentPaperService;
-import cn.com.qmth.scancentral.service.StudentService;
-import cn.com.qmth.scancentral.service.SubjectService;
-import cn.com.qmth.scancentral.service.ToolExportService;
-import cn.com.qmth.scancentral.service.UserService;
+import cn.com.qmth.scancentral.service.*;
 import cn.com.qmth.scancentral.support.TaskLock;
 import cn.com.qmth.scancentral.support.TaskLockUtil;
 import cn.com.qmth.scancentral.util.BatchGetDataUtil;
 import cn.com.qmth.scancentral.util.BatchSetDataUtil;
 import cn.com.qmth.scancentral.util.MD5Util;
 import cn.com.qmth.scancentral.util.PageUtil;
-import cn.com.qmth.scancentral.vo.AbsentInfoVo;
-import cn.com.qmth.scancentral.vo.AbsentManualImportVo;
-import cn.com.qmth.scancentral.vo.AbsentQueryVo;
-import cn.com.qmth.scancentral.vo.AnswerDeleteVo;
-import cn.com.qmth.scancentral.vo.AnswerExportK12Vo;
-import cn.com.qmth.scancentral.vo.AnswerExportVo;
-import cn.com.qmth.scancentral.vo.AnswerRefixVo;
-import cn.com.qmth.scancentral.vo.CampusVo;
-import cn.com.qmth.scancentral.vo.ExamSiteVo;
-import cn.com.qmth.scancentral.vo.ExportCetMarkingQueryVo;
-import cn.com.qmth.scancentral.vo.ExportCetVo;
-import cn.com.qmth.scancentral.vo.ImportBreachResult;
-import cn.com.qmth.scancentral.vo.ImportResult;
-import cn.com.qmth.scancentral.vo.ImportStudentQueryVo;
-import cn.com.qmth.scancentral.vo.ImportStudentVo;
-import cn.com.qmth.scancentral.vo.PaperDeleteVo;
-import cn.com.qmth.scancentral.vo.ScanAnswerInfoVo;
-import cn.com.qmth.scancentral.vo.StudentUploadVo;
-import cn.com.qmth.scancentral.vo.UpdateTimeVo;
+import cn.com.qmth.scancentral.vo.*;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerPageVo;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerPaperVo;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryVo;
@@ -147,21 +37,50 @@ import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
 import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
 import cn.com.qmth.scancentral.vo.paper.PaperCetVo;
 import cn.com.qmth.scancentral.vo.paper.PaperPageCetVo;
-import cn.com.qmth.scancentral.vo.student.StudentAnswerVo;
-import cn.com.qmth.scancentral.vo.student.StudentExamRoomVo;
-import cn.com.qmth.scancentral.vo.student.StudentPageQuery;
-import cn.com.qmth.scancentral.vo.student.StudentPageVo;
-import cn.com.qmth.scancentral.vo.student.StudentQuery;
-import cn.com.qmth.scancentral.vo.student.StudentVo;
+import cn.com.qmth.scancentral.vo.student.*;
+import cn.com.qmth.scancentral.vo.studentimport.StudentCountVo;
 import cn.com.qmth.scancentral.vo.subject.SubjectScanProgressVo;
 import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.gson.Gson;
+import com.qmth.boot.core.collection.PageResult;
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.core.retrofit.utils.SignatureInfo;
+import com.qmth.boot.tools.excel.ExcelReader;
+import com.qmth.boot.tools.excel.enums.ExcelType;
+import com.qmth.boot.tools.io.IOUtils;
+import com.qmth.boot.tools.signature.SignatureType;
+import com.qmth.boot.tools.uuid.FastUUID;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.NotNull;
+import java.io.*;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> implements StudentService {
 
-    private static final String[] BREACH_EXCEL_HEADER = new String[] { "准考证号", "违纪码" };
+    private static final String[] BREACH_EXCEL_HEADER = new String[]{"准考证号", "违纪码"};
 
-    private static final String[] CUST_STATUS_EXCEL_HEADER = new String[] { "准考证号", "考生状态" };
+    private static final String[] CUST_STATUS_EXCEL_HEADER = new String[]{"准考证号", "考生状态"};
 
     private static final Logger log = LoggerFactory.getLogger(StudentService.class);
 
@@ -229,7 +148,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     @Transactional
     // @Lockable(name = LockType.STUDENT, key = "#id")
     public void updateStudentAndPaper(@NotNull User user, @NotNull Long id,
-            @NotNull List<StudentPaperEntity> studentPaperList) {
+                                      @NotNull List<StudentPaperEntity> studentPaperList) {
         for (StudentPaperEntity studentPaper : studentPaperList) {
             studentPaper.setStudentId(id);
         }
@@ -776,7 +695,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     @Transactional
     @Override
     public void updateUploadStatus(@NotNull Long id, @NotNull UploadStatus fileUploadStatus,
-            @NotNull UploadStatus dataUploadStatus) {
+                                   @NotNull UploadStatus dataUploadStatus) {
         LambdaUpdateWrapper<StudentEntity> lw = new LambdaUpdateWrapper<>();
         lw.set(StudentEntity::getDataUploadStatus, dataUploadStatus);
         lw.set(StudentEntity::getFileUploadStatus, fileUploadStatus);
@@ -1300,8 +1219,8 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     }
 
     private void disposeStudent(ExportCetVo student, ExamEntity exam, List<PaperPageCetVo> pages,
-            List<PaperCetVo> papers, String imageTransferDir, Map<String, List<QuestionEntity>> structs,
-            Map<Integer, AnswerCardEntity> cardMap) {
+                                List<PaperCetVo> papers, String imageTransferDir, Map<String, List<QuestionEntity>> structs,
+                                Map<Integer, AnswerCardEntity> cardMap) {
         int subject = Integer.valueOf(student.getSubjectCode());
         if (subject > 2) {
             if (student.getExamStatus().equals(ExamStatus.ABSENT)) {
@@ -1382,7 +1301,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     }
 
     private void setCardStatus(ExportCetVo student, AnswerCardEntity card, List<PaperPageCetVo> pages,
-            Map<Long, PaperCetVo> pmap) {
+                               Map<Long, PaperCetVo> pmap) {
         int subject = Integer.valueOf(student.getSubjectCode());
         if (subject > 2) {
             setCardStatusSmall(student, card, pages, pmap);
@@ -1392,7 +1311,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     }
 
     private void setCardStatusSmall(ExportCetVo student, AnswerCardEntity card, List<PaperPageCetVo> pages,
-            Map<Long, PaperCetVo> pmap) {
+                                    Map<Long, PaperCetVo> pmap) {
         PaperPageCetVo p = pages.get(0);
         if (ExamStatus.ABSENT.equals(student.getExamStatus())) {
             if (pmap.get(p.getPaperId()).getQuestionFilled()) {
@@ -1407,7 +1326,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     }
 
     private void setCardStatusCet(ExportCetVo student, AnswerCardEntity card, List<PaperPageCetVo> pages,
-            Map<Long, PaperCetVo> pmap) {
+                                  Map<Long, PaperCetVo> pmap) {
         if (card.getPaperCount() == 1) {
             PaperPageCetVo p = pages.get(0);
             if (ExamStatus.ABSENT.equals(student.getExamStatus())) {
@@ -1500,7 +1419,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
     }
 
     private String getCetAnswer(Map<String, List<QuestionEntity>> structs, List<PaperPageCetVo> pages, Long examId,
-            String subjectCode) {
+                                String subjectCode) {
         List<String> answers = new ArrayList<String>();
         List<QuestionEntity> struct = structs.get(examId + "-" + subjectCode);
         if (struct == null) {
@@ -2652,4 +2571,10 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         return ret;
     }
 
+    @Override
+    public List<StudentCountVo> countStudent(Long examId) {
+        //todo
+        return Collections.emptyList();
+    }
+
 }

+ 45 - 0
src/main/java/cn/com/qmth/scancentral/vo/studentimport/StudentCountVo.java

@@ -0,0 +1,45 @@
+package cn.com.qmth.scancentral.vo.studentimport;
+
+public class StudentCountVo {
+
+    private Long id;
+
+    private String subjectCode;
+
+    private String subjectName;
+
+    private Integer studentCount;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+
+}

+ 35 - 0
src/main/java/cn/com/qmth/scancentral/vo/studentimport/StudentImportConfigVo.java

@@ -0,0 +1,35 @@
+package cn.com.qmth.scancentral.vo.studentimport;
+
+public class StudentImportConfigVo {
+
+    private Long examId;
+
+    private Integer year;//考试年度
+
+    private Integer yearHalf;//考次
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public Integer getYearHalf() {
+        return yearHalf;
+    }
+
+    public void setYearHalf(Integer yearHalf) {
+        this.yearHalf = yearHalf;
+    }
+
+}

+ 1 - 0
src/main/resources/templates/student-import.txt

@@ -0,0 +1 @@
+准考证号,姓名,考点名称(标题行,数据从第二行读取)