xiatian 9 miesięcy temu
rodzic
commit
8d9d1a54c2

+ 66 - 0
src/main/java/cn/com/qmth/scancentral/controller/admin/ExamRoomController.java

@@ -0,0 +1,66 @@
+package cn.com.qmth.scancentral.controller.admin;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Collection;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.collection.PageResult;
+import com.qmth.boot.tools.excel.ExcelWriter;
+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.StudentService;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@Api(tags = "考场接口")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/admin/exam-room")
+@Aac(strict = false, auth = true)
+public class ExamRoomController extends BaseController {
+
+    @Autowired
+    private StudentService studentService;
+
+    @ApiOperation(value = "分页查询考场答题卡扫描状态")
+    @PostMapping(value = "scanned/page")
+    public PageResult<ExamRoomScannedVo> examRoomScannedPage(@Validated ExamRoomScannedQuery query) {
+        return studentService.examRoomScannedPage(query);
+    }
+
+    @ApiOperation(value = "导出考场答题卡扫描状态")
+    @PostMapping(value = "scanned/export")
+    public void examRoomScannedExport(@Validated ExamRoomScannedQuery query, HttpServletResponse response)
+            throws IOException {
+        String fileName = URLEncoder.encode("考场答题卡扫描状态", "UTF-8");
+        response.setHeader("Content-Disposition", "inline; filename=" + fileName + ".xlsx");
+        response.setContentType("application/vnd.ms-excel");
+        ExcelWriter writer = ExcelWriter.create(ExcelType.XLSX);
+        PageListIterator<ExamRoomScannedVo> iterator = new PageListIterator<ExamRoomScannedVo>(5000) {
+
+            @Override
+            public Collection<ExamRoomScannedVo> getPageList(int pageNumber, int pageSize) {
+                query.setPageNumber(pageNumber);
+                query.setPageSize(pageSize);
+                return studentService.examRoomScannedList(query);
+            }
+        };
+        writer.writeObjects("考场答题卡扫描状态", null, ExamRoomScannedVo.class, iterator);
+        writer.output(response.getOutputStream());
+
+    }
+
+}

+ 5 - 0
src/main/java/cn/com/qmth/scancentral/dao/StudentDao.java

@@ -7,6 +7,8 @@ import cn.com.qmth.scancentral.entity.StudentEntity;
 import cn.com.qmth.scancentral.vo.*;
 import cn.com.qmth.scancentral.vo.answerquery.AnswerQueryVo;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssignedCheckExport;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedQuery;
+import cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo;
 import cn.com.qmth.scancentral.vo.subject.SubjectScanProgressVo;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -74,4 +76,7 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
     void updateAssignedCheckCount(@Param("id") Long id);
 
     List<SubjectScanProgressVo> scanProgress(@Param("examId") Long examId, @Param("subjectCode") String subjectCode);
+
+    IPage<ExamRoomScannedVo> examRoomScannedPage(Page<ExamRoomScannedVo> page,
+            @Param("req") ExamRoomScannedQuery query);
 }

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

@@ -11,6 +11,8 @@ 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.StudentQuery;
 import cn.com.qmth.scancentral.vo.student.StudentVo;
@@ -167,4 +169,8 @@ public interface StudentService extends IService<StudentEntity> {
 
     int getUnscannedCountByExam(Long examId);
 
+    PageResult<ExamRoomScannedVo> examRoomScannedPage(ExamRoomScannedQuery query);
+
+    List<ExamRoomScannedVo> examRoomScannedList(ExamRoomScannedQuery query);
+
 }

+ 24 - 0
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -30,6 +30,8 @@ import cn.com.qmth.scancentral.vo.assginedcheck.AssginedTaskResult;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssignedCheckExport;
 import cn.com.qmth.scancentral.vo.assginedcheck.AssignedTaskResultPaper;
 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.paper.PaperCetVo;
 import cn.com.qmth.scancentral.vo.paper.PaperPageCetVo;
 import cn.com.qmth.scancentral.vo.student.StudentAnswerVo;
@@ -2189,4 +2191,26 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         return this.baseMapper.scanProgress(examId, subjectCode);
     }
 
+    @Override
+    public PageResult<ExamRoomScannedVo> examRoomScannedPage(ExamRoomScannedQuery query) {
+        // 查询考生分页信息
+        IPage<ExamRoomScannedVo> iPage = baseMapper
+                .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("未扫描");
+                } else {
+                    vo.setScanned("已扫描");
+                }
+            }
+        }
+        return PageUtil.of(iPage);
+    }
+
+    @Override
+    public List<ExamRoomScannedVo> examRoomScannedList(ExamRoomScannedQuery query) {
+        return examRoomScannedPage(query).getResult();
+    }
+
 }

+ 80 - 0
src/main/java/cn/com/qmth/scancentral/vo/examroom/ExamRoomScannedQuery.java

@@ -0,0 +1,80 @@
+package cn.com.qmth.scancentral.vo.examroom;
+
+import javax.validation.constraints.NotNull;
+
+import cn.com.qmth.scancentral.util.PagerQuery;
+
+public class ExamRoomScannedQuery extends PagerQuery {
+
+    @NotNull(message = "考试ID不能为空")
+    private Long examId;
+
+    private String campusCode;
+
+    private String subjectCode;
+
+    private String examSite;
+
+    private String examRoom;
+
+    private String province;
+
+    private Boolean scanned;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCampusCode() {
+        return campusCode;
+    }
+
+    public void setCampusCode(String campusCode) {
+        this.campusCode = campusCode;
+    }
+
+    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 getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+
+    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;
+    }
+
+}

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

@@ -0,0 +1,83 @@
+package cn.com.qmth.scancentral.vo.examroom;
+
+import com.qmth.boot.tools.excel.annotation.ExcelColumn;
+
+public class ExamRoomScannedVo {
+
+    @ExcelColumn(name = "科目代码", index = 0)
+    private String subjectCode;
+
+    @ExcelColumn(name = "科目名称", index = 1)
+    private String subjectName;
+
+    @ExcelColumn(name = "校区", index = 3)
+    private String campusCode;
+
+    @ExcelColumn(name = "考点", index = 2)
+    private String examSite;
+
+    @ExcelColumn(name = "考场", index = 4)
+    private String examRoom;
+
+    private Integer scannedCount;
+
+    @ExcelColumn(name = "扫描状态", index = 5)
+    private String scanned;
+
+    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 String getCampusCode() {
+        return campusCode;
+    }
+
+    public void setCampusCode(String campusCode) {
+        this.campusCode = campusCode;
+    }
+
+    public String getExamSite() {
+        return examSite;
+    }
+
+    public void setExamSite(String examSite) {
+        this.examSite = examSite;
+    }
+
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+
+    public String getScanned() {
+        return scanned;
+    }
+
+    public void setScanned(String scanned) {
+        this.scanned = scanned;
+    }
+
+    public Integer getScannedCount() {
+        return scannedCount;
+    }
+
+    public void setScannedCount(Integer scannedCount) {
+        this.scannedCount = scannedCount;
+    }
+
+}

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

@@ -523,5 +523,39 @@
         </if>
         group by t.subject_code
     </select>
+    <select id="examRoomScannedPage" resultType="cn.com.qmth.scancentral.vo.examroom.ExamRoomScannedVo">
+    	select tm.* from(
+    	select t.subject_code,s.name subjectName,t.campus_code,t.exam_site,t.exam_room,
+    	sum(case when t.status='SCANNED' then 1 else 0 end) scannedCount
+    	from sc_student 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>
+        group by t.subject_code,t.campus_code,t.exam_site,t.exam_room
+        ) tm
+        where 1=1
+        <if test="req.scanned != null">
+           <if test="req.scanned">
+           	and tm.scannedCount>0
+           </if>
+           <if test="!req.scanned">
+           	and tm.scannedCount=0
+           </if>
+        </if>
+        order by tm.subject_code,tm.subjectName,tm.campus_code,tm.exam_site,tm.exam_room
+    </select>
     
 </mapper>