Browse Source

3.3.0 fix

xiaofei 1 year ago
parent
commit
6ddc44bb54

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

@@ -48,7 +48,7 @@ public class MarkStudentController {
                                    @ApiParam(value = "班级") @RequestParam(required = false) String className,
                                    @ApiParam(value = "班级") @RequestParam(required = false) String className,
                                    @ApiParam(value = "任课老师") @RequestParam(required = false) String teacher,
                                    @ApiParam(value = "任课老师") @RequestParam(required = false) String teacher,
                                    @ApiParam(value = "0:无 1:客观题0分 2:客观题0分,主观题有分 3:主观题0分,客观题有分") @RequestParam(required = false) Integer filter,
                                    @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) String status,
                                    @ApiParam(value = "是否违纪") @RequestParam(required = false) Boolean breach,
                                    @ApiParam(value = "是否违纪") @RequestParam(required = false) Boolean breach,
                                    @ApiParam(value = "总分开始") @RequestParam(required = false) Double startScore,
                                    @ApiParam(value = "总分开始") @RequestParam(required = false) Double startScore,
                                    @ApiParam(value = "总分结束") @RequestParam(required = false) Double endScore,
                                    @ApiParam(value = "总分结束") @RequestParam(required = false) Double endScore,
@@ -60,7 +60,7 @@ public class MarkStudentController {
                                    @ApiParam(value = "排序字段") @RequestParam(required = false) String orderField,
                                    @ApiParam(value = "排序字段") @RequestParam(required = false) String orderField,
                                    @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                    @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                    @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
                                    @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, orderType, orderField, pageNumber, pageSize);
+        IPage<StudentScoreDetailDto> scoreListDtoIPage = markStudentService.pageStudentScore(examId, paperNumber, college, className, teacher, filter, status, breach, startScore, endScore, subScore, objectiveScoreRateLt, studentName, studentCode, orderType, orderField, pageNumber, pageSize);
         return ResultUtil.ok(scoreListDtoIPage);
         return ResultUtil.ok(scoreListDtoIPage);
     }
     }
 
 

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

@@ -33,6 +33,10 @@ public class StudentScoreDetailDto {
     private Long examStartTime;
     private Long examStartTime;
     private Long examEndTime;
     private Long examEndTime;
     private ScanStatus scanStatus;
     private ScanStatus scanStatus;
+    private Boolean absent;
+    private Boolean omrAbsent;
+    private String statusDisplay;
+    private Boolean upload;
 
 
     public Long getStudentId() {
     public Long getStudentId() {
         return studentId;
         return studentId;
@@ -217,4 +221,36 @@ public class StudentScoreDetailDto {
     public void setScanStatus(ScanStatus scanStatus) {
     public void setScanStatus(ScanStatus scanStatus) {
         this.scanStatus = scanStatus;
         this.scanStatus = scanStatus;
     }
     }
+
+    public Boolean getAbsent() {
+        return absent;
+    }
+
+    public void setAbsent(Boolean absent) {
+        this.absent = absent;
+    }
+
+    public Boolean getOmrAbsent() {
+        return omrAbsent;
+    }
+
+    public void setOmrAbsent(Boolean omrAbsent) {
+        this.omrAbsent = omrAbsent;
+    }
+
+    public String getStatusDisplay() {
+        return statusDisplay;
+    }
+
+    public void setStatusDisplay(String statusDisplay) {
+        this.statusDisplay = statusDisplay;
+    }
+
+    public Boolean getUpload() {
+        return upload;
+    }
+
+    public void setUpload(Boolean upload) {
+        this.upload = upload;
+    }
 }
 }

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

@@ -30,7 +30,7 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 	IPage<StudentScoreDetailDto> pageStudentScore(@Param("page") Page<StudentScoreDetailDto> page,
 	IPage<StudentScoreDetailDto> pageStudentScore(@Param("page") Page<StudentScoreDetailDto> page,
 												  @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("college") String college,
 												  @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("className") String className, @Param("teacher") String teacher, @Param("filter") Integer filter,
-												  @Param("absent") Boolean absent, @Param("breach") Boolean breach, @Param("startScore") Double startScore,
+												  @Param("status") String status, @Param("breach") Boolean breach, @Param("startScore") Double startScore,
 												  @Param("endScore") Double endScore, @Param("subScore") Double subScore,
 												  @Param("endScore") Double endScore, @Param("subScore") Double subScore,
 												  @Param("objectiveScoreLt") Double objectiveScoreLt, @Param("studentName") String studentName,
 												  @Param("objectiveScoreLt") Double objectiveScoreLt, @Param("studentName") String studentName,
 												  @Param("studentCode") String studentCode, @Param("orderType") String orderType, @Param("orderField") String orderField);
 												  @Param("studentCode") String studentCode, @Param("orderType") String orderType, @Param("orderField") String orderField);

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

@@ -54,7 +54,7 @@ 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 className,
     IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college, String className,
-            String teacher, Integer filter, Boolean absent, Boolean breach, Double startScore, Double endScore,
+            String teacher, Integer filter, String status, Boolean breach, Double startScore, Double endScore,
             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);
 
 

+ 9 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -29,16 +29,14 @@ import com.qmth.teachcloud.mark.service.*;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.text.DecimalFormat;
 import java.text.DecimalFormat;
-import java.util.ArrayList;
+import java.util.*;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -379,7 +377,8 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         }
         }
         this.updateByMultiId(markGroup);
         this.updateByMultiId(markGroup);
 
 
-        boolean isEqual = compareMarkGroupQuestion(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber(), false), markGroupDto.getQuestions());
+        List<MarkQuestion> markQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber(), false);
+        boolean isEqual = compareMarkGroupQuestion(markQuestionList, markGroupDto.getQuestions());
         if (!isEqual) {
         if (!isEqual) {
             // 结构分组号
             // 结构分组号
             markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, examId, paperNumber, markGroupDto.getGroupNumber());
             markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, examId, paperNumber, markGroupDto.getGroupNumber());
@@ -387,6 +386,11 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
                 markQuestion.setGroupNumber(markGroupDto.getGroupNumber());
                 markQuestion.setGroupNumber(markGroupDto.getGroupNumber());
                 markQuestionService.updateById(markQuestion);
                 markQuestionService.updateById(markQuestion);
             }
             }
+
+            // 修改分组题目总分
+            List<MarkQuestion> updateMarkQuestionList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber(), false);
+            Double totalScore = updateMarkQuestionList.stream().collect(Collectors.summingDouble(MarkQuestion::getTotalScore));
+            markGroupService.updateTotalScore(examId, paperNumber, markGroupDto.getGroupNumber(), totalScore);
         }
         }
 
 
         // 更新MarkPaper中groupStatus
         // 更新MarkPaper中groupStatus

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

@@ -1,22 +1,5 @@
 package com.qmth.teachcloud.mark.service.impl;
 package com.qmth.teachcloud.mark.service.impl;
 
 
-import java.io.File;
-import java.nio.charset.StandardCharsets;
-import java.text.DecimalFormat;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.NotNull;
-
-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 org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.FileCopyUtils;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -69,6 +52,20 @@ import com.qmth.teachcloud.mark.service.*;
 import com.qmth.teachcloud.mark.utils.BatchGetDataUtil;
 import com.qmth.teachcloud.mark.utils.BatchGetDataUtil;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import com.qmth.teachcloud.mark.utils.ScoreCalculateUtil;
 import com.qmth.teachcloud.mark.utils.ScoreCalculateUtil;
+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 org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.FileCopyUtils;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.NotNull;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -190,7 +187,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
 
     @Override
     @Override
     public IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college,
     public IPage<StudentScoreDetailDto> pageStudentScore(Long examId, String paperNumber, String college,
-                                                         String className, String teacher, Integer filter, Boolean absent, 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 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) {
@@ -200,12 +197,20 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         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, className, teacher, filter, absent, breach, startScore, endScore, subScore,
+                paperNumber, college, className, teacher, filter, status, breach, startScore, endScore, subScore,
                 objectiveScoreLt, studentName, studentCode, orderType, orderField);
                 objectiveScoreLt, studentName, studentCode, orderType, orderField);
         for (StudentScoreDetailDto scoreDetailDto : studentScoreDetailDtoIPage.getRecords()) {
         for (StudentScoreDetailDto scoreDetailDto : studentScoreDetailDtoIPage.getRecords()) {
             // 原图
             // 原图
             scoreDetailDto.setSheetUrls(buildSheetUrls(scoreDetailDto.getStudentId()));
             scoreDetailDto.setSheetUrls(buildSheetUrls(scoreDetailDto.getStudentId()));
             scoreDetailDto.setSheetPath(null);
             scoreDetailDto.setSheetPath(null);
+            // 状态
+            if (ScanStatus.UNEXIST.equals(scoreDetailDto.getScanStatus())) {
+                scoreDetailDto.setStatusDisplay("未扫描");
+            } else if (ScanStatus.MANUAL_ABSENT.equals(scoreDetailDto.getScanStatus()) || scoreDetailDto.getAbsent() || scoreDetailDto.getOmrAbsent()) {
+                scoreDetailDto.setStatusDisplay("缺考");
+            } else if (!scoreDetailDto.getAbsent() && !scoreDetailDto.getOmrAbsent() && scoreDetailDto.getUpload() && ScanStatus.SCANNED.equals(scoreDetailDto.getScanStatus())) {
+                scoreDetailDto.setStatusDisplay("已扫描");
+            }
         }
         }
         return studentScoreDetailDtoIPage;
         return studentScoreDetailDtoIPage;
     }
     }

+ 0 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java

@@ -103,7 +103,6 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
         for (MarkUserGroupProgressDto record : markUserGroupProgressDtoIPage.getRecords()) {
         for (MarkUserGroupProgressDto record : markUserGroupProgressDtoIPage.getRecords()) {
             record.setGroupQuestions(markQuestionService.assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, record.getGroupNumber()));
             record.setGroupQuestions(markQuestionService.assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, record.getGroupNumber()));
             List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, record.getGroupNumber(), record.getUserId(), null);
             List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, record.getGroupNumber(), record.getUserId(), null);
-//            record.setTaskCount(markTaskList.size());
             record.setResetting(lockService.isLocked(LockType.MARKER_RESET, record.getMarkUserGroupId()));
             record.setResetting(lockService.isLocked(LockType.MARKER_RESET, record.getMarkUserGroupId()));
             record.setMarkedCount(markTaskService.markedCount(markTaskList));
             record.setMarkedCount(markTaskService.markedCount(markTaskList));
             MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, record.getGroupNumber());
             MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, record.getGroupNumber());

+ 12 - 11
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -67,7 +67,10 @@
             ms.sheet_path sheetPath,
             ms.sheet_path sheetPath,
             ms.exam_start_time examStartTime,
             ms.exam_start_time examStartTime,
             ms.exam_end_time examEndTime,
             ms.exam_end_time examEndTime,
-            ms.scan_status scanStatus
+            ms.scan_status scanStatus,
+            ms.is_absent absent,
+            ms.omr_absent omrAbsent,
+            ms.is_upload upload
         FROM
         FROM
             mark_student ms
             mark_student ms
                 left join sys_user su on ms.check_user_id = su.id
                 left join sys_user su on ms.check_user_id = su.id
@@ -95,13 +98,16 @@
                     </when>
                     </when>
                 </choose>
                 </choose>
             </if>
             </if>
-            <if test="absent != null">
+            <if test="status != null">
                 <choose>
                 <choose>
-                    <when test="absent == true">
+                    <when test="status == 'ABSENT'">
-                        AND (ms.is_absent = 1 OR ms.is_upload = 0)
+                        AND (ms.is_absent = 1 OR ms.omr_absent = 1 OR ms.scan_status = 'MANUAL_ABSENT')
+                    </when>
+                    <when test="status == 'NORMAL'">
+                        AND (ms.is_absent = 0 and ms.omr_absent = 0 and ms.scan_status = 'SCANNED' AND ms.is_upload = 1)
                     </when>
                     </when>
                     <otherwise>
                     <otherwise>
-                        AND (ms.is_absent = 0 AND ms.is_upload = 1)
+                        AND (ms.scan_status = 'UNEXIST')
                     </otherwise>
                     </otherwise>
                 </choose>
                 </choose>
             </if>
             </if>
@@ -181,11 +187,6 @@
                               ms.id = mt.student_id
                               ms.id = mt.student_id
                             AND mt.group_number = #{groupNumber})
                             AND mt.group_number = #{groupNumber})
     </select>
     </select>
-	<select id="findStudentCountByBatch" resultType="com.qmth.teachcloud.mark.bean.student.StudentVo">
-		SELECT t.*,t.paper_number coursePaperNumber
-		FROM mark_student t
-		WHERE t.exam_id=#{req.examId} and t.course_paper_id=#{req.coursePaperId} and t.student_code=#{req.studentCode}
-	</select>
 	<sql id="queryWhereAndOrder">
 	<sql id="queryWhereAndOrder">
         where t.exam_id=#{query.examId}
         where t.exam_id=#{query.examId}
         <if test="query.studentId != null and query.studentId !=''">
         <if test="query.studentId != null and query.studentId !=''">
@@ -269,7 +270,7 @@
         <include refid="queryWhereAndOrder"/>
         <include refid="queryWhereAndOrder"/>
         order by t.id
         order by t.id
     </select>
     </select>
-    <select id="querySummary" resultType="String">
+    <select id="querySummary" resultType="java.lang.String">
         select
         select
         t.id
         t.id
         from mark_student t
         from mark_student t