瀏覽代碼

3.3.0 fix

xiaofei 1 年之前
父節點
當前提交
7e7482ddca

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

@@ -1,47 +0,0 @@
-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;
-    }
-}

+ 47 - 19
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -388,33 +388,61 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         // 更新MarkPaper中groupStatus
         // 更新MarkPaper中groupStatus
         markService.updateMarkGroupStatus(examId, paperNumber);
         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());
-            List<MarkUserGroup> markUserGroups = new ArrayList<>();
-            for (MarkUser marker : markGroupDto.getMarkers()) {
-                if (userIds.contains(marker.getUserId())) {
-                    continue;
-                }
-                markUserGroups.add(new MarkUserGroup(examId, paperNumber, markGroupDto.getGroupNumber(), marker.getUserId()));
-            }
-            if (CollectionUtils.isNotEmpty(markUserGroups)) {
-                markUserGroupService.saveBatch(markUserGroups);
-            }
-        }
+        boolean isClear = isEqual || !doubleEnable.equals(markGroupDto.getDoubleEnable()) || (markGroupDto.getDoubleEnable() && (doubleRate == null || markGroupDto.getDoubleRate().doubleValue() != markGroup.getDoubleRate().doubleValue()));
+        updateMarkUserGroup(isClear, examId, paperNumber, markGroupDto);
 
 
         // 增加或减少分组内题目数量和题目变动、单双评切换、开启双评且双评比例值修改过。则删除任务
         // 增加或减少分组内题目数量和题目变动、单双评切换、开启双评且双评比例值修改过。则删除任务
-        if (isEqual ||
-                !doubleEnable.equals(markGroupDto.getDoubleEnable())
-                || (markGroupDto.getDoubleEnable() && (doubleRate == null || markGroupDto.getDoubleRate().doubleValue() != markGroup.getDoubleRate().doubleValue()))) {
+        if (isClear) {
             if (lockService.trylock(LockType.GROUP_DELETE, examId, paperNumber, markGroupDto.getGroupNumber())) {
             if (lockService.trylock(LockType.GROUP_DELETE, examId, paperNumber, markGroupDto.getGroupNumber())) {
                 markSyncService.deleteMarkGroup(markGroup, false);
                 markSyncService.deleteMarkGroup(markGroup, false);
             }
             }
         }
         }
     }
     }
 
 
+    private void updateMarkUserGroup(boolean isClear, Long examId, String paperNumber, MarkGroupDto markGroupDto) {
+        List<MarkUser> markUserList = markGroupDto.getMarkers();
+        if (CollectionUtils.isEmpty(markUserList)) {
+            throw ExceptionResultEnum.ERROR.exception("请选择评卷员");
+        }
+        List<MarkUserGroup> markUserGroupList = markUserGroupService.listByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber());
+        if (CollectionUtils.isEmpty(markUserGroupList)) {
+            markUserGroupList = new ArrayList<>();
+        }
+        List<Long> oldUserIds = markUserGroupList.stream().map(MarkUserGroup::getUserId).collect(Collectors.toList());
+        List<Long> userIds = markUserList.stream().map(MarkUser::getUserId).collect(Collectors.toList());
+
+        // 需要删除的用户
+        Collection<Long> deleteUserIds = CollectionUtils.subtract(oldUserIds, userIds);
+        if (CollectionUtils.isNotEmpty(deleteUserIds)) {
+            markUserGroupList.stream().filter(m -> deleteUserIds.contains(m.getUserId())).forEach(m -> {
+                markUserGroupService.deleteMarker(m.getId());
+            });
+        }
+
+        // 需要新增的用户
+        List<MarkUserGroup> markUserGroups = new ArrayList<>();
+        Collection<Long> addUserIds = CollectionUtils.subtract(userIds, oldUserIds);
+        for (Long addUserId : addUserIds) {
+            markUserGroups.add(new MarkUserGroup(examId, paperNumber, markGroupDto.getGroupNumber(), addUserId));
+        }
+        if (CollectionUtils.isNotEmpty(markUserGroups)) {
+            markUserGroupService.saveBatch(markUserGroups);
+        }
+
+        if (isClear) {
+            // 需要修改的用户
+            Collection<Long> updateUserIds = CollectionUtils.intersection(oldUserIds, userIds);
+            if (CollectionUtils.isNotEmpty(updateUserIds)) {
+                markUserGroupList.stream().filter(m -> updateUserIds.contains(m.getUserId())).forEach(m -> {
+                    markUserGroupService.resetById(m.getId());
+                });
+            }
+
+            this.updateMarkedCount(examId, paperNumber, markGroupDto.getGroupNumber(), 0);
+        }
+
+    }
+
     /**
     /**
      * 校验修改前后分组内题目是否一致
      * 校验修改前后分组内题目是否一致
      *
      *