Эх сурвалжийг харах

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

caozixuan 1 жил өмнө
parent
commit
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;
 
-
 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.StudentObjectiveDetailDto;
 import com.qmth.teachcloud.mark.dto.mark.score.StudentScoreDetailDto;
 import com.qmth.teachcloud.mark.service.MarkStudentService;
 import io.swagger.annotations.Api;
@@ -42,34 +40,30 @@ public class MarkStudentController {
      */
     @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 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);
     }
 
     @ApiOperation(value = "客观题统分")
     @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));
     }
-
-}
+}

+ 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> {
 
-	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,
 			@Param("paperNumber") String paperNumber);
@@ -58,20 +59,24 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 			@Param("start") Double start, @Param("end") Double end);
 
 	List<CollegeVo> college(@Param("req") ArchiveStudentQuery query);
+
 	List<ClassVo> classData(@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);
 
 	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);
 
-	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);
 
-    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,
             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);
 
     MarkStudent findByExamIdAndCoursePaperIdAndStudentCode(Long examId, String coursePaperId, String studentCode);
+
     MarkStudent findByExamIdAndPaperNumberAndStudentCode(Long examId, String paperNumber, String studentCode);
 
     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
     public 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 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) {
         if (startScore != null && endScore == null) {
             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);
         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,
-                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);
         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));

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

@@ -80,16 +80,16 @@
         where ms.exam_id = #{examId}
         AND ms.paper_number = #{paperNumber}
         <if test="college != null and college != ''">
-            AND ms.college like concat(#{college}, '%')
+            AND ms.college LIKE CONCAT('%', #{college}, '%')
         </if>
         <if test="majorName != null and majorName != ''">
-            AND ms.major_name like concat(#{majorName}, '%')
+            AND ms.major_name LIKE CONCAT('%', #{majorName}, '%')
         </if>
         <if test="className != null and className != ''">
-            AND ms.class_name like concat(#{className}, '%')
+            AND ms.class_name LIKE CONCAT('%', #{className}, '%')
         </if>
         <if test="teacher != null and teacher != ''">
-            AND ms.teacher = #{teacher}
+            AND ms.teacher LIKE CONCAT('%', #{teacher},'%')
         </if>
         <if test="filter != null">
             <choose>
@@ -134,6 +134,34 @@
                 </otherwise>
             </choose>
         </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">
             AND exists (SELECT 1 FROM mark_subjective_score mss WHERE ms.id = mss.student_id AND mss.score =
             #{subScore})