瀏覽代碼

3.3.0 fix

xiaofei 1 年之前
父節點
當前提交
5d9e3d4724
共有 16 個文件被更改,包括 93 次插入46 次删除
  1. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/excel/TeacherTeamDto.java
  2. 二進制
      distributed-print/src/main/resources/temps/teachTeacher.xlsx
  3. 25 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkManageDto.java
  4. 2 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java
  5. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkService.java
  6. 2 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java
  7. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkSyncService.java
  8. 6 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java
  9. 6 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java
  10. 12 9
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  11. 13 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  12. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkSyncServiceImpl.java
  13. 5 9
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java
  14. 2 2
      teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml
  15. 1 0
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
  16. 14 12
      teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/excel/TeacherTeamDto.java

@@ -17,7 +17,7 @@ public class TeacherTeamDto implements Serializable {
     @NotNull
     private String name;
 
-    @ExcelNote(value = "工号")
+    @ExcelNote(value = "用户名/工号")
     @NotNull
     private String code;
 

二進制
distributed-print/src/main/resources/temps/teachTeacher.xlsx


+ 25 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkManageDto.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.mark.dto.mark.manage;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 
 /**
  * 评卷管理 列表
@@ -13,10 +14,15 @@ public class MarkManageDto {
     private String courseCode;
     private String courseName;
     private String paperNumber;
+    private String paperType;
     private Integer totalCount;
     private Integer markedCount;
+    /**
+     * 识别缺考未确认数量
+     */
+    private Integer omrAbsentCount;
     private String percent;
-    private String status;
+    private MarkPaperStatus status;
     private String statusDisplay;
 
     public Long getExamId() {
@@ -51,6 +57,14 @@ public class MarkManageDto {
         this.paperNumber = paperNumber;
     }
 
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
     public Integer getTotalCount() {
         return totalCount;
     }
@@ -67,6 +81,14 @@ public class MarkManageDto {
         this.markedCount = markedCount;
     }
 
+    public Integer getOmrAbsentCount() {
+        return omrAbsentCount;
+    }
+
+    public void setOmrAbsentCount(Integer omrAbsentCount) {
+        this.omrAbsentCount = omrAbsentCount;
+    }
+
     public String getPercent() {
         return percent;
     }
@@ -75,11 +97,11 @@ public class MarkManageDto {
         this.percent = percent;
     }
 
-    public String getStatus() {
+    public MarkPaperStatus getStatus() {
         return status;
     }
 
-    public void setStatus(String status) {
+    public void setStatus(MarkPaperStatus status) {
         this.status = status;
     }
 

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java

@@ -209,6 +209,8 @@ public class MarkStudent implements Serializable {
         this.assignConfirmed = false;
         this.subjectiveStatus = SubjectiveStatus.UNMARK;
         this.scanStatus = ScanStatus.UNEXIST;
+        this.omrAbsent = false;
+        this.omrAbsentChecked = false;
     }
 
     public Long getId() {

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

@@ -57,7 +57,7 @@ public interface MarkService {
 
 	Task getTask(Long userId, Long examId, String paperNumber, Integer groupNumber);
 
-    void deleteMarkGroup(MarkGroup markGroup);
+    void deleteMarkGroup(MarkGroup markGroup, boolean deleteGroupInfo);
 
     /**
      * /** 释放某个大题的锁定任务

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

@@ -115,4 +115,6 @@ public interface MarkStudentService extends IService<MarkStudent> {
     long countUnmarkByExamIdAndPaperNumber(Long examId, String paperNumber);
 
     void updateCheckInfo(Long studentId, Long userId);
+
+    int countOmrAbsentStudent(Long examId, String paperNumber, String paperType, boolean isOmrAbsentConfirm);
 }

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

@@ -15,5 +15,5 @@ public interface MarkSyncService {
 
     void updateQuality(List<MarkUserGroup> markUserGroups, String lockKey);
 
-    void deleteMarkGroup(MarkGroup markGroup);
+    void deleteMarkGroup(MarkGroup markGroup, boolean deleteGroupInfo);
 }

+ 6 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -120,7 +120,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
     public void deleteGroupByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
         MarkGroup markGroup = this.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
         if (lockService.trylock(LockType.GROUP_DELETE, examId, paperNumber, groupNumber)) {
-            markSyncService.deleteMarkGroup(markGroup);
+            markSyncService.deleteMarkGroup(markGroup, true);
         }
 
     }
@@ -355,8 +355,6 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         if (markGroupDto.getDoubleEnable()) {
             if (markGroupDto.getDoubleRate() == null) {
                 throw ExceptionResultEnum.ERROR.exception("开启双评,双评比例必填");
-            } else if (markGroup.getDoubleRate() != null && markGroupDto.getDoubleRate() < markGroup.getDoubleRate()) {
-                throw ExceptionResultEnum.ERROR.exception("双评比例不能小于原值");
             }
             if (markGroupDto.getArbitrateThreshold() == null) {
                 throw ExceptionResultEnum.ERROR.exception("开启双评,仲裁阀值必填");
@@ -394,6 +392,11 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
                 markUserGroupService.saveBatch(markUserGroups);
             }
         }
+
+        // 开启双评且双评比例值修改过,则删除任务
+        if(markGroupDto.getDoubleEnable() && markGroup.getDoubleRate() != null && markGroupDto.getDoubleRate().doubleValue() !=  markGroup.getDoubleRate().doubleValue()){
+            markSyncService.deleteMarkGroup(markGroup, false);
+        }
     }
 
     @Override

+ 6 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -68,7 +68,7 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
         Page<MarkSettingDto> page = new Page<>(pageNumber, pageSize);
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
-        IPage<MarkSettingDto> markSettingDtoIPage = this.baseMapper.listPaperSetting(page, sysUser.getSchoolId(),  examId, courseCode, paperNumber, groupStatus, dpr);
+        IPage<MarkSettingDto> markSettingDtoIPage = this.baseMapper.listPaperSetting(page, sysUser.getSchoolId(), examId, courseCode, paperNumber, groupStatus, dpr);
         for (MarkSettingDto record : markSettingDtoIPage.getRecords()) {
             if (Objects.nonNull(record.getMarkMode())) {
                 record.setMarkModeDisplay(record.getMarkMode().getName());
@@ -127,10 +127,14 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                     if (markQuestionSubjectiveList.stream().filter(m -> m.getGroupNumber() == null).count() > 0) {
                         throw ExceptionResultEnum.ERROR.exception(courseInfo + "主观题未全部分组,无法结束评卷");
                     }
-                    // 未缺考、未违且已上传图片的考生全部评完
+                    // 未缺考、未违且已上传图片的考生全部评完
                     if (markStudentService.countUnmarkByExamIdAndPaperNumber(examId, paperNumber) > 0) {
                         throw ExceptionResultEnum.ERROR.exception(courseInfo + "考生未全部评完,无法结束评卷");
                     }
+                    // 识别缺考未做完,不能结束
+                    if (markStudentService.countOmrAbsentStudent(examId, paperNumber, markPaper.getPaperType(), false) > 0) {
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "识别缺考未全部确认,无法结束评卷");
+                    }
                 }
 
                 // 结束评卷时,客观题统分

+ 12 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -777,7 +777,7 @@ public class MarkServiceImpl implements MarkService {
     }
 
     @Override
-    public void deleteMarkGroup(MarkGroup markGroup) {
+    public void deleteMarkGroup(MarkGroup markGroup, boolean deleteGroupInfo) {
         // 正评相关数据
         markTrackService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
                 markGroup.getNumber());
@@ -793,12 +793,6 @@ public class MarkServiceImpl implements MarkService {
                 markGroup.getPaperNumber(), markGroup.getNumber());
         markTaskService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
                 markGroup.getNumber());
-        // 评卷员数据
-        markUserGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
-        // 小题数据
-        markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, markGroup.getExamId(),
-                markGroup.getPaperNumber(), markGroup.getNumber());
         // 考生分组状态与得分明细
         markGroupStudentService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
                 markGroup.getPaperNumber(), markGroup.getNumber());
@@ -806,8 +800,17 @@ public class MarkServiceImpl implements MarkService {
                 markGroup.getPaperNumber(), markGroup.getNumber());
         // 删除分组
         releaseByMarkGroup(markGroup);
-        markGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
-                markGroup.getNumber());
+        if (deleteGroupInfo) {
+            // 评卷员数据
+            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());
+        }
+
         // 更新MarkPaper中groupStatus
         markPaperService.updateGroupStatusByExamIdAndPaperNumber(false, markGroup.getExamId(),
                 markGroup.getPaperNumber());

+ 13 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -841,7 +841,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                 .eq(MarkStudent::getSubjectiveStatus, SubjectiveStatus.UNMARK)
                 .eq(MarkStudent::getUpload, true)
                 .eq(MarkStudent::getAbsent, false)
-                .eq(MarkStudent::getBreach, false);
+                .eq(MarkStudent::getBreach, false)
+                .eq(MarkStudent::getOmrAbsent, false);
         return this.count(queryWrapper);
     }
 
@@ -854,6 +855,17 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         this.update(updateWrapper);
     }
 
+    @Override
+    public int countOmrAbsentStudent(Long examId, String paperNumber, String paperType, boolean isOmrAbsentConfirm) {
+        QueryWrapper<MarkStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkStudent::getExamId, examId)
+                .eq(MarkStudent::getPaperNumber, paperNumber)
+                .eq(MarkStudent::getPaperType, paperType)
+                .eq(MarkStudent::getOmrAbsent, true)
+                .eq(MarkStudent::getOmrAbsentChecked, isOmrAbsentConfirm);
+        return this.count(queryWrapper);
+    }
+
     private void fillObjective(ScoreReportVo ret, Long examId, String paperNumber) {
         List<MarkQuestion> qs = markQuestionService.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
         List<MarkStudent> students = listByExamIdAndPaperNumberAndAbsent(examId, paperNumber, false);

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

@@ -63,14 +63,14 @@ public class MarkSyncServiceImpl implements MarkSyncService {
 
     @Async
     @Override
-    public void deleteMarkGroup(MarkGroup markGroup) {
+    public void deleteMarkGroup(MarkGroup markGroup, boolean deleteGroupInfo) {
         if (markGroup == null) {
             return;
         }
         try {
             lockService.waitlock(LockType.EXAM_SUBJECT, markGroup.getExamId(), markGroup.getPaperNumber());
             lockService.waitlock(LockType.GROUP, markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-            markService.deleteMarkGroup(markGroup);
+            markService.deleteMarkGroup(markGroup, deleteGroupInfo);
         } catch (Exception e) {
             log.error("delete group error", e);
         } finally {

+ 5 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -19,10 +19,7 @@ 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;
-import com.qmth.teachcloud.mark.service.MarkGroupService;
-import com.qmth.teachcloud.mark.service.MarkPaperService;
-import com.qmth.teachcloud.mark.service.MarkQuestionService;
-import com.qmth.teachcloud.mark.service.MarkTaskService;
+import com.qmth.teachcloud.mark.service.*;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -44,7 +41,7 @@ import java.util.List;
 public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> implements MarkTaskService {
 
     @Resource
-    private MarkPaperService markPaperService;
+    private MarkStudentService markStudentService;
     @Resource
     private MarkGroupService markGroupService;
     @Resource
@@ -59,10 +56,9 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), ServletUtil.getRequest().getServletPath());
         IPage<MarkManageDto> markManageDtoIPage = this.baseMapper.listPaperManage(page, examId, courseCode, paperNumber, progressStatus, dpr);
         for (MarkManageDto record : markManageDtoIPage.getRecords()) {
-            MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(record.getExamId(), record.getPaperNumber());
-            record.setStatus(markPaper == null ? null : markPaper.getStatus().name());
-            record.setStatusDisplay(markPaper == null ? null : markPaper.getStatus().getName());
-
+//            record.setStatus(markPaper == null ? null : markPaper.getStatus().name());
+            record.setStatusDisplay(record.getStatus() == null ? null : record.getStatus().getName());
+            record.setOmrAbsentCount(markStudentService.countOmrAbsentStudent(record.getExamId(), record.getPaperNumber(), record.getPaperType(), false));
             String percent = record.getTotalCount() > 0 ? new DecimalFormat("####.##").format(record.getMarkedCount() * 100.0 / record.getTotalCount()) : "0";
             record.setPercent(percent);
         }

+ 2 - 2
teachcloud-mark/src/main/resources/mapper/MarkPaperMapper.xml

@@ -44,10 +44,10 @@
             sys_user su ON mp.user_id = su.id
         <where>
             <if test="schoolId != null">
-                su.school_id = #{schoolId}
+                and su.school_id = #{schoolId}
             </if>
             <if test="examId != null">
-                mp.exam_id = #{examId}
+                and mp.exam_id = #{examId}
             </if>
             <if test="courseCode != null and courseCode != ''">
                 and mp.course_code = #{courseCode}

+ 1 - 0
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -154,6 +154,7 @@
           AND ms.is_upload = TRUE
           AND is_absent = FALSE
           AND is_breach = FALSE
+          AND omr_absent = FALSE
           AND NOT EXISTS( SELECT
                               1
                           FROM

+ 14 - 12
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -27,30 +27,32 @@
     </resultMap>
     <select id="listPaperManage" resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkManageDto">
         SELECT
-            mt.exam_id examId,
-            mt.course_code courseCode,
-            mt.course_name courseName,
-            mt.paper_number paperNumber,
+            mp.exam_id examId,
+            mp.course_code courseCode,
+            mp.course_name courseName,
+            mp.paper_number paperNumber,
+            mp.paper_type paperType,
+            mp.status,
             COUNT(1) totalCount,
             SUM(CASE mt.status
                     WHEN 'MARKED' THEN 1
                     WHEN 'ARBITRATED' THEN 1
                     ELSE 0
                 END) AS markedCount
-        FROM
-            mark_task mt
+        FROM mark_paper mp
+                LEFT JOIN  mark_task mt ON mp.exam_id = mt.exam_id and mp.paper_number = mt.paper_number
         <where>
-            mt.exam_id = #{examId}
+            mp.exam_id = #{examId}
             <if test="courseCode != null and courseCode != ''">
-                and mt.course_code = #{courseCode}
+                and mp.course_code = #{courseCode}
             </if>
             <if test="paperNumber != null and paperNumber != ''">
-                and mt.paper_number = #{paperNumber}
+                and mp.paper_number = #{paperNumber}
             </if>
             <if test="dpr != null">
                 and exists (
-                    select 1 from mark_paper mp left join sys_user su on mp.user_id = su.id
-                        where mt.exam_id = mp.exam_id and mt.paper_number = mp.paper_number
+                    select 1 from sys_user su
+                        where mp.user_id = su.id
                 <if test="dpr.requestUserId != null">
                     and mp.user_id = #{dpr.requestUserId}
                 </if>
@@ -63,7 +65,7 @@
                 )
             </if>
         </where>
-        GROUP BY exam_id , course_code , course_name , paper_number
+        GROUP BY mp.exam_id , mp.course_code , mp.course_name , mp.paper_number, mp.paper_type, mp.status
         <if test="progressStatus != null">
             <if test="progressStatus == true">
                 HAVING totalCount > 0 AND totalCount = markedCount