Explorar el Código

3.3.0 成绩检查

xiaofei hace 1 año
padre
commit
5e3faf4200

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

@@ -44,18 +44,18 @@ public class MarkStudentController {
     @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,
+                                   @ApiParam(value = "学院") @RequestParam(required = false) String college,
+                                   @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) 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 = "客观题分小于x%") @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);

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

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

+ 2 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -1,11 +1,10 @@
 package com.qmth.teachcloud.mark.mapper;
 
+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.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;
 
 /**
@@ -18,5 +17,5 @@ import org.apache.ibatis.annotations.Param;
  */
 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);
+    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("filter") Integer filter, @Param("absent") Boolean absent, @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);
 }

+ 11 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -14,25 +14,22 @@ import com.qmth.teachcloud.mark.bean.scanexaminfo.CheckTask;
 import com.qmth.teachcloud.mark.bean.scanexaminfo.ScanExamCheckInfoVo;
 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.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkStudent;
 import com.qmth.teachcloud.mark.enums.OmrTaskStatus;
 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.ScanOmrTaskService;
-import com.qmth.teachcloud.mark.service.ScanPackageService;
+import com.qmth.teachcloud.mark.service.*;
 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.math.BigDecimal;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import com.qmth.teachcloud.mark.service.ScanPaperService;
-
 /**
  * <p>
  * 考试考生库 服务实现类
@@ -94,8 +91,13 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             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);
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        Double objectiveScoreLt = objectiveScoreRateLt == null ? null : Double.parseDouble(new DecimalFormat("####.###").format(markPaper.getObjectiveScore() * objectiveScoreRateLt / 100));
+        IPage<StudentScoreDetailDto> studentScoreDetailDtoIPage = this.baseMapper.pageStudentScore(page, examId, paperNumber, college, className, teacher, filter, absent, breach, startScore, endScore, subScore, objectiveScoreLt, studentName, studentCode);
+        for (StudentScoreDetailDto scoreDetailDto : studentScoreDetailDtoIPage.getRecords()) {
+            // 原图
+        }
+        return  studentScoreDetailDtoIPage;
     }
 
     private int getCount(Long examId, ScanStatus status) {

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

@@ -43,70 +43,80 @@
     </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
+            ms.exam_id examId,
+            ms.course_code courseCode,
+            ms.course_name courseName,
+            ms.paper_number paperNumber,
+            ms.student_name studentName,
+            ms.student_code studentCode,
+            ms.secret_number secretNumber,
+            ms.college,
+            ms.class_name className,
+            ms.objective_score objectiveScore,
+            ms.subjective_score subjectiveScore,
+            ms.subjective_score_list subjectiveScoreList,
+            ms.check_user_id checkUserId,
+            ms.check_time checkTime
         FROM
-            mark_student
-        where exam_id = #{examId}
-            AND paper_number = #{paperNumber}
+            mark_student ms
+        where ms.exam_id = #{examId}
+            AND ms.paper_number = #{paperNumber}
             <if test="college != null and college != ''">
-                AND college = #{college}
+                AND ms.college = #{college}
             </if>
             <if test="className != null and className != ''">
-                AND class_name = #{className}
+                AND ms.class_name = #{className}
             </if>
             <if test="teacher != null and teacher != ''">
-                AND teacher = #{teacher}
+                AND ms.teacher = #{teacher}
             </if>
-            <if test="studentScoreDetailFilterDto != null">
-                AND college = #{college}
+            <if test="filter != null">
+                <choose>
+                    <when test="filter == 1">
+                        AND ms.objective_score = 0
+                    </when>
+                    <when test="filter == 2">
+                        AND ms.objective_score = 0 AND ms.subjective_score > 0
+                    </when>
+                    <when test="filter == 3">
+                        AND ms.objective_score > 0 AND ms.subjective_score = 0
+                    </when>
+                </choose>
             </if>
             <if test="absent != null">
                 <choose>
                     <when test="absent == true">
-                        AND (is_absent = 1 OR is_upload = 0)
+                        AND (ms.is_absent = 1 OR ms.is_upload = 0)
                     </when>
                     <otherwise>
-                        AND (is_absent = 0 AND is_upload = 1)
+                        AND (ms.is_absent = 0 AND ms.is_upload = 1)
                     </otherwise>
                 </choose>
             </if>
             <if test="breach != null">
-                AND is_breach = #{breach}
+                AND ms.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}))
+                        AND (ms.is_absent = 1 OR ms.is_breach = 1 OR (ms.subjective_score + ms.objective_score &gt;= #{startScore} AND ms.subjective_score + ms.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}))
+                        AND (ms.is_absent = 0 AND ms.is_breach = 0 AND (ms.subjective_score + ms.objective_score &gt;= #{startScore} AND ms.subjective_score + ms.objective_scor &lt;= #{endScore}))
                     </otherwise>
                 </choose>
             </if>
             <if test="subScore != null">
-                AND college = #{college}
+                AND exists (SELECT 1 FROM mark_subjective_score mss WHERE ms.id = mss.student_id AND mss.score = #{subScore})
             </if>
-            <if test="objectiveScoreRateLt != null">
-                AND college = #{college}
+            <if test="objectiveScoreLt != null">
+                AND ms.objective_score &lt; #{objectiveScoreLt}
             </if>
             <if test="studentName != null and studentName != ''">
-                AND student_name like concat(#{studentName}, '%')
+                AND ms.student_name like concat(#{studentName}, '%')
             </if>
             <if test="studentCode != null and studentCode != ''">
-                AND student_code = #{studentCode}
+                AND ms.student_code = #{studentCode}
             </if>
     </select>