Browse Source

3.4.5 update-20250428,bug修改

xiaofei 1 month ago
parent
commit
62b0e065aa

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArchiveStudentService.java

@@ -22,4 +22,6 @@ public interface MarkArchiveStudentService extends IService<MarkArchiveStudent>
     List<TaskQuestion> listTaskQuestionByStudentIds(List<Long> studentIds);
 
     List<StudentObjectiveAnswerDto> listStudentObjectiveAnswerDtoByExamIdAndPaperNumber(Long examId, String paperNumber);
+
+    List<TaskQuestion> listTaskQuestionByExamIdAndPaperNumber(Long examId, String paperNumber);
 }

+ 14 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArchiveStudentServiceImpl.java

@@ -58,4 +58,18 @@ public class MarkArchiveStudentServiceImpl extends ServiceImpl<MarkArchiveStuden
         }
         return Collections.emptyList();
     }
+
+    @Override
+    public List<TaskQuestion> listTaskQuestionByExamIdAndPaperNumber(Long examId, String paperNumber) {
+        QueryWrapper<MarkArchiveStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkArchiveStudent::getExamId, examId)
+                .eq(MarkArchiveStudent::getPaperNumber, paperNumber)
+                .isNotNull(MarkArchiveStudent::getSubjectiveQuestions)
+                .last(" limit 1");
+        MarkArchiveStudent markArchiveStudent = this.getOne(queryWrapper);
+        if (markArchiveStudent != null) {
+            return JSON.parseArray(markArchiveStudent.getSubjectiveQuestions(), TaskQuestion.class);
+        }
+        return Collections.emptyList();
+    }
 }

+ 169 - 76
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1317,91 +1317,184 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         //生成表头
         String[] columnName = new String[]{"姓名", "学号", "学院", "教学班", "行政班", "课程代码", "课程名称", "任课老师", "状态", "违纪状态", "客观分", "主观分", "成绩"};
-        List<MarkQuestion> oQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(query.getExamId(), query.getPaperNumber(), true);
-        List<MarkQuestion> sQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(query.getExamId(), query.getPaperNumber(), false);
-        List<String> columnNameList = new ArrayList<>(Arrays.asList(columnName));
-        Set<Integer> mainNumberSet = new HashSet<>();
-        for (MarkQuestion question : oQuestionList) {
-            if (!mainNumberSet.contains(question.getMainNumber())) {
-                columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "总分");
-                mainNumberSet.add(question.getMainNumber());
-            }
-            columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "选项");
-            columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "得分");
-            columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "满分");
-        }
-        for (MarkQuestion question : sQuestionList) {
-            if (!mainNumberSet.contains(question.getMainNumber())) {
-                columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "总分");
-                mainNumberSet.add(question.getMainNumber());
-            }
-            columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "选项");
-            columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "满分");
-        }
-        String[] columnNames = columnNameList.toArray(new String[0]);
-        // 使用成绩管理列表请求的数据权限
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), "/api/admin/mark/archive/score/list");
-        List<ArchiveStudentVo> ret = baseMapper.studentList(sysUser.getSchoolId(), query, dpr);
 
         //生成动态内容
         List<CellValue[]> columnValues = new ArrayList<>();
-        for (ArchiveStudentVo s : ret) {
-            List<CellValue> valueList = new ArrayList<>();
-            valueList.add(CellValue.of(s.getStudentName()));
-            valueList.add(CellValue.of(s.getStudentCode()));
-            valueList.add(CellValue.of(s.getCollegeName()));
-            valueList.add(CellValue.of(s.getTeachClassName()));
-            valueList.add(CellValue.of(s.getClassName()));
-            valueList.add(CellValue.of(s.getCourseCode()));
-            valueList.add(CellValue.of(s.getCourseName()));
-            valueList.add(CellValue.of(s.getTeacherName()));
-            String studentStatusDisplay = "";
-            // 扫描状态
-            if (BasicExamStudentStatusEnum.M.equals(s.getStudentStatus()) || s.getAbsent() || s.getOmrAbsent() || s.getManualAbsent()) {
-                studentStatusDisplay = "缺考";
-            } else if (ScanStatus.UNEXIST.equals(s.getScanStatus())) {
-                studentStatusDisplay = ScanStatus.UNEXIST.getName();
-            } else {
-                studentStatusDisplay = "正常";
-            }
-            s.setStudentStatusDisplay(studentStatusDisplay);
-            valueList.add(CellValue.of(studentStatusDisplay));
+        String[] columnNames;
+        if (markPaper.getArchive()) {
+            List<StudentObjectiveAnswerDto> oQuestionList = markArchiveStudentService.listStudentObjectiveAnswerDtoByExamIdAndPaperNumber(markPaper.getExamId(), markPaper.getPaperNumber());
+            List<TaskQuestion> sQuestionList = markArchiveStudentService.listTaskQuestionByExamIdAndPaperNumber(markPaper.getExamId(), markPaper.getPaperNumber());
+            List<String> columnNameList = new ArrayList<>(Arrays.asList(columnName));
+            Set<Integer> mainNumberSet = new HashSet<>();
+            for (StudentObjectiveAnswerDto question : oQuestionList) {
+                if (!mainNumberSet.contains(question.getMainNumber())) {
+                    columnNameList.add(question.getTitle() + " " + question.getMainNumber() + "总分");
+                    mainNumberSet.add(question.getMainNumber());
+                }
+                columnNameList.add(question.getTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "选项");
+                columnNameList.add(question.getTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "得分");
+                columnNameList.add(question.getTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "满分");
+            }
+            for (TaskQuestion question : sQuestionList) {
+                if (!mainNumberSet.contains(question.getMainNumber())) {
+                    columnNameList.add(question.getTitle() + " " + question.getMainNumber() + "总分");
+                    mainNumberSet.add(question.getMainNumber());
+                }
+                columnNameList.add(question.getTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "选项");
+                columnNameList.add(question.getTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "满分");
+            }
+            columnNames = columnNameList.toArray(new String[0]);
+            // 使用成绩管理列表请求的数据权限
+            DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), "/api/admin/mark/archive/score/list");
+            List<ArchiveStudentVo> ret = baseMapper.studentList(sysUser.getSchoolId(), query, dpr);
+
+            for (ArchiveStudentVo s : ret) {
+                List<CellValue> valueList = new ArrayList<>();
+                valueList.add(CellValue.of(s.getStudentName()));
+                valueList.add(CellValue.of(s.getStudentCode()));
+                valueList.add(CellValue.of(s.getCollegeName()));
+                valueList.add(CellValue.of(s.getTeachClassName()));
+                valueList.add(CellValue.of(s.getClassName()));
+                valueList.add(CellValue.of(s.getCourseCode()));
+                valueList.add(CellValue.of(s.getCourseName()));
+                valueList.add(CellValue.of(s.getTeacherName()));
+                String studentStatusDisplay = "";
+                // 扫描状态
+                if (BasicExamStudentStatusEnum.M.equals(s.getStudentStatus()) || s.getAbsent() || s.getOmrAbsent() || s.getManualAbsent()) {
+                    studentStatusDisplay = "缺考";
+                } else if (ScanStatus.UNEXIST.equals(s.getScanStatus())) {
+                    studentStatusDisplay = ScanStatus.UNEXIST.getName();
+                } else {
+                    studentStatusDisplay = "正常";
+                }
+                s.setStudentStatusDisplay(studentStatusDisplay);
+                valueList.add(CellValue.of(studentStatusDisplay));
 
-            String breachDisplay = "-";
-            // 违纪状态
-            if (BasicExamStudentStatusEnum.B.equals(s.getStudentStatus()) || s.getBreach() || s.getOmrBreach() || s.getManualBreach()) {
-                breachDisplay = "违纪";
+                String breachDisplay = "-";
+                // 违纪状态
+                if (BasicExamStudentStatusEnum.B.equals(s.getStudentStatus()) || s.getBreach() || s.getOmrBreach() || s.getManualBreach()) {
+                    breachDisplay = "违纪";
+                }
+                s.setBreachDisplay(breachDisplay);
+                valueList.add(CellValue.of(breachDisplay));
+
+                valueList.add(s.getObjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getObjectiveScore()));
+                valueList.add(s.getSubjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getSubjectiveScore()));
+                valueList.add(s.getTotalScore() == null ? CellValue.of("") : CellValue.of(s.getTotalScore()));
+                mainNumberSet = new HashSet<>();
+
+                MarkArchiveStudent markArchiveStudent = markArchiveStudentService.getById(s.getStudentId());
+                List<StudentObjectiveAnswerDto> objectQuestionList = JSON.parseArray(markArchiveStudent.getObjectiveQuestions(), StudentObjectiveAnswerDto.class);
+                List<TaskQuestion> subjectQuestionList = JSON.parseArray(markArchiveStudent.getSubjectiveQuestions(), TaskQuestion.class);
+                Map<Integer, Double> mainScoreMap = objectQuestionList.stream().collect(Collectors.groupingBy(
+                        StudentObjectiveAnswerDto::getMainNumber, Collectors.summingDouble(StudentObjectiveAnswerDto::getScore)));
+                for (StudentObjectiveAnswerDto item : objectQuestionList) {
+                    if (!mainNumberSet.contains(item.getMainNumber())) {
+                        valueList.add(CellValue.of(mainScoreMap.get(item.getMainNumber())));
+                        mainNumberSet.add(item.getMainNumber());
+                    }
+                    valueList.add(CellValue.of(item.getAnswer()));
+                    valueList.add(item.getScore() == null ? CellValue.of("") : CellValue.of(item.getScore()));
+                    valueList.add(item.getTotalScore() == null ? CellValue.of("") : CellValue.of(item.getTotalScore()));
+                }
+                mainScoreMap = subjectQuestionList.stream().collect(Collectors.groupingBy(
+                        TaskQuestion::getMainNumber, Collectors.summingDouble(TaskQuestion::getMarkerScore)));
+                for (TaskQuestion item : subjectQuestionList) {
+                    if (!mainNumberSet.contains(item.getMainNumber())) {
+                        valueList.add(CellValue.of(mainScoreMap.get(item.getMainNumber())));
+                        mainNumberSet.add(item.getMainNumber());
+                    }
+                    valueList.add(CellValue.of(item.getMarkerScore()));
+                    valueList.add(CellValue.of(item.getMaxScore()));
+                }
+                CellValue[] columnValue = valueList.toArray(new CellValue[0]);
+                columnValues.add(columnValue);
             }
-            s.setBreachDisplay(breachDisplay);
-            valueList.add(CellValue.of(breachDisplay));
+        } else {
+            List<MarkQuestion> oQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(query.getExamId(), query.getPaperNumber(), true);
+            List<MarkQuestion> sQuestionList = markQuestionService.listByExamIdAndPaperNumberAndObjective(query.getExamId(), query.getPaperNumber(), false);
+            List<String> columnNameList = new ArrayList<>(Arrays.asList(columnName));
+            Set<Integer> mainNumberSet = new HashSet<>();
+            for (MarkQuestion question : oQuestionList) {
+                if (!mainNumberSet.contains(question.getMainNumber())) {
+                    columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "总分");
+                    mainNumberSet.add(question.getMainNumber());
+                }
+                columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "选项");
+                columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "得分");
+                columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "满分");
+            }
+            for (MarkQuestion question : sQuestionList) {
+                if (!mainNumberSet.contains(question.getMainNumber())) {
+                    columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "总分");
+                    mainNumberSet.add(question.getMainNumber());
+                }
+                columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "选项");
+                columnNameList.add(question.getMainTitle() + " " + question.getMainNumber() + "-" + question.getSubNumber() + "满分");
+            }
+            columnNames = columnNameList.toArray(new String[0]);
+            // 使用成绩管理列表请求的数据权限
+            DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), "/api/admin/mark/archive/score/list");
+            List<ArchiveStudentVo> ret = baseMapper.studentList(sysUser.getSchoolId(), query, dpr);
+
+            for (ArchiveStudentVo s : ret) {
+                List<CellValue> valueList = new ArrayList<>();
+                valueList.add(CellValue.of(s.getStudentName()));
+                valueList.add(CellValue.of(s.getStudentCode()));
+                valueList.add(CellValue.of(s.getCollegeName()));
+                valueList.add(CellValue.of(s.getTeachClassName()));
+                valueList.add(CellValue.of(s.getClassName()));
+                valueList.add(CellValue.of(s.getCourseCode()));
+                valueList.add(CellValue.of(s.getCourseName()));
+                valueList.add(CellValue.of(s.getTeacherName()));
+                String studentStatusDisplay = "";
+                // 扫描状态
+                if (BasicExamStudentStatusEnum.M.equals(s.getStudentStatus()) || s.getAbsent() || s.getOmrAbsent() || s.getManualAbsent()) {
+                    studentStatusDisplay = "缺考";
+                } else if (ScanStatus.UNEXIST.equals(s.getScanStatus())) {
+                    studentStatusDisplay = ScanStatus.UNEXIST.getName();
+                } else {
+                    studentStatusDisplay = "正常";
+                }
+                s.setStudentStatusDisplay(studentStatusDisplay);
+                valueList.add(CellValue.of(studentStatusDisplay));
 
-            valueList.add(s.getObjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getObjectiveScore()));
-            valueList.add(s.getSubjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getSubjectiveScore()));
-            valueList.add(s.getTotalScore() == null ? CellValue.of("") : CellValue.of(s.getTotalScore()));
-            mainNumberSet = new HashSet<>();
-            Map<Integer, Double> mainScoreMap = s.getScoreList(true, oQuestionList).stream().collect(Collectors.groupingBy(
-                    ScoreItem::getMainNumber, Collectors.summingDouble(ScoreItem::getScore)));
-            for (ScoreItem item : s.getScoreList(true, oQuestionList)) {
-                if (!mainNumberSet.contains(item.getMainNumber())) {
-                    valueList.add(CellValue.of(mainScoreMap.get(item.getMainNumber())));
-                    mainNumberSet.add(item.getMainNumber());
+                String breachDisplay = "-";
+                // 违纪状态
+                if (BasicExamStudentStatusEnum.B.equals(s.getStudentStatus()) || s.getBreach() || s.getOmrBreach() || s.getManualBreach()) {
+                    breachDisplay = "违纪";
                 }
-                valueList.add(CellValue.of(item.getAnswer()));
-                valueList.add(item.getScore() == null ? CellValue.of("") : CellValue.of(item.getScore()));
-                valueList.add(item.getTotalScore() == null ? CellValue.of("") : CellValue.of(item.getTotalScore()));
-            }
-            mainScoreMap = s.getScoreList(false, sQuestionList).stream().collect(Collectors.groupingBy(
-                    ScoreItem::getMainNumber, Collectors.summingDouble(ScoreItem::getScore)));
-            for (ScoreItem item : s.getScoreList(false, sQuestionList)) {
-                if (!mainNumberSet.contains(item.getMainNumber())) {
-                    valueList.add(CellValue.of(mainScoreMap.get(item.getMainNumber())));
-                    mainNumberSet.add(item.getMainNumber());
+                s.setBreachDisplay(breachDisplay);
+                valueList.add(CellValue.of(breachDisplay));
+
+                valueList.add(s.getObjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getObjectiveScore()));
+                valueList.add(s.getSubjectiveScore() == null ? CellValue.of("") : CellValue.of(s.getSubjectiveScore()));
+                valueList.add(s.getTotalScore() == null ? CellValue.of("") : CellValue.of(s.getTotalScore()));
+                mainNumberSet = new HashSet<>();
+                Map<Integer, Double> mainScoreMap = s.getScoreList(true, oQuestionList).stream().collect(Collectors.groupingBy(
+                        ScoreItem::getMainNumber, Collectors.summingDouble(ScoreItem::getScore)));
+                for (ScoreItem item : s.getScoreList(true, oQuestionList)) {
+                    if (!mainNumberSet.contains(item.getMainNumber())) {
+                        valueList.add(CellValue.of(mainScoreMap.get(item.getMainNumber())));
+                        mainNumberSet.add(item.getMainNumber());
+                    }
+                    valueList.add(CellValue.of(item.getAnswer()));
+                    valueList.add(item.getScore() == null ? CellValue.of("") : CellValue.of(item.getScore()));
+                    valueList.add(item.getTotalScore() == null ? CellValue.of("") : CellValue.of(item.getTotalScore()));
                 }
-                valueList.add(CellValue.of(item.getScore()));
-                valueList.add(item.getTotalScore() == null ? CellValue.of("") : CellValue.of(item.getTotalScore()));
+                mainScoreMap = s.getScoreList(false, sQuestionList).stream().collect(Collectors.groupingBy(
+                        ScoreItem::getMainNumber, Collectors.summingDouble(ScoreItem::getScore)));
+                for (ScoreItem item : s.getScoreList(false, sQuestionList)) {
+                    if (!mainNumberSet.contains(item.getMainNumber())) {
+                        valueList.add(CellValue.of(mainScoreMap.get(item.getMainNumber())));
+                        mainNumberSet.add(item.getMainNumber());
+                    }
+                    valueList.add(CellValue.of(item.getScore()));
+                    valueList.add(item.getTotalScore() == null ? CellValue.of("") : CellValue.of(item.getTotalScore()));
+                }
+                CellValue[] columnValue = valueList.toArray(new CellValue[0]);
+                columnValues.add(columnValue);
             }
-            CellValue[] columnValue = valueList.toArray(new CellValue[0]);
-            columnValues.add(columnValue);
         }
 
         String rootPath = null;