Prechádzať zdrojové kódy

考试跳过人脸名单相关接口

deason 1 rok pred
rodič
commit
7b2250bf5f

+ 67 - 0
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/ExamSkipFaceController.java

@@ -0,0 +1,67 @@
+package cn.com.qmth.examcloud.core.examwork.api.controller;
+
+import cn.com.qmth.examcloud.commons.helpers.poi.ExcelWriter;
+import cn.com.qmth.examcloud.core.examwork.service.ExamSkipFaceService;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSkipFaceInfo;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSkipFaceQuery;
+import cn.com.qmth.examcloud.web.config.SystemProperties;
+import cn.com.qmth.examcloud.web.support.ControllerSupport;
+import cn.com.qmth.examcloud.web.support.Naked;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.io.FileUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@Api(tags = "考试跳过人脸名单相关接口")
+@RequestMapping("${$rmp.ctr.examwork}/exam")
+public class ExamSkipFaceController extends ControllerSupport {
+
+    @Autowired
+    private ExamSkipFaceService examSkipFaceService;
+
+    @Autowired
+    private SystemProperties systemConfig;
+
+    @PostMapping("/skip/face/list")
+    @ApiOperation(value = "查询跳过人脸名单列表(分页)")
+    public Page<ExamSkipFaceInfo> list(@RequestBody ExamSkipFaceQuery req) {
+        return examSkipFaceService.getExamSkipFaceList(req);
+    }
+
+    @Naked
+    @ApiOperation(value = "导出-跳过人脸名单")
+    @GetMapping("/skip/face/list/export")
+    public void export(ExamSkipFaceQuery req) {
+        List<ExamSkipFaceInfo> list = examSkipFaceService.getAllExamSkipFaceList(req);
+
+        List<Object[]> lines = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (ExamSkipFaceInfo info : list) {
+                lines.add(new Object[]{info.getExamStudentId(), info.getStudentName(), info.getStudentCode(),
+                        info.getIdentityNumber(), info.getExamName(), info.getCourseCode(), info.getCourseName(),
+                        info.getOrgName(), info.getOperateName(), info.getUpdateTime()});
+            }
+        }
+
+        String filePath = systemConfig.getTempDataDir() + File.separator + System.currentTimeMillis() + ".xlsx";
+        File file = new File(filePath);
+
+        ExcelWriter.write(new String[]{"ID", "考生姓名", "学号", "身份证号", "考试名称", "课程代码", "课程名称", "学习中心", "操作者", "操作时间"},
+                new Class[]{Long.class, String.class, String.class, String.class, String.class,
+                        String.class, String.class, String.class, String.class, Date.class},
+                lines, new File(filePath));
+
+        exportFile("result.xlsx", file);
+        FileUtils.deleteQuietly(file);
+    }
+
+}

+ 15 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/ExamSkipFaceService.java

@@ -0,0 +1,15 @@
+package cn.com.qmth.examcloud.core.examwork.service;
+
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSkipFaceInfo;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSkipFaceQuery;
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+
+public interface ExamSkipFaceService {
+
+    Page<ExamSkipFaceInfo> getExamSkipFaceList(ExamSkipFaceQuery req);
+
+    List<ExamSkipFaceInfo> getAllExamSkipFaceList(ExamSkipFaceQuery req);
+
+}

+ 151 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/bean/ExamSkipFaceInfo.java

@@ -0,0 +1,151 @@
+package cn.com.qmth.examcloud.core.examwork.service.bean;
+
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+
+import java.util.Date;
+
+public class ExamSkipFaceInfo implements JsonSerializable {
+
+    private static final long serialVersionUID = 4009839764353162256L;
+
+    private Long examId;
+
+    private String examName;
+
+    private Long examStudentId;
+
+    private String studentName;
+
+    private String studentCode;
+
+    private String identityNumber;
+
+    private Long courseId;
+
+    private String courseCode;
+
+    private String courseName;
+
+    private Long orgId;
+
+    private String orgName;// 学习中心名称
+
+    private Long operateId;
+
+    private String operateName;
+
+    private Date updateTime;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getExamName() {
+        return examName;
+    }
+
+    public void setExamName(String examName) {
+        this.examName = examName;
+    }
+
+    public Long getExamStudentId() {
+        return examStudentId;
+    }
+
+    public void setExamStudentId(Long examStudentId) {
+        this.examStudentId = examStudentId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getIdentityNumber() {
+        return identityNumber;
+    }
+
+    public void setIdentityNumber(String identityNumber) {
+        this.identityNumber = identityNumber;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public String getOrgName() {
+        return orgName;
+    }
+
+    public void setOrgName(String orgName) {
+        this.orgName = orgName;
+    }
+
+    public Long getOperateId() {
+        return operateId;
+    }
+
+    public void setOperateId(Long operateId) {
+        this.operateId = operateId;
+    }
+
+    public String getOperateName() {
+        return operateName;
+    }
+
+    public void setOperateName(String operateName) {
+        this.operateName = operateName;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+}

+ 72 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/bean/ExamSkipFaceQuery.java

@@ -0,0 +1,72 @@
+package cn.com.qmth.examcloud.core.examwork.service.bean;
+
+import cn.com.qmth.examcloud.api.commons.exchange.JsonSerializable;
+import io.swagger.annotations.ApiModelProperty;
+
+public class ExamSkipFaceQuery implements JsonSerializable {
+
+    private static final long serialVersionUID = 4009839764353162256L;
+
+    @ApiModelProperty("当前第几页(从1开始)")
+    private Integer pageNo;
+
+    @ApiModelProperty("每页条数")
+    private Integer pageSize;
+
+    private Long examId;
+
+    private String studentCode;
+
+    private String studentName;
+
+    private String identityNumber;
+
+    public Integer getPageNo() {
+        return pageNo;
+    }
+
+    public void setPageNo(Integer pageNo) {
+        this.pageNo = pageNo;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getIdentityNumber() {
+        return identityNumber;
+    }
+
+    public void setIdentityNumber(String identityNumber) {
+        this.identityNumber = identityNumber;
+    }
+
+}

+ 109 - 0
examcloud-core-examwork-service/src/main/java/cn/com/qmth/examcloud/core/examwork/service/impl/ExamSkipFaceServiceImpl.java

@@ -0,0 +1,109 @@
+package cn.com.qmth.examcloud.core.examwork.service.impl;
+
+import cn.com.qmth.examcloud.commons.exception.StatusException;
+import cn.com.qmth.examcloud.core.examwork.dao.ExamSkipFaceRepo;
+import cn.com.qmth.examcloud.core.examwork.service.ExamSkipFaceService;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSkipFaceInfo;
+import cn.com.qmth.examcloud.core.examwork.service.bean.ExamSkipFaceQuery;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class ExamSkipFaceServiceImpl implements ExamSkipFaceService {
+
+    private static final Logger log = LoggerFactory.getLogger(ExamSkipFaceServiceImpl.class);
+
+    @Autowired
+    private ExamSkipFaceRepo examSkipFaceRepo;
+
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+
+    @Override
+    public Page<ExamSkipFaceInfo> getExamSkipFaceList(ExamSkipFaceQuery req) {
+        if (req.getPageNo() == null || req.getPageNo() < 1) {
+            req.setPageNo(1);
+        }
+
+        if (req.getPageSize() == null || req.getPageSize() < 1) {
+            req.setPageSize(10);
+        }
+        if (req.getExamId() == null) {
+            throw new StatusException("请先选择考试!");
+        }
+
+        Pageable pageable = PageRequest.of(req.getPageNo() - 1, req.getPageSize());
+        int offset = (req.getPageNo() - 1) * req.getPageSize();
+
+        String countSql = this.queryExamSkipFaceListSql(req, true);
+        String querySql = this.queryExamSkipFaceListSql(req, false);
+        String pageSql = querySql + " limit " + offset + "," + req.getPageSize();
+
+        Long totalElements = jdbcTemplate.queryForObject(countSql, Long.class);
+        if (totalElements == null || totalElements == 0) {
+            return new PageImpl<>(new ArrayList<>(), pageable, 0);
+        }
+
+        List<ExamSkipFaceInfo> list = jdbcTemplate.query(pageSql, new BeanPropertyRowMapper(ExamSkipFaceInfo.class));
+        if (CollectionUtils.isEmpty(list)) {
+            return new PageImpl<>(new ArrayList<>(), pageable, 0);
+        }
+
+        return new PageImpl<>(list, pageable, totalElements);
+    }
+
+    @Override
+    public List<ExamSkipFaceInfo> getAllExamSkipFaceList(ExamSkipFaceQuery req) {
+        String querySql = this.queryExamSkipFaceListSql(req, false);
+        return jdbcTemplate.query(querySql, new BeanPropertyRowMapper(ExamSkipFaceInfo.class));
+    }
+
+    private String queryExamSkipFaceListSql(ExamSkipFaceQuery req, boolean isCount) {
+        StringBuilder sql = new StringBuilder();
+        if (isCount) {
+            sql.append(" select count(1)");
+        } else {
+            sql.append(" select f.exam_student_id,stu.name studentName,stu.student_code,stu.identity_number,");
+            sql.append(" f.exam_id,e.name examName,stu.course_id,stu.course_code,stu.course_name,");
+            sql.append(" stu.org_id,org.name orgName,f.operate_id,u.name operateName,f.update_time");
+        }
+        sql.append(" from ec_e_exam_skip_face f");
+        sql.append(" left join ec_e_exam e on e.id = f.exam_id");
+        sql.append(" inner join ec_e_exam_student stu on stu.id = f.exam_student_id");
+        sql.append(" left join ec_b_user u on u.id = f.operate_id");
+        sql.append(" left join ec_b_org org on org.id = stu.org_id");
+        sql.append(" where f.exam_id = ").append(req.getExamId());
+
+        if (StringUtils.isNotBlank(req.getStudentName())) {
+            sql.append(" and stu.name like '").append(req.getStudentName()).append("%'");
+        }
+
+        if (StringUtils.isNotBlank(req.getStudentCode())) {
+            sql.append(" and stu.student_code like '").append(req.getStudentCode()).append("%'");
+        }
+
+        if (StringUtils.isNotBlank(req.getIdentityNumber())) {
+            sql.append(" and stu.identity_number like '").append(req.getIdentityNumber()).append("%'");
+        }
+
+        if (!isCount) {
+            sql.append(" order by f.id desc");
+        }
+
+        return sql.toString();
+    }
+
+}