فهرست منبع

3.4.4 update-20250401,bug修改

xiaofei 2 ماه پیش
والد
کامیت
9c7d17e34a

+ 1 - 0
distributed-print/install/mysql/upgrade/3.4.4-upgrade-2.sql

@@ -379,3 +379,4 @@ UPDATE `sys_config` SET `config_value` = '[{"name":"A3","size":"297*420"}, {"nam
 UPDATE `sys_config` SET `config_value` = '[{"name":"A3","size":"297*420"}, {"name":"8K","size":"270*390"}]' WHERE (`id` = '43');
 
 ALTER TABLE `exam_detail` ADD COLUMN `merge_pdf_path` VARCHAR(2000) NULL COMMENT '考场合并所有文件后的文件路径' AFTER `update_time`;
+ALTER TABLE `t_b_sync_task` CHANGE COLUMN `error_message` `error_message` VARCHAR(2000) CHARACTER SET 'utf8mb4' NULL DEFAULT NULL COMMENT '人工错误原因' ;

+ 1 - 0
distributed-print/install/mysql/upgrade/3.4.4.sql

@@ -371,3 +371,4 @@ UPDATE `sys_config` SET `config_value` = '[{"name":"A3","size":"297*420"}, {"nam
 UPDATE `sys_config` SET `config_value` = '[{"name":"A3","size":"297*420"}, {"name":"8K","size":"270*390"}]' WHERE (`id` = '43');
 
 ALTER TABLE `exam_detail` ADD COLUMN `merge_pdf_path` VARCHAR(2000) NULL COMMENT '考场合并所有文件后的文件路径' AFTER `update_time`;
+ALTER TABLE `t_b_sync_task` CHANGE COLUMN `error_message` `error_message` VARCHAR(2000) CHARACTER SET 'utf8mb4' NULL DEFAULT NULL COMMENT '人工错误原因' ;

+ 9 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -305,6 +305,8 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                 throw ExceptionResultEnum.ERROR.exception("学校没有学院机构");
             }
             Map<String, Long> teachingRoomNameIdMap = sysOrgList.stream().collect(Collectors.toMap(SysOrg::getName, SysOrg::getId));
+
+            List<String> courseCodeTeachingRoomIdList = new ArrayList<>();
             for (BasicCourseImportDto basicCourseImportDto : courseImportDtoList) {
                 String courseName = basicCourseImportDto.getCourseName();
                 String courseCode = basicCourseImportDto.getCourseCode();
@@ -338,6 +340,13 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                     basicCourse = new BasicCourse(sysUser.getSchoolId(), teachingRoomId, courseCode, courseName);
                     basicCourse.insertInfo(sysUser.getId());
                 }
+
+                String mergeString = SystemConstant.mergeString(SystemConstant.HYPHEN, courseCode, teachingRoomId);
+                if (courseCodeTeachingRoomIdList.contains(mergeString)) {
+                    throw ExceptionResultEnum.ERROR.exception("课程代码[" + courseCode + "]、开课学院[" + teachingRoomName + "]数据重复");
+                } else {
+                    courseCodeTeachingRoomIdList.add(mergeString);
+                }
                 basicCourseList.add(basicCourse);
             }
             this.saveOrUpdateBatch(basicCourseList);

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

@@ -94,7 +94,7 @@ public interface MarkService {
 
     boolean rejectMarkTask(MarkTask markTask, Long userId, String reason);
 
-    void deleteMarkTask(MarkQuestion markQuestion);
+    void deleteMarkTask(MarkQuestion markQuestion, boolean b);
 
     /**
      * /** 释放整修科目的锁定任务

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

@@ -18,5 +18,5 @@ public interface MarkSyncService {
 
     void calcObjectiveScore(MarkPaper markPaper);
 
-    void deleteMarkedByQuestion(MarkQuestion markQuestion);
+    void deleteMarkedByQuestion(MarkQuestion markQuestion, boolean b);
 }

+ 18 - 8
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkQuestionServiceImpl.java

@@ -92,8 +92,6 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
     private FileStoreUtil fileStoreUtil;
     @Resource
     private LockService lockService;
-    @Resource
-    private MarkSubjectiveScoreService markSubjectiveScoreService;
 
     @Override
     public List<MarkQuestion> listQuestionByExamIdAndPaperNumber(Long examId, String paperNumber) {
@@ -137,8 +135,9 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
                     throw ExceptionResultEnum.ERROR.exception("间隔分必须大于0");
                 }
                 question.setExamId(examId);
+                question.setCourseId(markPaper.getCourseId());
                 question.setPaperNumber(paperNumber);
-                question.setPaperType(markPaper.getPaperType());
+//                question.setPaperType(markPaper.getPaperType());
                 question.setCreateId(sysUser.getId());
                 question.setCreateTime(System.currentTimeMillis());
                 // 用来判断是否保存过
@@ -764,6 +763,10 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
             throw ExceptionResultEnum.ERROR.exception("该题已开始评卷,不允许双评改单评");
         }
 
+        if (doubleRate > 0 && doubleMarkParam.getArbitrateThreshold() > 0 && doubleMarkParam.getArbitrateThreshold() > markQuestion.getTotalScore()) {
+            throw ExceptionResultEnum.ERROR.exception("仲裁阈值不能大于小题满分");
+        }
+
         UpdateWrapper<MarkQuestion> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(MarkQuestion::getDoubleRate, doubleRate)
                 .set(MarkQuestion::getArbitrateThreshold, doubleRate > 0 ? doubleMarkParam.getArbitrateThreshold() : null)
@@ -771,19 +774,26 @@ public class MarkQuestionServiceImpl extends ServiceImpl<MarkQuestionMapper, Mar
                 .eq(MarkQuestion::getId, doubleMarkParam.getQuestionId());
         this.update(updateWrapper);
 
-        // 单、双评切换、双评比例修改,删除任务
-        if (!oldDoubleRate.equals(doubleRate)) {
+        // 单、双评切换修改,不删除任务,补发二评任务
+        if (oldDoubleRate == 0 && doubleRate == 100) {
+            this.updateMarkedCount(questionId, 0);
+            this.updateTaskCount(questionId, 0);
+            if (lockService.trylock(LockType.QUESTION_UPDATE, questionId)) {
+                MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+                // 考生主观题重新统分
+                markService.checkStudentSubjectiveScore(examId, markPaper.getCoursePaperId());
+                markSyncService.deleteMarkedByQuestion(markQuestion, false);
+            }
+        } else if (oldDoubleRate == 100 && doubleRate == 0) {
             this.updateMarkedCount(questionId, 0);
             this.updateTaskCount(questionId, 0);
             if (lockService.trylock(LockType.QUESTION_UPDATE, questionId)) {
                 MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
                 // 考生主观题重新统分
                 markService.checkStudentSubjectiveScore(examId, markPaper.getCoursePaperId());
-                markSyncService.deleteMarkedByQuestion(markQuestion);
+                markSyncService.deleteMarkedByQuestion(markQuestion, true);
             }
         }
-
-
     }
 
     @Override

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

@@ -1418,12 +1418,14 @@ public class MarkServiceImpl implements MarkService {
     }
 
     @Override
-    public void deleteMarkTask(MarkQuestion markQuestion) {
+    public void deleteMarkTask(MarkQuestion markQuestion, boolean b) {
         // 正评相关数据
-        markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
-        markProblemHistoryService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
-        markTaskService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
-        markRejectHistoryService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+        if (b) {
+            markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+            markProblemHistoryService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+            markTaskService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+            markRejectHistoryService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
+        }
         markSubjectiveScoreService.deleteByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());
         // 释放本小题所有评卷员的任务
         List<MarkUserQuestion> markUserQuestions = markUserQuestionService.listByExamIdAndPaperNumberAndQuestionId(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId());

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

@@ -7,7 +7,6 @@ import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.service.MarkService;
 import com.qmth.teachcloud.mark.service.MarkSyncService;
-import com.qmth.teachcloud.mark.service.MarkUserPaperService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -81,14 +80,14 @@ public class MarkSyncServiceImpl implements MarkSyncService {
 
     @Async
     @Override
-    public void deleteMarkedByQuestion(MarkQuestion markQuestion) {
+    public void deleteMarkedByQuestion(MarkQuestion markQuestion, boolean b) {
         if (markQuestion == null) {
             return;
         }
         try {
             lockService.waitlock(LockType.EXAM_SUBJECT, markQuestion.getExamId(), markQuestion.getPaperNumber());
             lockService.waitlock(LockType.QUESTION, markQuestion.getId());
-            markService.deleteMarkTask(markQuestion);
+            markService.deleteMarkTask(markQuestion, b);
         } catch (Exception e) {
             log.error("delete group error", e);
         } finally {

+ 2 - 1
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/AnalyzeDataGetAndEditServiceImpl.java

@@ -24,6 +24,7 @@ import com.qmth.teachcloud.report.business.enums.NumberTypeEnum;
 import com.qmth.teachcloud.report.business.service.*;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -481,7 +482,7 @@ public class AnalyzeDataGetAndEditServiceImpl implements AnalyzeDataGetAndEditSe
      */
     private void createCollegeInfo(List<ExamStudentScore> examStudentScoreList, Long schoolId) {
         List<TBSchoolCollegeDto> tbSchoolCollegeDtoList = new ArrayList<>();
-        List<String> collegeList = examStudentScoreList.stream()
+        List<String> collegeList = examStudentScoreList.stream().filter(m-> StringUtils.isNotBlank(m.getCollege()))
                 .map(ExamStudentScore::getCollege)
                 .distinct().collect(Collectors.toList());
         for (String collegeInfo : collegeList) {

+ 2 - 0
teachcloud-report/install/mysql/upgrade/3.4.4.sql

@@ -0,0 +1,2 @@
+ALTER TABLE `sys_user` ADD COLUMN `allow_course_scan` TINYINT(1) NULL DEFAULT 1 COMMENT '是否允许识别课程条码' AFTER `allow_manual_card`;
+ALTER TABLE `basic_school` ADD COLUMN `exam_task_instr` VARCHAR(500) NULL AFTER `background_image`;