Browse Source

3.3.1 update

xiaofei 1 năm trước cách đây
mục cha
commit
d69c641db0
20 tập tin đã thay đổi với 145 bổ sung90 xóa
  1. 3 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java
  2. 16 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamStudentServiceImpl.java
  3. 8 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  5. 4 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  6. 56 39
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java
  7. 0 5
      distributed-print-business/src/main/resources/db/log/脚本-caozx.sql
  8. 10 0
      distributed-print/install/mysql/upgrade/3.3.1.sql
  9. 1 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  10. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintTaskController.java
  11. 13 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkStudent.java
  12. 0 12
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserClass.java
  13. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java
  14. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserClassService.java
  15. 4 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkPaperServiceImpl.java
  16. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  17. 9 4
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  18. 2 5
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserClassServiceImpl.java
  19. 12 1
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml
  20. 0 1
      teachcloud-mark/src/main/resources/mapper/MarkUserClassMapper.xml

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailPdfDownloadDto;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
+import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.entity.ExamTaskDetail;
 
 import java.io.IOException;
@@ -66,4 +67,6 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
     boolean cancel(Long id, String cancelRemark);
 
     ExamTaskDetail getByExamIdAndCourseCodeAndPaperNumber(Long examId, String courseCode, String paperNumber);
+
+    void updateExposePaperType(Long examId, List<ExamDetailCourse> listByExamDetailId);
 }

+ 16 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicExamStudentServiceImpl.java

@@ -134,13 +134,24 @@ public class BasicExamStudentServiceImpl extends ServiceImpl<BasicExamStudentMap
         BasicExam basicExam = basicExamService.getById(basicExamStudentParam.getExamId());
         BasicExamStudent basicExamStudent = this.editEntityHelp(basicExamStudentParam, basicExam, requestUser);
         this.saveOrUpdate(basicExamStudent);
-        if (StringUtils.isNotBlank(basicExamStudent.getPaperNumber())) {
-            MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(basicExamStudent.getExamId(), basicExamStudent.getPaperNumber());
+        MarkPaper markPaper = null;
+        if (ExamModelEnum.MODEL4.equals(basicExam.getExamModel())) {
+            if (StringUtils.isBlank(basicExamStudent.getPaperNumber())) {
+                throw ExceptionResultEnum.ERROR.exception("试卷编号不能为空");
+            }
+            markPaper = markPaperService.getByExamIdAndPaperNumber(basicExamStudent.getExamId(), basicExamStudent.getPaperNumber());
             if (markPaper == null) {
+                // 模式4,不存在试卷,则创建
                 BasicCourse basicCourse = basicCourseService.getByCode(basicExamStudent.getCourseCode());
                 markPaper = new MarkPaper(basicExamStudent.getExamId(), basicExamStudent.getCourseCode(), basicCourse.getName(), basicExamStudent.getPaperNumber(), String.valueOf(System.currentTimeMillis()), requestUser.getId(), SystemConstant.DEFAULT_PAPER_TYPE_A);
                 markPaperService.save(markPaper);
             }
+        } else if (ExamModelEnum.MODEL1.equals(basicExam.getExamModel())) {
+            if (StringUtils.isNotBlank(basicExamStudent.getPaperNumber())) {
+                markPaper = markPaperService.getByExamIdAndPaperNumber(basicExamStudent.getExamId(), basicExamStudent.getPaperNumber());
+            }
+        }
+        if (markPaper != null) {
             // 同步更新扫描阅卷考生表
             markStudentService.updateByBasicExamStudent(basicExamStudent, markPaper, new HashSet<>());
             markPaperService.updateStudentCountByExamIdAndPaperNumberAndPaperType(basicExamStudent.getExamId(), basicExamStudent.getPaperNumber(), SystemConstant.DEFAULT_PAPER_TYPE_A);
@@ -177,11 +188,11 @@ public class BasicExamStudentServiceImpl extends ServiceImpl<BasicExamStudentMap
             List<BasicExamStudent> basicExamStudentList = this.listByIds(idList);
             for (BasicExamStudent basicExamStudent : basicExamStudentList) {
                 MarkStudent markStudent = markStudentService.findByExamIdAndPaperNumberAndStudentCode(basicExamStudent.getExamId(), basicExamStudent.getPaperNumber(), basicExamStudent.getStudentCode());
-                if (markStudent != null && !markStudent.getUpload()) {
-                    markStudentService.deleteByExamIdAndPaperNumberAndStudentCode(basicExamStudent.getExamId(), basicExamStudent.getPaperNumber(), basicExamStudent.getStudentCode());
+                if (markStudent != null && markStudent.getUpload()) {
+                    throw ExceptionResultEnum.ERROR.exception("考生已扫描,无法删除");
                 }
+                markStudentService.deleteByExamIdAndPaperNumberAndStudentCode(basicExamStudent.getExamId(), basicExamStudent.getPaperNumber(), basicExamStudent.getStudentCode());
             }
-
             this.removeByIds(idList);
             basicExamStudentList.stream().map(BasicExamStudent::getClazzId).distinct().forEach(e -> basicTeachClazzService.deleteFreeClazz(e));
         }

+ 8 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -106,7 +106,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         if (examCardParams.getId() == null) {
             validateCardData(examCardParams);
 
-            String title = examCardParams.getTitle()+SystemConstant.generateRandomNumber(4);
+            String title = examCardParams.getPaperId() != null ? examCardParams.getTitle() + SystemConstant.generateRandomNumber(4) : examCardParams.getTitle();
 
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(ExamCard::getSchoolId, schoolId)
@@ -137,7 +137,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         }
         // 修改
         else {
-            String title = examCardParams.getTitle()+SystemConstant.generateRandomNumber(4);
+            String title = examCardParams.getTitle();
             QueryWrapper<ExamCard> queryWrapper = new QueryWrapper<>();
             queryWrapper.lambda().eq(ExamCard::getSchoolId, schoolId)
                     .eq(ExamCard::getCourseCode, examCardParams.getCourseCode())
@@ -480,9 +480,13 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
 
     @Override
     public List<CardJpgResult> listCardImage(Long examId, String paperNumber, String paperType) {
-        Long examTaskId = examTaskService.getOne(new QueryWrapper<ExamTask>().lambda()
+        ExamTask examTask = examTaskService.getOne(new QueryWrapper<ExamTask>().lambda()
                 .eq(ExamTask::getExamId, examId)
-                .eq(ExamTask::getPaperNumber, paperNumber)).getId();
+                .eq(ExamTask::getPaperNumber, paperNumber));
+        if (examTask == null) {
+            return new ArrayList<>();
+        }
+        Long examTaskId = examTask.getId();
         ExamTaskDetail examTaskDetail = examTaskDetailService.getOne(new QueryWrapper<ExamTaskDetail>().lambda()
                 .eq(ExamTaskDetail::getExamTaskId, examTaskId));
         List<CardJpgResult> cardJpgResultList = new ArrayList<>();

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -187,7 +187,7 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
                 singleExamStudentAddParam.getStudentCode(), singleExamStudentAddParam.getStudentName(),
                 examDetail.getPackageCode(), examDetail.getExamPlace(), examDetail.getExamRoom(),
                 singleExamStudentAddParam.getCollege(), singleExamStudentAddParam.getMajorName(), singleExamStudentAddParam.getClassName(),
-                null, examDetail.getExamStartTime(), examDetail.getExamEndTime(), examTask.getUserId());
+                null, null, examDetail.getExamStartTime(), examDetail.getExamEndTime(), examTask.getUserId());
         if (markStudent.getSecretNumber() == null) {
             markStudent.randomSecretNumber();
             while (markStudentService.countByExamIdAndSecretNumber(markStudent.getExamId(), markStudent.getSecretNumber()) > 0) {

+ 4 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -534,7 +534,7 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
             throw ExceptionResultEnum.ERROR.exception("考场待印刷状态才可完成");
         }
 
-        // 修改考场状态为待印刷
+        // 修改考场状态为已完成
         UpdateWrapper<ExamDetail> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(ExamDetail::getStatus, ExamDetailStatusEnum.FINISH)
                 .set(ExamDetail::getPrintStartTime, System.currentTimeMillis())
@@ -544,6 +544,9 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
 
         // 所有考场打印完成,更新印刷计划状态
         examPrintPlanService.updateFinishStatus(examDetail.getPrintPlanId());
+
+        // 更新曝光卷型
+        examTaskDetailService.updateExposePaperType(examDetail.getExamId(), examDetailCourseService.listByExamDetailId(examDetail.getId()));
         return true;
     }
 

+ 56 - 39
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -13,17 +13,13 @@ import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.mapper.ExamTaskDetailMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
-import com.qmth.teachcloud.common.bean.dto.MqDto;
-import com.qmth.teachcloud.common.bean.result.TbTaskDetailResult;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExamTaskUtil;
-import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.service.MarkService;
 import com.qmth.teachcloud.mark.service.ScanPaperService;
@@ -31,7 +27,6 @@ import org.activiti.engine.TaskService;
 import org.activiti.engine.task.Task;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -385,45 +380,43 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         List<ExamDetail> examDetailList = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getExamId(), examTask.getCourseCode(), examTask.getPaperNumber());
         if (CollectionUtils.isNotEmpty(examDetailList)) {
             ExamTaskDetail taskDetail = this.getByExamTaskId(examTaskDetail.getExamTaskId());
-            if (StringUtils.isNotBlank(taskDetail.getExposedPaperType())) {
-                List<Long> examDetailIds = examDetailList.stream().map(ExamDetail::getId).collect(Collectors.toList());
-                QueryWrapper<ExamDetailCourse> queryWrapper = new QueryWrapper<>();
-                queryWrapper.lambda().in(ExamDetailCourse::getExamDetailId, examDetailIds);
-                List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.list(queryWrapper);
-                Set<String> paperTypeSet = new HashSet<>();
-                for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
-                    // 考场内任一课程有扫描数据,不允许打回
-                    boolean isScanPaper = scanPaperService.isScanByExamIdAndPaperNumber(examTask.getExamId(), examDetailCourse.getPaperNumber());
-                    if (isScanPaper) {
-                        throw ExceptionResultEnum.ERROR.exception("有课程已开始扫描,无法打回");
-                    }
-                    if (StringUtils.isNotBlank(examDetailCourse.getPaperType())) {
-                        paperTypeSet.addAll(Arrays.asList(examDetailCourse.getPaperType().split(",")));
-                    }
+            List<Long> examDetailIds = examDetailList.stream().map(ExamDetail::getId).collect(Collectors.toList());
+            QueryWrapper<ExamDetailCourse> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().in(ExamDetailCourse::getExamDetailId, examDetailIds);
+            List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.list(queryWrapper);
+            Set<String> paperTypeSet = new HashSet<>();
+            for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
+                // 考场内任一课程有扫描数据,不允许打回
+                boolean isScanPaper = scanPaperService.isScanByExamIdAndPaperNumber(examTask.getExamId(), examDetailCourse.getPaperNumber());
+                if (isScanPaper) {
+                    throw ExceptionResultEnum.ERROR.exception("有课程已开始扫描,无法打回");
                 }
-
-                // 已打印任务,必须先作废,未打印任务,必须先撤回。才允许打回
-                long count = examDetailList.stream().filter(m -> (ExamDetailStatusEnum.FINISH.equals(m.getStatus()) && m.getNormal()) || ExamDetailStatusEnum.WAITING.equals(m.getStatus())).count();
-                if (count > 0) {
-                    throw ExceptionResultEnum.ERROR.exception("印刷任务有已打印且未作废或者未撤回数据,无法打回");
+                if (StringUtils.isNotBlank(examDetailCourse.getPaperType())) {
+                    paperTypeSet.addAll(Arrays.asList(examDetailCourse.getPaperType().split(",")));
                 }
+            }
 
-                // 修改已曝光和未曝光类型
-                List<String> exposedPaperTypeList = new ArrayList<>(Arrays.asList(taskDetail.getExposedPaperType().split(",")));
-                List<String> unexposedPaperTypeList = StringUtils.isNotBlank(taskDetail.getUnexposedPaperType()) ? new ArrayList<>(Arrays.asList(taskDetail.getUnexposedPaperType().split(","))) : new ArrayList<>();
-                for (String exposePaperType : paperTypeSet) {
-                    if (exposedPaperTypeList.contains(exposePaperType)) {
-                        exposedPaperTypeList.remove(exposePaperType);
-                        unexposedPaperTypeList.add(exposePaperType);
-                    }
+            // 已打印任务,必须先作废,未打印任务,必须先撤回。才允许打回
+            long count = examDetailList.stream().filter(m -> ExamDetailStatusEnum.FINISH.equals(m.getStatus()) || ExamDetailStatusEnum.WAITING.equals(m.getStatus())).count();
+            if (count > 0) {
+                throw ExceptionResultEnum.ERROR.exception("印刷任务有已打印或待印刷数据,无法打回");
+            }
+
+            // 修改已曝光和未曝光类型
+            List<String> exposedPaperTypeList = new ArrayList<>(Arrays.asList(taskDetail.getExposedPaperType().split(",")));
+            List<String> unexposedPaperTypeList = StringUtils.isNotBlank(taskDetail.getUnexposedPaperType()) ? new ArrayList<>(Arrays.asList(taskDetail.getUnexposedPaperType().split(","))) : new ArrayList<>();
+            for (String exposePaperType : paperTypeSet) {
+                if (exposedPaperTypeList.contains(exposePaperType)) {
+                    exposedPaperTypeList.remove(exposePaperType);
+                    unexposedPaperTypeList.add(exposePaperType);
                 }
-                exposedPaperTypeList.sort(Comparator.comparing(String::toString));
-                unexposedPaperTypeList.sort(Comparator.comparing(String::toString));
-                taskDetail.setExposedPaperType(CollectionUtils.isEmpty(exposedPaperTypeList) ? null : String.join(",", exposedPaperTypeList));
-                taskDetail.setUnexposedPaperType(String.join(",", unexposedPaperTypeList));
-                taskDetail.setRelatePaperType(null);
-                this.updateById(taskDetail);
             }
+            exposedPaperTypeList.sort(Comparator.comparing(String::toString));
+            unexposedPaperTypeList.sort(Comparator.comparing(String::toString));
+            taskDetail.setExposedPaperType(CollectionUtils.isEmpty(exposedPaperTypeList) ? null : String.join(",", exposedPaperTypeList));
+            taskDetail.setUnexposedPaperType(String.join(",", unexposedPaperTypeList));
+            taskDetail.setRelatePaperType(null);
+            this.updateById(taskDetail);
 
             StringJoiner stringJoiner = new StringJoiner("_");
             stringJoiner.add(String.valueOf(examTask.getExamId())).add(examTask.getPaperNumber()).add(String.valueOf(examDetailList.get(0).getExamStartTime())).add(String.valueOf(examDetailList.get(0).getExamEndTime()));
@@ -687,6 +680,30 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         return this.getByExamTaskId(examTask.getId());
     }
 
+    @Override
+    public void updateExposePaperType(Long examId, List<ExamDetailCourse> examDetailCourses) {
+        // 更新曝光卷型、未曝光卷型
+        for (ExamDetailCourse examDetailCourse : examDetailCourses) {
+            ExamTaskDetail examTaskDetail = this.getByExamIdAndCourseCodeAndPaperNumber(examId, examDetailCourse.getCourseCode(), examDetailCourse.getPaperNumber());
+            // 考生使用卷型
+            List<String> studentPaperTypes = examStudentService.listPaperTypeByExamDetailCourseId(String.valueOf(examDetailCourse.getId()));
+            List<String> paperTypeList = Objects.isNull(examTaskDetail.getPaperType()) ? new ArrayList<>() : Arrays.asList(examTaskDetail.getPaperType().split(","));
+            List<String> exposedPaperTypeList = Objects.isNull(examTaskDetail.getExposedPaperType()) ? new ArrayList<>() : Arrays.asList(examTaskDetail.getExposedPaperType().split(","));
+            // 曝光卷型
+            List<String> unionList = (List<String>) CollectionUtils.union(exposedPaperTypeList, studentPaperTypes);
+            // 未曝光卷型
+            List<String> subtractList = (List<String>) CollectionUtils.subtract(paperTypeList, unionList);
+            UpdateWrapper<ExamTaskDetail> examTaskDetailUpdateWrapper = new UpdateWrapper<>();
+            String exposedPaper = String.join(",", unionList);
+            String unexposedPaper = String.join(",", subtractList);
+            examTaskDetailUpdateWrapper.lambda()
+                    .set(ExamTaskDetail::getExposedPaperType, StringUtils.isBlank(exposedPaper) ? null : exposedPaper)
+                    .set(ExamTaskDetail::getUnexposedPaperType, StringUtils.isBlank(unexposedPaper) ? null : unexposedPaper)
+                    .eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getExamTaskId());
+            this.update(examTaskDetailUpdateWrapper);
+        }
+    }
+
     /**
      * 卷库校验
      *

+ 0 - 5
distributed-print-business/src/main/resources/db/log/脚本-caozx.sql

@@ -1,5 +0,0 @@
-ALTER TABLE `teach_course`
-    DROP COLUMN `basic_course_id`;
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1132', '客观题模板导出', '/api/admin/mark/question/objective/export', 'URL', '897', '15', 'AUTH', '1', '1', '1');
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1133', '客观题标答导入', '/api/admin/mark/question/objective/import', 'URL', '897', '16', 'AUTH', '1', '1', '1');
-UPDATE `sys_privilege` SET `related` = '672,902,903,904,905,906,907,908,909,910,911,912,913,962,963,1132,1133' WHERE (`id` = '901');

+ 10 - 0
distributed-print/install/mysql/upgrade/3.3.1.sql

@@ -699,3 +699,13 @@ VALUES(2033, '同步试卷蓝图结构', '/api/admin/course/degree/final_score/p
 DELETE FROM t_b_task where type in ('STUDENT_IMPORT', 'CLAZZ_IMPORT', 'CREATE_PDF');
 UPDATE `sys_privilege` SET `enable` = '0', `default_auth` = '0', `front_display` = '0' WHERE (`id` = '163');
 UPDATE `sys_privilege` SET `enable` = '0', `front_display` = '0' WHERE (`id` = '289');
+-- 2024/04/02
+ALTER TABLE `mark_student` ADD COLUMN `teacher_id` BIGINT(20) NULL COMMENT '任课老师ID' AFTER `class_name`;
+ALTER TABLE `teach_course` DROP COLUMN `basic_course_id`;
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1132', '客观题模板导出', '/api/admin/mark/question/objective/export', 'URL', '897', '15', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1133', '客观题标答导入', '/api/admin/mark/question/objective/import', 'URL', '897', '16', 'AUTH', '1', '1', '1');
+UPDATE `sys_privilege` SET `related` = '672,902,903,904,905,906,907,908,909,910,911,912,913,962,963,1132,1133' WHERE (`id` = '901');
+
+ALTER TABLE `mark_user_class`
+DROP COLUMN `group_number`,
+DROP INDEX `idx_1` , ADD INDEX `idx_1` USING BTREE (`exam_id`, `paper_number`, `class_name`);

+ 1 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java

@@ -122,7 +122,7 @@ public class ExamCardController {
      */
     @ApiOperation(value = "根据ID获取题卡详情")
     @RequestMapping(value = "/get_one", method = RequestMethod.POST)
-    public Result getOne(@RequestParam("cardId") Long cardId) {
+    public Result getOne(@RequestParam(value = "cardId", required = false) Long cardId) {
         ExamCard examCard = examCardService.getById(cardId);
         return ResultUtil.ok(examCard);
     }

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

@@ -160,12 +160,12 @@ public class ExamPrintTaskController {
     }
 
     /**
-     * 批量撤回
+     * 批量完成/撤回/提交
      *
      * @param data id集合
      * @return
      */
-    @ApiOperation(value = "印刷任务管理-撤回提交")
+    @ApiOperation(value = "印刷任务管理-批量完成/撤回/提交")
     @RequestMapping(value = "/task_batch_cancel", method = RequestMethod.POST)
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE)
     public Result taskCancel(@RequestBody Map data) {

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

@@ -166,6 +166,9 @@ public class MarkStudent implements Serializable {
     @ApiModelProperty(value = "任课老师")
     private String teacher;
 
+    @ApiModelProperty(value = "任课老师ID")
+    private Long teacherId;
+
     @ApiModelProperty(value = "扫描状态")
     private ScanStatus scanStatus;
     //识别缺考
@@ -207,7 +210,7 @@ public class MarkStudent implements Serializable {
                        String paperNumber, String coursePaperId, String paperType,
                        String studentCode, String studentName, String packageCode,
                        String examPlace, String examRoom, String college, String majorName, String className,
-                       String teacher, Long examStartTime, Long examEndTime, Long createId) {
+                       Long teacherId, String teacher, Long examStartTime, Long examEndTime, Long createId) {
         this.id = id;
         this.examId = examId;
         this.courseCode = courseCode;
@@ -223,6 +226,7 @@ public class MarkStudent implements Serializable {
         this.college = college;
         this.majorName = majorName;
         this.className = className;
+        this.teacherId = teacherId;
         this.teacher = teacher;
         this.sheetCount = 0;
         this.upload = false;
@@ -504,6 +508,14 @@ public class MarkStudent implements Serializable {
         this.teacher = teacher;
     }
 
+    public Long getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Long teacherId) {
+        this.teacherId = teacherId;
+    }
+
     public ScanStatus getScanStatus() {
         return scanStatus;
     }

+ 0 - 12
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkUserClass.java

@@ -31,9 +31,6 @@ public class MarkUserClass implements Serializable {
     @ApiModelProperty(value = "考试ID")
     private Long examId;
 
-    @ApiModelProperty(value = "分组号")
-    private Integer groupNumber;
-
     @ApiModelProperty(value = "试卷编号")
     private String paperNumber;
 
@@ -60,14 +57,6 @@ public class MarkUserClass implements Serializable {
         this.examId = examId;
     }
 
-    public Integer getGroupNumber() {
-        return groupNumber;
-    }
-
-    public void setGroupNumber(Integer groupNumber) {
-        this.groupNumber = groupNumber;
-    }
-
     public String getPaperNumber() {
         return paperNumber;
     }
@@ -97,7 +86,6 @@ public class MarkUserClass implements Serializable {
         return "MarkUserClass{" +
                 "Id=" + Id +
                 ", examId=" + examId +
-                ", groupNumber=" + groupNumber +
                 ", paperNumber=" + paperNumber +
                 ", userId=" + userId +
                 ", classsName=" + className +

+ 2 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkStudentMapper.java

@@ -51,7 +51,7 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 
 	List<Long> findIdByExamIdAndPaperNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 
-	List<ArchiveStudentVo> studentList(@Param("req") ArchiveStudentQuery query);
+	List<ArchiveStudentVo> studentList(@Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
 	OverViewVo overview(@Param("req") ArchiveStudentQuery query);
 
@@ -67,7 +67,7 @@ public interface MarkStudentMapper extends BaseMapper<MarkStudent> {
 	List<UnexistStudentDto> listUnexistStudentByExamIdAndCoursePaperId(@Param("examId") Long examId, @Param("courseCode") String courseCode, @Param("coursePaperId") String coursePaperId,
 			@Param("status") String status, @Param("dpr") DataPermissionRule dpr);
 
-	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("req") ArchiveStudentQuery query);
+	IPage<ArchiveStudentVo> studentList(@Param("page") Page<ArchiveStudentVo> page, @Param("req") ArchiveStudentQuery query, @Param("dpr") DataPermissionRule dpr);
 
 	List<TeacherClassVo> teacherClass(@Param("req") ArchiveStudentQuery query);
 

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

@@ -29,7 +29,7 @@ public interface MarkUserClassService extends IService<MarkUserClass> {
 
     boolean saveMarkClassUser(MarkClassUserParams markClassUserParams);
 
-    boolean deleteByExamIdAndPaperNumberAndGroupNumberAndClassName(Long examId, String paperNumber, Integer groupNumber, String className);
+    boolean deleteByExamIdAndPaperNumberAndClassName(Long examId, String paperNumber, String className);
 
     List<MarkUserClass> listByExamIdAndPaperNumber(Long examId, String paperNumber);
 

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

@@ -159,19 +159,19 @@ public class MarkPaperServiceImpl extends ServiceImpl<MarkPaperMapper, MarkPaper
                     }
                     // 未全部扫描,不能结束
                     if (markStudentService.countUnexistByExamIdAndPaperNumberAndPaperType(examId, paperNumber, markPaper.getPaperType()) > 0) {
-                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "未全部扫描完成,无法结束评卷");
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "有考生未扫描未核对,请在扫描客户端进行确认操作后再结束阅卷");
                     }
                     // 识别缺考未确认完,不能结束
                     if (markStudentService.countOmrAbsentStudent(examId, paperNumber, markPaper.getPaperType(), false) > 0) {
-                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "识别缺考未全部确认,无法结束评卷");
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "识别缺考记录未核对,请在扫描客户端进行确认操作后再结束阅卷");
                     }
                     // 人工绑定未做完,不能结束
                     if (markStudentService.getAssignedCount(examId, false, markPaper.getCourseCode(), markPaper.getCoursePaperId(), MarkPaperStatus.FORMAL, null) > 0) {
-                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "人工绑定未全部处理,无法结束评卷");
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "人工绑定记录未核对,请在扫描客户端进行确认操作后再结束阅卷");
                     }
                     // 客观题检查未做完,不能结束
                     if (scanOmrTaskService.getFinishStudentCountByExamAndUserId(examId, markPaper.getCourseCode(), markPaper.getCoursePaperId(), OmrTaskStatus.WAITING.name(), null) > 0) {
-                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "客观题检查未全部处理,无法结束评卷");
+                        throw ExceptionResultEnum.ERROR.exception(courseInfo + "客观题存在识别嫌疑需要人工确认,请在扫描客户端进行确认操作后再结束阅卷");
                     }
                 }
 

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

@@ -888,7 +888,7 @@ public class MarkServiceImpl implements MarkService {
             markGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
                     markGroup.getPaperNumber(), markGroup.getNumber());
             // 分班阅数据
-            markUserClassService.deleteByExamIdAndPaperNumberAndGroupNumberAndClassName(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber(), null);
+            markUserClassService.deleteByExamIdAndPaperNumberAndClassName(markGroup.getExamId(), markGroup.getPaperNumber(), null);
             // 更新MarkPaper中groupStatus
             updateMarkGroupStatus(markGroup.getExamId(), markGroup.getPaperNumber());
         }

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

@@ -921,8 +921,12 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
     @Override
     public IPage<ArchiveStudentVo> studentList(ArchiveStudentQuery query) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        // 使用成绩管理列表请求的数据权限
+        String postUrl = "/api/admin/mark/archive/score/list";
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(sysUser.getSchoolId(), sysUser.getId(), postUrl);
         Page<ArchiveStudentVo> page = new Page<>(query.getPageNumber(), query.getPageSize());
-        IPage<ArchiveStudentVo> ret = baseMapper.studentList(page, query);
+        IPage<ArchiveStudentVo> ret = baseMapper.studentList(page, query, dpr);
         for (ArchiveStudentVo record : ret.getRecords()) {
             List<String> list = new ArrayList<>();
             List<FilePathVo> vos = JSON.parseArray(StringUtils.trimToNull(record.getSheetPath()), FilePathVo.class);
@@ -955,7 +959,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         String[] columnNames = columnNameList.toArray(new String[0]);
         //生成动态内容
         List<String[]> columnValues = new ArrayList<>();
-        List<ArchiveStudentVo> ret = baseMapper.studentList(query);
+        List<ArchiveStudentVo> ret = baseMapper.studentList(query, null);
         for (ArchiveStudentVo s : ret) {
             List<String> valueList = new ArrayList<>();
             valueList.add(s.getStudentName());
@@ -1005,7 +1009,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                     .divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2));
             ret.getOverview().setAvgScore(Calculator.round(ret.getOverview().getAvgScore(), 2));
         }
-        List<ArchiveStudentVo> studentList = baseMapper.studentList(query);
+        List<ArchiveStudentVo> studentList = baseMapper.studentList(query, null);
         fillScoreRange(ret, studentList);
 
         ret.setCollege(baseMapper.college(query));
@@ -1547,7 +1551,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         BasicTeachClazz basicTeachClazz = this.baseMapper.getBasicTeachClazzById(basicExamStudent.getClazzId());
         SysUser sysUser = sysUserService.getById(basicExamStudent.getTeacherId());
         if (markStudent == null) {
-            markStudent = new MarkStudent(basicExamStudent.getId(), basicExamStudent.getExamId(), basicExamStudent.getCourseCode(), basicCourse == null ? null : basicCourse.getName(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), "A", basicExamStudent.getStudentCode(), basicExamStudent.getStudentName(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getCollege(), basicExamStudent.getMajor(), basicTeachClazz == null ? null : basicTeachClazz.getClazzName(), sysUser == null ? null : sysUser.getRealName(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), markPaper.getUserId());
+            markStudent = new MarkStudent(basicExamStudent.getId(), basicExamStudent.getExamId(), basicExamStudent.getCourseCode(), basicCourse == null ? null : basicCourse.getName(), basicExamStudent.getPaperNumber(), markPaper.getCoursePaperId(), "A", basicExamStudent.getStudentCode(), basicExamStudent.getStudentName(), "", basicExamStudent.getExamPlace(), basicExamStudent.getExamRoom(), basicExamStudent.getCollege(), basicExamStudent.getMajor(), basicTeachClazz == null ? null : basicTeachClazz.getClazzName(),basicExamStudent.getTeacherId(), sysUser == null ? null : sysUser.getRealName(), basicExamStudent.getExamStartTime(), basicExamStudent.getExamEndTime(), markPaper.getUserId());
             if (markStudent.getSecretNumber() == null) {
                 markStudent.randomSecretNumber();
                 while (secretNumberSet.contains(markStudent.getSecretNumber())
@@ -1562,6 +1566,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             markStudent.setClassName(basicTeachClazz == null ? null : basicTeachClazz.getClazzName());
             markStudent.setExamPlace(basicExamStudent.getExamPlace());
             markStudent.setExamRoom(basicExamStudent.getExamRoom());
+            markStudent.setTeacherId(basicExamStudent.getTeacherId());
             markStudent.setTeacher(sysUser == null ? null : sysUser.getRealName());
         }
         this.saveOrUpdate(markStudent);

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

@@ -137,20 +137,17 @@ public class MarkUserClassServiceImpl extends ServiceImpl<MarkUserClassMapper, M
             }
         }
         // 科目下所有数据同时提交
-        this.deleteByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, null, null);
+        this.deleteByExamIdAndPaperNumberAndClassName(examId, paperNumber, null);
         this.saveBatch(markUserClasses);
         return true;
     }
 
     @Override
-    public boolean deleteByExamIdAndPaperNumberAndGroupNumberAndClassName(Long examId, String paperNumber, Integer groupNumber, String className) {
+    public boolean deleteByExamIdAndPaperNumberAndClassName(Long examId, String paperNumber, String className) {
         UpdateWrapper<MarkUserClass> updateWrapper = new UpdateWrapper<>();
         LambdaUpdateWrapper<MarkUserClass> lambdaUpdateWrapper = updateWrapper.lambda();
         lambdaUpdateWrapper.eq(MarkUserClass::getExamId, examId)
                 .eq(MarkUserClass::getPaperNumber, paperNumber);
-        if (groupNumber != null) {
-            lambdaUpdateWrapper.eq(MarkUserClass::getGroupNumber, groupNumber);
-        }
         if (StringUtils.isNotBlank(className)) {
             lambdaUpdateWrapper.eq(MarkUserClass::getClassName, className);
         }

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

@@ -323,7 +323,7 @@
     <select id="studentList"
             resultType="com.qmth.teachcloud.mark.bean.archivescore.ArchiveStudentVo">
         select s.*,s.id studentId, ifnull(s.objective_score,0)+ifnull(s.subjective_score,0) totalScore
-        from mark_student s
+        from mark_student s left join sys_user su on s.teacher_id = su.id
         <include refid="archiveQuery"/>
         <if test="req.orderType != null and req.orderType != '' and req.orderField != null and req.orderField != ''">
             <choose>
@@ -340,6 +340,17 @@
                 </otherwise>
             </choose>
         </if>
+        <if test="dpr != null">
+            <if test="dpr.requestUserId != null">
+                AND s.teacher_id = #{dpr.requestUserId}
+            </if>
+            <if test="dpr.orgIdSet != null and dpr.orgIdSet != '' and dpr.orgIdSet.size > 0">
+                AND su.org_id IN
+                <foreach collection="dpr.orgIdSet" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </if>
         <if test="req.orderType == null or req.orderType == '' or req.orderField == null or req.orderField == ''">
             order by s.student_code
         </if>

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

@@ -7,7 +7,6 @@
         <id column="Id" property="id" />
         <result column="exam_id" property="examId" />
         <result column="paper_number" property="paperNumber" />
-        <result column="group_number" property="groupNumber" />
         <result column="user_id" property="userId" />
         <result column="class_name" property="className" />
     </resultMap>