浏览代码

fix:成绩检查检索条件优化

caozixuan 1 年之前
父节点
当前提交
a799a17037

+ 20 - 26
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkStudentController.java

@@ -1,12 +1,10 @@
 package com.qmth.distributed.print.api.mark;
 package com.qmth.distributed.print.api.mark;
 
 
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.mark.dto.mark.score.StudentObjectiveDetailDto;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto;
 import com.qmth.teachcloud.mark.service.MarkStudentService;
 import com.qmth.teachcloud.mark.service.MarkStudentService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -42,34 +40,30 @@ public class MarkStudentController {
      */
      */
     @ApiOperation(value = "详情列表")
     @ApiOperation(value = "详情列表")
     @RequestMapping(value = "/score", method = RequestMethod.POST)
     @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 majorName,
-                                   @ApiParam(value = "班级") @RequestParam(required = false) String className,
-                                   @ApiParam(value = "任课老师") @RequestParam(required = false) String teacher,
-                                   @ApiParam(value = "0:无 1:客观题0分 2:客观题0分,主观题有分 3:主观题0分,客观题有分") @RequestParam(required = false) Integer filter,
-                                   @ApiParam(value = "状态") @RequestParam(required = false) String status,
-                                   @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 = "客观题分小于x%") @RequestParam(required = false) Integer objectiveScoreRateLt,
-                                   @ApiParam(value = "姓名") @RequestParam(required = false) String studentName,
-                                   @ApiParam(value = "学号") @RequestParam(required = false) String studentCode,
-                                   @ApiParam(value = "排序方式") @RequestParam(required = false) String orderType,
-                                   @ApiParam(value = "排序字段") @RequestParam(required = false) String orderField,
-                                   @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, majorName, className, teacher, filter, status, breach, startScore, endScore, subScore, objectiveScoreRateLt, studentName, studentCode, orderType, orderField, pageNumber, pageSize);
+    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 majorName,
+            @ApiParam(value = "班级") @RequestParam(required = false) String className, @ApiParam(value = "任课老师") @RequestParam(required = false) String teacher,
+            @ApiParam(value = "0:无 1:客观题0分 2:客观题0分,主观题有分 3:主观题0分,客观题有分") @RequestParam(required = false) Integer filter,
+            @ApiParam(value = "状态") @RequestParam(required = false) String status, @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 subjectiveStartScore,
+            @ApiParam(value = "主观题总分结束") @RequestParam(required = false) Double subjectiveEndScore,
+            @ApiParam(value = "客观题总分开始") @RequestParam(required = false) Double objectiveStartScore,
+            @ApiParam(value = "客观题总分结束") @RequestParam(required = false) Double objectiveEndScore, @ApiParam(value = "小题得分") @RequestParam(required = false) Double subScore,
+            @ApiParam(value = "客观题分小于x%") @RequestParam(required = false) Integer objectiveScoreRateLt, @ApiParam(value = "姓名") @RequestParam(required = false) String studentName,
+            @ApiParam(value = "学号") @RequestParam(required = false) String studentCode, @ApiParam(value = "排序方式") @RequestParam(required = false) String orderType,
+            @ApiParam(value = "排序字段") @RequestParam(required = false) String orderField, @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, majorName, className, teacher, filter, status, breach, startScore, endScore,
+                subjectiveStartScore, subjectiveEndScore, objectiveStartScore, objectiveEndScore, subScore,
+                objectiveScoreRateLt, studentName, studentCode, orderType, orderField, pageNumber, pageSize);
         return ResultUtil.ok(scoreListDtoIPage);
         return ResultUtil.ok(scoreListDtoIPage);
     }
     }
 
 
     @ApiOperation(value = "客观题统分")
     @ApiOperation(value = "客观题统分")
     @RequestMapping(value = "/objective/calculate", method = RequestMethod.POST)
     @RequestMapping(value = "/objective/calculate", method = RequestMethod.POST)
-    public Result calcObjectiveScore(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
-                                   @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
+    public Result calcObjectiveScore(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId, @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
         return ResultUtil.ok(markStudentService.calcObjectiveScore(examId, paperNumber));
         return ResultUtil.ok(markStudentService.calcObjectiveScore(examId, paperNumber));
     }
     }
-
-}
+}

+ 16 - 11
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -28,13 +28,14 @@ import com.qmth.teachcloud.mark.entity.MarkStudent;
  */
  */
 public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 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("majorName") String majorName,
-												  @Param("className") String className, @Param("teacher") String teacher, @Param("filter") Integer filter,
-												  @Param("status") String status, @Param("breach") Boolean breach, @Param("startScore") Double startScore,
-												  @Param("endScore") Double endScore, @Param("subScore") Double subScore,
-												  @Param("objectiveScoreLt") Double objectiveScoreLt, @Param("studentName") String studentName,
-												  @Param("studentCode") String studentCode, @Param("orderType") String orderType, @Param("orderField") String orderField);
+	IPage<StudentScoreDetailDto> pageStudentScore(@Param("page") Page<StudentScoreDetailDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("college") String college,
+			@Param("majorName") String majorName, @Param("className") String className, @Param("teacher") String teacher, @Param("filter") Integer filter,
+			@Param("status") String status, @Param("breach") Boolean breach, @Param("startScore") Double startScore, @Param("endScore") Double endScore,
+			@Param("subjectiveStartScore") Double subjectiveStartScore, @Param("subjectiveEndScore") Double subjectiveEndScore,
+			@Param("objectiveStartScore") Double objectiveStartScore,
+			@Param("objectiveEndScore") Double objectiveEndScore, @Param("subScore") Double subScore, @Param("objectiveScoreLt") Double objectiveScoreLt,
+			@Param("studentName") String studentName, @Param("studentCode") String studentCode, @Param("orderType") String orderType,
+			@Param("orderField") String orderField);
 
 
 	List<MarkStudent> listAbsentOrBreachMarkTaskStudent(@Param("examId") Long examId,
 	List<MarkStudent> listAbsentOrBreachMarkTaskStudent(@Param("examId") Long examId,
 			@Param("paperNumber") String paperNumber);
 			@Param("paperNumber") String paperNumber);
@@ -58,20 +59,24 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 			@Param("start") Double start, @Param("end") Double end);
 			@Param("start") Double start, @Param("end") Double end);
 
 
 	List<CollegeVo> college(@Param("req") ArchiveStudentQuery query);
 	List<CollegeVo> college(@Param("req") ArchiveStudentQuery query);
+
 	List<ClassVo> classData(@Param("req") ArchiveStudentQuery query);
 	List<ClassVo> classData(@Param("req") ArchiveStudentQuery query);
+
 	List<TeacherVo> teacher(@Param("req") ArchiveStudentQuery query);
 	List<TeacherVo> teacher(@Param("req") ArchiveStudentQuery query);
 
 
-    List<UnexistStudentDto> listUnexistStudentByExamIdAndCoursePaperId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("status") String status, @Param("dpr") DataPermissionRule dpr);
+	List<UnexistStudentDto> listUnexistStudentByExamIdAndCoursePaperId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId,
+			@Param("status") String status, @Param("dpr") DataPermissionRule dpr);
 
 
 	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("req") ArchiveStudentQuery query);
 	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("req") ArchiveStudentQuery query);
 
 
 	List<TeacherClassVo> teacherClass(@Param("req") ArchiveStudentQuery query);
 	List<TeacherClassVo> teacherClass(@Param("req") ArchiveStudentQuery query);
 
 
-    int selectCountByQuery(@Param("markStudent") MarkStudent markStudent, @Param("dpr") DataPermissionRule dpr);
+	int selectCountByQuery(@Param("markStudent") MarkStudent markStudent, @Param("dpr") DataPermissionRule dpr);
 
 
 	int countAssigned(@Param("markStudent") MarkStudent markStudent, @Param("dpr") DataPermissionRule dpr);
 	int countAssigned(@Param("markStudent") MarkStudent markStudent, @Param("dpr") DataPermissionRule dpr);
 
 
-	List<MarkStudent> listScanCollegeByExamIdAndCourseCodeAndCoursePaperId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId, @Param("status") String status, @Param("dpr") DataPermissionRule dpr);
+	List<MarkStudent> listScanCollegeByExamIdAndCourseCodeAndCoursePaperId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId,
+			@Param("status") String status, @Param("dpr") DataPermissionRule dpr);
 
 
-    BasicTeachClazz getBasicTeachClazzById(Long clazzId);
+	BasicTeachClazz getBasicTeachClazzById(Long clazzId);
 }
 }

+ 4 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java

@@ -57,8 +57,9 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
 
     ScanExamInfoVo getScanExamInfo(BasicExam exam, String courseCode, String coursePaperId);
     ScanExamInfoVo getScanExamInfo(BasicExam exam, String courseCode, String coursePaperId);
 
 
-    IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college, String majorName, String className,
-            String teacher, Integer filter, String status, Boolean breach, Double startScore, Double endScore,
+    IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college, String majorName,
+            String className, String teacher, Integer filter, String status, Boolean breach, Double startScore, Double endScore,
+            Double subjectiveStartScore, Double subjectiveEndScore, Double objectiveStartScore, Double objectiveEndScore,
             Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode, String orderType,
             Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode, String orderType,
             String orderField, Integer pageNumber, Integer pageSize);
             String orderField, Integer pageNumber, Integer pageSize);
 
 
@@ -72,6 +73,7 @@ public interface MarkStudentService extends IService<MarkStudent> {
     void updateStudentByPaper(@NotNull Long userId, @NotNull Long studentId, @NotNull boolean updateOmrTask);
     void updateStudentByPaper(@NotNull Long userId, @NotNull Long studentId, @NotNull boolean updateOmrTask);
 
 
     MarkStudent findByExamIdAndCoursePaperIdAndStudentCode(Long examId, String coursePaperId, String studentCode);
     MarkStudent findByExamIdAndCoursePaperIdAndStudentCode(Long examId, String coursePaperId, String studentCode);
+
     MarkStudent findByExamIdAndPaperNumberAndStudentCode(Long examId, String paperNumber, String studentCode);
     MarkStudent findByExamIdAndPaperNumberAndStudentCode(Long examId, String paperNumber, String studentCode);
 
 
     StudentObjectiveDetailDto getObjectiveInspectedTask(Long studentId);
     StudentObjectiveDetailDto getObjectiveInspectedTask(Long studentId);

+ 19 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -209,16 +209,25 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     @Override
     @Override
     public IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college, String majorName,
     public IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college, String majorName,
                                                          String className, String teacher, Integer filter, String status, Boolean breach, Double startScore,
                                                          String className, String teacher, Integer filter, String status, Boolean breach, Double startScore,
-                                                         Double endScore, Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode,
+                                                         Double endScore,Double subjectiveStartScore, Double subjectiveEndScore, Double objectiveStartScore, Double objectiveEndScore,
+            Double subScore, Integer objectiveScoreRateLt, String studentName, String studentCode,
                                                          String orderType, String orderField, Integer pageNumber, Integer pageSize) {
                                                          String orderType, String orderField, Integer pageNumber, Integer pageSize) {
         if (startScore != null && endScore == null) {
         if (startScore != null && endScore == null) {
             throw ExceptionResultEnum.ERROR.exception("请输入结束分数值");
             throw ExceptionResultEnum.ERROR.exception("请输入结束分数值");
         }
         }
+        college = SystemConstant.translateSpecificSign(college);
+        majorName = SystemConstant.translateSpecificSign(majorName);
+        className = SystemConstant.translateSpecificSign(className);
+        teacher = SystemConstant.translateSpecificSign(teacher);
+
         Page<StudentScoreDetailDto> page = new Page<>(pageNumber, pageSize);
         Page<StudentScoreDetailDto> page = new Page<>(pageNumber, pageSize);
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
-        Double objectiveScoreLt = objectiveScoreRateLt == null ? null : Calculator.round(Calculator.divide(Calculator.multiply(markPaper.getObjectiveScore(), Double.parseDouble(String.valueOf(objectiveScoreRateLt))), 100), 2);
+        Double objectiveScoreLt = objectiveScoreRateLt == null ?
+                null :
+                Calculator.round(Calculator.divide(Calculator.multiply(markPaper.getObjectiveScore(), Double.parseDouble(String.valueOf(objectiveScoreRateLt))), 100), 2);
         IPage<StudentScoreDetailDto> studentScoreDetailDtoIPage = this.baseMapper.pageStudentScore(page, examId,
         IPage<StudentScoreDetailDto> studentScoreDetailDtoIPage = this.baseMapper.pageStudentScore(page, examId,
-                paperNumber, college, majorName, className, teacher, filter, status, breach, startScore, endScore, subScore,
+                paperNumber, college, majorName, className, teacher, filter, status, breach, startScore, endScore,
+                subjectiveStartScore, subjectiveEndScore, objectiveStartScore, objectiveEndScore, subScore,
                 objectiveScoreLt, studentName, studentCode, orderType, orderField);
                 objectiveScoreLt, studentName, studentCode, orderType, orderField);
         for (StudentScoreDetailDto scoreDetailDto : studentScoreDetailDtoIPage.getRecords()) {
         for (StudentScoreDetailDto scoreDetailDto : studentScoreDetailDtoIPage.getRecords()) {
             // 原图
             // 原图
@@ -234,9 +243,14 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             }
             }
 
 
             // 主观题检查标记
             // 主观题检查标记
-            scoreDetailDto.setSubjectiveCheckFlag(!scoreDetailDto.getAbsent() && !scoreDetailDto.getOmrAbsent() && scoreDetailDto.getUpload() && ScanStatus.SCANNED.equals(scoreDetailDto.getScanStatus()) && SubjectiveStatus.MARKED.equals(scoreDetailDto.getSubjectiveStatus()) && StringUtils.isNotBlank(scoreDetailDto.getSubjectiveScore()) && StringUtils.isNotBlank(scoreDetailDto.getSubjectiveScoreList()));
+            scoreDetailDto.setSubjectiveCheckFlag(
+                    !scoreDetailDto.getAbsent() && !scoreDetailDto.getOmrAbsent() && scoreDetailDto.getUpload() && ScanStatus.SCANNED.equals(scoreDetailDto.getScanStatus())
+                            && SubjectiveStatus.MARKED.equals(scoreDetailDto.getSubjectiveStatus()) && StringUtils.isNotBlank(scoreDetailDto.getSubjectiveScore()) && StringUtils.isNotBlank(
+                            scoreDetailDto.getSubjectiveScoreList()));
             // 客观题检查标记
             // 客观题检查标记
-            scoreDetailDto.setObjectiveCheckFlag(!scoreDetailDto.getAbsent() && !scoreDetailDto.getOmrAbsent() && scoreDetailDto.getUpload() && ScanStatus.SCANNED.equals(scoreDetailDto.getScanStatus()) && StringUtils.isNotBlank(scoreDetailDto.getObjectiveScore()) && StringUtils.isNotBlank(scoreDetailDto.getObjectiveScoreList()));
+            scoreDetailDto.setObjectiveCheckFlag(
+                    !scoreDetailDto.getAbsent() && !scoreDetailDto.getOmrAbsent() && scoreDetailDto.getUpload() && ScanStatus.SCANNED.equals(scoreDetailDto.getScanStatus()) && StringUtils.isNotBlank(
+                            scoreDetailDto.getObjectiveScore()) && StringUtils.isNotBlank(scoreDetailDto.getObjectiveScoreList()));
 
 
             // 格式化分数
             // 格式化分数
             scoreDetailDto.setObjectiveScore(Calculator.round(scoreDetailDto.getObjectiveScore(), 1));
             scoreDetailDto.setObjectiveScore(Calculator.round(scoreDetailDto.getObjectiveScore(), 1));

+ 32 - 4
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -80,16 +80,16 @@
         where ms.exam_id = #{examId}
         where ms.exam_id = #{examId}
         AND ms.paper_number = #{paperNumber}
         AND ms.paper_number = #{paperNumber}
         <if test="college != null and college != ''">
         <if test="college != null and college != ''">
-            AND ms.college like concat(#{college}, '%')
+            AND ms.college LIKE CONCAT('%', #{college}, '%')
         </if>
         </if>
         <if test="majorName != null and majorName != ''">
         <if test="majorName != null and majorName != ''">
-            AND ms.major_name like concat(#{majorName}, '%')
+            AND ms.major_name LIKE CONCAT('%', #{majorName}, '%')
         </if>
         </if>
         <if test="className != null and className != ''">
         <if test="className != null and className != ''">
-            AND ms.class_name like concat(#{className}, '%')
+            AND ms.class_name LIKE CONCAT('%', #{className}, '%')
         </if>
         </if>
         <if test="teacher != null and teacher != ''">
         <if test="teacher != null and teacher != ''">
-            AND ms.teacher = #{teacher}
+            AND ms.teacher LIKE CONCAT('%', #{teacher},'%')
         </if>
         </if>
         <if test="filter != null">
         <if test="filter != null">
             <choose>
             <choose>
@@ -134,6 +134,34 @@
                 </otherwise>
                 </otherwise>
             </choose>
             </choose>
         </if>
         </if>
+        <if test="subjectiveStartScore != null">
+            <choose>
+                <when test="subjectiveStartScore == 0">
+                    AND (ms.is_absent = 1 OR ms.is_breach = 1
+                             OR (ifnull(ms.subjective_score, 0) &gt;= #{subjectiveStartScore}
+                             AND ifnull(ms.subjective_score, 0) &lt;= #{subjectiveEndScore}))
+                </when>
+                <otherwise>
+                    AND (ms.is_absent = 0 AND ms.is_breach = 0
+                             OR (ifnull(ms.subjective_score, 0) &gt;= #{subjectiveStartScore}
+                            AND ifnull(ms.subjective_score, 0) &lt;= #{subjectiveEndScore}))
+                </otherwise>
+            </choose>
+        </if>
+        <if test="objectiveStartScore != null">
+            <choose>
+                <when test="objectiveStartScore == 0">
+                    AND (ms.is_absent = 1 OR ms.is_breach = 1
+                        OR (ifnull(ms.objective_score, 0) &gt;= #{objectiveStartScore}
+                        AND ifnull(ms.objective_score, 0) &lt;= #{objectiveEndScore}))
+                </when>
+                <otherwise>
+                    AND (ms.is_absent = 0 AND ms.is_breach = 0
+                        OR (ifnull(ms.subjective_score, 0) &gt;= #{objectiveStartScore}
+                        AND ifnull(ms.subjective_score, 0) &lt;= #{objectiveEndScore}))
+                </otherwise>
+            </choose>
+        </if>
         <if test="subScore != null">
         <if test="subScore != null">
             AND exists (SELECT 1 FROM mark_subjective_score mss WHERE ms.id = mss.student_id AND mss.score =
             AND exists (SELECT 1 FROM mark_subjective_score mss WHERE ms.id = mss.student_id AND mss.score =
             #{subScore})
             #{subScore})