xiaofei преди 1 година
родител
ревизия
a69d60b440
променени са 14 файла, в които са добавени 480 реда и са изтрити 61 реда
  1. 18 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkSettingController.java
  2. 41 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkStudentController.java
  3. 63 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/CheckScoreListDto.java
  4. 173 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailDto.java
  5. 5 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailFilterDto.java
  6. 17 18
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java
  7. 3 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java
  8. 6 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java
  9. 3 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java
  10. 5 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java
  11. 13 6
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java
  12. 45 31
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  13. 18 0
      teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml
  14. 70 2
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

+ 18 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkSettingController.java

@@ -7,6 +7,7 @@ import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkManageDto;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
@@ -45,7 +46,7 @@ public class MarkSettingController {
     /**
      * 评卷设置数据列表
      */
-    @ApiOperation(value = "查询")
+    @ApiOperation(value = "评卷设置数据列表")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     public Result list(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
                        @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
@@ -81,7 +82,7 @@ public class MarkSettingController {
     /**
      * 评卷管理数据列表
      */
-    @ApiOperation(value = "查询")
+    @ApiOperation(value = "评卷管理数据列表")
     @RequestMapping(value = "/summary", method = RequestMethod.POST)
     public Result summary(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
                           @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
@@ -96,7 +97,7 @@ public class MarkSettingController {
     /**
      * 导出评卷员工作量
      */
-    @ApiOperation(value = "查询")
+    @ApiOperation(value = "导出评卷员工作量")
     @RequestMapping(value = "/export_marker", method = RequestMethod.POST)
     public void exportMarker(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
                              @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
@@ -104,4 +105,18 @@ public class MarkSettingController {
                              HttpServletResponse response) {
         markTaskService.exportMarker(examId, courseCode, paperNumber, response);
     }
+
+    /**
+     * 成绩检查数据列表
+     */
+    @ApiOperation(value = "成绩检查数据列表")
+    @RequestMapping(value = "/scoreList", method = RequestMethod.POST)
+    public Result scoreList(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                       @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                       @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
+                       @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                       @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        IPage<CheckScoreListDto> scoreListDtoIPage = markPaperService.listStudentScoreList(examId, courseCode, paperNumber, pageNumber, pageSize);
+        return ResultUtil.ok(scoreListDtoIPage);
+    }
 }

+ 41 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkStudentController.java

@@ -1,13 +1,26 @@
 package com.qmth.distributed.print.api.mark;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
+import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.springframework.web.bind.annotation.RequestMapping;
-
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+
 /**
  * <p>
  * 考试考生库 前端控制器
@@ -21,4 +34,31 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_MARK + "/student")
 public class MarkStudentController {
 
+    @Resource
+    MarkStudentService markStudentService;
+
+    /**
+     * 详情列表
+     */
+    @ApiOperation(value = "详情列表")
+    @RequestMapping(value = "/score", method = RequestMethod.POST)
+    public Result listStudentScore(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
+                                   @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) String college,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) String className,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) String teacher,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) Integer filter,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) Boolean absent,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) Boolean breach,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) Double startScore,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) Double endScore,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) Double subScore,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) Integer objectiveScoreRateLt,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) String studentName,
+                                   @ApiParam(value = "试卷编号") @RequestParam(required = false) String studentCode,
+                                   @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                   @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        IPage<StudentScoreDetailDto> scoreListDtoIPage = markStudentService.pageStudentScore(examId, paperNumber, college, className, teacher, filter, absent, breach, startScore, endScore, subScore, objectiveScoreRateLt, studentName, studentCode, pageNumber, pageSize);
+        return ResultUtil.ok(scoreListDtoIPage);
+    }
 }

+ 63 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/CheckScoreListDto.java

@@ -0,0 +1,63 @@
+package com.qmth.teachcloud.mark.dto.mark.score;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+public class CheckScoreListDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+    private String courseCode;
+    private String courseName;
+    private String paperNumber;
+    private Integer studentCount;
+    private Integer uploadCount;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    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 String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public Integer getStudentCount() {
+        return studentCount;
+    }
+
+    public void setStudentCount(Integer studentCount) {
+        this.studentCount = studentCount;
+    }
+
+    public Integer getUploadCount() {
+        return uploadCount;
+    }
+
+    public void setUploadCount(Integer uploadCount) {
+        this.uploadCount = uploadCount;
+    }
+}

+ 173 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailDto.java

@@ -0,0 +1,173 @@
+package com.qmth.teachcloud.mark.dto.mark.score;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+import java.util.List;
+
+public class StudentScoreDetailDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+    private String courseCode;
+    private String courseName;
+    private String paperNumber;
+    private String studentName;
+    private String studentCode;
+    private String secretNumber;
+    private String college;
+    private String className;
+    private String objectiveScoreString;
+    private String subjectiveScoreString;
+    private String totalScoreString;
+    private String subjectiveScoreList;
+    private String checkUserId;
+    private String checkUserLoginName;
+    private String checkUserName;
+    private Long checkTime;
+    private List<String> sheetUrls;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    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 String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    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 getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+
+    public String getCollege() {
+        return college;
+    }
+
+    public void setCollege(String college) {
+        this.college = college;
+    }
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
+    public String getObjectiveScoreString() {
+        return objectiveScoreString;
+    }
+
+    public void setObjectiveScoreString(String objectiveScoreString) {
+        this.objectiveScoreString = objectiveScoreString;
+    }
+
+    public String getSubjectiveScoreString() {
+        return subjectiveScoreString;
+    }
+
+    public void setSubjectiveScoreString(String subjectiveScoreString) {
+        this.subjectiveScoreString = subjectiveScoreString;
+    }
+
+    public String getTotalScoreString() {
+        return totalScoreString;
+    }
+
+    public void setTotalScoreString(String totalScoreString) {
+        this.totalScoreString = totalScoreString;
+    }
+
+    public String getSubjectiveScoreList() {
+        return subjectiveScoreList;
+    }
+
+    public void setSubjectiveScoreList(String subjectiveScoreList) {
+        this.subjectiveScoreList = subjectiveScoreList;
+    }
+
+    public String getCheckUserId() {
+        return checkUserId;
+    }
+
+    public void setCheckUserId(String checkUserId) {
+        this.checkUserId = checkUserId;
+    }
+
+    public String getCheckUserLoginName() {
+        return checkUserLoginName;
+    }
+
+    public void setCheckUserLoginName(String checkUserLoginName) {
+        this.checkUserLoginName = checkUserLoginName;
+    }
+
+    public String getCheckUserName() {
+        return checkUserName;
+    }
+
+    public void setCheckUserName(String checkUserName) {
+        this.checkUserName = checkUserName;
+    }
+
+    public Long getCheckTime() {
+        return checkTime;
+    }
+
+    public void setCheckTime(Long checkTime) {
+        this.checkTime = checkTime;
+    }
+
+    public List<String> getSheetUrls() {
+        return sheetUrls;
+    }
+
+    public void setSheetUrls(List<String> sheetUrls) {
+        this.sheetUrls = sheetUrls;
+    }
+}

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/score/StudentScoreDetailFilterDto.java

@@ -0,0 +1,5 @@
+package com.qmth.teachcloud.mark.dto.mark.score;
+
+public class StudentScoreDetailFilterDto {
+
+}

+ 17 - 18
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java

@@ -1,19 +1,18 @@
 package com.qmth.teachcloud.mark.entity;
 
-import java.io.Serializable;
-import java.util.List;
-
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.enums.ScanStatus;
-
 import com.qmth.teachcloud.mark.dto.mark.ScoreItem;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
 
+import java.io.Serializable;
+import java.util.List;
+
 /**
  * <p>
  * 考试考生库
@@ -91,12 +90,12 @@ public class MarkStudent implements Serializable {
     @ApiModelProperty(value = "上传时间")
     private Long uploadTime;
 
-    @ApiModelProperty(value = "复核时间")
-    private Long inspectTime;
+    @ApiModelProperty(value = "检查时间")
+    private Long checkTime;
 
     @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "复核人ID")
-    private Long inspectorId;
+    @ApiModelProperty(value = "检查人ID")
+    private Long checkUserId;
 
     @ApiModelProperty(value = "客观总分")
     private Double objectiveScore;
@@ -320,20 +319,20 @@ public class MarkStudent implements Serializable {
         this.uploadTime = uploadTime;
     }
 
-    public Long getInspectTime() {
-        return inspectTime;
+    public Long getCheckTime() {
+        return checkTime;
     }
 
-    public void setInspectTime(Long inspectTime) {
-        this.inspectTime = inspectTime;
+    public void setCheckTime(Long checkTime) {
+        this.checkTime = checkTime;
     }
 
-    public Long getInspectorId() {
-        return inspectorId;
+    public Long getCheckUserId() {
+        return checkUserId;
     }
 
-    public void setInspectorId(Long inspectorId) {
-        this.inspectorId = inspectorId;
+    public void setCheckUserId(Long checkUserId) {
+        this.checkUserId = checkUserId;
     }
 
     public Double getObjectiveScore() {
@@ -495,8 +494,8 @@ public class MarkStudent implements Serializable {
                 ", isManualAbsent=" + isManualAbsent +
                 ", isBreach=" + isBreach +
                 ", uploadTime=" + uploadTime +
-                ", inspectTime=" + inspectTime +
-                ", inspectorId=" + inspectorId +
+                ", checkTime=" + checkTime +
+                ", checkUserId=" + checkUserId +
                 ", objectiveScore=" + objectiveScore +
                 ", objectiveScoreList=" + objectiveScoreList +
                 ", subjectiveStatus=" + subjectiveStatus +

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkPaperMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto;
+import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import org.apache.ibatis.annotations.Param;
 
@@ -22,4 +23,6 @@ public interface MarkPaperMapper extends BaseMapper<MarkPaper> {
     IPage<MarkSettingDto> listPaperSetting(@Param("page") Page<MarkSettingDto> page, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("groupStatus") Boolean groupStatus);
 
     List<MarkPaper> listQualityMarkPaperByStatus(@Param("status") String status, @Param("uploadCount") int uploadCount);
+
+    IPage<CheckScoreListDto> listStudentScoreList(@Param("page") Page<CheckScoreListDto> page, @Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 }

+ 6 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -1,7 +1,12 @@
 package com.qmth.teachcloud.mark.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto;
+import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailFilterDto;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +18,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 
+    IPage<StudentScoreDetailDto> pageStudentScore(@Param("page") Page<StudentScoreDetailDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("college") String college, @Param("className") String className, @Param("teacher") String teacher, @Param("studentScoreDetailFilterDto") StudentScoreDetailFilterDto studentScoreDetailFilterDto, @Param("absent") Boolean absent, @Param("breach") Boolean breach, @Param("startScore") Double startScore, @Param("endScore") Double endScore, @Param("subScore") Double subScore, @Param("objectiveScoreRateLt") Integer objectiveScoreRateLt, @Param("studentName") String studentName, @Param("studentCode") String studentCode);
 }

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkPaperService.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.teachcloud.common.bean.dto.mark.MarkSettingDto;
+import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
@@ -29,4 +30,6 @@ public interface MarkPaperService extends IService<MarkPaper> {
     List<MarkPaper> listQualityMarkPaperByStatus(MarkPaperStatus formal, int uploadCount);
 
 	int getCountByExam(Long id);
+
+    IPage<CheckScoreListDto> listStudentScoreList(Long examId, String courseCode, String paperNumber, Integer pageNumber, Integer pageSize);
 }

+ 5 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java

@@ -2,10 +2,13 @@ package com.qmth.teachcloud.mark.service;
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.mark.bean.scanexaminfo.ScanExamInfoVo;
+import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
+import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 
 /**
@@ -23,4 +26,6 @@ public interface MarkStudentService extends IService<MarkStudent> {
     void updateSubjectiveStatusAndScore(Long studentId, SubjectiveStatus status, Double score, String scoreList);
 
 	ScanExamInfoVo getScanExamInfo(BasicExam exam);
+
+    IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college, String className, String teacher, Integer filter, Boolean absent, Boolean breach, Double startScore, Double endScore, Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode, Integer pageNumber, Integer pageSize);
 }

+ 13 - 6
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -6,6 +6,7 @@ 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.teachcloud.common.bean.dto.mark.MarkSettingDto;
+import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
@@ -70,7 +71,7 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
 
     @Override
     public Boolean finishPaper(Long examId, List<String> paperNumbers, MarkPaperStatus status) {
-        UpdateWrapper<MarkPaper> updateWrapper =  new UpdateWrapper<>();
+        UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(MarkPaper::getStatus, status)
                 .eq(MarkPaper::getExamId, examId)
                 .in(MarkPaper::getPaperNumber, paperNumbers);
@@ -82,11 +83,17 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
         return this.baseMapper.listQualityMarkPaperByStatus(status.name(), uploadCount);
     }
 
-	@Override
-	public int getCountByExam(Long examId) {
-		QueryWrapper<MarkPaper> queryWrapper = new QueryWrapper<>();
+    @Override
+    public int getCountByExam(Long examId) {
+        QueryWrapper<MarkPaper> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(MarkPaper::getExamId, examId);
-		return baseMapper.selectCount(queryWrapper);
-	}
+        return baseMapper.selectCount(queryWrapper);
+    }
+
+    @Override
+    public IPage<CheckScoreListDto> listStudentScoreList(Long examId, String courseCode, String paperNumber, Integer pageNumber, Integer pageSize) {
+        Page<CheckScoreListDto> page = new Page<>(pageNumber, pageSize);
+        return this.baseMapper.listStudentScoreList(page, examId, courseCode, paperNumber);
+    }
 
 }

+ 45 - 31
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1,27 +1,31 @@
 package com.qmth.teachcloud.mark.service.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+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.teachcloud.common.entity.BasicExam;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.mark.bean.scanexaminfo.ScanExamInfoVo;
+import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto;
+import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailFilterDto;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.mapper.MarkStudentMapper;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
 import com.qmth.teachcloud.mark.service.MarkStudentService;
 import com.qmth.teachcloud.mark.service.ScanPackageService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -33,11 +37,11 @@ import com.qmth.teachcloud.mark.service.ScanPackageService;
  */
 @Service
 public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkStudent> implements MarkStudentService {
-	@Autowired
-	private MarkPaperService markPaperService;
-	@Autowired
-	private ScanPackageService scanPackageService;
-	
+    @Autowired
+    private MarkPaperService markPaperService;
+    @Autowired
+    private ScanPackageService scanPackageService;
+
     @Override
     public List<String> listClassByExamIdAndCourseCode(Long examId, String paperNumber) {
         QueryWrapper<MarkStudent> queryWrapper = new QueryWrapper<>();
@@ -62,25 +66,35 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         this.update(updateWrapper);
     }
 
-	@Override
-	public ScanExamInfoVo getScanExamInfo(BasicExam exam) {
-		ScanExamInfoVo vo=new ScanExamInfoVo();
-		vo.setId(exam.getId());
-		vo.setName(exam.getName());
-		vo.getAnswerScan().setCourseCount(markPaperService.getCountByExam(exam.getId()));
-		vo.getAnswerScan().setTotalCount(getCount(exam.getId(), null));
-		vo.getAnswerScan().setScannedCount(getCount(exam.getId(), ScanStatus.SCANNED));
-		vo.getPackageScan().setScannedCount(scanPackageService.getCount(exam.getId()));
-		return vo;
-	}
-	
-	private int getCount(Long examId,ScanStatus status) {
-		QueryWrapper<MarkStudent> wrapper = new QueryWrapper<>();
+    @Override
+    public ScanExamInfoVo getScanExamInfo(BasicExam exam) {
+        ScanExamInfoVo vo = new ScanExamInfoVo();
+        vo.setId(exam.getId());
+        vo.setName(exam.getName());
+        vo.getAnswerScan().setCourseCount(markPaperService.getCountByExam(exam.getId()));
+        vo.getAnswerScan().setTotalCount(getCount(exam.getId(), null));
+        vo.getAnswerScan().setScannedCount(getCount(exam.getId(), ScanStatus.SCANNED));
+        vo.getPackageScan().setScannedCount(scanPackageService.getCount(exam.getId()));
+        return vo;
+    }
+
+    @Override
+    public IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college, String className, String teacher, Integer filter, Boolean absent, Boolean breach, Double startScore, Double endScore, Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode, Integer pageNumber, Integer pageSize) {
+        if (startScore != null && endScore == null) {
+            throw ExceptionResultEnum.ERROR.exception("请输入结束分数值");
+        }
+        Page<StudentScoreDetailDto> page = new Page<>(pageNumber, pageSize);
+        StudentScoreDetailFilterDto studentScoreDetailFilterDto = new StudentScoreDetailFilterDto();
+        return this.baseMapper.pageStudentScore(page, examId, paperNumber, college, className, teacher, studentScoreDetailFilterDto, absent, breach, startScore, endScore, subScore, objectiveScoreRateLt, studentName, studentCode);
+    }
+
+    private int getCount(Long examId, ScanStatus status) {
+        QueryWrapper<MarkStudent> wrapper = new QueryWrapper<>();
         LambdaQueryWrapper<MarkStudent> lw = wrapper.lambda();
         lw.eq(MarkStudent::getExamId, examId);
-        if(status!=null) {
-        	lw.eq(MarkStudent::getScanStatus, status);
+        if (status != null) {
+            lw.eq(MarkStudent::getScanStatus, status);
         }
         return baseMapper.selectCount(wrapper);
-	}
+    }
 }

+ 18 - 0
teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml

@@ -65,4 +65,22 @@
                       WHERE
                           be.enable = 1 AND mp.exam_id = be.id)
     </select>
+    <select id="listStudentScoreList" resultType="com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto">
+        SELECT
+            exam_id examId,
+            course_code courseCode,
+            course_name courseName,
+            paper_number paperNumber,
+            student_count studentCount,
+            upload_count uploadCount
+        FROM
+            mark_paper
+        where exam_id = #{examId}
+            <if test="courseCode != null and courseCode != ''">
+                AND course_code = #{courseCode}
+            </if>
+            <if test="paperNumber != null and paperNumber != ''">
+                AND paper_number = #{paperNumber}
+            </if>
+    </select>
 </mapper>

+ 70 - 2
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -24,8 +24,8 @@
         <result column="is_manual_absent" property="isManualAbsent" />
         <result column="is_breach" property="isBreach" />
         <result column="upload_time" property="uploadTime" />
-        <result column="inspect_time" property="inspectTime" />
-        <result column="inspector_id" property="inspectorId" />
+        <result column="check_time" property="checkTime" />
+        <result column="check_user_id" property="checkUserId" />
         <result column="objective_score" property="objectiveScore" />
         <result column="objective_score_list" property="objectiveScoreList" />
         <result column="subjective_status" property="subjectiveStatus" />
@@ -41,5 +41,73 @@
         <result column="incomplete" property="incomplete" />
         <result column="breach_code" property="breachCode" />
     </resultMap>
+    <select id="pageStudentScore" resultType="com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto">
+        SELECT
+            exam_id examId,
+            course_code courseCode,
+            course_name courseName,
+            paper_number paperNumber,
+            student_name studentName,
+            student_code studentCode,
+            secret_number secretNumber,
+            college,
+            class_name className,
+            objective_score objectiveScore,
+            subjective_score subjectiveScore,
+            subjective_score_list subjectiveScoreList,
+            check_user_id checkUserId,
+            check_time checkTime
+        FROM
+            mark_student
+        where exam_id = #{examId}
+            AND paper_number = #{paperNumber}
+            <if test="college != null and college != ''">
+                AND college = #{college}
+            </if>
+            <if test="className != null and className != ''">
+                AND class_name = #{className}
+            </if>
+            <if test="teacher != null and teacher != ''">
+                AND teacher = #{teacher}
+            </if>
+            <if test="studentScoreDetailFilterDto != null">
+                AND college = #{college}
+            </if>
+            <if test="absent != null">
+                <choose>
+                    <when test="absent == true">
+                        AND (is_absent = 1 OR is_upload = 0)
+                    </when>
+                    <otherwise>
+                        AND (is_absent = 0 AND is_upload = 1)
+                    </otherwise>
+                </choose>
+            </if>
+            <if test="breach != null">
+                AND is_breach = #{breach}
+            </if>
+            <if test="startScore != null">
+                <choose>
+                    <when test="startScore == 0">
+                        AND (is_absent = 1 OR is_breach = 1 OR (subjective_score + objective_score &gt;= #{startScore} AND subjective_score + objective_scor &lt;= #{endScore}))
+                    </when>
+                    <otherwise>
+                        AND (is_absent = 0 AND is_breach = 0 AND (subjective_score + objective_score &gt;= #{startScore} AND subjective_score + objective_scor &lt;= #{endScore}))
+                    </otherwise>
+                </choose>
+            </if>
+            <if test="subScore != null">
+                AND college = #{college}
+            </if>
+            <if test="objectiveScoreRateLt != null">
+                AND college = #{college}
+            </if>
+            <if test="studentName != null and studentName != ''">
+                AND student_name like concat(#{studentName}, '%')
+            </if>
+            <if test="studentCode != null and studentCode != ''">
+                AND student_code = #{studentCode}
+            </if>
+    </select>
 
 </mapper>