xiaofei 1 سال پیش
والد
کامیت
32b31fae46

+ 13 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java

@@ -59,6 +59,9 @@ public class MarkStudent implements Serializable {
     @ApiModelProperty(value = "试卷类型")
     private String paperNumber;
 
+    @ApiModelProperty(value = "试卷编号")
+    private String paperType;
+
     @ApiModelProperty(value = "密号")
     private String secretNumber;
 
@@ -162,12 +165,13 @@ public class MarkStudent implements Serializable {
     public MarkStudent() {
     }
 
-    public MarkStudent(Long id, Long examId, String courseCode, String courseName, String paperNumber, String studentCode, String studentName, String packageCode, String examPlace, String examRoom, String college, String className) {
+    public MarkStudent(Long id, Long examId, String courseCode, String courseName, String paperNumber, String paperType, String studentCode, String studentName, String packageCode, String examPlace, String examRoom, String college, String className) {
         this.id = id;
         this.examId = examId;
         this.courseCode = courseCode;
         this.courseName = courseName;
         this.paperNumber = paperNumber;
+        this.paperType = paperType;
         this.studentCode = studentCode;
         this.studentName = studentName;
         this.packageCode = packageCode;
@@ -223,6 +227,14 @@ public class MarkStudent implements Serializable {
         this.paperNumber = paperNumber;
     }
 
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
     public String getSecretNumber() {
         return secretNumber;
     }

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

@@ -48,4 +48,5 @@ public interface MarkPaperService extends IService<MarkPaper> {
 
     int countByPropositionTeacherId(boolean status);
 
+    void updateStudentCountByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType);
 }

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

@@ -82,4 +82,6 @@ public interface MarkStudentService extends IService<MarkStudent> {
 	UpdateTimeVo omrEdit(Long userId,OmrEditDomain domain);
 
 	MarkStudent findByExamIdAndStudentCode(Long examId, String studentCode);
+
+    long countStudentCountByExamIdAndPaperNumber(Long examId, String paperNumber, String paperType);
 }

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

@@ -15,6 +15,7 @@ import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupSingleDto;
 import com.qmth.teachcloud.mark.dto.mark.setting.MarkGroupTaskDto;
 import com.qmth.teachcloud.mark.entity.*;
+import com.qmth.teachcloud.mark.enums.ScorePolicy;
 import com.qmth.teachcloud.mark.mapper.MarkGroupMapper;
 import com.qmth.teachcloud.mark.service.*;
 import org.apache.commons.collections4.CollectionUtils;
@@ -23,6 +24,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -282,14 +284,22 @@ public class MarkGroupServiceImpl extends ServiceImpl<MarkGroupMapper, MarkGroup
             }
             if (markGroupDto.getArbitrateThreshold() == null) {
                 throw ExceptionResultEnum.ERROR.exception("开启双评,仲裁阀值必填");
+            } else if (markGroupDto.getArbitrateThreshold() < 0 || markGroupDto.getArbitrateThreshold() > 1) {
+                throw ExceptionResultEnum.ERROR.exception("开启双评,仲裁阀值必填且范围为0-1");
             }
             if (markGroupDto.getScorePolicy() == null) {
                 throw ExceptionResultEnum.ERROR.exception("开启双评,合分规则必填");
             }
+            String format = new DecimalFormat("####.###").format(markGroupDto.getDoubleRate() / 100);
+            markGroup.setDoubleRate(Double.parseDouble(format));
+            markGroup.setArbitrateThreshold(markGroupDto.getArbitrateThreshold());
+            markGroup.setScorePolicy(markGroupDto.getScorePolicy());
+        } else {
+            markGroup.setDoubleRate(null);
+            markGroup.setArbitrateThreshold(null);
+            markGroup.setScorePolicy(ScorePolicy.AVG);
         }
-        markGroup.setDoubleRate(markGroupDto.getDoubleRate());
-        markGroup.setArbitrateThreshold(markGroupDto.getArbitrateThreshold());
-        markGroup.setScorePolicy(markGroupDto.getScorePolicy());
+
         markGroup.setTaskCount(0);
         markGroup.setMarkedCount(0);
         markGroup.setLeftCount(0);

+ 16 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java

@@ -16,10 +16,12 @@ import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.dto.mark.score.CheckScoreListDto;
 import com.qmth.teachcloud.mark.dto.mark.score.MarkPaperPackageDto;
+import com.qmth.teachcloud.mark.entity.MarkGroup;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import com.qmth.teachcloud.mark.entity.ScanPackage;
 import com.qmth.teachcloud.mark.mapper.MarkPaperMapper;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
 import com.qmth.teachcloud.mark.service.ScanPackageService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -47,6 +49,8 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
     private TeachcloudCommonService teachcloudCommonService;
     @Resource
     private BasicRoleDataPermissionService basicRoleDataPermissionService;
+    @Resource
+    private MarkStudentService markStudentService;
 
 
     @Override
@@ -185,8 +189,19 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
     public int countByPropositionTeacherId(boolean status) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), "/api/admin/mark/setting/list");
-        List<MarkSettingDto> markSettingDtoList = this.baseMapper.listPaperSetting(null, null,null, status, dpr);
+        List<MarkSettingDto> markSettingDtoList = this.baseMapper.listPaperSetting(null, null, null, status, dpr);
         return CollectionUtils.isEmpty(markSettingDtoList) ? 0 : markSettingDtoList.size();
     }
 
+    @Override
+    public void updateStudentCountByExamIdAndPaperNumberAndPaperType(Long examId, String paperNumber, String paperType) {
+        long count = markStudentService.countStudentCountByExamIdAndPaperNumber(examId, paperNumber, paperType);
+        UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkPaper::getStudentCount, count)
+                .eq(MarkPaper::getExamId, examId)
+                .eq(MarkPaper::getPaperNumber, paperNumber)
+                .eq(MarkPaper::getPaperType, paperType);
+        this.update(updateWrapper);
+    }
+
 }

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

@@ -358,6 +358,8 @@ public class MarkServiceImpl implements MarkService {
                 for (MarkStudent student : studentList) {
                     MarkTask markTask = new MarkTask();
                     markTask.setExamId(student.getExamId());
+                    markTask.setCourseCode(student.getCourseCode());
+                    markTask.setCourseName(student.getCourseName());
                     markTask.setPaperNumber(student.getPaperNumber());
                     markTask.setGroupNumber(group.getNumber());
                     markTask.setStudentId(student.getId());
@@ -367,8 +369,8 @@ public class MarkServiceImpl implements MarkService {
                     markTask.setStatus(MarkTaskStatus.WAITING);
                     taskList.add(markTask);
                     // 开启双评时需要判断是否生成第二份评卷任务
-                    if (group.getDoubleRate() != null && group.getDoubleRate() > 0) {
-                        boolean needDouble = false;
+                    if (group.getDoubleEnable() != null && group.getDoubleEnable()) {
+                        boolean needDouble;
                         if (group.getDoubleRate() == 1) {
                             needDouble = true;
                         } else {
@@ -383,6 +385,8 @@ public class MarkServiceImpl implements MarkService {
                         if (needDouble) {
                             markTask = new MarkTask();
                             markTask.setExamId(student.getExamId());
+                            markTask.setCourseCode(student.getCourseCode());
+                            markTask.setCourseName(student.getCourseName());
                             markTask.setPaperNumber(student.getPaperNumber());
                             markTask.setGroupNumber(group.getNumber());
                             markTask.setStudentId(student.getId());

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

@@ -628,4 +628,13 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         queryWrapper.lambda().eq(MarkStudent::getStudentCode, studentCode);
         return baseMapper.selectOne(queryWrapper);
     }
+
+    @Override
+    public long countStudentCountByExamIdAndPaperNumber(Long examId, String paperNumber, String paperType) {
+        QueryWrapper<MarkStudent> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkStudent::getExamId, examId)
+                .eq(MarkStudent::getPaperNumber, paperNumber)
+                .eq(MarkStudent::getPaperType, paperType);
+        return this.count(queryWrapper);
+    }
 }

+ 16 - 12
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -1,5 +1,6 @@
 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;
@@ -105,10 +106,13 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     @Override
     public int countByExamIdAndPaperNumberAndGroupNumberAndUserId(Long examId, String paperNumber, Integer groupNumber, Long userId) {
         QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkTask::getExamId, examId)
+        LambdaQueryWrapper<MarkTask> lambdaQueryWrapper = queryWrapper.lambda();
+        lambdaQueryWrapper.eq(MarkTask::getExamId, examId)
                 .eq(MarkTask::getPaperNumber, paperNumber)
-                .eq(MarkTask::getGroupNumber, groupNumber)
-                .eq(MarkTask::getUserId, userId);
+                .eq(MarkTask::getGroupNumber, groupNumber);
+        if (userId != null) {
+            lambdaQueryWrapper.eq(MarkTask::getUserId, userId);
+        }
         return this.count(queryWrapper);
     }
 
@@ -195,24 +199,24 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
         this.remove(updateWrapper);
     }
 
-	@Override
-	public int countByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
-		QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
+    @Override
+    public int countByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
+        QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(MarkTask::getExamId, examId)
                 .eq(MarkTask::getPaperNumber, paperNumber)
                 .eq(MarkTask::getGroupNumber, groupNumber);
         return this.count(queryWrapper);
-	}
+    }
 
-	@Override
-	public int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(Long examId, String paperNumber,
-			Integer groupNumber, Long userId, MarkTaskStatus... status) {
-		QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
+    @Override
+    public int countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(Long examId, String paperNumber,
+                                                                             Integer groupNumber, Long userId, MarkTaskStatus... status) {
+        QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(MarkTask::getExamId, examId)
                 .eq(MarkTask::getPaperNumber, paperNumber)
                 .eq(MarkTask::getGroupNumber, groupNumber)
                 .eq(MarkTask::getUserId, userId)
                 .in(MarkTask::getStatus, Arrays.asList(status));
         return this.count(queryWrapper);
-	}
+    }
 }

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

@@ -129,7 +129,7 @@
         FROM
             mark_student ms
         WHERE
-            ms.exam_id = 1 AND ms.paper_number = 1
+            ms.exam_id = #{examId} AND ms.paper_number = #{paperNumber}
           AND ms.is_upload = TRUE
           AND (is_absent = TRUE OR is_breach = TRUE)
           AND EXISTS( SELECT

+ 6 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.io.File;
@@ -84,6 +85,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
         markPaperService.save(insertMarkPaper);
     }
 
+    @Transactional
     @Override
     public void insertMarkStudent(ExamDetailCourseInitMarkDto dto) {
         try {
@@ -95,7 +97,7 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                 if (markStudent != null) {
                     continue;
                 }
-                MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), examStudent.getStudentCode(), examStudent.getStudentName(), dto.getPackageCode(), dto.getExamPlace(), dto.getExamRoom(), examStudent.getCollegeName(), examStudent.getStudentName());
+                MarkStudent student = new MarkStudent(examStudent.getId(), dto.getExamId(), dto.getCourseCode(), dto.getCourseName(), dto.getPaperNumber(), dto.getPaperType(), examStudent.getStudentCode(), examStudent.getStudentName(), dto.getPackageCode(), dto.getExamPlace(), dto.getExamRoom(), examStudent.getCollegeName(), examStudent.getStudentName());
                 if (student.getSecretNumber() == null) {
                     student.randomSecretNumber();
                     while (secretNumberSet.contains(student.getSecretNumber())
@@ -107,6 +109,9 @@ public class PrintFinishServiceImpl implements PrintFinishService {
             }
             if (CollectionUtils.isNotEmpty(markStudentList)) {
                 markStudentService.saveBatch(markStudentList);
+
+                // 更新mark_paper表student_count字段
+                markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(dto.getExamId(), dto.getPaperNumber(), dto.getPaperType());
             }
         } catch (Exception e) {
             log.info("考生同步阅卷失败");

+ 12 - 12
teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

@@ -98,20 +98,20 @@ public class StartRunning implements CommandLineRunner {
 //
 //
 //        // 每1分钟一次
-//        log.info("增加评卷任务生成定时任务 start");
-//        Map buildMarkTaskJobMap = new HashMap();
-//        buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
-//        quartzService.deleteJob(JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK_GROUP.name());
-//        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK_GROUP.name(), "0 */1 * * * ?", buildMarkTaskJobMap);
-//        log.info("增加评卷任务生成定时任务 end");
+        log.info("增加评卷任务生成定时任务 start");
+        Map buildMarkTaskJobMap = new HashMap();
+        buildMarkTaskJobMap.computeIfAbsent("name", v -> BuildMarkTaskJob.class.getName());
+        quartzService.deleteJob(JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK_GROUP.name());
+        quartzService.addJob(BuildMarkTaskJob.class, JobEnum.BUILD_MARK_TASK.name(), JobEnum.BUILD_MARK_TASK_GROUP.name(), "0 */1 * * * ?", buildMarkTaskJobMap);
+        log.info("增加评卷任务生成定时任务 end");
 
         // 每1分钟一次
-        log.info("增加初始化阅卷数据定时任务 start");
-        Map initMarkDataJobMap = new HashMap();
-        initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
-        quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA_GROUP.name());
-        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA_GROUP.name(), "0 0/5 * * * ?", initMarkDataJobMap);
-        log.info("增加初始化阅卷数据定时任务 end");
+//        log.info("增加初始化阅卷数据定时任务 start");
+//        Map initMarkDataJobMap = new HashMap();
+//        initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
+//        quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA_GROUP.name());
+//        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA_GROUP.name(), "0 0/5 * * * ?", initMarkDataJobMap);
+//        log.info("增加初始化阅卷数据定时任务 end");
 
         log.info("服务器启动时执行 end");
     }