Browse Source

考生查询导出

xiatian 9 tháng trước cách đây
mục cha
commit
a7cb04a175

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

@@ -1,6 +1,13 @@
 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.RequestParam;
@@ -8,10 +15,16 @@ 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.student.StudentAnswerVo;
+import cn.com.qmth.scancentral.vo.student.StudentPageQuery;
+import cn.com.qmth.scancentral.vo.student.StudentPageVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -30,4 +43,30 @@ public class StudentController extends BaseController {
         return studentService.studentAnswer(batchId, studentId);
     }
 
+    @ApiOperation(value = "分页查询考生")
+    @PostMapping(value = "page")
+    public PageResult<StudentPageVo> studentPage(@Validated StudentPageQuery query) {
+        return studentService.studentPage(query);
+    }
+
+    @ApiOperation(value = "导出考生")
+    @PostMapping(value = "export")
+    public void studentExport(@Validated StudentPageQuery 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<StudentPageVo> iterator = new PageListIterator<StudentPageVo>(5000) {
+
+            @Override
+            public Collection<StudentPageVo> getPageList(int pageNumber, int pageSize) {
+                query.setPageNumber(pageNumber);
+                query.setPageSize(pageSize);
+                return studentService.studentList(query);
+            }
+        };
+        writer.writeObjects("考生信息", null, StudentPageVo.class, iterator);
+        writer.output(response.getOutputStream());
+
+    }
 }

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

@@ -9,6 +9,8 @@ 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.student.StudentPageQuery;
+import cn.com.qmth.scancentral.vo.student.StudentPageVo;
 import cn.com.qmth.scancentral.vo.subject.SubjectScanProgressVo;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -79,4 +81,6 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
 
     IPage<ExamRoomScannedVo> examRoomScannedPage(Page<ExamRoomScannedVo> page,
             @Param("req") ExamRoomScannedQuery query);
+
+    IPage<StudentPageVo> studentPage(Page<StudentPageVo> page, @Param("req") StudentPageQuery query);
 }

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

@@ -14,6 +14,8 @@ 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.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.subject.SubjectScanProgressVo;
@@ -173,4 +175,8 @@ public interface StudentService extends IService<StudentEntity> {
 
     List<ExamRoomScannedVo> examRoomScannedList(ExamRoomScannedQuery query);
 
+    PageResult<StudentPageVo> studentPage(StudentPageQuery query);
+
+    List<StudentPageVo> studentList(StudentPageQuery query);
+
 }

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

@@ -35,6 +35,8 @@ 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.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.subject.SubjectScanProgressVo;
@@ -2213,4 +2215,25 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         return examRoomScannedPage(query).getResult();
     }
 
+    @Override
+    public PageResult<StudentPageVo> studentPage(StudentPageQuery query) {
+        // 查询考生分页信息
+        IPage<StudentPageVo> iPage = baseMapper.studentPage(new Page<>(query.getPageNumber(), query.getPageSize()),
+                query);
+        if (CollectionUtils.isNotEmpty(iPage.getRecords())) {
+            for (StudentPageVo vo : iPage.getRecords()) {
+                if (ScanStatus.SCANNED.equals(vo.getStatus())) {
+                    vo.setScanned("已扫描");
+                } else {
+                    vo.setScanned("未扫描");
+                }
+            }
+        }
+        return PageUtil.of(iPage);
+    }
+
+    @Override
+    public List<StudentPageVo> studentList(StudentPageQuery query) {
+        return studentPage(query).getResult();
+    }
 }

+ 80 - 0
src/main/java/cn/com/qmth/scancentral/vo/student/StudentPageQuery.java

@@ -0,0 +1,80 @@
+package cn.com.qmth.scancentral.vo.student;
+
+import javax.validation.constraints.NotNull;
+
+import cn.com.qmth.scancentral.util.PagerQuery;
+
+public class StudentPageQuery extends PagerQuery {
+
+    @NotNull(message = "考试ID不能为空")
+    private Long examId;
+
+    private String examNumber;
+
+    private String campusCode;
+
+    private String subjectCode;
+
+    private String examSite;
+
+    private String packageCode;
+
+    private String name;
+
+    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 getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+    public String getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+}

+ 169 - 0
src/main/java/cn/com/qmth/scancentral/vo/student/StudentPageVo.java

@@ -0,0 +1,169 @@
+package cn.com.qmth.scancentral.vo.student;
+
+import com.qmth.boot.tools.excel.annotation.ExcelColumn;
+
+import cn.com.qmth.scancentral.enums.ScanStatus;
+
+public class StudentPageVo {
+
+    private Long id;
+
+    @ExcelColumn(name = "准考证号", index = 2)
+    private String examNumber;
+
+    @ExcelColumn(name = "姓名", index = 3)
+    private String name;
+
+    @ExcelColumn(name = "科目代码", index = 0)
+    private String subjectCode;
+
+    @ExcelColumn(name = "科目名称", index = 1)
+    private String subjectName;
+
+    @ExcelColumn(name = "卷带号", index = 7)
+    private String packageCode;
+
+    private String campusName;
+
+    @ExcelColumn(name = "校区", index = 5)
+    private String campusCode;
+
+    @ExcelColumn(name = "考点", index = 4)
+    private String examSite;
+
+    private String examSiteName;
+
+    @ExcelColumn(name = "考场号", index = 6)
+    private String examRoom;
+
+    private String seatNumber;
+
+    private ScanStatus status;
+
+    @ExcelColumn(name = "扫描状态", index = 8)
+    private String scanned;
+
+    @ExcelColumn(name = "设备", index = 9)
+    private String device;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getExamNumber() {
+        return examNumber;
+    }
+
+    public void setExamNumber(String examNumber) {
+        this.examNumber = examNumber;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    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 getPackageCode() {
+        return packageCode;
+    }
+
+    public void setPackageCode(String packageCode) {
+        this.packageCode = packageCode;
+    }
+
+    public String getCampusName() {
+        return campusName;
+    }
+
+    public void setCampusName(String campusName) {
+        this.campusName = campusName;
+    }
+
+    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 getSeatNumber() {
+        return seatNumber;
+    }
+
+    public void setSeatNumber(String seatNumber) {
+        this.seatNumber = seatNumber;
+    }
+
+    public String getCampusCode() {
+        return campusCode;
+    }
+
+    public void setCampusCode(String campusCode) {
+        this.campusCode = campusCode;
+    }
+
+    public void setExamSiteName(String examSiteName) {
+        this.examSiteName = examSiteName;
+    }
+
+    public ScanStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(ScanStatus status) {
+        this.status = status;
+    }
+
+    public String getExamSiteName() {
+        return examSiteName;
+    }
+
+    public String getScanned() {
+        return scanned;
+    }
+
+    public void setScanned(String scanned) {
+        this.scanned = scanned;
+    }
+
+    public String getDevice() {
+        return device;
+    }
+
+    public void setDevice(String device) {
+        this.device = device;
+    }
+
+}

+ 24 - 1
src/main/resources/mapper/StudentMapper.xml

@@ -557,5 +557,28 @@
         </if>
         order by tm.subject_code,tm.subjectName,tm.campus_code,tm.exam_site,tm.exam_room
     </select>
-    
+    <select id="studentPage" resultType="cn.com.qmth.scancentral.vo.student.StudentPageVo">
+    	select t.* 
+    	from sc_student t 
+    	where t.exam_id=#{req.examId}
+        <if test="req.campusCode != null and req.campusCode !=''">
+            and t.campus_code=#{req.campusCode}
+        </if>
+        <if test="req.examNumber != null and req.examNumber !=''">
+            and t.exam_number=#{req.examNumber}
+        </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.name != null and req.name !=''">
+            and t.name=like concat(#{req.name}, '%')
+        </if>
+        <if test="req.packageCode != null and req.packageCode !=''">
+            and t.package_code=#{req.packageCode}
+        </if>
+        order by t.create_time
+    </select>
 </mapper>