Browse Source

3.3.0 fix

xiaofei 1 year ago
parent
commit
34deff18b1

+ 8 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/ScanStudentController.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.api.mark;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.mark.bean.UpdateTimeVo;
@@ -42,10 +43,12 @@ public class ScanStudentController extends BaseController {
 
     @ApiOperation(value = "更新缺考状态")
     @PostMapping("absent/update")
-    public AbsentManualUpdateVo absentManualUpdate(@RequestParam Long examId, @RequestParam String coursePaperId,
-                                                   @RequestParam String studentCode) {
+    public AbsentManualUpdateVo absentManualUpdate(@ApiParam(name = "考试ID", required = true) @RequestParam Long examId,
+                                                   @ApiParam(name = "课程试卷号", required = true)@RequestParam String coursePaperId,
+                                                   @ApiParam(name = "学号", required = true)@RequestParam String studentCode,
+                                                   @ApiParam(name = "状态", required = true)@RequestParam ScanStatus status) {
         validMarkPaperForScan(examId, coursePaperId);
-        return markStudentService.absentManualUpdate(examId, coursePaperId, studentCode);
+        return markStudentService.absentManualUpdate(examId, coursePaperId, studentCode, status);
     }
 
     @ApiOperation(value = "人工绑定-任务确认")
@@ -62,7 +65,8 @@ public class ScanStudentController extends BaseController {
     @ApiOperation(value = "识别缺考-任务确认")
     @PostMapping("confirm")
     public UpdateTimeVo confirm(@RequestParam Long examId, @RequestParam String coursePaperId,
-                                @RequestParam String studentCode, @RequestParam(required = false) Boolean omrAbsent) {
+                                @RequestParam String studentCode,
+                                @RequestParam(required = false) Boolean omrAbsent) {
         validMarkPaperForScan(examId, coursePaperId);
         return markStudentService.confirm(examId, coursePaperId, studentCode, omrAbsent);
     }

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

@@ -61,4 +61,6 @@ public interface MarkPaperService extends IService<MarkPaper> {
 	IPage<ArchiveScoreVo> scoreList(ArchiveScoreQuery query);
 
     void deleteByExamIdAndPaperNumber(Long examId, String paperNumber);
+
+    void updateAbsentCount(Long examId, String paperNumber, int absentCount);
 }

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

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.mark.bean.UpdateTimeVo;
 import com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentQuery;
@@ -96,7 +97,7 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
     long countStudentCountByExamIdAndPaperNumber(Long examId, String paperNumber, String paperType);
 
-    AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode);
+    AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode, ScanStatus status);
 
     UpdateTimeVo confirm(Long examId, String coursePaperId, String studentCode, Boolean omrAbsent);
 
@@ -134,4 +135,5 @@ public interface MarkStudentService extends IService<MarkStudent> {
 
     int getAssignedCount(Long examId, Boolean checked, String courseCode, String coursePaperId, DataPermissionRule dpr);
 
+    int countAbsentByExamIdAndPaperNumber(Long examId, String paperNumber);
 }

+ 4 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -262,6 +262,9 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         Long examId = markGroupSingleDto.getExamId();
         String paperNumber = markGroupSingleDto.getPaperNumber();
         MarkGroupDto markGroupDto = markGroupSingleDto.getGroupInfo();
+        if (lockService.isLocked(LockType.GROUP_DELETE, examId, paperNumber, markGroupDto.getGroupNumber())) {
+            throw ExceptionResultEnum.ERROR.exception("分组正删除中");
+        }
         MarkGroup markGroup = this.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markGroupDto.getGroupNumber());
         if (markGroup != null) {
             throw ExceptionResultEnum.ERROR.exception("数据已存在");
@@ -396,7 +399,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
             }
         }
 
-        // 开启双评且双评比例值修改过,则删除任务
+        // 单双评切换、开启双评且双评比例值修改过,则删除任务
         if (!doubleEnable.equals(markGroupDto.getDoubleEnable())
                 || (markGroupDto.getDoubleEnable() && (doubleRate == null || markGroupDto.getDoubleRate().doubleValue() != markGroup.getDoubleRate().doubleValue()))) {
             markSyncService.deleteMarkGroup(markGroup, false);

+ 11 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -1,6 +1,5 @@
 package com.qmth.teachcloud.mark.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -16,7 +15,6 @@ import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import com.qmth.teachcloud.mark.bean.answerbatch.Paper;
 import com.qmth.teachcloud.mark.bean.archivescore.ArchiveScoreQuery;
 import com.qmth.teachcloud.mark.bean.archivescore.ArchiveScoreVo;
 import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
@@ -34,7 +32,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -311,4 +310,13 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
         this.remove(updateWrapper);
     }
 
+    @Override
+    public void updateAbsentCount(Long examId, String paperNumber, int absentCount) {
+        UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkPaper::getAbsentCount, absentCount)
+                .eq(MarkPaper::getExamId, examId)
+                .eq(MarkPaper::getPaperNumber, paperNumber);
+        this.update(updateWrapper);
+    }
+
 }

+ 30 - 21
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -318,6 +318,8 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         // 更新课程表中上传人数
         markPaperService.updateUploadCount(student.getExamId(), student.getPaperNumber(),
                 this.countUploadedByExamIdAndPaperNumber(student.getExamId(), student.getPaperNumber()));
+        markPaperService.updateAbsentCount(student.getExamId(), student.getPaperNumber(),
+                this.countAbsentByExamIdAndPaperNumber(student.getExamId(), student.getPaperNumber()));
         if (updateOmrTask) {
             // 清除识别对照任务
             scanOmrTaskService.deleteByStudentId(student.getExamId(), student.getId());
@@ -505,16 +507,16 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
     @Transactional
     public void updateStudentAndPaper(@NotNull SysUser user, @NotNull Long id,
                                       @NotNull List<ScanStudentPaper> studentPaperList) {
-        if(CollectionUtils.isNotEmpty(studentPaperList)) {
-        	for (ScanStudentPaper studentPaper : studentPaperList) {
-	            studentPaper.setStudentId(id);
-        	}
+        if (CollectionUtils.isNotEmpty(studentPaperList)) {
+            for (ScanStudentPaper studentPaper : studentPaperList) {
+                studentPaper.setStudentId(id);
+            }
         }
         // 清空原有绑定关系
         studentPaperService.removeByStudentId(id);
-        if(CollectionUtils.isNotEmpty(studentPaperList)) {
-	        // 保存绑定关系
-	        studentPaperService.saveOrUpdateBatch(studentPaperList);
+        if (CollectionUtils.isNotEmpty(studentPaperList)) {
+            // 保存绑定关系
+            studentPaperService.saveOrUpdateBatch(studentPaperList);
         }
         // 更新考生状态
         updateStudentByPaper(user.getId(), id, true);
@@ -690,37 +692,36 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
     @Transactional
     @Override
-    public AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode) {
+    public AbsentManualUpdateVo absentManualUpdate(Long examId, String coursePaperId, String studentCode, ScanStatus status) {
         MarkStudent student = findByExamIdAndCoursePaperIdAndStudentCode(examId, coursePaperId, studentCode);
         if (student == null) {
             throw new ParameterException("考生未找到");
         }
-        if (student.getScanStatus() != ScanStatus.UNEXIST) {
+        if (ScanStatus.MANUAL_ABSENT.equals(status) && !ScanStatus.UNEXIST.equals(student.getScanStatus())) {
             throw new ParameterException("考生不是未扫描状态");
         }
         LambdaUpdateWrapper<MarkStudent> lw = new LambdaUpdateWrapper<>();
-        lw.set(MarkStudent::getScanStatus, ScanStatus.MANUAL_ABSENT);
+        lw.set(MarkStudent::getScanStatus, status);
+        lw.set(MarkStudent::getManualAbsent, ScanStatus.MANUAL_ABSENT.equals(status));
+        lw.set(MarkStudent::getAbsent, ScanStatus.MANUAL_ABSENT.equals(status));
         lw.eq(MarkStudent::getId, student.getId());
-        lw.eq(MarkStudent::getScanStatus, ScanStatus.UNEXIST);
         update(lw);
-        return AbsentManualUpdateVo.create(ScanStatus.MANUAL_ABSENT);
+        markPaperService.updateAbsentCount(examId, student.getPaperNumber(), this.countAbsentByExamIdAndPaperNumber(examId, student.getPaperNumber()));
+        return AbsentManualUpdateVo.create(status);
     }
 
     @Transactional
     @Override
     public UpdateTimeVo confirm(Long examId, String coursePaperId, String studentCode, Boolean omrAbsent) {
+        MarkStudent student = findByExamIdAndCoursePaperIdAndStudentCode(examId, coursePaperId, studentCode);
         LambdaUpdateWrapper<MarkStudent> lw = new LambdaUpdateWrapper<>();
         lw.set(MarkStudent::getOmrAbsentChecked, omrAbsent);
-        lw.eq(MarkStudent::getExamId, examId);
-        lw.eq(MarkStudent::getCoursePaperId, coursePaperId);
-        lw.eq(MarkStudent::getStudentCode, studentCode);
-//        if (omrAbsent != null) {
-//            lw.eq(MarkStudent::getOmrAbsent, omrAbsent);
-//        }
+        if (!omrAbsent) {
+            lw.set(MarkStudent::getOmrAbsent, false);
+        }
+        lw.eq(MarkStudent::getId, student.getId());
         update(lw);
-//        if (!update(lw)) {
-//            throw new ParameterException("考生未找到");
-//        }
+        markPaperService.updateAbsentCount(examId, student.getPaperNumber(), this.countAbsentByExamIdAndPaperNumber(examId, student.getPaperNumber()));
         return UpdateTimeVo.create();
     }
 
@@ -1115,4 +1116,12 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         markStudent.setAssignConfirmed(checked);
         return baseMapper.countAssigned(markStudent, dpr);
     }
+
+    @Override
+    public int countAbsentByExamIdAndPaperNumber(Long examId, String paperNumber) {
+        QueryWrapper<MarkStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkStudent::getExamId, examId).eq(MarkStudent::getPaperNumber, paperNumber)
+                .and(o -> o.eq(MarkStudent::getAbsent, true).or().eq(MarkStudent::getOmrAbsent, true));
+        return this.count(queryWrapper);
+    }
 }