Explorar el Código

update check api

deason hace 9 meses
padre
commit
54b0ee6e9c

+ 2 - 1
install/mysql/init/scan_central_db.sql

@@ -36,7 +36,8 @@ CREATE TABLE IF NOT EXISTS `sc_student`
     `update_time`          bigint      DEFAULT NULL,
     PRIMARY KEY (`id`),
     UNIQUE KEY `exam_student_subject` (`exam_id`, `subject_code`, `exam_number`),
-    KEY `exam_assigned` (`exam_id`, `assigned`, `assigned_check_count`)
+    KEY `exam_assigned` (`exam_id`, `assigned`, `assigned_check_count`),
+    KEY `exam_image_check_status` (`exam_id`, `image_check_status`)
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4;
 

+ 11 - 7
src/main/java/cn/com/qmth/scancentral/controller/admin/ImageCheckController.java

@@ -1,7 +1,8 @@
 package cn.com.qmth.scancentral.controller.admin;
 
 import cn.com.qmth.scancentral.controller.BaseController;
-import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.enums.ImageCheckStatus;
+import cn.com.qmth.scancentral.service.ImageCheckService;
 import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckDetailVo;
 import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckQuery;
 import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckVo;
@@ -22,7 +23,6 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -33,18 +33,19 @@ import java.util.List;
 public class ImageCheckController extends BaseController {
 
     @Autowired
-    private ExamService examService;
+    private ImageCheckService imageCheckService;
 
     @ApiOperation(value = "查询科目图片检查概况")
     @PostMapping("/list")
-    public List<ImageCheckVo> list(@RequestParam String examId) {
-        return new ArrayList<>();
+    public List<ImageCheckVo> list(@RequestParam Long examId) {
+        return imageCheckService.list(examId);
     }
 
     @ApiOperation(value = "查询图片检查异常(分页)")
     @PostMapping(value = "/failed/page")
     public PageResult<ImageCheckDetailVo> failedPage(ImageCheckQuery query) {
-        return new PageResult<>();
+        query.setImageCheckStatus(ImageCheckStatus.FAILED);
+        return imageCheckService.detailList(query);
     }
 
     @ApiOperation(value = "导出图片检查异常")
@@ -60,9 +61,12 @@ public class ImageCheckController extends BaseController {
             public Collection<ImageCheckDetailVo> getPageList(int pageNumber, int pageSize) {
                 query.setPageNumber(pageNumber);
                 query.setPageSize(pageSize);
-                return new ArrayList<>();
+                PageResult<ImageCheckDetailVo> page = imageCheckService.detailList(query);
+                return page.getResult();
             }
+
         };
+
         writer.writeObjects("图片检查异常", null, ImageCheckDetailVo.class, iterator);
         writer.output(response.getOutputStream());
     }

+ 25 - 30
src/main/java/cn/com/qmth/scancentral/dao/StudentDao.java

@@ -1,38 +1,29 @@
 package cn.com.qmth.scancentral.dao;
 
-import java.util.List;
-
-import cn.com.qmth.scancentral.vo.studentimport.StudentCountVo;
-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.bean.AbsentQueryDomain;
 import cn.com.qmth.scancentral.bean.AnswerQueryDomain;
 import cn.com.qmth.scancentral.bean.AssignedQueryDomain;
 import cn.com.qmth.scancentral.entity.StudentEntity;
-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.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;
-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.*;
 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.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.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;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface StudentDao extends BaseMapper<StudentEntity> {
 
@@ -41,16 +32,16 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
     List<ExamSiteVo> listSiteByExamId(@Param("examId") Long examId);
 
     AbsentInfoVo absentInfo(@Param("examId") Long examId, @Param("groupType") String groupType,
-            @Param("groupName") String groupName);
+                            @Param("groupName") String groupName);
 
     List<String> absentQuerySummary(@Param("groupNameCol") String groupNameCol,
-            @Param("query") AbsentQueryDomain query);
+                                    @Param("query") AbsentQueryDomain query);
 
     IPage<AbsentQueryVo> absentQueryPage(Page<AbsentQueryVo> page, @Param("groupNameCol") String groupNameCol,
-            @Param("query") AbsentQueryDomain query);
+                                         @Param("query") AbsentQueryDomain query);
 
     List<AbsentQueryVo> absentExportList(Page<AbsentQueryVo> page, @Param("groupNameCol") String groupNameCol,
-            @Param("query") AbsentQueryDomain query);
+                                         @Param("query") AbsentQueryDomain query);
 
     IPage<AnswerQueryVo> queryPage(Page<AnswerQueryVo> page, @Param("query") AnswerQueryDomain query);
 
@@ -66,7 +57,7 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
 
     int countByQuery(@Param("query") ImportStudentQueryVo query);
 
-    List<StudentCountVo> countStudent(@Param("examId")  Long examId);
+    List<StudentCountVo> countStudent(@Param("examId") Long examId);
 
     IPage<ImportStudentVo> listPageQuery(Page<ImportStudentVo> page, @Param("query") ImportStudentQueryVo query);
 
@@ -81,28 +72,32 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
     ScanAnswerInfoVo getInfoCountByExam(@Param("examId") Long examId);
 
     List<AssignedCheckExport> exportAssignedCheckPage(Page<AssignedCheckExport> page,
-            @Param("query") AssignedQueryDomain query);
+                                                      @Param("query") AssignedQueryDomain query);
 
     IPage<AnswerQueryVo> queryAssignedCheckPage(Page<AnswerQueryVo> page, @Param("query") AssignedQueryDomain query);
 
     List<AnswerQueryVo> findUnCheck(@Param("examId") Long examId, @Param("pageNumber") int pageNumber,
-            @Param("pageSize") int pageSize, @Param("checkCount") int checkCount);
+                                    @Param("pageSize") int pageSize, @Param("checkCount") int checkCount);
 
     List<AnswerQueryVo> getAssignedCheckTaskHistory(@Param("id") Long id, @Param("pageSize") Long pageSize,
-            @Param("userId") Long userId, @Param("examId") Long examId);
+                                                    @Param("userId") Long userId, @Param("examId") Long examId);
 
     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);
+                                                 @Param("req") ExamRoomScannedQuery query);
 
     IPage<StudentPageVo> studentPage(Page<StudentPageVo> page, @Param("req") StudentPageQuery query);
 
     IPage<StudentVo> studentExport(Page<StudentVo> page, @Param("query") AnswerQueryDomain query);
 
     IPage<StudentExamRoomVo> studentExamRoomExport(Page<StudentExamRoomVo> page,
-            @Param("query") AnswerQueryDomain query);
+                                                   @Param("query") AnswerQueryDomain query);
+
+    List<ImageCheckVo> countImageCheck(@Param("examId") Long examId);
+
+    IPage<ImageCheckDetailVo> queryImageCheckDetail(Page<ImageCheckDetailVo> page, @Param("query") ImageCheckQuery query);
 
 }

+ 16 - 0
src/main/java/cn/com/qmth/scancentral/service/ImageCheckService.java

@@ -0,0 +1,16 @@
+package cn.com.qmth.scancentral.service;
+
+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 com.qmth.boot.core.collection.PageResult;
+
+import java.util.List;
+
+public interface ImageCheckService {
+
+    List<ImageCheckVo> list(Long examId);
+
+    PageResult<ImageCheckDetailVo> detailList(ImageCheckQuery query);
+
+}

+ 65 - 0
src/main/java/cn/com/qmth/scancentral/service/impl/ImageCheckServiceImpl.java

@@ -0,0 +1,65 @@
+package cn.com.qmth.scancentral.service.impl;
+
+import cn.com.qmth.scancentral.dao.StudentDao;
+import cn.com.qmth.scancentral.service.ExamService;
+import cn.com.qmth.scancentral.service.ImageCheckService;
+import cn.com.qmth.scancentral.util.MathUtil;
+import cn.com.qmth.scancentral.util.PageUtil;
+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 com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.boot.core.collection.PageResult;
+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.Component;
+
+import java.util.List;
+
+@Component
+public class ImageCheckServiceImpl implements ImageCheckService {
+
+    private static final Logger log = LoggerFactory.getLogger(ImageCheckServiceImpl.class);
+
+    @Autowired
+    private ExamService examService;
+
+    @Autowired
+    private StudentDao studentDao;
+
+    @Override
+    public List<ImageCheckVo> list(Long examId) {
+        if (examId == null) {
+            throw new IllegalArgumentException("考试ID不能为空");
+        }
+        List<ImageCheckVo> result = studentDao.countImageCheck(examId);
+
+        for (ImageCheckVo vo : result) {
+            double progress = MathUtil.percentage(vo.getTotalCount() - vo.getFailedCount(), vo.getTotalCount());
+            vo.setImageCheckProgress(progress);
+        }
+
+        return result;
+    }
+
+    @Override
+    public PageResult<ImageCheckDetailVo> detailList(ImageCheckQuery query) {
+        if (query.getExamId() == null) {
+            throw new IllegalArgumentException("考试ID不能为空");
+        }
+        if (StringUtils.isBlank(query.getSubjectCode())) {
+            throw new IllegalArgumentException("科目代码不能为空");
+        }
+        IPage<ImageCheckDetailVo> page = studentDao.queryImageCheckDetail(new Page<>(query.getPageNumber(), query.getPageSize()), query);
+
+        for (ImageCheckDetailVo vo : page.getRecords()) {
+            vo.setFailed(vo.getFailedCount() > 0);
+        }
+
+        return PageUtil.of(page);
+    }
+
+}

+ 13 - 0
src/main/java/cn/com/qmth/scancentral/vo/imagecheck/ImageCheckDetailVo.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.scancentral.vo.imagecheck;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModelProperty;
 
 public class ImageCheckDetailVo {
@@ -25,6 +26,10 @@ public class ImageCheckDetailVo {
     @ApiModelProperty(value = "考场")
     private String examRoom;
 
+    @JsonIgnore
+    @ApiModelProperty(value = "异常数量", hidden = true)
+    private Integer failedCount;
+
     @ApiModelProperty(value = "是否异常")
     private Boolean failed;
 
@@ -84,6 +89,14 @@ public class ImageCheckDetailVo {
         this.examRoom = examRoom;
     }
 
+    public Integer getFailedCount() {
+        return failedCount;
+    }
+
+    public void setFailedCount(Integer failedCount) {
+        this.failedCount = failedCount;
+    }
+
     public Boolean getFailed() {
         return failed;
     }

+ 12 - 0
src/main/java/cn/com/qmth/scancentral/vo/imagecheck/ImageCheckQuery.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.scancentral.vo.imagecheck;
 
+import cn.com.qmth.scancentral.enums.ImageCheckStatus;
 import cn.com.qmth.scancentral.util.PagerQuery;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -11,6 +12,9 @@ public class ImageCheckQuery extends PagerQuery {
     @ApiModelProperty(value = "科目代码")
     private String subjectCode;
 
+    @ApiModelProperty(value = "图片检查状态", hidden = true)
+    private ImageCheckStatus imageCheckStatus;
+
     public Long getExamId() {
         return examId;
     }
@@ -27,4 +31,12 @@ public class ImageCheckQuery extends PagerQuery {
         this.subjectCode = subjectCode;
     }
 
+    public ImageCheckStatus getImageCheckStatus() {
+        return imageCheckStatus;
+    }
+
+    public void setImageCheckStatus(ImageCheckStatus imageCheckStatus) {
+        this.imageCheckStatus = imageCheckStatus;
+    }
+
 }

+ 11 - 0
src/main/java/cn/com/qmth/scancentral/vo/imagecheck/ImageCheckVo.java

@@ -13,6 +13,9 @@ public class ImageCheckVo {
     @ApiModelProperty(value = "检查进度")
     private Double imageCheckProgress;
 
+    @ApiModelProperty(value = "总数量")
+    private Integer totalCount;
+
     @ApiModelProperty(value = "异常数量")
     private Integer failedCount;
 
@@ -40,6 +43,14 @@ public class ImageCheckVo {
         this.imageCheckProgress = imageCheckProgress;
     }
 
+    public Integer getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(Integer totalCount) {
+        this.totalCount = totalCount;
+    }
+
     public Integer getFailedCount() {
         return failedCount;
     }

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

@@ -618,4 +618,38 @@
         order by tm.exam_site,tm.exam_room
     </select>
 
-</mapper>
+    <select id="countImageCheck" resultType="cn.com.qmth.scancentral.vo.imagecheck.ImageCheckVo">
+        select stu.subject_code,
+               sb.name  as         subjectName,
+               count(1) as         totalCount,
+               sum(case
+                       when stu.file_upload_status = 'UPLOADED' and stu.image_check_status = 'FAILED' then 1
+                       else 0 end) failedCount
+        from sc_student stu
+                 inner join sc_subject sb on sb.exam_id = stu.exam_id and sb.code = stu.subject_code
+        where stu.exam_id = #{examId}
+        group by stu.subject_code
+    </select>
+
+    <select id="queryImageCheckDetail" resultType="cn.com.qmth.scancentral.vo.imagecheck.ImageCheckDetailVo">
+        select stu.subject_code,
+        sb.name as subject_name,
+        stu.campus_code,
+        stu.campus_name,
+        stu.exam_site,
+        stu.exam_site_name,
+        stu.exam_room,
+        stu.image_check_status,
+        sum(case when stu.file_upload_status='UPLOADED' and stu.image_check_status = 'FAILED' then 1 else 0 end)
+        failedCount
+        from sc_student stu
+        inner join sc_subject sb on sb.exam_id = stu.exam_id and sb.code = stu.subject_code
+        where stu.exam_id = #{query.examId}
+        and stu.subject_code = #{query.subjectCode}
+        <if test="query.imageCheckStatus != null">
+            and stu.image_check_status = #{query.imageCheckStatus}
+        </if>
+        group by stu.exam_room
+    </select>
+
+</mapper>