Browse Source

3.3.1 分班阅逻辑修改

xiaofei 1 năm trước cách đây
mục cha
commit
7dd35501bb

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

@@ -41,8 +41,8 @@ public class MarkClassController extends BaseController {
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     public Result list(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
                        @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) {
-        List<MarkUserClassDto> markUserClassDtoList = markUserClassService.listMarkUserClassByExamIdAndPaperNumber(examId, paperNumber);
-        return ResultUtil.ok(markUserClassDtoList);
+        MarkUserClassDto markUserClassDto = markUserClassService.listMarkUserClassByExamIdAndPaperNumber(examId, paperNumber);
+        return ResultUtil.ok(markUserClassDto);
     }
 
     /**

+ 5 - 25
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkClassUserParams.java

@@ -1,7 +1,5 @@
 package com.qmth.teachcloud.common.bean.params.mark.setting;
 
-import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
-
 import java.io.Serializable;
 import java.util.List;
 
@@ -12,9 +10,7 @@ public class MarkClassUserParams implements Serializable {
 
     private Long examId;
     private String paperNumber;
-    private String className;
-    private Integer groupNumber;
-    private List<MarkUser> classMarkerList;
+    private List<MarkGroupClassUserParams> groupMarkerClass;
 
     public Long getExamId() {
         return examId;
@@ -32,27 +28,11 @@ public class MarkClassUserParams implements Serializable {
         this.paperNumber = paperNumber;
     }
 
-    public String getClassName() {
-        return className;
-    }
-
-    public void setClassName(String className) {
-        this.className = className;
-    }
-
-    public Integer getGroupNumber() {
-        return groupNumber;
-    }
-
-    public void setGroupNumber(Integer groupNumber) {
-        this.groupNumber = groupNumber;
-    }
-
-    public List<MarkUser> getClassMarkerList() {
-        return classMarkerList;
+    public List<MarkGroupClassUserParams> getGroupMarkerClass() {
+        return groupMarkerClass;
     }
 
-    public void setClassMarkerList(List<MarkUser> classMarkerList) {
-        this.classMarkerList = classMarkerList;
+    public void setGroupMarkerClass(List<MarkGroupClassUserParams> groupMarkerClass) {
+        this.groupMarkerClass = groupMarkerClass;
     }
 }

+ 40 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/mark/setting/MarkGroupClassUserParams.java

@@ -0,0 +1,40 @@
+package com.qmth.teachcloud.common.bean.params.mark.setting;
+
+import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分班阅保存分组请求参数
+ */
+public class MarkGroupClassUserParams implements Serializable {
+
+    private Integer groupNumber;
+    private MarkUser marker;
+    private List<String> markerClassList;
+
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public MarkUser getMarker() {
+        return marker;
+    }
+
+    public void setMarker(MarkUser marker) {
+        this.marker = marker;
+    }
+
+    public List<String> getMarkerClassList() {
+        return markerClassList;
+    }
+
+    public void setMarkerClassList(List<String> markerClassList) {
+        this.markerClassList = markerClassList;
+    }
+}

+ 45 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/setting/MarkUserClassDetailDto.java

@@ -0,0 +1,45 @@
+package com.qmth.teachcloud.mark.dto.mark.setting;
+
+import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
+
+import java.util.List;
+
+public class MarkUserClassDetailDto {
+
+    private Integer groupNumber;
+    private String groupQuestions;
+    private MarkUser marker;
+    private List<String> markerClassList;
+
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public String getGroupQuestions() {
+        return groupQuestions;
+    }
+
+    public void setGroupQuestions(String groupQuestions) {
+        this.groupQuestions = groupQuestions;
+    }
+
+    public MarkUser getMarker() {
+        return marker;
+    }
+
+    public void setMarker(MarkUser marker) {
+        this.marker = marker;
+    }
+
+    public List<String> getMarkerClassList() {
+        return markerClassList;
+    }
+
+    public void setMarkerClassList(List<String> markerClassList) {
+        this.markerClassList = markerClassList;
+    }
+}

+ 10 - 37
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/setting/MarkUserClassDto.java

@@ -6,49 +6,22 @@ import java.util.List;
 
 public class MarkUserClassDto {
 
-    private String className;
-    private Integer groupNumber;
-    private String groupQuestions;
-    private List<MarkUser> markerList;
-    private List<MarkUser> classMarkerList;
-
-    public String getClassName() {
-        return className;
-    }
-
-    public void setClassName(String className) {
-        this.className = className;
-    }
-
-    public Integer getGroupNumber() {
-        return groupNumber;
-    }
-
-    public void setGroupNumber(Integer groupNumber) {
-        this.groupNumber = groupNumber;
-    }
-
-    public String getGroupQuestions() {
-        return groupQuestions;
-    }
-
-    public void setGroupQuestions(String groupQuestions) {
-        this.groupQuestions = groupQuestions;
-    }
+    private List<MarkUserClassDetailDto> markerClass;
+    private List<String> classNames;
 
-    public List<MarkUser> getMarkerList() {
-        return markerList;
+    public List<MarkUserClassDetailDto> getMarkerClass() {
+        return markerClass;
     }
 
-    public void setMarkerList(List<MarkUser> markerList) {
-        this.markerList = markerList;
+    public void setMarkerClass(List<MarkUserClassDetailDto> markerClass) {
+        this.markerClass = markerClass;
     }
 
-    public List<MarkUser> getClassMarkerList() {
-        return classMarkerList;
+    public List<String> getClassNames() {
+        return classNames;
     }
 
-    public void setClassMarkerList(List<MarkUser> classMarkerList) {
-        this.classMarkerList = classMarkerList;
+    public void setClassNames(List<String> classNames) {
+        this.classNames = classNames;
     }
 }

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

@@ -21,6 +21,7 @@ import java.util.List;
 public interface MarkUserClassMapper extends BaseMapper<MarkUserClass> {
 
     List<MarkUser> listClassMarkerByExamIdAndPaperNumberAndGroupNumberAndClassName(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("className") String className);
+    List<MarkUserClass> listMarkerClassByExamIdAndPaperNumberAndGroupNumberAndUserId(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("userId") Long userId);
 
     IPage<MarkGroupClassProgressDto> pageClassByExamIdAndPaperNumber(@Param("page") Page<MarkGroupClassProgressDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 }

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

@@ -23,7 +23,7 @@ public interface MarkUserClassService extends IService<MarkUserClass> {
 
     void deleteByExamIdAndPaperNumber(Long examId, String paperNumber);
 
-    List<MarkUserClassDto> listMarkUserClassByExamIdAndPaperNumber(Long examId, String paperNumber);
+    MarkUserClassDto listMarkUserClassByExamIdAndPaperNumber(Long examId, String paperNumber);
 
     List<MarkUser> listClassMarkerByExamIdAndPaperNumberAndGroupNumberAndClassName(Long examId, String paperNumber, Integer groupNumber, String className);
 

+ 68 - 36
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserClassServiceImpl.java

@@ -6,27 +6,26 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
+import com.qmth.teachcloud.common.bean.params.mark.setting.MarkClassUserParams;
+import com.qmth.teachcloud.common.bean.params.mark.setting.MarkGroupClassUserParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupClassProgressDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupDto;
-import com.qmth.teachcloud.common.bean.dto.mark.MarkUser;
+import com.qmth.teachcloud.mark.dto.mark.setting.MarkUserClassDetailDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkUserClassDto;
-import com.qmth.teachcloud.common.bean.params.mark.setting.MarkClassUserParams;
-import com.qmth.teachcloud.mark.service.MarkQuestionService;
-import com.qmth.teachcloud.mark.service.MarkStudentService;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkUserClass;
 import com.qmth.teachcloud.mark.mapper.MarkUserClassMapper;
-import com.qmth.teachcloud.mark.service.MarkGroupService;
-import com.qmth.teachcloud.mark.service.MarkUserClassService;
-import com.qmth.teachcloud.mark.service.MarkUserGroupService;
+import com.qmth.teachcloud.mark.service.*;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -60,7 +59,7 @@ public class MarkUserClassServiceImpl extends ServiceImpl<MarkUserClassMapper, M
     }
 
     @Override
-    public List<MarkUserClassDto> listMarkUserClassByExamIdAndPaperNumber(Long examId, String paperNumber) {
+    public MarkUserClassDto listMarkUserClassByExamIdAndPaperNumber(Long examId, String paperNumber) {
         // 课程下所有班级数据
         List<String> paperNumberClassList = markStudentService.listClassByExamIdAndCourseCode(examId, paperNumber);
         // 课程下所有分组
@@ -73,21 +72,23 @@ public class MarkUserClassServiceImpl extends ServiceImpl<MarkUserClassMapper, M
             return markGroupDto;
         }).collect(Collectors.toList());
 
+        MarkUserClassDto markUserClassDto = new MarkUserClassDto();
+        markUserClassDto.setClassNames(paperNumberClassList);
 
-        List<MarkUserClassDto> markUserClassDtoList = new ArrayList<>();
-        for (String className : paperNumberClassList) {
-            for (MarkGroupDto markGroupDto : markGroupDtoList) {
-                MarkUserClassDto markUserClassDto = new MarkUserClassDto();
-                markUserClassDto.setClassName(className);
-                markUserClassDto.setGroupNumber(markGroupDto.getGroupNumber());
-                markUserClassDto.setGroupQuestions(markGroupDto.getGroupQuestions());
-                markUserClassDto.setMarkerList(markGroupDto.getMarkers());
-                // 班级+分组绑定的评卷员集合
-                markUserClassDto.setClassMarkerList(this.listClassMarkerByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, markGroupDto.getGroupNumber(), className));
-                markUserClassDtoList.add(markUserClassDto);
+        List<MarkUserClassDetailDto> markUserClassDetailDtos = new ArrayList<>();
+        for (MarkGroupDto markGroupDto : markGroupDtoList) {
+            for (MarkUser marker : markGroupDto.getMarkers()) {
+                MarkUserClassDetailDto markUserClassDetailDto = new MarkUserClassDetailDto();
+                markUserClassDetailDto.setGroupNumber(markGroupDto.getGroupNumber());
+                markUserClassDetailDto.setGroupQuestions(markGroupDto.getGroupQuestions());
+                markUserClassDetailDto.setMarker(marker);
+                List<MarkUserClass> markUserClasses = this.baseMapper.listMarkerClassByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, markGroupDto.getGroupNumber(), marker.getUserId());
+                markUserClassDetailDto.setMarkerClassList(markUserClasses.stream().map(MarkUserClass::getClassName).collect(Collectors.toList()));
+                markUserClassDetailDtos.add(markUserClassDetailDto);
             }
         }
-        return markUserClassDtoList;
+        markUserClassDto.setMarkerClass(markUserClassDetailDtos);
+        return markUserClassDto;
     }
 
     @Override
@@ -100,20 +101,49 @@ public class MarkUserClassServiceImpl extends ServiceImpl<MarkUserClassMapper, M
     public boolean saveMarkClassUser(MarkClassUserParams markClassUserParams) {
         Long examId = markClassUserParams.getExamId();
         String paperNumber = markClassUserParams.getPaperNumber();
-        String className = markClassUserParams.getClassName();
-        Integer groupNumber = markClassUserParams.getGroupNumber();
+
+        // 校验分组、班级是否绑定完成
+        List<String> listUserClass = markStudentService.listClassByExamIdAndCourseCode(examId, paperNumber);
+        if (CollectionUtils.isNotEmpty(listUserClass)) {
+            Map<Integer, Set<String>> groupBindClassMap = new HashMap<>();
+            for (MarkGroupClassUserParams groupUserClassInfo : markClassUserParams.getGroupMarkerClass()) {
+                Integer groupNumber = groupUserClassInfo.getGroupNumber();
+                if (!groupBindClassMap.containsKey(groupNumber)) {
+                    groupBindClassMap.put(groupNumber, new HashSet<>());
+                }
+                groupBindClassMap.get(groupNumber).addAll(groupUserClassInfo.getMarkerClassList());
+            }
+
+            if (!groupBindClassMap.isEmpty()) {
+                StringJoiner stringJoiner = new StringJoiner(";");
+                for (Map.Entry<Integer, Set<String>> entry : groupBindClassMap.entrySet()) {
+                    List<String> groupAllClass = listUserClass;
+                    groupAllClass.removeAll(entry.getValue());
+                    if (CollectionUtils.isNotEmpty(groupAllClass)) {
+                        stringJoiner.add(String.format("班级[%s]在分组[%s]中未被任何评卷员绑定", String.join(",", entry.getValue()), entry.getKey()));
+                    }
+                }
+                if (stringJoiner.toString().length() > 0) {
+                    throw ExceptionResultEnum.ERROR.exception(stringJoiner.toString());
+                }
+            }
+        }
+
         List<MarkUserClass> markUserClasses = new ArrayList<>();
-        for (MarkUser markUser : markClassUserParams.getClassMarkerList()) {
-            MarkUserClass markUserClass = new MarkUserClass();
-            markUserClass.setId(SystemConstant.getDbUuid());
-            markUserClass.setExamId(examId);
-            markUserClass.setPaperNumber(paperNumber);
-            markUserClass.setGroupNumber(groupNumber);
-            markUserClass.setClassName(className);
-            markUserClass.setUserId(markUser.getUserId());
-            markUserClasses.add(markUserClass);
+        for (MarkGroupClassUserParams groupUserClassInfo : markClassUserParams.getGroupMarkerClass()) {
+            for (String className : groupUserClassInfo.getMarkerClassList()) {
+                MarkUserClass markUserClass = new MarkUserClass();
+                markUserClass.setId(SystemConstant.getDbUuid());
+                markUserClass.setExamId(examId);
+                markUserClass.setPaperNumber(paperNumber);
+                markUserClass.setGroupNumber(groupUserClassInfo.getGroupNumber());
+                markUserClass.setClassName(className);
+                markUserClass.setUserId(groupUserClassInfo.getMarker().getUserId());
+                markUserClasses.add(markUserClass);
+            }
         }
-        this.deleteByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, className);
+        // 科目下所有数据同时提交
+        this.deleteByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, null, null);
         this.saveBatch(markUserClasses);
         return true;
     }
@@ -123,8 +153,10 @@ public class MarkUserClassServiceImpl extends ServiceImpl<MarkUserClassMapper, M
         UpdateWrapper<MarkUserClass> updateWrapper = new UpdateWrapper<>();
         LambdaUpdateWrapper<MarkUserClass> lambdaUpdateWrapper = updateWrapper.lambda();
         lambdaUpdateWrapper.eq(MarkUserClass::getExamId, examId)
-                .eq(MarkUserClass::getPaperNumber, paperNumber)
-                .eq(MarkUserClass::getGroupNumber, groupNumber);
+                .eq(MarkUserClass::getPaperNumber, paperNumber);
+        if (groupNumber != null) {
+            lambdaUpdateWrapper.eq(MarkUserClass::getGroupNumber, groupNumber);
+        }
         if (StringUtils.isNotBlank(className)) {
             lambdaUpdateWrapper.eq(MarkUserClass::getClassName, className);
         }

+ 12 - 0
teachcloud-mark/src/main/resources/mapper/MarkUserClassMapper.xml

@@ -42,5 +42,17 @@
           AND paper_number = #{paperNumber}
         ORDER BY group_number, class_name
     </select>
+    <select id="listMarkerClassByExamIdAndPaperNumberAndGroupNumberAndUserId"
+            resultType="com.qmth.teachcloud.mark.entity.MarkUserClass">
+        SELECT
+            muc.*
+        FROM
+            mark_user_class muc
+        WHERE
+            muc.exam_id = #{examId}
+          AND muc.paper_number = #{paperNumber}
+          AND muc.group_number = #{groupNumber}
+          AND muc.user_id = #{userId}
+    </select>
 
 </mapper>