瀏覽代碼

3.3.0 fix

xiaofei 1 年之前
父節點
當前提交
9aeac34198

+ 47 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/setting/MarkGroupUserDto.java

@@ -0,0 +1,47 @@
+package com.qmth.teachcloud.mark.dto.mark.setting;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+
+import java.util.List;
+
+public class MarkGroupUserDto {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+    private String paperNumber;
+    private List<MarkGroupDto> groups;
+    private Boolean openMarkClass;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public List<MarkGroupDto> getGroups() {
+        return groups;
+    }
+
+    public void setGroups(List<MarkGroupDto> groups) {
+        this.groups = groups;
+    }
+
+    public Boolean getOpenMarkClass() {
+        return openMarkClass;
+    }
+
+    public void setOpenMarkClass(Boolean openMarkClass) {
+        this.openMarkClass = openMarkClass;
+    }
+}

+ 39 - 7
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -33,6 +33,7 @@ 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.stream.Collectors;
@@ -374,16 +375,21 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         markGroup.setPicList(CardFile.getMarkConfigAdd(markGroupDto.getPictureConfigs(), 0.015));
         this.updateByMultiId(markGroup);
 
-        // 结构分组号
-        markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, examId, paperNumber, markGroupDto.getGroupNumber());
-        for (MarkQuestion markQuestion : markGroupDto.getQuestions()) {
-            markQuestion.setGroupNumber(markGroupDto.getGroupNumber());
-            markQuestionService.updateById(markQuestion);
+        boolean isEqual = compareMarkGroupQuestion(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber(), false), markGroupDto.getQuestions());
+        if (!isEqual) {
+            // 结构分组号
+            markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, examId, paperNumber, markGroupDto.getGroupNumber());
+            for (MarkQuestion markQuestion : markGroupDto.getQuestions()) {
+                markQuestion.setGroupNumber(markGroupDto.getGroupNumber());
+                markQuestionService.updateById(markQuestion);
+            }
         }
 
         // 更新MarkPaper中groupStatus
         markService.updateMarkGroupStatus(examId, paperNumber);
 
+//        List<MarkUserGroup>
+
         List<MarkUserGroup> markUserGroupList = markUserGroupService.listByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber());
         if (CollectionUtils.isNotEmpty(markUserGroupList)) {
             List<Long> userIds = markUserGroupList.stream().map(MarkUserGroup::getUserId).collect(Collectors.toList());
@@ -399,8 +405,9 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
             }
         }
 
-        // 单双评切换、开启双评且双评比例值修改过,则删除任务
-        if (!doubleEnable.equals(markGroupDto.getDoubleEnable())
+        // 增加或减少分组内题目数量和题目变动、单双评切换、开启双评且双评比例值修改过。则删除任务
+        if (isEqual ||
+                !doubleEnable.equals(markGroupDto.getDoubleEnable())
                 || (markGroupDto.getDoubleEnable() && (doubleRate == null || markGroupDto.getDoubleRate().doubleValue() != markGroup.getDoubleRate().doubleValue()))) {
             if (lockService.trylock(LockType.GROUP_DELETE, examId, paperNumber, markGroupDto.getGroupNumber())) {
                 markSyncService.deleteMarkGroup(markGroup, false);
@@ -408,6 +415,31 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         }
     }
 
+    /**
+     * 校验修改前后分组内题目是否一致
+     *
+     * @param oldQuestions 修改前题目
+     * @param questions    修改后题目
+     * @return boolean
+     */
+    private boolean compareMarkGroupQuestion(List<MarkQuestion> oldQuestions, List<MarkQuestion> questions) {
+        if (CollectionUtils.isEmpty(oldQuestions) || CollectionUtils.isEmpty(questions)) {
+            throw ExceptionResultEnum.ERROR.exception("评卷题目异常");
+        }
+        List<String> oldQuestionNumbers = oldQuestions.stream().map(m -> m.getMainNumber() + "." + m.getSubNumber()).collect(Collectors.toList());
+        List<String> questionNumbers = questions.stream().map(m -> m.getMainNumber() + "." + m.getSubNumber()).collect(Collectors.toList());
+        // 不相同,返回false
+        if (!CollectionUtils.isEqualCollection(oldQuestionNumbers, questionNumbers)) {
+            return false;
+        }
+        // 取交集,与其中任意一个list不相同,返回false
+        List<String> intersectionList = (List<String>) CollectionUtils.intersection(oldQuestionNumbers, questionNumbers);
+        if (CollectionUtils.isEmpty(intersectionList) || !CollectionUtils.isEqualCollection(oldQuestionNumbers, intersectionList)) {
+            return false;
+        }
+        return true;
+    }
+
     @Override
     public void updateTaskCount(Long examId, String paperNumber, Integer groupNumber, int taskCount) {
         UpdateWrapper<MarkGroup> updateWrapper = new UpdateWrapper<>();

+ 15 - 30
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -809,36 +809,25 @@ public class MarkServiceImpl implements MarkService {
     @Override
     public void deleteMarkGroup(MarkGroup markGroup, boolean deleteGroupInfo) {
         // 正评相关数据
-        markTrackService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
-                markGroup.getNumber());
-        markSpecialTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
-        markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber(), null);
-        markHeaderTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
-        markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
-        markProblemHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
-        markTaskService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
-                markGroup.getNumber());
+        markTrackService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markSpecialTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber(), null);
+        markHeaderTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markProblemHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markTaskService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
         // 考生分组状态与得分明细
-        markGroupStudentService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
-        markSubjectiveScoreService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
+        markGroupStudentService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markSubjectiveScoreService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
         // 删除分组
         releaseByMarkGroup(markGroup);
+        // 删除分组时,同步删除评卷员、分组等信息
         if (deleteGroupInfo) {
             // 评卷员数据
-            markUserGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                    markGroup.getPaperNumber(), markGroup.getNumber());
+            markUserGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
             // 小题数据
-            markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, markGroup.getExamId(),
-                    markGroup.getPaperNumber(), markGroup.getNumber());
-            markGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
-                    markGroup.getNumber());
+            markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+            markGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
             // 更新MarkPaper中groupStatus
             updateMarkGroupStatus(markGroup.getExamId(), markGroup.getPaperNumber());
         }
@@ -846,17 +835,13 @@ public class MarkServiceImpl implements MarkService {
         // 未分组的题目
         long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(
                 markGroup.getExamId(), markGroup.getPaperNumber(), false);
-
         // 考生整体状态与总分更新
         long groupCount = markGroupService.countByExamIdAndPaperNumber(markGroup.getExamId(), markGroup.getPaperNumber());
         if (groupCount == 0 || unGroupQuestionCount > 0) {
-            markStudentService.updateSubjectiveStatusAndScore(markGroup.getExamId(), markGroup.getPaperNumber(),
-                    SubjectiveStatus.UNMARK, 0D, null);
-//            inspectHistoryService.deleteByExamIdAndSubjectCode(group.getExamId(), group.getSubjectCode());
+            markStudentService.updateSubjectiveStatusAndScore(markGroup.getExamId(), markGroup.getPaperNumber(), SubjectiveStatus.UNMARK, 0D, null);
         } else {
             List<Long> studentList = markStudentService.findIdByExamIdAndPaperNumberAndSubjectiveStatus(
-                    markGroup.getExamId(), markGroup.getPaperNumber(), SubjectiveStatus.UNMARK,
-                    SubjectiveStatus.MARKED);
+                    markGroup.getExamId(), markGroup.getPaperNumber(), SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
             for (Long studentId : studentList) {
                 checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
             }