Explorar el Código

考场信息维护

xiatian hace 8 meses
padre
commit
7ab68a81a3
Se han modificado 23 ficheros con 621 adiciones y 500 borrados
  1. 48 27
      install/mysql/init/scan_central_db.sql
  2. 0 7
      src/main/java/cn/com/qmth/scancentral/config/InitData.java
  3. 5 1
      src/main/java/cn/com/qmth/scancentral/controller/admin/ExamRoomController.java
  4. 6 6
      src/main/java/cn/com/qmth/scancentral/controller/admin/ExamWorkController.java
  5. 24 18
      src/main/java/cn/com/qmth/scancentral/controller/admin/StudentImportController.java
  6. 32 0
      src/main/java/cn/com/qmth/scancentral/dao/ExamRoomDao.java
  7. 14 12
      src/main/java/cn/com/qmth/scancentral/dao/StudentDao.java
  8. 112 0
      src/main/java/cn/com/qmth/scancentral/entity/ExamRoomEntity.java
  9. 0 20
      src/main/java/cn/com/qmth/scancentral/service/DataCacheService.java
  10. 32 0
      src/main/java/cn/com/qmth/scancentral/service/ExamRoomService.java
  11. 0 11
      src/main/java/cn/com/qmth/scancentral/service/StudentService.java
  12. 67 7
      src/main/java/cn/com/qmth/scancentral/service/impl/BatchServiceImpl.java
  13. 0 203
      src/main/java/cn/com/qmth/scancentral/service/impl/DataCacheServiceImpl.java
  14. 95 0
      src/main/java/cn/com/qmth/scancentral/service/impl/ExamRoomServiceImpl.java
  15. 57 58
      src/main/java/cn/com/qmth/scancentral/service/impl/ExamServiceImpl.java
  16. 20 14
      src/main/java/cn/com/qmth/scancentral/service/impl/StudentImportServiceImpl.java
  17. 7 30
      src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java
  18. 0 10
      src/main/java/cn/com/qmth/scancentral/vo/CampusVo.java
  19. 0 29
      src/main/java/cn/com/qmth/scancentral/vo/ExamSiteVo.java
  20. 11 11
      src/main/java/cn/com/qmth/scancentral/vo/examroom/ExamRoomScannedVo.java
  21. 2 3
      src/main/java/cn/com/qmth/scancentral/vo/scanexaminfo/ScanExamInfoVo.java
  22. 89 0
      src/main/resources/mapper/ExamRoomMapper.xml
  23. 0 33
      src/main/resources/mapper/StudentMapper.xml

+ 48 - 27
install/mysql/init/scan_central_db.sql

@@ -42,7 +42,7 @@ CREATE TABLE IF NOT EXISTS `sc_student`
     KEY `exam_assigned` (`exam_id`, `assigned`, `assigned_check_count`),
     KEY `exam_image_check_status` (`exam_id`, `image_check_status`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_answer_card
@@ -69,7 +69,7 @@ CREATE TABLE IF NOT EXISTS `sc_answer_card`
     `update_time`  bigint       DEFAULT NULL,
     PRIMARY KEY (`exam_id`, `number`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_exam
@@ -103,7 +103,7 @@ CREATE TABLE IF NOT EXISTS `sc_exam`
     `update_time`                      bigint      DEFAULT NULL,
     PRIMARY KEY (`id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_exam_summary
@@ -129,7 +129,7 @@ CREATE TABLE IF NOT EXISTS `sc_exam_summary`
     `upload_progress`             double  NOT NULL,
     PRIMARY KEY (`id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_omr_task
@@ -155,7 +155,7 @@ CREATE TABLE IF NOT EXISTS `sc_omr_task`
     KEY `exam_status` (`exam_id`, `status`, `student_id`),
     KEY `group_student` (`group_id`, `student_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_package_card
@@ -174,7 +174,7 @@ CREATE TABLE IF NOT EXISTS `sc_package_card`
     PRIMARY KEY (`id`),
     KEY `exam` (`exam_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_package_task
@@ -193,7 +193,7 @@ CREATE TABLE IF NOT EXISTS `sc_package_task`
     PRIMARY KEY (`id`),
     KEY `exam_package` (`exam_id`, `package_code`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_scanner
@@ -207,7 +207,7 @@ CREATE TABLE IF NOT EXISTS `sc_scanner`
     `update_time`     bigint DEFAULT NULL,
     PRIMARY KEY (`device`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for ss_system_config
@@ -223,7 +223,7 @@ CREATE TABLE IF NOT EXISTS `sc_system_config`
     `client_update_time`   bigint       DEFAULT NULL,
     PRIMARY KEY (`id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_package_result`
 (
@@ -239,7 +239,7 @@ CREATE TABLE IF NOT EXISTS `sc_package_result`
     `upload_time`  bigint DEFAULT NULL,
     PRIMARY KEY (`exam_id`, `package_code`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_scanner_card`
 (
@@ -252,7 +252,7 @@ CREATE TABLE IF NOT EXISTS `sc_scanner_card`
     `update_time` bigint DEFAULT NULL,
     PRIMARY KEY (`exam_id`, `device`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_batch`
 (
@@ -276,7 +276,7 @@ CREATE TABLE IF NOT EXISTS `sc_batch`
     KEY `exam_verify_status` (`exam_id`, `verify_status`),
     KEY `exam_status` (`exam_id`, `status`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_batch_paper`
 (
@@ -294,7 +294,7 @@ CREATE TABLE IF NOT EXISTS `sc_batch_paper`
     PRIMARY KEY (`batch_id`, `student_id`, `paper_number`),
     UNIQUE KEY `paper_id` (`paper_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_paper`
 (
@@ -315,7 +315,7 @@ CREATE TABLE IF NOT EXISTS `sc_paper`
     PRIMARY KEY (`id`),
     KEY `mismatch` (`exam_id`, `mismatch`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_paper_page`
 (
@@ -335,7 +335,7 @@ CREATE TABLE IF NOT EXISTS `sc_paper_page`
     `update_time` bigint   DEFAULT NULL,
     PRIMARY KEY (`paper_id`, `page_index`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_paper_structure`
 (
@@ -355,7 +355,7 @@ CREATE TABLE IF NOT EXISTS `sc_paper_structure`
     UNIQUE KEY `IDX_PAPER_STRUCTURE_001` (`exam_id`, `card_number`, `paper_number`, `page_index`, `field`,
                                           `question_number`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_question`
 (
@@ -372,7 +372,7 @@ CREATE TABLE IF NOT EXISTS `sc_question`
     PRIMARY KEY (`id`),
     UNIQUE KEY `index1` (`subject_code`,`main_number`, `sub_number`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4 COMMENT ='小题信息表';
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin COMMENT ='小题信息表';
 
 
 CREATE TABLE IF NOT EXISTS `sc_omr_group`
@@ -391,7 +391,7 @@ CREATE TABLE IF NOT EXISTS `sc_omr_group`
     PRIMARY KEY (`id`),
     KEY `exam_fixed` (`exam_id`,`subject_code` , `fixed`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 
 CREATE TABLE IF NOT EXISTS `sc_refix_batch`
@@ -410,7 +410,7 @@ CREATE TABLE IF NOT EXISTS `sc_refix_batch`
     `update_time`  bigint DEFAULT NULL,
     PRIMARY KEY (`id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_student_paper`
 (
@@ -422,7 +422,7 @@ CREATE TABLE IF NOT EXISTS `sc_student_paper`
     PRIMARY KEY (`student_id`, `paper_number`),
     UNIQUE KEY `paper_id` (`paper_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_subject`
 (
@@ -436,7 +436,7 @@ CREATE TABLE IF NOT EXISTS `sc_subject`
     `update_time`                bigint DEFAULT NULL,
     PRIMARY KEY (`exam_id`, `code`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_file_property`
 (
@@ -448,7 +448,7 @@ CREATE TABLE IF NOT EXISTS `sc_file_property`
     `update_time` bigint DEFAULT NULL,
     PRIMARY KEY (`path`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_user`
 (
@@ -466,7 +466,7 @@ CREATE TABLE IF NOT EXISTS `sc_user`
     PRIMARY KEY (`id`),
     UNIQUE KEY `login_name` (`login_name`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_adapte_file`
 (
@@ -481,7 +481,7 @@ CREATE TABLE IF NOT EXISTS `sc_adapte_file`
     `update_time` bigint DEFAULT NULL,
     PRIMARY KEY (`exam_id`, `card_number`, `role`, `device`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_answer_card_subject`
 (
@@ -492,7 +492,7 @@ CREATE TABLE IF NOT EXISTS `sc_answer_card_subject`
     `update_time`  bigint DEFAULT NULL,
     PRIMARY KEY (`exam_id`, `card_number`, `subject_code`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 -- ----------------------------
 -- Table structure for sc_assigned_check_history
@@ -512,7 +512,7 @@ CREATE TABLE IF NOT EXISTS `sc_assigned_check_history`
     UNIQUE KEY `student_user` (`student_id`, `user_id`),
     KEY `student` (`student_id`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 
 CREATE TABLE IF NOT EXISTS `sc_mark_site`
 (
@@ -529,7 +529,28 @@ CREATE TABLE IF NOT EXISTS `sc_mark_site`
     PRIMARY KEY (`id`),
     UNIQUE KEY `exam_subject_paper` (`exam_id`, `subject_code`, `paper_type`)
 ) ENGINE = InnoDB
-  DEFAULT CHARSET = utf8mb4;
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
+  
+CREATE TABLE IF NOT EXISTS `sc_exam_room`
+(
+    `id`                   bigint      NOT NULL AUTO_INCREMENT,
+    `exam_id`              bigint      NOT NULL,
+    `subject_code`         varchar(64) NOT NULL,
+    `exam_site`            varchar(64) NOT NULL,
+    `exam_site_name`       varchar(64) NOT NULL,
+    `exam_room`            varchar(64) NOT NULL,
+    `campus_name`          varchar(64) NOT NULL,
+    `campus_code`          varchar(64) NOT NULL,
+    `province`				varchar(64) NOT NULL,
+    `scanned`           	bit(1) NOT NULL,
+    `creator_id`           bigint      DEFAULT NULL,
+    `updater_id`           bigint      DEFAULT NULL,
+    `create_time`          bigint      DEFAULT NULL,
+    `update_time`          bigint      DEFAULT NULL,
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `ukey1` (`exam_id`, `subject_code`, `province`,`exam_site`,`campus_code`,`exam_room`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
   
 INSERT INTO `sc_system_config` (`id`, `scanner_enable_login`, `scanner_password`) 
 VALUES (1,1, '');

+ 0 - 7
src/main/java/cn/com/qmth/scancentral/config/InitData.java

@@ -9,7 +9,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.stereotype.Component;
 
-import cn.com.qmth.scancentral.service.DataCacheService;
 import cn.com.qmth.scancentral.util.FileUtil;
 
 @Component
@@ -20,9 +19,6 @@ public class InitData implements CommandLineRunner {
     @Autowired
     private SysProperty sysProperty;
 
-    @Autowired
-    private DataCacheService dataCacheService;
-
     @Override
     public void run(String... args) throws IOException {
         // log.info("开始系统初始化...");
@@ -39,9 +35,6 @@ public class InitData implements CommandLineRunner {
             FileUtil.deleteDirectory(temp);
         }
 
-        log.warn("开始加载缓存数据...");
-        dataCacheService.loadCache();
-        log.warn("完成加载缓存数据...");
     }
 
 }

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

@@ -20,6 +20,7 @@ import com.qmth.boot.tools.excel.enums.ExcelType;
 import com.qmth.boot.tools.iterator.PageListIterator;
 
 import cn.com.qmth.scancentral.controller.BaseController;
+import cn.com.qmth.scancentral.service.ExamRoomService;
 import cn.com.qmth.scancentral.service.StudentService;
 import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
 import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
@@ -35,10 +36,13 @@ public class ExamRoomController extends BaseController {
     @Autowired
     private StudentService studentService;
 
+    @Autowired
+    private ExamRoomService examRoomService;
+
     @ApiOperation(value = "分页查询考场答题卡扫描状态")
     @PostMapping(value = "scanned/page")
     public PageResult<ExamRoomScannedVo> examRoomScannedPage(@Validated ExamRoomScannedQuery query) {
-        return studentService.examRoomScannedPage(query);
+        return examRoomService.examRoomScannedPage(query);
     }
 
     @ApiOperation(value = "导出考场答题卡扫描状态")

+ 6 - 6
src/main/java/cn/com/qmth/scancentral/controller/admin/ExamWorkController.java

@@ -13,7 +13,7 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 
 import cn.com.qmth.scancentral.entity.SubjectEntity;
-import cn.com.qmth.scancentral.service.DataCacheService;
+import cn.com.qmth.scancentral.service.ExamRoomService;
 import cn.com.qmth.scancentral.service.StudentService;
 import cn.com.qmth.scancentral.service.SubjectService;
 import cn.com.qmth.scancentral.vo.CampusVo;
@@ -36,7 +36,7 @@ public class ExamWorkController {
     private SubjectService subjectService;
 
     @Autowired
-    private DataCacheService dataCacheService;
+    private ExamRoomService examRoomService;
 
     @ApiOperation(value = "获取考生信息")
     @RequestMapping(value = "/student/find", method = RequestMethod.POST)
@@ -59,24 +59,24 @@ public class ExamWorkController {
     @ApiOperation(value = "获取所有校区")
     @RequestMapping(value = "/campus/list", method = RequestMethod.POST)
     public List<CampusVo> campusList(@RequestParam Long examId) {
-        return dataCacheService.listCampusByExamId(examId);
+        return examRoomService.listCampusByExamId(examId);
     }
 
     @ApiOperation(value = "获取所有考点")
     @RequestMapping(value = "/exam-site/list", method = RequestMethod.POST)
     public List<ExamSiteVo> siteList(@RequestParam Long examId) {
-        return dataCacheService.listExamSiteByExamId(examId);
+        return examRoomService.listExamSiteByExamId(examId);
     }
 
     @ApiOperation(value = "获取所有省份")
     @RequestMapping(value = "province/list", method = RequestMethod.POST)
     public List<String> provinceList(@RequestParam Long examId) {
-        return dataCacheService.listProvinceByExamId(examId);
+        return examRoomService.listProvinceByExamId(examId);
     }
 
     @ApiOperation(value = "获取所有考场号")
     @RequestMapping(value = "exam-room/list", method = RequestMethod.POST)
     public List<String> examRoomList(@RequestParam Long examId) {
-        return dataCacheService.listExamRoomByExamId(examId);
+        return examRoomService.listExamRoomByExamId(examId);
     }
 }

+ 24 - 18
src/main/java/cn/com/qmth/scancentral/controller/admin/StudentImportController.java

@@ -1,8 +1,29 @@
 package cn.com.qmth.scancentral.controller.admin;
 
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.tools.uuid.FastUUID;
+
 import cn.com.qmth.scancentral.controller.BaseController;
 import cn.com.qmth.scancentral.entity.ExamEntity;
-import cn.com.qmth.scancentral.service.DataCacheService;
+import cn.com.qmth.scancentral.service.ExamRoomService;
 import cn.com.qmth.scancentral.service.ExamService;
 import cn.com.qmth.scancentral.service.StudentImportService;
 import cn.com.qmth.scancentral.service.StudentService;
@@ -12,23 +33,8 @@ import cn.com.qmth.scancentral.vo.ResultVo;
 import cn.com.qmth.scancentral.vo.studentimport.ImportTaskVo;
 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 com.qmth.boot.core.exception.StatusException;
-import com.qmth.boot.tools.uuid.FastUUID;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.io.FileUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 @RestController
 @Api(tags = "考生导入相关接口")
@@ -48,7 +54,7 @@ public class StudentImportController extends BaseController {
     private ExamService examService;
 
     @Autowired
-    private DataCacheService dataCacheService;
+    private ExamRoomService examRoomService;
 
     @ApiOperation(value = "考生导入")
     @PostMapping("/import")
@@ -109,7 +115,7 @@ public class StudentImportController extends BaseController {
     @PostMapping(value = "/clear")
     public ResultVo studentClean(@RequestParam Long examId, @RequestParam String subjectCode) {
         studentService.studentClean(examId, subjectCode);
-        dataCacheService.loadCache();
+        examRoomService.clearByExamAndSubject(examId, subjectCode);
         return new ResultVo(System.currentTimeMillis());
     }
 

+ 32 - 0
src/main/java/cn/com/qmth/scancentral/dao/ExamRoomDao.java

@@ -0,0 +1,32 @@
+package cn.com.qmth.scancentral.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import cn.com.qmth.scancentral.entity.ExamRoomEntity;
+import cn.com.qmth.scancentral.vo.CampusVo;
+import cn.com.qmth.scancentral.vo.ExamSiteVo;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
+
+public interface ExamRoomDao extends BaseMapper<ExamRoomEntity> {
+
+    IPage<ExamRoomScannedVo> examRoomScannedPage(Page<ExamRoomScannedVo> page,
+            @Param("req") ExamRoomScannedQuery query);
+
+    void modifyByExamAndSubject(@Param("examId") Long examId, @Param("subjectCode") String subjectCode);
+
+    List<CampusVo> listCampusByExamId(@Param("examId") Long examId);
+
+    List<ExamSiteVo> listExamSiteByExamId(@Param("examId") Long examId);
+
+    List<String> listProvinceByExamId(@Param("examId") Long examId);
+
+    List<String> listExamRoomByExamId(@Param("examId") Long examId);
+
+}

+ 14 - 12
src/main/java/cn/com/qmth/scancentral/dao/StudentDao.java

@@ -11,10 +11,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import cn.com.qmth.scancentral.bean.AbsentQueryDomain;
 import cn.com.qmth.scancentral.bean.AnswerQueryDomain;
 import cn.com.qmth.scancentral.bean.AssignedQueryDomain;
-import cn.com.qmth.scancentral.bean.student.ExamProvinceInfo;
-import cn.com.qmth.scancentral.bean.student.ExamRoomInfo;
 import cn.com.qmth.scancentral.entity.StudentEntity;
-import cn.com.qmth.scancentral.vo.*;
+import cn.com.qmth.scancentral.vo.AbsentInfoVo;
+import cn.com.qmth.scancentral.vo.AbsentQueryVo;
+import cn.com.qmth.scancentral.vo.AnswerExportVo;
+import cn.com.qmth.scancentral.vo.ExportCetMarkingQueryVo;
+import cn.com.qmth.scancentral.vo.ExportCetVo;
+import cn.com.qmth.scancentral.vo.ImportStudentQueryVo;
+import cn.com.qmth.scancentral.vo.ImportStudentVo;
+import cn.com.qmth.scancentral.vo.ScanAnswerInfoVo;
+import cn.com.qmth.scancentral.vo.StudentUploadVo;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryParam;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryVo;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssignedCheckExamRoomExport;
@@ -24,16 +30,16 @@ import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
 import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckDetailVo;
 import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckQuery;
 import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckVo;
-import cn.com.qmth.scancentral.vo.student.*;
+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.StudentVo;
 import cn.com.qmth.scancentral.vo.studentimport.StudentCountVo;
 import cn.com.qmth.scancentral.vo.subject.SubjectScanProgressVo;
 
 public interface StudentDao extends BaseMapper<StudentEntity> {
 
-    List<CampusVo> listCampus();
-
-    List<ExamSiteVo> listExamSite();
-
     AbsentInfoVo absentInfo(@Param("examId") Long examId, @Param("groupType") String groupType,
             @Param("groupName") String groupName);
 
@@ -114,8 +120,4 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
 
     StudentAnswerVo getStudentVo(@Param("studentId") Long studentId);
 
-    List<ExamProvinceInfo> listProvince();
-
-    List<ExamRoomInfo> listExamRoom();
-
 }

+ 112 - 0
src/main/java/cn/com/qmth/scancentral/entity/ExamRoomEntity.java

@@ -0,0 +1,112 @@
+package cn.com.qmth.scancentral.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import cn.com.qmth.scancentral.entity.base.AuditingEntity;
+
+@TableName("sc_exam_room")
+public class ExamRoomEntity extends AuditingEntity {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7208399777465643821L;
+
+    private Long examId;
+
+    private String subjectCode;
+
+    // 考点
+    private String examSite;
+
+    // 考点名称
+    private String examSiteName;
+
+    // 考场
+    private String examRoom;
+
+    // 校区名称
+    private String campusName;
+
+    // 校区代码
+    private String campusCode;
+
+    // 省份
+    private String province;
+
+    // 已扫
+    private Boolean scanned;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public String getExamSite() {
+        return examSite;
+    }
+
+    public void setExamSite(String examSite) {
+        this.examSite = examSite;
+    }
+
+    public String getExamSiteName() {
+        return examSiteName;
+    }
+
+    public void setExamSiteName(String examSiteName) {
+        this.examSiteName = examSiteName;
+    }
+
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+
+    public String getCampusName() {
+        return campusName;
+    }
+
+    public void setCampusName(String campusName) {
+        this.campusName = campusName;
+    }
+
+    public String getCampusCode() {
+        return campusCode;
+    }
+
+    public void setCampusCode(String campusCode) {
+        this.campusCode = campusCode;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public Boolean getScanned() {
+        return scanned;
+    }
+
+    public void setScanned(Boolean scanned) {
+        this.scanned = scanned;
+    }
+
+}

+ 0 - 20
src/main/java/cn/com/qmth/scancentral/service/DataCacheService.java

@@ -1,20 +0,0 @@
-package cn.com.qmth.scancentral.service;
-
-import java.util.List;
-
-import cn.com.qmth.scancentral.vo.CampusVo;
-import cn.com.qmth.scancentral.vo.ExamSiteVo;
-
-public interface DataCacheService {
-
-    void loadCache();
-
-    List<String> listProvinceByExamId(Long examId);
-
-    List<ExamSiteVo> listExamSiteByExamId(Long examId);
-
-    List<CampusVo> listCampusByExamId(Long examId);
-
-    List<String> listExamRoomByExamId(Long examId);
-
-}

+ 32 - 0
src/main/java/cn/com/qmth/scancentral/service/ExamRoomService.java

@@ -0,0 +1,32 @@
+package cn.com.qmth.scancentral.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.boot.core.collection.PageResult;
+
+import cn.com.qmth.scancentral.entity.ExamRoomEntity;
+import cn.com.qmth.scancentral.vo.CampusVo;
+import cn.com.qmth.scancentral.vo.ExamSiteVo;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
+
+public interface ExamRoomService extends IService<ExamRoomEntity> {
+
+    PageResult<ExamRoomScannedVo> examRoomScannedPage(ExamRoomScannedQuery query);
+
+    void clearByExamAndSubject(Long examId, String subjectCode);
+
+    void modifyByExamAndSubject(Long examId, String subjectCode);
+
+    void modifyByStudentScan(ExamRoomScannedQuery query);
+
+    List<CampusVo> listCampusByExamId(Long examId);
+
+    List<ExamSiteVo> listExamSiteByExamId(Long examId);
+
+    List<String> listProvinceByExamId(Long examId);
+
+    List<String> listExamRoomByExamId(Long examId);
+
+}

+ 0 - 11
src/main/java/cn/com/qmth/scancentral/service/StudentService.java

@@ -19,8 +19,6 @@ import cn.com.qmth.scancentral.bean.User;
 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.bean.student.ExamProvinceInfo;
-import cn.com.qmth.scancentral.bean.student.ExamRoomInfo;
 import cn.com.qmth.scancentral.entity.StudentEntity;
 import cn.com.qmth.scancentral.entity.StudentPaperEntity;
 import cn.com.qmth.scancentral.enums.ExamStatus;
@@ -36,8 +34,6 @@ 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.ImportStudentQueryVo;
@@ -239,11 +235,4 @@ public interface StudentService extends IService<StudentEntity> {
 
     boolean existUncheck(Long examId, String subjectCode);
 
-    List<ExamProvinceInfo> listProvince();
-
-    List<ExamSiteVo> listExamSite();
-
-    List<CampusVo> listCampus();
-
-    List<ExamRoomInfo> listExamRoom();
 }

+ 67 - 7
src/main/java/cn/com/qmth/scancentral/service/impl/BatchServiceImpl.java

@@ -1,8 +1,13 @@
 package cn.com.qmth.scancentral.service.impl;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
-import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.math.RandomUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -14,6 +19,7 @@ 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.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.core.collection.PageResult;
@@ -28,21 +34,62 @@ import cn.com.qmth.scancentral.bean.WorkloadDomain;
 import cn.com.qmth.scancentral.bean.answersave.AnswerDomain;
 import cn.com.qmth.scancentral.bean.answersave.AnswerPaper;
 import cn.com.qmth.scancentral.dao.BatchDao;
-import cn.com.qmth.scancentral.entity.*;
-import cn.com.qmth.scancentral.enums.*;
+import cn.com.qmth.scancentral.entity.AnswerCardEntity;
+import cn.com.qmth.scancentral.entity.BatchEntity;
+import cn.com.qmth.scancentral.entity.BatchPaperEntity;
+import cn.com.qmth.scancentral.entity.ExamEntity;
+import cn.com.qmth.scancentral.entity.PaperEntity;
+import cn.com.qmth.scancentral.entity.PaperPageEntity;
+import cn.com.qmth.scancentral.entity.ScannerEntity;
+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.enums.BatchStatus;
+import cn.com.qmth.scancentral.enums.CheckStatus;
+import cn.com.qmth.scancentral.enums.LockType;
+import cn.com.qmth.scancentral.enums.Role;
+import cn.com.qmth.scancentral.enums.VerifyStatus;
 import cn.com.qmth.scancentral.exception.NotFoundExceptions;
 import cn.com.qmth.scancentral.exception.ParameterExceptions;
-import cn.com.qmth.scancentral.service.*;
+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.BatchPaperService;
+import cn.com.qmth.scancentral.service.BatchService;
+import cn.com.qmth.scancentral.service.ExamRoomService;
+import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.service.FilePropertyService;
+import cn.com.qmth.scancentral.service.FileService;
+import cn.com.qmth.scancentral.service.PaperPageService;
+import cn.com.qmth.scancentral.service.PaperService;
+import cn.com.qmth.scancentral.service.ScannerService;
+import cn.com.qmth.scancentral.service.StudentService;
+import cn.com.qmth.scancentral.service.SubjectService;
 import cn.com.qmth.scancentral.support.TaskLock;
 import cn.com.qmth.scancentral.support.TaskLockUtil;
 import cn.com.qmth.scancentral.util.PageUtil;
-import cn.com.qmth.scancentral.vo.*;
-import cn.com.qmth.scancentral.vo.batch.*;
+import cn.com.qmth.scancentral.vo.BatchFinishVo;
+import cn.com.qmth.scancentral.vo.BatchQueryVo;
+import cn.com.qmth.scancentral.vo.BatchVerifyVo;
+import cn.com.qmth.scancentral.vo.ScannerWorkloadVo;
+import cn.com.qmth.scancentral.vo.SheetUploadVo;
+import cn.com.qmth.scancentral.vo.SliceUploadVo;
+import cn.com.qmth.scancentral.vo.SubjectVo;
+import cn.com.qmth.scancentral.vo.batch.AnswerSaveVo;
+import cn.com.qmth.scancentral.vo.batch.BatchCreateVo;
+import cn.com.qmth.scancentral.vo.batch.BatchDeviceQuery;
+import cn.com.qmth.scancentral.vo.batch.BatchQuery;
+import cn.com.qmth.scancentral.vo.batch.BatchStudentSimpleVo;
+import cn.com.qmth.scancentral.vo.batch.BatchSubjectQuery;
+import cn.com.qmth.scancentral.vo.batch.BatchVo;
+import cn.com.qmth.scancentral.vo.batch.Paper;
+import cn.com.qmth.scancentral.vo.batch.Rescan;
 import cn.com.qmth.scancentral.vo.batchdetail.BatchDetailDO;
 import cn.com.qmth.scancentral.vo.batchdetail.BatchDetailVo;
 import cn.com.qmth.scancentral.vo.batchdetail.BatchStudentVo;
 import cn.com.qmth.scancentral.vo.checkimage.CheckImageSubmitVo;
 import cn.com.qmth.scancentral.vo.device.DeviceVo;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
 import cn.com.qmth.scancentral.vo.paper.PaperVo;
 import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
 import cn.com.qmth.scancentral.vo.verify.VerifyStudentVo;
@@ -51,6 +98,9 @@ import cn.com.qmth.scancentral.vo.verify.VerifyTaskVo;
 @Service
 public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> implements BatchService {
 
+    @Autowired
+    private ExamRoomService examRoomService;
+
     @Autowired
     private ExamService examService;
 
@@ -340,6 +390,16 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
                 concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
             }
         }
+        // 更新考场扫描状态
+        ExamRoomScannedQuery req = new ExamRoomScannedQuery();
+        req.setExamId(student.getExamId());
+        req.setSubjectCode(student.getSubjectCode());
+        req.setProvince(student.getProvince());
+        req.setCampusCode(student.getCampusCode());
+        req.setExamSite(student.getExamSite());
+        req.setExamRoom(student.getExamRoom());
+        examRoomService.modifyByStudentScan(req);
+
         return AnswerSaveVo.create(findStudentCountByBatch(batch.getId()));
     }
 

+ 0 - 203
src/main/java/cn/com/qmth/scancentral/service/impl/DataCacheServiceImpl.java

@@ -1,203 +0,0 @@
-package cn.com.qmth.scancentral.service.impl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import cn.com.qmth.scancentral.bean.student.ExamProvinceInfo;
-import cn.com.qmth.scancentral.bean.student.ExamRoomInfo;
-import cn.com.qmth.scancentral.service.DataCacheService;
-import cn.com.qmth.scancentral.service.StudentService;
-import cn.com.qmth.scancentral.vo.CampusVo;
-import cn.com.qmth.scancentral.vo.ExamSiteVo;
-
-@Service
-public class DataCacheServiceImpl implements DataCacheService {
-
-    protected static final Logger log = LoggerFactory.getLogger(DataCacheServiceImpl.class);
-
-    private Map<Long, Set<String>> provinceCache = new ConcurrentHashMap<>();
-
-    private Lock provinceLock = new ReentrantLock();
-
-    private Map<Long, Set<ExamSiteVo>> examSiteCache = new ConcurrentHashMap<>();
-
-    private Lock examSiteLock = new ReentrantLock();
-
-    private Map<Long, Set<CampusVo>> campusCache = new ConcurrentHashMap<>();
-
-    private Lock campusLock = new ReentrantLock();
-
-    private Map<Long, Set<String>> examRoomCache = new ConcurrentHashMap<>();
-
-    private Lock examRoomLock = new ReentrantLock();
-
-    @Autowired
-    private StudentService studentService;
-
-    @Override
-    public void loadCache() {
-        loadProvince();
-        loadExamSite();
-        loadCampus();
-        loadExamRoom();
-    }
-
-    private void loadProvince() {
-        provinceCache.clear();
-        List<ExamProvinceInfo> list = studentService.listProvince();
-        for (ExamProvinceInfo info : list) {
-            if (StringUtils.isNotBlank(info.getProvince())) {
-                addProvinceCache(info.getExamId(), info.getProvince());
-            }
-        }
-    }
-
-    private void addProvinceCache(Long examId, String province) {
-        provinceLock.lock();
-        try {
-            Set<String> cache = provinceCache.get(examId);
-            if (cache == null) {
-                cache = new HashSet<>();
-                provinceCache.put(examId, cache);
-            }
-            cache.add(province);
-        } finally {
-            provinceLock.unlock();
-        }
-    }
-
-    @Override
-    public List<String> listProvinceByExamId(Long examId) {
-        Set<String> cache = provinceCache.get(examId);
-        List<String> ret = new ArrayList<>();
-        if (cache == null) {
-            return ret;
-        }
-        ret.addAll(cache);
-        Collections.sort(ret);
-        return ret;
-    }
-
-    private void loadExamSite() {
-        examSiteCache.clear();
-        List<ExamSiteVo> list = studentService.listExamSite();
-        for (ExamSiteVo info : list) {
-            if (StringUtils.isNotBlank(info.getCode())) {
-                addExamSiteCache(info.getExamId(), info);
-            }
-        }
-    }
-
-    private void addExamSiteCache(Long examId, ExamSiteVo info) {
-        examSiteLock.lock();
-        try {
-            Set<ExamSiteVo> cache = examSiteCache.get(examId);
-            if (cache == null) {
-                cache = new HashSet<>();
-                examSiteCache.put(examId, cache);
-            }
-            cache.add(info);
-        } finally {
-            examSiteLock.unlock();
-        }
-    }
-
-    @Override
-    public List<ExamSiteVo> listExamSiteByExamId(Long examId) {
-        Set<ExamSiteVo> cache = examSiteCache.get(examId);
-        List<ExamSiteVo> ret = new ArrayList<>();
-        if (cache == null) {
-            return ret;
-        }
-        ret.addAll(cache);
-        ret.sort(Comparator.comparing(ExamSiteVo::getCode));
-        return ret;
-    }
-
-    private void loadCampus() {
-        campusCache.clear();
-        List<CampusVo> list = studentService.listCampus();
-        for (CampusVo info : list) {
-            if (StringUtils.isNotBlank(info.getCode())) {
-                addCampusCache(info.getExamId(), info);
-            }
-        }
-    }
-
-    private void addCampusCache(Long examId, CampusVo info) {
-        campusLock.lock();
-        try {
-            Set<CampusVo> cache = campusCache.get(examId);
-            if (cache == null) {
-                cache = new HashSet<>();
-                campusCache.put(examId, cache);
-            }
-            cache.add(info);
-        } finally {
-            campusLock.unlock();
-        }
-    }
-
-    @Override
-    public List<CampusVo> listCampusByExamId(Long examId) {
-        Set<CampusVo> cache = campusCache.get(examId);
-        List<CampusVo> ret = new ArrayList<>();
-        if (cache == null) {
-            return ret;
-        }
-        ret.addAll(cache);
-        ret.sort(Comparator.comparing(CampusVo::getCode));
-        return ret;
-    }
-
-    private void loadExamRoom() {
-        examRoomCache.clear();
-        List<ExamRoomInfo> list = studentService.listExamRoom();
-        for (ExamRoomInfo info : list) {
-            if (StringUtils.isNotBlank(info.getExamRoom())) {
-                addExamRoomCache(info.getExamId(), info.getExamRoom());
-            }
-        }
-    }
-
-    private void addExamRoomCache(Long examId, String examRoom) {
-        examRoomLock.lock();
-        try {
-            Set<String> cache = examRoomCache.get(examId);
-            if (cache == null) {
-                cache = new HashSet<>();
-                examRoomCache.put(examId, cache);
-            }
-            cache.add(examRoom);
-        } finally {
-            examRoomLock.unlock();
-        }
-    }
-
-    @Override
-    public List<String> listExamRoomByExamId(Long examId) {
-        Set<String> cache = examRoomCache.get(examId);
-        List<String> ret = new ArrayList<>();
-        if (cache == null) {
-            return ret;
-        }
-        ret.addAll(cache);
-        Collections.sort(ret);
-        return ret;
-    }
-
-}

+ 95 - 0
src/main/java/cn/com/qmth/scancentral/service/impl/ExamRoomServiceImpl.java

@@ -0,0 +1,95 @@
+package cn.com.qmth.scancentral.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.qmth.boot.core.collection.PageResult;
+
+import cn.com.qmth.scancentral.dao.ExamRoomDao;
+import cn.com.qmth.scancentral.entity.ExamRoomEntity;
+import cn.com.qmth.scancentral.service.ExamRoomService;
+import cn.com.qmth.scancentral.util.PageUtil;
+import cn.com.qmth.scancentral.vo.CampusVo;
+import cn.com.qmth.scancentral.vo.ExamSiteVo;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
+
+@Service
+public class ExamRoomServiceImpl extends ServiceImpl<ExamRoomDao, ExamRoomEntity> implements ExamRoomService {
+
+    @Override
+    public PageResult<ExamRoomScannedVo> examRoomScannedPage(ExamRoomScannedQuery query) {
+        IPage<ExamRoomScannedVo> iPage = baseMapper
+                .examRoomScannedPage(new Page<>(query.getPageNumber(), query.getPageSize()), query);
+        for (ExamRoomScannedVo vo : iPage.getRecords()) {
+            if (!vo.getScanned()) {
+                vo.setScannedText("未扫描");
+            } else {
+                vo.setScannedText("已扫描");
+            }
+        }
+        return PageUtil.of(iPage);
+    }
+
+    @Transactional
+    @Override
+    public void clearByExamAndSubject(Long examId, String subjectCode) {
+        QueryWrapper<ExamRoomEntity> wrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<ExamRoomEntity> lw = wrapper.lambda();
+        lw.eq(ExamRoomEntity::getExamId, examId);
+        lw.eq(ExamRoomEntity::getSubjectCode, subjectCode);
+        this.baseMapper.delete(wrapper);
+    }
+
+    @Transactional
+    @Override
+    public void modifyByExamAndSubject(Long examId, String subjectCode) {
+        clearByExamAndSubject(examId, subjectCode);
+        this.baseMapper.modifyByExamAndSubject(examId, subjectCode);
+    }
+
+    @Transactional
+    @Override
+    public void modifyByStudentScan(ExamRoomScannedQuery req) {
+        QueryWrapper<ExamRoomEntity> wrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<ExamRoomEntity> lw = wrapper.lambda();
+        lw.eq(ExamRoomEntity::getExamId, req.getExamId());
+        lw.eq(ExamRoomEntity::getSubjectCode, req.getSubjectCode());
+        lw.eq(ExamRoomEntity::getProvince, req.getProvince());
+        lw.eq(ExamRoomEntity::getExamSite, req.getExamSite());
+        lw.eq(ExamRoomEntity::getCampusCode, req.getCampusCode());
+        lw.eq(ExamRoomEntity::getExamRoom, req.getExamRoom());
+        ExamRoomEntity e = this.getOne(wrapper);
+        if (!e.getScanned()) {
+            e.setScanned(true);
+            this.save(e);
+        }
+    }
+
+    @Override
+    public List<CampusVo> listCampusByExamId(Long examId) {
+        return this.baseMapper.listCampusByExamId(examId);
+    }
+
+    @Override
+    public List<ExamSiteVo> listExamSiteByExamId(Long examId) {
+        return this.baseMapper.listExamSiteByExamId(examId);
+    }
+
+    @Override
+    public List<String> listProvinceByExamId(Long examId) {
+        return this.baseMapper.listProvinceByExamId(examId);
+    }
+
+    @Override
+    public List<String> listExamRoomByExamId(Long examId) {
+        return this.baseMapper.listExamRoomByExamId(examId);
+    }
+}

+ 57 - 58
src/main/java/cn/com/qmth/scancentral/service/impl/ExamServiceImpl.java

@@ -19,7 +19,6 @@ import com.qmth.boot.core.collection.PageResult;
 import com.qmth.boot.core.exception.ParameterException;
 import com.qmth.boot.core.security.exception.AuthorizationException;
 
-import cn.com.qmth.scancentral.bean.ImportExamDomain;
 import cn.com.qmth.scancentral.bean.User;
 import cn.com.qmth.scancentral.dao.ExamDao;
 import cn.com.qmth.scancentral.entity.ExamEntity;
@@ -400,63 +399,63 @@ public class ExamServiceImpl extends ServiceImpl<ExamDao, ExamEntity> implements
         this.update(updateWrapper);
     }
 
-//    @Transactional
-//    @Override
-//    public ExamEntity save(ImportExamDomain domain) {
-//        // if (SystemMode.MARKINGCLOUD.equals(SystemMode.current())) {
-//        // throw new ParameterException("非本地模式不支持此功能");
-//        // }
-//        if (domain.getAllowUnexistPaper() == null) {
-//            throw new ParameterException("AllowUnexistPaper 不能为空");
-//        }
-//        if (domain.getEnableSinglePageAnswer() == null) {
-//            throw new ParameterException("EnableSinglePageAnswer 不能为空");
-//        }
-//        if (domain.getEnableSyncVerify() == null) {
-//            throw new ParameterException("EnableSyncVerify 不能为空");
-//        }
-//        if (domain.getScanByPackage() == null) {
-//            throw new ParameterException("ScanByPackage 不能为空");
-//        }
-//        if (domain.getAbsentBarcodeContent() == null) {
-//            throw new ParameterException("AbsentBarcodeContent 不能为空");
-//        }
-//        if (domain.getAnswerFrontCardType() == null) {
-//            throw new ParameterException("AnswerFrontCardType 不能为空");
-//        }
-//        if (domain.getMode() == null) {
-//            throw new ParameterException("ExamMode 不能为空");
-//        }
-//        if (domain.getPaperTypeBarcodeContent() == null) {
-//            throw new ParameterException("PaperTypeBarcodeContent 不能为空");
-//        }
-//        if (domain.getExamNumberFillCount() == null) {
-//            throw new ParameterException("ExamNumberFillCount 不能为空");
-//        }
-//        ExamEntity exam = new ExamEntity();
-//        exam.setId(domain.getId());
-//        exam.setName(domain.getName());
-//        exam.setEnable(true);
-//        exam.setEnableUpload(false);
-//        exam.setImageCheckRatio(0d);
-//        exam.setAllowUnexistPaper(domain.getAllowUnexistPaper());
-//        exam.setEnableSinglePageAnswer(domain.getEnableSinglePageAnswer());
-//        exam.setEnableSyncVerify(domain.getEnableSyncVerify());
-//        exam.setScanByPackage(domain.getScanByPackage());
-//        exam.setAbsentBarcodeContent(domain.getAbsentBarcodeContent());
-//        exam.setAnswerFrontCardType(domain.getAnswerFrontCardType());
-//        exam.setMode(domain.getMode());
-//        exam.setPaperTypeBarcodeContent(domain.getPaperTypeBarcodeContent());
-//        if (getById(domain.getId()) == null) {
-//            List<SubjectEntity> subjects = subjectService.listByExamId(exam.getId());
-//            for (SubjectEntity subject : subjects) {
-//                omrGroupService.addFixOmrCondition(1L, exam.getId(), subject.getCode());
-//            }
-//        }
-//        exam.setExamNumberFillCount(domain.getExamNumberFillCount());
-//        this.saveOrUpdate(exam);
-//        return exam;
-//    }
+    // @Transactional
+    // @Override
+    // public ExamEntity save(ImportExamDomain domain) {
+    // // if (SystemMode.MARKINGCLOUD.equals(SystemMode.current())) {
+    // // throw new ParameterException("非本地模式不支持此功能");
+    // // }
+    // if (domain.getAllowUnexistPaper() == null) {
+    // throw new ParameterException("AllowUnexistPaper 不能为空");
+    // }
+    // if (domain.getEnableSinglePageAnswer() == null) {
+    // throw new ParameterException("EnableSinglePageAnswer 不能为空");
+    // }
+    // if (domain.getEnableSyncVerify() == null) {
+    // throw new ParameterException("EnableSyncVerify 不能为空");
+    // }
+    // if (domain.getScanByPackage() == null) {
+    // throw new ParameterException("ScanByPackage 不能为空");
+    // }
+    // if (domain.getAbsentBarcodeContent() == null) {
+    // throw new ParameterException("AbsentBarcodeContent 不能为空");
+    // }
+    // if (domain.getAnswerFrontCardType() == null) {
+    // throw new ParameterException("AnswerFrontCardType 不能为空");
+    // }
+    // if (domain.getMode() == null) {
+    // throw new ParameterException("ExamMode 不能为空");
+    // }
+    // if (domain.getPaperTypeBarcodeContent() == null) {
+    // throw new ParameterException("PaperTypeBarcodeContent 不能为空");
+    // }
+    // if (domain.getExamNumberFillCount() == null) {
+    // throw new ParameterException("ExamNumberFillCount 不能为空");
+    // }
+    // ExamEntity exam = new ExamEntity();
+    // exam.setId(domain.getId());
+    // exam.setName(domain.getName());
+    // exam.setEnable(true);
+    // exam.setEnableUpload(false);
+    // exam.setImageCheckRatio(0d);
+    // exam.setAllowUnexistPaper(domain.getAllowUnexistPaper());
+    // exam.setEnableSinglePageAnswer(domain.getEnableSinglePageAnswer());
+    // exam.setEnableSyncVerify(domain.getEnableSyncVerify());
+    // exam.setScanByPackage(domain.getScanByPackage());
+    // exam.setAbsentBarcodeContent(domain.getAbsentBarcodeContent());
+    // exam.setAnswerFrontCardType(domain.getAnswerFrontCardType());
+    // exam.setMode(domain.getMode());
+    // exam.setPaperTypeBarcodeContent(domain.getPaperTypeBarcodeContent());
+    // if (getById(domain.getId()) == null) {
+    // List<SubjectEntity> subjects = subjectService.listByExamId(exam.getId());
+    // for (SubjectEntity subject : subjects) {
+    // omrGroupService.addFixOmrCondition(1L, exam.getId(), subject.getCode());
+    // }
+    // }
+    // exam.setExamNumberFillCount(domain.getExamNumberFillCount());
+    // this.saveOrUpdate(exam);
+    // return exam;
+    // }
 
     @Override
     public RatioVo updateRatio(Long examId, Double ratio) {

+ 20 - 14
src/main/java/cn/com/qmth/scancentral/service/impl/StudentImportServiceImpl.java

@@ -1,14 +1,13 @@
 package cn.com.qmth.scancentral.service.impl;
 
-import cn.com.qmth.scancentral.bean.ImportStudentDomain;
-import cn.com.qmth.scancentral.enums.AsyncTaskStatus;
-import cn.com.qmth.scancentral.service.DataCacheService;
-import cn.com.qmth.scancentral.service.StudentImportService;
-import cn.com.qmth.scancentral.service.StudentService;
-import cn.com.qmth.scancentral.service.SubjectService;
-import cn.com.qmth.scancentral.vo.studentimport.ImportTaskVo;
-import cn.com.qmth.scancentral.vo.studentimport.StudentImportInfo;
-import com.qmth.boot.core.exception.ParameterException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Pattern;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -16,9 +15,16 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.regex.Pattern;
+import com.qmth.boot.core.exception.ParameterException;
+
+import cn.com.qmth.scancentral.bean.ImportStudentDomain;
+import cn.com.qmth.scancentral.enums.AsyncTaskStatus;
+import cn.com.qmth.scancentral.service.ExamRoomService;
+import cn.com.qmth.scancentral.service.StudentImportService;
+import cn.com.qmth.scancentral.service.StudentService;
+import cn.com.qmth.scancentral.service.SubjectService;
+import cn.com.qmth.scancentral.vo.studentimport.ImportTaskVo;
+import cn.com.qmth.scancentral.vo.studentimport.StudentImportInfo;
 
 @Component
 public class StudentImportServiceImpl implements StudentImportService {
@@ -34,7 +40,7 @@ public class StudentImportServiceImpl implements StudentImportService {
     private StudentService studentService;
 
     @Autowired
-    private DataCacheService dataCacheService;
+    private ExamRoomService examRoomService;
 
     @Override
     public ImportTaskVo studentImportProgress(String taskId) {
@@ -108,7 +114,7 @@ public class StudentImportServiceImpl implements StudentImportService {
             task.setProgress(100d);
             long cost = (System.currentTimeMillis() - startTime) / 1000L;
             log.info("【考生导入】共{}条 已导入:{}条 已耗时:{}秒 进度:100% taskId:{}", total, finishCount, cost, taskId);
-            dataCacheService.loadCache();
+            examRoomService.clearByExamAndSubject(examId, subjectCode);
         } catch (Exception e) {
             task.setStatus(AsyncTaskStatus.FAILED);
             task.setErrMsg(String.format("导入异常终止,已导入%s条,未导入%s条!", finishCount, total - finishCount));

+ 7 - 30
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -67,8 +67,6 @@ import cn.com.qmth.scancentral.bean.omredit.OmrFieldEditDomain;
 import cn.com.qmth.scancentral.bean.refix.AnswerRefixDomain;
 import cn.com.qmth.scancentral.bean.refix.PageRefixDomain;
 import cn.com.qmth.scancentral.bean.refix.PaperRefixDomain;
-import cn.com.qmth.scancentral.bean.student.ExamProvinceInfo;
-import cn.com.qmth.scancentral.bean.student.ExamRoomInfo;
 import cn.com.qmth.scancentral.config.SysProperty;
 import cn.com.qmth.scancentral.consumer.BreachImportConsumer;
 import cn.com.qmth.scancentral.consumer.CustStatusImportConsumer;
@@ -129,8 +127,6 @@ 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.ImportStudentQueryVo;
@@ -369,11 +365,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         }
     }
 
-    @Override
-    public List<CampusVo> listCampus() {
-        return baseMapper.listCampus();
-    }
-
     @Override
     public Integer getStudentAnswerCount(Long examId) {
         if (examId == null) {
@@ -385,11 +376,6 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         return this.count(queryWrapper);
     }
 
-    @Override
-    public List<ExamSiteVo> listExamSite() {
-        return baseMapper.listExamSite();
-    }
-
     @Override
     public StudentVo findOne(StudentQuery query) {
         Long examId = query.getExamId();
@@ -1698,7 +1684,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         InputStream in = null;
         try {
             in = new FileInputStream(vo.getFile());
-            examStatusImportCheck(vo, in,examNumbers,absentMap);
+            examStatusImportCheck(vo, in, examNumbers, absentMap);
         } catch (ParameterException e) {
             vo.setErrMsg(e.getMessage());
             vo.setStatus(AsyncTaskStatus.FAILED);
@@ -1751,7 +1737,8 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         }
     }
 
-    private void examStatusImportCheck(ExamStatusImportTaskVo vo, InputStream in,Map<String, StudentEntity> examNumbers , Map<String, Boolean> absentMap) {
+    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");
@@ -1773,7 +1760,7 @@ 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)){
+            if (StringUtils.isBlank(subjectCode) || !vo.getSubjectCode().equals(subjectCode)) {
                 msg.append("  科目代码不正确");
             }
             if (StringUtils.isBlank(examNumber)) {
@@ -2217,10 +2204,10 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
                 .examRoomScannedPage(new Page<>(query.getPageNumber(), query.getPageSize()), query);
         if (CollectionUtils.isNotEmpty(iPage.getRecords())) {
             for (ExamRoomScannedVo vo : iPage.getRecords()) {
-                if (vo.getScannedCount() == null || vo.getScannedCount() == 0) {
-                    vo.setScanned("未扫描");
+                if (!vo.getScanned()) {
+                    vo.setScannedText("未扫描");
                 } else {
-                    vo.setScanned("已扫描");
+                    vo.setScannedText("已扫描");
                 }
                 vo.setExamSite(vo.getExamSite() + "-" + vo.getExamSiteName());
             }
@@ -2638,14 +2625,4 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         return this.getOne(wrapper) != null;
     }
 
-    @Override
-    public List<ExamProvinceInfo> listProvince() {
-        return this.baseMapper.listProvince();
-    }
-
-    @Override
-    public List<ExamRoomInfo> listExamRoom() {
-        return this.baseMapper.listExamRoom();
-    }
-
 }

+ 0 - 10
src/main/java/cn/com/qmth/scancentral/vo/CampusVo.java

@@ -2,8 +2,6 @@ package cn.com.qmth.scancentral.vo;
 
 public class CampusVo {
 
-    private Long examId;
-
     private String name;
 
     private String code;
@@ -24,12 +22,4 @@ public class CampusVo {
         this.code = code;
     }
 
-    public Long getExamId() {
-        return examId;
-    }
-
-    public void setExamId(Long examId) {
-        this.examId = examId;
-    }
-
 }

+ 0 - 29
src/main/java/cn/com/qmth/scancentral/vo/ExamSiteVo.java

@@ -1,11 +1,7 @@
 package cn.com.qmth.scancentral.vo;
 
-import java.util.Objects;
-
 public class ExamSiteVo {
 
-    private Long examId;
-
     private String name;
 
     private String code;
@@ -26,29 +22,4 @@ public class ExamSiteVo {
         this.code = code;
     }
 
-    public Long getExamId() {
-        return examId;
-    }
-
-    public void setExamId(Long examId) {
-        this.examId = examId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(code, examId);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-        if (obj == null)
-            return false;
-        if (getClass() != obj.getClass())
-            return false;
-        ExamSiteVo other = (ExamSiteVo) obj;
-        return Objects.equals(code, other.code) && Objects.equals(examId, other.examId);
-    }
-
 }

+ 11 - 11
src/main/java/cn/com/qmth/scancentral/vo/examroom/ExamRoomScannedVo.java

@@ -21,10 +21,10 @@ public class ExamRoomScannedVo {
     @ExcelColumn(name = "考场", index = 4)
     private String examRoom;
 
-    private Integer scannedCount;
-
     @ExcelColumn(name = "扫描状态", index = 5)
-    private String scanned;
+    private String scannedText;
+
+    private Boolean scanned;
 
     public String getSubjectCode() {
         return subjectCode;
@@ -66,20 +66,20 @@ public class ExamRoomScannedVo {
         this.examRoom = examRoom;
     }
 
-    public String getScanned() {
-        return scanned;
+    public String getScannedText() {
+        return scannedText;
     }
 
-    public void setScanned(String scanned) {
-        this.scanned = scanned;
+    public void setScannedText(String scannedText) {
+        this.scannedText = scannedText;
     }
 
-    public Integer getScannedCount() {
-        return scannedCount;
+    public Boolean getScanned() {
+        return scanned;
     }
 
-    public void setScannedCount(Integer scannedCount) {
-        this.scannedCount = scannedCount;
+    public void setScanned(Boolean scanned) {
+        this.scanned = scanned;
     }
 
     public String getExamSiteName() {

+ 2 - 3
src/main/java/cn/com/qmth/scancentral/vo/scanexaminfo/ScanExamInfoVo.java

@@ -1,11 +1,10 @@
 package cn.com.qmth.scancentral.vo.scanexaminfo;
 
-import cn.com.qmth.scancentral.vo.SubjectConfigVo;
-import cn.com.qmth.scancentral.vo.examinfo.SubjectConfig;
-
 import java.util.ArrayList;
 import java.util.List;
 
+import cn.com.qmth.scancentral.vo.SubjectConfigVo;
+
 public class ScanExamInfoVo {
 
     private Long id;

+ 89 - 0
src/main/resources/mapper/ExamRoomMapper.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.qmth.scancentral.dao.ExamRoomDao">
+
+	<select id="examRoomScannedPage" resultType="cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo">
+        select t.subject_code,s.name subjectName,t.campus_code,t.exam_site,t.exam_site_name,t.exam_room,
+        t.scanned
+        from sc_exam_room t 
+        inner join sc_subject s on t.exam_id=s.exam_id and t.subject_code=s.code
+        where t.exam_id=#{req.examId}
+        <if test="req.campusCode != null and req.campusCode !=''">
+            and t.campus_code=#{req.campusCode}
+        </if>
+        <if test="req.subjectCode != null and req.subjectCode !=''">
+            and t.subject_code=#{req.subjectCode}
+        </if>
+        <if test="req.examSite != null and req.examSite !=''">
+            and t.exam_site=#{req.examSite}
+        </if>
+        <if test="req.examRoom != null and req.examRoom !=''">
+            and t.exam_room=#{req.examRoom}
+        </if>
+        <if test="req.province != null and req.province !=''">
+            and t.province=#{req.province}
+        </if>
+        <if test="req.scanned != null">
+               and t.scanned=#{req.scanned}
+        </if>
+        order by t.subject_code,t.campus_code,t.exam_site,t.exam_room
+    </select>
+    <update id="modifyByExamAndSubject">
+    	INSERT INTO sc_exam_room (
+    	`exam_id`,
+	    `subject_code`,
+	    `exam_site`,
+	    `exam_site_name`,
+	    `exam_room`,
+	    `campus_name`,
+	    `campus_code`,
+	    `province`,
+	    `scanned`
+	    )
+        select #{examId},#{subjectCode},t.exam_site,t.exam_site_name,t.exam_room,t.campus_name,t.campus_code,t.province,
+	        case when (sum(case when t.status='SCANNED' then 1 else 0 end))>0 then 1 else 0 end scanned
+	        from sc_student t 
+        where t.exam_id=#{examId}
+	        and t.subject_code=#{subjectCode}
+        group by t.exam_site,t.exam_room,t.campus_code,t.province
+    </update>
+    
+    <select id="listCampusByExamId" resultType="cn.com.qmth.scancentral.vo.CampusVo">
+        SELECT
+        s.campus_name name,
+        s.campus_code code
+        FROM
+        sc_exam_room s
+        where s.exam_id=#{examId} and s.campus_code is not null and s.campus_code!=''
+        group by s.campus_code
+        order by s.campus_code
+    </select>
+        <select id="listExamSiteByExamId" resultType="cn.com.qmth.scancentral.vo.ExamSiteVo">
+        SELECT
+        s.exam_site code,
+        s.exam_site_name name
+        FROM
+        sc_exam_room s
+        where s.exam_id=#{examId} and s.exam_site is not null and s.exam_site!=''
+        group by s.exam_site
+        order by s.exam_site
+    </select>
+    <select id="listProvinceByExamId" resultType="string">
+        SELECT
+        s.province 
+        FROM
+        sc_exam_room s
+        where s.exam_id=#{examId} and s.province is not null and s.province!=''
+        group by s.province
+        order by s.province
+    </select>
+    <select id="listExamRoomByExamId" resultType="string">
+        SELECT
+        s.exam_room 
+        FROM
+        sc_exam_room s
+        where s.exam_id=#{examId} and s.exam_room is not null and s.exam_room!=''
+        group by s.exam_room 
+        order by s.exam_room
+    </select>
+</mapper>

+ 0 - 33
src/main/resources/mapper/StudentMapper.xml

@@ -1,39 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cn.com.qmth.scancentral.dao.StudentDao">
-    <select id="listProvince" resultType="cn.com.qmth.scancentral.bean.student.ExamProvinceInfo">
-        SELECT
-        s.exam_id, s.province 
-        FROM
-        sc_student s
-        group by s.exam_id, s.province
-    </select>
-    <select id="listExamRoom" resultType="cn.com.qmth.scancentral.bean.student.ExamRoomInfo">
-        SELECT
-        s.exam_id, s.exam_room 
-        FROM
-        sc_student s
-        group by s.exam_id, s.exam_room 
-    </select>
-    <select id="listCampus" resultType="cn.com.qmth.scancentral.vo.CampusVo">
-        SELECT
-        s.exam_id,
-        s.campus_name name,
-        s.campus_code code
-        FROM
-        sc_student s
-        group by s.exam_id,s.campus_code
-    </select>
-
-    <select id="listExamSite" resultType="cn.com.qmth.scancentral.vo.ExamSiteVo">
-        SELECT
-        s.exam_id,
-        s.exam_site code,
-        s.exam_site_name name
-        FROM
-        sc_student s
-        group by  s.exam_id,s.exam_site
-    </select>
 
     <select id="absentInfo"
             resultType="cn.com.qmth.scancentral.vo.AbsentInfoVo">