xiaofei 1 жил өмнө
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 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) String status,
                                    @ApiParam(value = "是否违纪") @RequestParam(required = false) Boolean breach,
                                    @ApiParam(value = "总分开始") @RequestParam(required = false) Double startScore,
                                    @ApiParam(value = "总分结束") @RequestParam(required = false) Double endScore,
@@ -60,7 +60,7 @@ public class MarkStudentController {
                                    @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, 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);
     }
 

+ 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 examEndTime;
     private ScanStatus scanStatus;
+    private Boolean absent;
+    private Boolean omrAbsent;
+    private String statusDisplay;
+    private Boolean upload;
 
     public Long getStudentId() {
         return studentId;
@@ -217,4 +221,36 @@ public class StudentScoreDetailDto {
     public void setScanStatus(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,
 												  @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("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);

+ 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);
 
     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,
             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 org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -379,7 +377,8 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         }
         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) {
             // 结构分组号
             markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, examId, paperNumber, markGroupDto.getGroupNumber());
@@ -387,6 +386,11 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
                 markQuestion.setGroupNumber(markGroupDto.getGroupNumber());
                 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

+ 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;
 
-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.JSONObject;
 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.Calculator;
 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>
@@ -190,7 +187,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
     @Override
     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,
                                                          String orderType, String orderField, Integer pageNumber, Integer pageSize) {
         if (startScore != null && endScore == null) {
@@ -200,12 +197,20 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         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);
         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);
         for (StudentScoreDetailDto scoreDetailDto : studentScoreDetailDtoIPage.getRecords()) {
             // 原图
             scoreDetailDto.setSheetUrls(buildSheetUrls(scoreDetailDto.getStudentId()));
             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;
     }

+ 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()) {
             record.setGroupQuestions(markQuestionService.assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, record.getGroupNumber()));
             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.setMarkedCount(markTaskService.markedCount(markTaskList));
             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.exam_start_time examStartTime,
             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
             mark_student ms
                 left join sys_user su on ms.check_user_id = su.id
@@ -95,13 +98,16 @@
                     </when>
                 </choose>
             </if>
-            <if test="absent != null">
+            <if test="status != null">
                 <choose>
-                    <when test="absent == true">
-                        AND (ms.is_absent = 1 OR ms.is_upload = 0)
+                    <when test="status == 'ABSENT'">
+                        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>
                     <otherwise>
-                        AND (ms.is_absent = 0 AND ms.is_upload = 1)
+                        AND (ms.scan_status = 'UNEXIST')
                     </otherwise>
                 </choose>
             </if>
@@ -181,11 +187,6 @@
                               ms.id = mt.student_id
                             AND mt.group_number = #{groupNumber})
     </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">
         where t.exam_id=#{query.examId}
         <if test="query.studentId != null and query.studentId !=''">
@@ -269,7 +270,7 @@
         <include refid="queryWhereAndOrder"/>
         order by t.id
     </select>
-    <select id="querySummary" resultType="String">
+    <select id="querySummary" resultType="java.lang.String">
         select
         t.id
         from mark_student t