浏览代码

3.3.1 update

xiaofei 1 年之前
父节点
当前提交
0d24966a35

+ 2 - 1
distributed-print/install/mysql/init/teachcloud_db.sql

@@ -3194,7 +3194,7 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (947, '列表', 'List', 'LIST', 946, 1, 'AUTH', '952', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (948, '查询条件', 'Condition', 'CONDITION', 946, 2, 'AUTH', NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (949, '查询', 'Select', 'BUTTON', 946, 3, 'AUTH', '952', 1, 0, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (950, '查看详情', 'Detail', 'LINK', 946, 4, 'AUTH', '953,954,955,956,957,958,959,960,969', 1, 0, 1);
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (950, '查看详情', 'Detail', 'LINK', 946, 4, 'AUTH', '953,954,955,956,957,958,959,960,969,1139', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (951, '查看签到表', 'PackageDetail', 'LINK', 946, 5, 'AUTH', '961', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (952, '列表获取', '/api/admin/mark/setting/scoreList', 'URL', 946, 1, 'AUTH', NULL, 1, 1, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (953, '详情列表', '/api/admin/mark/student/score', 'URL', 946, 2, 'AUTH', NULL, 1, 1, 1);
@@ -3294,6 +3294,7 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (1136, '主观题导入', '/api/admin/mark/setting/subjective_struct/import', 'URL', '897', '18', 'AUTH',NULL, '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (1137, '客观题导入', 'ObjectiveStructImport', 'BUTTON', '897', '6', 'AUTH', '1135', '1', '0', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (1138, '主观题导入', 'SubjectiveStructImport', 'BUTTON', '897', '7', 'AUTH', '1136', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (1139, '轨迹图查询题卡内容', '/api/admin/mark/track/getCard', 'URL', '946', '12', 'AUTH',NULL, '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (2000, '目标达成度', 'TargetDegreeManage', 'MENU', NULL, 13, NULL, NULL, 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (2001, '成绩管理', 'TargetScoreManage', 'MENU', 2000, 1, NULL, '2003,2004,2005', 1, 0, 1);
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (2002, '报告管理', 'TargetReportManage', 'MENU', 2000, 2, NULL, '2021,2022,2023', 1, 0, 1);

+ 4 - 1
distributed-print/install/mysql/upgrade/3.3.1.sql

@@ -765,4 +765,7 @@ ALTER TABLE t_c_usual_score MODIFY COLUMN course_name varchar(100) NULL COMMENT
 ALTER TABLE t_c_final_score MODIFY COLUMN course_name varchar(100) NULL COMMENT '课程名称';
 ALTER TABLE t_c_paper_struct MODIFY COLUMN course_name varchar(100) NULL COMMENT '课程名称';
 ALTER TABLE t_r_basic_info MODIFY COLUMN course_name varchar(100) NULL COMMENT '课程名称';
-ALTER TABLE t_r_basic_info MODIFY COLUMN teaching_object varchar(1000) NULL COMMENT '授课对象';
+ALTER TABLE t_r_basic_info MODIFY COLUMN teaching_object varchar(1000) NULL COMMENT '授课对象';
+
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1139', '轨迹图查询题卡内容', '/api/admin/mark/track/getCard', 'URL', '946', '12', 'AUTH', '1', '1', '1');
+UPDATE `sys_privilege` SET `related` = '953,954,955,956,957,958,959,960,969,1139' WHERE (`id` = '950');

+ 9 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/entrance/MarkEntranceDto.java

@@ -15,6 +15,7 @@ public class MarkEntranceDto {
     private String courseName;
     private String paperNumber;
     private String groupQuestions;
+    private String className;
     private Integer taskCount;
     private Integer markedCount;
     private Integer leftCount;
@@ -71,6 +72,14 @@ public class MarkEntranceDto {
         this.groupQuestions = groupQuestions;
     }
 
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
     public Integer getTaskCount() {
         return taskCount;
     }

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.mapper;
 
 import java.util.List;
 
+import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import org.apache.ibatis.annotations.Param;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -38,4 +39,6 @@ public interface MarkTaskMapper extends BaseMapper<MarkTask> {
 			@Param("userId")Long userId);
 
     List<MarkTask> listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("userId") Long userId, @Param("className") String className);
+
+    int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("userId") Long userId, @Param("classNames") List<String> classNames, @Param("statusList") MarkTaskStatus[] statusList);
 }

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

@@ -48,9 +48,7 @@ public interface MarkTaskService extends IService<MarkTask> {
 
 	int countByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
 
-	int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(Long examId, String paperNumber, Integer groupNumber, Long userId, MarkTaskStatus... status);
-	int countProblemByExamIdAndPaperNumberAndGroupNumberAndStatusIn(Long examId, String paperNumber, Integer groupNumber, MarkTaskStatus... status);
-
+	int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(Long examId, String paperNumber, Integer groupNumber, Long userId, List<String> className, MarkTaskStatus... status);
     void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
 
 	IPage<MarkTask> listPageHistory(Page<MarkTask> page, Long userId, Long examId, String paperNumber,

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

@@ -34,4 +34,6 @@ public interface MarkUserClassService extends IService<MarkUserClass> {
     List<MarkUserClass> listByExamIdAndPaperNumber(Long examId, String paperNumber);
 
     IPage<MarkGroupClassProgressDto> pageClassByExamIdAndPaperNumber(Page<MarkGroupClassProgressDto> page, Long examId, String paperNumber);
+
+    List<MarkUserClass> listByExamIdAndPaperNumberAndUserId(Long examId, String paperNumber, Long userId);
 }

+ 27 - 29
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -211,37 +211,35 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         if (markPaper.getOpenMarkClass()) {
             Page<MarkGroupClassProgressDto> page = new Page<>(pageNumber, pageSize);
             IPage<MarkGroupClassProgressDto> markGroupClassProgressDtoIPage = markUserClassService.pageClassByExamIdAndPaperNumber(page, examId, paperNumber);
-            List<MarkGroup> markGroupList = markGroupService.listGroupByExamIdAndPaperNumber(examId, paperNumber);
-            for (MarkGroup markGroup : markGroupList) {
-                Integer groupNumber = markGroup.getNumber();
-                for (MarkGroupClassProgressDto markGroupClassProgressDto : markGroupClassProgressDtoIPage.getRecords()) {
-                    List<MarkTask> totalMarkTaskList = new ArrayList<>();
-                    List<MarkUser> totalMarkUserList = new ArrayList<>();
-                    int count = 0;
-                    totalMarkTaskList.addAll(markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, groupNumber, null, markGroupClassProgressDto.getClassName()));
-                    totalMarkUserList.addAll(markUserGroupService.listGroupUserByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName()));
-
-                    markGroup.setQuestionList(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber, false));
-                    List<MarkUser> markUserList = markUserClassService.listClassMarkerByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName());
-                    for (MarkUser markUser : markUserList) {
-                        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, markUser.getUserId());
-                        if (markUserGroup != null) {
-                            int markerCount = markService.applyCurrentCount(markGroup);
-                            count += markerCount;
-                        }
+            for (MarkGroupClassProgressDto markGroupClassProgressDto : markGroupClassProgressDtoIPage.getRecords()) {
+                Integer groupNumber = markGroupClassProgressDto.getGroupNumber();
+                List<MarkTask> totalMarkTaskList = new ArrayList<>();
+                List<MarkUser> totalMarkUserList = new ArrayList<>();
+                totalMarkTaskList.addAll(markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, groupNumber, null, markGroupClassProgressDto.getClassName()));
+                totalMarkUserList.addAll(markUserGroupService.listGroupUserByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName()));
+
+                MarkGroup markGroup = this.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
+                markGroup.setQuestionList(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber, false));
+                List<MarkUser> markUserList = markUserClassService.listClassMarkerByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName());
+                int count = 0;
+                for (MarkUser markUser : markUserList) {
+                    MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, markUser.getUserId());
+                    if (markUserGroup != null) {
+                        int markerCount = markService.applyCurrentCount(markGroup, markUserGroup.getId());
+                        count += markerCount;
                     }
-
-                    // 待仲裁数量
-                    int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName());
-                    markGroupClassProgressDto.setGroupQuestions(markGroup.getGroupQuestions());
-                    markGroupClassProgressDto.setMarkerCount(totalMarkUserList.size());
-                    markGroupClassProgressDto.setTaskCount(totalMarkTaskList.size());
-                    markGroupClassProgressDto.setMarkedCount(markTaskService.markedCount(totalMarkTaskList));
-                    markGroupClassProgressDto.setLeftCount(markGroupClassProgressDto.getTaskCount() - markGroupClassProgressDto.getMarkedCount());
-                    markGroupClassProgressDto.setCurrentCount(count);
-                    markGroupClassProgressDto.setPercent(Calculator.divide2String(Calculator.multiply(markGroupClassProgressDto.getMarkedCount(), 100), Double.valueOf(markGroupClassProgressDto.getTaskCount()), 2));
-                    markGroupClassProgressDto.setArbitrateCount(arbitrateCount);
                 }
+
+                // 待仲裁数量
+                int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName());
+                markGroupClassProgressDto.setGroupQuestions(markGroup.getGroupQuestions());
+                markGroupClassProgressDto.setMarkerCount(totalMarkUserList.size());
+                markGroupClassProgressDto.setTaskCount(totalMarkTaskList.size());
+                markGroupClassProgressDto.setMarkedCount(markTaskService.markedCount(totalMarkTaskList));
+                markGroupClassProgressDto.setLeftCount(markGroupClassProgressDto.getTaskCount() - markGroupClassProgressDto.getMarkedCount());
+                markGroupClassProgressDto.setCurrentCount(count);
+                markGroupClassProgressDto.setPercent(Calculator.divide2String(Calculator.multiply(markGroupClassProgressDto.getMarkedCount(), 100), Double.valueOf(markGroupClassProgressDto.getTaskCount()), 2));
+                markGroupClassProgressDto.setArbitrateCount(arbitrateCount);
             }
             return markGroupClassProgressDtoIPage;
         }

+ 16 - 11
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -808,19 +808,24 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     public MarkStatusDto getStatus(Long userId, Long examId, String paperNumber, Integer groupNumber) {
-        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId,
-                paperNumber, groupNumber, userId);
         MarkStatusDto dto = new MarkStatusDto();
-        dto.setArbitrateCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(examId,
-                paperNumber, groupNumber, null, MarkTaskStatus.WAIT_ARBITRATE));
-        dto.setMarkedCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId, paperNumber,
-                markUserGroup.getGroupNumber(), Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED)));
-        dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(examId,
-                paperNumber, groupNumber, userId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        List<String> classNames = null;
+        if (markPaper != null && markPaper.getOpenMarkClass() != null && markPaper.getOpenMarkClass().booleanValue()) {
+            List<MarkUserClass> markUserClassList = markUserClassService.listByExamIdAndPaperNumberAndUserId(examId, paperNumber, userId);
+            if (CollectionUtils.isNotEmpty(markUserClassList)) {
+                classNames = markUserClassList.stream().map(MarkUserClass::getClassName).collect(Collectors.toList());
+            }
+        }
+        dto.setArbitrateCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId,
+                paperNumber, groupNumber, null, classNames, MarkTaskStatus.WAIT_ARBITRATE));
+        dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId, paperNumber, groupNumber, null, classNames));
+        dto.setMarkedCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId, paperNumber, groupNumber, null, classNames, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED));
+        dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId,
+                paperNumber, groupNumber, userId, classNames, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,
                 MarkTaskStatus.WAIT_ARBITRATE));
-        dto.setProblemCount(markTaskService.countProblemByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId,
-                paperNumber, groupNumber, MarkTaskStatus.PROBLEM));
-        dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber));
+        dto.setProblemCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId,
+                paperNumber, groupNumber, null, classNames, MarkTaskStatus.PROBLEM));
         return dto;
     }
 

+ 2 - 24
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -9,14 +9,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkManageDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkerInfoDto;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
-import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import com.qmth.teachcloud.mark.mapper.MarkTaskMapper;
@@ -27,7 +25,6 @@ import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-import java.text.DecimalFormat;
 import java.util.Arrays;
 import java.util.List;
 
@@ -205,27 +202,8 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
 
     @Override
-    public int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(Long examId, String paperNumber, Integer groupNumber, Long userId, MarkTaskStatus... status) {
-        QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
-        LambdaQueryWrapper<MarkTask> lambdaQueryWrapper = queryWrapper.lambda();
-        lambdaQueryWrapper.eq(MarkTask::getExamId, examId)
-                .eq(MarkTask::getPaperNumber, paperNumber)
-                .eq(MarkTask::getGroupNumber, groupNumber);
-        if (userId != null) {
-            lambdaQueryWrapper.eq(MarkTask::getUserId, userId);
-        }
-        lambdaQueryWrapper.in(MarkTask::getStatus, Arrays.asList(status));
-        return this.count(queryWrapper);
-    }
-
-    @Override
-    public int countProblemByExamIdAndPaperNumberAndGroupNumberAndStatusIn(Long examId, String paperNumber, Integer groupNumber, MarkTaskStatus... status) {
-        QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkTask::getExamId, examId)
-                .eq(MarkTask::getPaperNumber, paperNumber)
-                .eq(MarkTask::getGroupNumber, groupNumber)
-                .in(MarkTask::getStatus, Arrays.asList(status));
-        return this.count(queryWrapper);
+    public int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(Long examId, String paperNumber, Integer groupNumber, Long userId, List<String> className, MarkTaskStatus... status) {
+        return this.baseMapper.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId, paperNumber, groupNumber, userId, className, status);
     }
 
     @Override

+ 9 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserClassServiceImpl.java

@@ -154,4 +154,13 @@ public class MarkUserClassServiceImpl extends ServiceImpl<MarkUserClassMapper, M
     public IPage<MarkGroupClassProgressDto> pageClassByExamIdAndPaperNumber(Page<MarkGroupClassProgressDto> page, Long examId, String paperNumber) {
         return this.baseMapper.pageClassByExamIdAndPaperNumber(page, examId, paperNumber);
     }
+
+    @Override
+    public List<MarkUserClass> listByExamIdAndPaperNumberAndUserId(Long examId, String paperNumber, Long userId) {
+        QueryWrapper<MarkUserClass> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkUserClass::getExamId, examId)
+                .eq(MarkUserClass::getPaperNumber, paperNumber)
+                .eq(MarkUserClass::getUserId, userId);
+        return this.list(queryWrapper);
+    }
 }

+ 21 - 8
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java

@@ -17,11 +17,9 @@ import com.qmth.teachcloud.mark.dto.mark.entrance.MarkEntranceDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkQualityChartDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkQualityDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkUserGroupProgressDto;
-import com.qmth.teachcloud.mark.entity.MarkGroup;
-import com.qmth.teachcloud.mark.entity.MarkPaper;
-import com.qmth.teachcloud.mark.entity.MarkTask;
-import com.qmth.teachcloud.mark.entity.MarkUserGroup;
+import com.qmth.teachcloud.mark.entity.*;
 import com.qmth.teachcloud.mark.enums.LockType;
+import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.mapper.MarkUserGroupMapper;
 import com.qmth.teachcloud.mark.service.*;
@@ -59,6 +57,8 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
     @Resource
     private MarkPaperService markPaperService;
     @Resource
+    private MarkUserClassService markUserClassService;
+    @Resource
     private MarkSyncService markSyncService;
     @Resource
     private SysUserService sysUserService;
@@ -76,18 +76,31 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
         Page<MarkUserGroup> page = new Page<>(pageNumber, pageSize);
         IPage<MarkEntranceDto> markEntranceDtoIPage = this.baseMapper.listEntranceGroup(page, examId, courseCode, paperNumber, sysUser.getId(), MarkPaperStatus.FORMAL.name());
         for (MarkEntranceDto record : markEntranceDtoIPage.getRecords()) {
-            record.setLeftCount(record.getTaskCount() == null || record.getTaskCount() == 0 ? 0 : record.getTaskCount() - record.getMarkedCount());
+            int taskCount = record.getTaskCount();
+            int markedCount = record.getMarkedCount();
+            MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, record.getPaperNumber());
+            if (markPaper != null && markPaper.getOpenMarkClass() != null && markPaper.getOpenMarkClass().booleanValue()) {
+                List<MarkUserClass> markUserClassList = markUserClassService.listByExamIdAndPaperNumberAndUserId(examId, record.getPaperNumber(), sysUser.getId());
+                List<String> classNames = null;
+                if (CollectionUtils.isNotEmpty(markUserClassList)) {
+                    classNames = markUserClassList.stream().map(MarkUserClass::getClassName).collect(Collectors.toList());
+                }
+                taskCount = markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId, record.getPaperNumber(), record.getGroupNumber(), null, classNames);
+                markedCount = markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn(examId, record.getPaperNumber(), record.getGroupNumber(), null, classNames, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED);
+
+            }
+            record.setLeftCount(taskCount == 0 ? 0 : taskCount - markedCount);
             // 评卷进度
-            if (record.getTaskCount().intValue() == 0) {
+            if (taskCount == 0) {
                 record.setPercent(0D);
             } else {
-                BigDecimal bigDecimal = record.getMarkedCount() == null ? new BigDecimal("0") : new BigDecimal(record.getMarkedCount() * 100).divide(new BigDecimal(record.getTaskCount()), 2, RoundingMode.HALF_UP);
+                BigDecimal bigDecimal = new BigDecimal(markedCount * 100).divide(new BigDecimal(taskCount), 2, RoundingMode.HALF_UP);
                 record.setPercent(bigDecimal.doubleValue());
             }
-
             // 分组题目
             record.setGroupQuestions(markQuestionService.assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(record.getExamId(), record.getPaperNumber(), record.getGroupNumber()));
         }
+
         return markEntranceDtoIPage;
     }
 

+ 9 - 17
teachcloud-mark/src/main/resources/mapper/MarkArbitrateHistoryMapper.xml

@@ -99,24 +99,16 @@
           AND mah.group_number = #{groupNumber}
           AND mah.status = #{status}
           <if test="className != null and className != ''">
-          AND EXISTS( SELECT
-                          1
-                      FROM
-                          mark_user_class muc
-                            join
-                          mark_user_group mug ON muc.exam_id = mug.exam_id AND muc.paper_number = mug.paper_number AND muc.user_id = mug.user_id
+              AND EXISTS( SELECT
+              1
+              FROM
+              (select id, exam_id, paper_number, class_name
+              from mark_student
+              where exam_id = #{examId}
+              and paper_number = #{paperNumber}
+              and class_name = #{className}) ms
               WHERE
-                          mah.exam_id = muc.exam_id
-                        AND mah.paper_number = muc.paper_number
-                        AND mah.group_number = mug.group_number
-                        AND muc.class_name = #{className}
-                        AND EXISTS( SELECT
-                                        1
-                                    FROM
-                                        mark_student ms
-                                    WHERE
-                                        mah.student_id = ms.id
-                                      AND muc.class_name = ms.class_name))
+              mah.student_id = ms.id)
           </if>
     </select>
 

+ 45 - 17
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -235,23 +235,51 @@
           </if>
           <if test="className != null and className != ''">
               AND EXISTS( SELECT
-                              1
-                          FROM
-                              mark_user_class muc
-                                left join
-                              mark_user_group mug on muc.exam_id = mug.exam_id and muc.paper_nubmer = mug.paper_number and muc.user_id = mug.user_id
-                          WHERE
-                              mt.exam_id = muc.exam_id
-                            AND mt.paper_number = muc.paper_number
-                            AND mt.group_number = mug.group_number
-                            AND muc.class_name = #{className}
-                            AND EXISTS( SELECT
-                              1
-                            FROM
-                              mark_student ms
-                            WHERE
-                              mt.student_id = ms.id
-                                AND muc.class_name = ms.class_name))
+                1
+              FROM
+              (select id, exam_id, paper_number, class_name
+              from mark_student
+              where exam_id = #{examId}
+              and paper_number = #{paperNumber}
+              and class_name = #{className}) ms
+              WHERE
+              mt.student_id = ms.id)
           </if>
     </select>
+    <select id="countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndAndClassNameStatusIn" resultType="java.lang.Integer">
+        SELECT
+            count(1)
+        FROM
+            mark_task mt
+        WHERE
+            mt.exam_id = #{examId}
+            AND mt.paper_number = #{paperNumber}
+        <if test="groupNumber != null">
+            AND mt.group_number = #{groupNumber}
+        </if>
+        <if test="userId != null">
+            AND mt.user_id = #{userId}
+        </if>
+        <if test="statusList != null and statusList.length > 0">
+            and mt.status in
+          <foreach collection="statusList" item="status" separator="," open="(" close=")">
+              #{status}
+          </foreach>
+        </if>
+        <if test="classNames != null and classNames.size() > 0">
+            AND EXISTS( SELECT
+            1
+            FROM
+            (select id, exam_id, paper_number, class_name
+            from mark_student
+            where exam_id = #{examId}
+            and paper_number = #{paperNumber}
+            and class_name in
+            <foreach collection="classNames" item="className" separator="," open="(" close=")">
+                #{className}
+            </foreach>) ms
+            WHERE
+            mt.student_id = ms.id)
+        </if>
+    </select>
 </mapper>

+ 7 - 6
teachcloud-mark/src/main/resources/mapper/MarkUserClassMapper.xml

@@ -34,13 +34,14 @@
     <select id="pageClassByExamIdAndPaperNumber"
             resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupClassProgressDto">
         SELECT
-            distinct class_name className
-        FROM
-            mark_user_class
+            distinct mg.number groupNumber, muc.class_name className
+        FROM mark_group mg
+                LEFT JOIN
+            mark_user_class muc ON mg.exam_id = muc.exam_id AND mg.paper_number = muc.paper_number
         WHERE
-            exam_id = #{examId}
-          AND paper_number = #{paperNumber}
-        ORDER BY class_name
+            mg.exam_id = #{examId}
+          AND mg.paper_number = #{paperNumber}
+        ORDER BY  muc.class_name, mg.number
     </select>
     <select id="listMarkerClassByExamIdAndPaperNumberAndUserId"
             resultType="com.qmth.teachcloud.mark.entity.MarkUserClass">