Browse Source

3.3.1 联调bug

xiaofei 1 year ago
parent
commit
7b9cf9b038

+ 9 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/PdfTaskLogicServiceImpl.java

@@ -101,10 +101,19 @@ public class PdfTaskLogicServiceImpl implements PdfTaskLogicService {
             updatePdfDataStatus(tbTaskPdf);
             updatePdfDataStatus(tbTaskPdf);
 
 
             ExamDetail examDetail = examDetailService.getById(tbTaskPdf.getId());
             ExamDetail examDetail = examDetailService.getById(tbTaskPdf.getId());
+            if(examDetail == null){
+                throw ExceptionResultEnum.EXAM_DETAIL_IS_NULL.exception();
+            }
             createPdfDto.setExamDetail(examDetail);
             createPdfDto.setExamDetail(examDetail);
             ExamPrintPlan examPrintPlan = examPrintPlanService.getById(examDetail.getPrintPlanId());
             ExamPrintPlan examPrintPlan = examPrintPlanService.getById(examDetail.getPrintPlanId());
+            if(examPrintPlan == null){
+                throw ExceptionResultEnum.EXAM_PRINT_IS_NULL.exception();
+            }
             createPdfDto.setExamPrintPlan(examPrintPlan);
             createPdfDto.setExamPrintPlan(examPrintPlan);
             List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listByExamDetailId(tbTaskPdf.getId());
             List<ExamDetailCourse> examDetailCourseList = examDetailCourseService.listByExamDetailId(tbTaskPdf.getId());
+            if(CollectionUtils.isEmpty(examDetailCourseList)){
+                throw ExceptionResultEnum.EXAM_DETAIL_COURSE_IS_NULL.exception();
+            }
             createPdfDto.setExamDetailCourseList(examDetailCourseList);
             createPdfDto.setExamDetailCourseList(examDetailCourseList);
 
 
             // 抽取卷型,更新考场、考生对应卷型值
             // 抽取卷型,更新考场、考生对应卷型值

+ 21 - 6
distributed-print/install/mysql/upgrade/3.3.1.sql

@@ -46,7 +46,7 @@ update t_b_task_pdf set create_type = 'ALL';
 
 
 ALTER TABLE `exam_task`
 ALTER TABLE `exam_task`
 DROP INDEX `idx_school_id_paper_number` ,
 DROP INDEX `idx_school_id_paper_number` ,
-ADD INDEX `idx_school_id_paper_number` USING BTREE (`exam_id`, `paper_number`) VISIBLE;
+ADD INDEX `idx_school_id_paper_number` USING BTREE (`exam_id`, `paper_number`);
 
 
 INSERT INTO sys_privilege
 INSERT INTO sys_privilege
 (id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
 (id, name, url, `type`, parent_id, `sequence`, property, related, enable, default_auth, front_display)
@@ -270,7 +270,7 @@ CREATE TABLE `course_target` (
 )  ENGINE=INNODB DEFAULT CHARACTER SET=UTF8MB4 COMMENT='课程目标表';
 )  ENGINE=INNODB DEFAULT CHARACTER SET=UTF8MB4 COMMENT='课程目标表';
 
 
 ALTER TABLE `course_target`
 ALTER TABLE `course_target`
-    ADD UNIQUE INDEX `course_target_unique` (`school_id` ASC,`exam_id` ASC, `course_code` ASC, `target_name` ASC) VISIBLE;
+    ADD UNIQUE INDEX `course_target_unique` (`school_id` ASC,`exam_id` ASC, `course_code` ASC, `target_name` ASC);
 ;
 ;
 
 
 CREATE TABLE `course_evaluation` (
 CREATE TABLE `course_evaluation` (
@@ -288,7 +288,7 @@ CREATE TABLE `course_evaluation` (
 )  ENGINE=INNODB DEFAULT CHARACTER SET=UTF8MB4 COMMENT='课程评价方式表';
 )  ENGINE=INNODB DEFAULT CHARACTER SET=UTF8MB4 COMMENT='课程评价方式表';
 
 
 ALTER TABLE `course_evaluation`
 ALTER TABLE `course_evaluation`
-    ADD UNIQUE INDEX `course_evaluation_unique` (`school_id` ASC, `exam_id` ASC, `course_code` ASC, `evaluation` ASC) VISIBLE;
+    ADD UNIQUE INDEX `course_evaluation_unique` (`school_id` ASC, `exam_id` ASC, `course_code` ASC, `evaluation` ASC);
 ;
 ;
 
 
 CREATE TABLE `course_weight` (
 CREATE TABLE `course_weight` (
@@ -311,7 +311,7 @@ DEFAULT CHARACTER SET = utf8mb4
 COMMENT = '课程权重设置表';
 COMMENT = '课程权重设置表';
 
 
 ALTER TABLE `course_weight`
 ALTER TABLE `course_weight`
-    ADD UNIQUE INDEX `course_weight_unique` (`school_id` ASC, `exam_id` ASC, `course_code` ASC, `target_id` ASC, `evaluation_id` ASC) VISIBLE;
+    ADD UNIQUE INDEX `course_weight_unique` (`school_id` ASC, `exam_id` ASC, `course_code` ASC, `target_id` ASC, `evaluation_id` ASC);
 ;
 ;
 
 
 CREATE TABLE `basic_teach_clazz` (
 CREATE TABLE `basic_teach_clazz` (
@@ -330,7 +330,7 @@ DEFAULT CHARACTER SET = utf8mb4
 COMMENT = '基础教学班表';
 COMMENT = '基础教学班表';
 
 
 ALTER TABLE `basic_teach_clazz`
 ALTER TABLE `basic_teach_clazz`
-    ADD UNIQUE INDEX `basic_teach_clazz_unique` (`school_id` ASC, `exam_id` ASC, `clazz_name` ASC) VISIBLE;
+    ADD UNIQUE INDEX `basic_teach_clazz_unique` (`school_id` ASC, `exam_id` ASC, `clazz_name` ASC);
 ;
 ;
 
 
 CREATE TABLE `basic_exam_student` (
 CREATE TABLE `basic_exam_student` (
@@ -358,7 +358,7 @@ CREATE TABLE `basic_exam_student` (
 )  ENGINE=INNODB DEFAULT CHARACTER SET=UTF8MB4 COMMENT='考生字典表';
 )  ENGINE=INNODB DEFAULT CHARACTER SET=UTF8MB4 COMMENT='考生字典表';
 
 
 ALTER TABLE `basic_exam_student`
 ALTER TABLE `basic_exam_student`
-    ADD UNIQUE INDEX `basic_exam_student_unique` (`school_id` ASC, `exam_id` ASC, `course_code` ASC, `student_code` ASC) VISIBLE;
+    ADD UNIQUE INDEX `basic_exam_student_unique` (`school_id` ASC, `exam_id` ASC, `course_code` ASC, `student_code` ASC);
 ;
 ;
 
 
 -- 2024/2/27
 -- 2024/2/27
@@ -545,3 +545,18 @@ CREATE TABLE IF NOT EXISTS `mark_document` (
     `file_path` mediumtext COMMENT '文件地址',
     `file_path` mediumtext COMMENT '文件地址',
     PRIMARY KEY (`id`) USING BTREE
     PRIMARY KEY (`id`) USING BTREE
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='归档文档表';
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='归档文档表';
+
+
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `enable`, `default_auth`, `front_display`) VALUES ('577', '文档管理', 'CourseDocumentManage', 'MENU', '561', '2', '1', '0', '1');
+UPDATE `sys_privilege` SET `sequence` = '1' WHERE (`id` = '487');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('578', '列表', 'List', 'LIST', '577', '1', 'AUTH', '583', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('579', '查询条件', 'Condition', 'CONDITION', '577', '2', 'AUTH', '583', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('580', '查询', 'Select', 'BUTTON', '577', '3', 'AUTH', '583', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('581', '新建文件', 'Add', 'BUTTON', '577', '4', 'AUTH', '584', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('583', '文档管理列表', '/api/admin/mark/archive/document/list', 'URL', '577', '1', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('582', '查看详情', 'Detail', 'LINK', '577', '5', 'AUTH', '585,586,587,588', '1', '0', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('584', '文档新建', '/api/admin/mark/archive/document/save', 'URL', '577', '2', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('585', '文档详情', '/api/admin/mark/archive/document/detail', 'URL', '577', '3', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('586', '文档上传', '/api/admin/mark/archive/document/import', 'URL', '577', '4', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('587', '文档删除', '/api/admin/mark/archive/document/delete', 'URL', '577', '5', 'AUTH', '1', '1', '1');
+INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('588', '文档下载', '/api/admin/mark/archive/document/download', 'URL', '577', '6', 'AUTH', '1', '1', '1');

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/ExceptionResultEnum.java

@@ -75,6 +75,7 @@ public enum ExceptionResultEnum {
     EXAM_PRINT_CONFIG_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "考试设置不存在"),
     EXAM_PRINT_CONFIG_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000026, "考试设置不存在"),
 
 
     EXAM_DETAIL_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000027, "考场数据为空"),
     EXAM_DETAIL_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000027, "考场数据为空"),
+    EXAM_DETAIL_COURSE_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000027, "考场课程数据为空"),
 
 
     EXAM_CARD_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000028, "题卡为空"),
     EXAM_CARD_IS_NULL(HttpStatus.INTERNAL_SERVER_ERROR, 50000028, "题卡为空"),
 
 

+ 32 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/vo/parseCard/Answer.java

@@ -0,0 +1,32 @@
+package com.qmth.teachcloud.mark.bean.vo.parseCard;
+
+public class Answer {
+
+    private String answer;
+    private Double score;
+    private Boolean isObjective;
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public Boolean getObjective() {
+        return isObjective;
+    }
+
+    public void setObjective(Boolean objective) {
+        isObjective = objective;
+    }
+}

+ 20 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/vo/parseCard/Struct.java

@@ -12,6 +12,10 @@ public class Struct {
     private int optionCount;
     private int optionCount;
     private int paperIndex;
     private int paperIndex;
     private int pageIndex;
     private int pageIndex;
+    // 标答
+    private String answer;
+    // 小题满分
+    private Double score;
 
 
     public String getqType() {
     public String getqType() {
         return qType;
         return qType;
@@ -92,4 +96,20 @@ public class Struct {
     public void setPageIndex(int pageIndex) {
     public void setPageIndex(int pageIndex) {
         this.pageIndex = pageIndex;
         this.pageIndex = pageIndex;
     }
     }
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
 }
 }

+ 9 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/setting/MarkGroupTaskDto.java

@@ -12,6 +12,7 @@ public class MarkGroupTaskDto {
     private String paperNumber;
     private String paperNumber;
     private List<MarkGroupDto> groups;
     private List<MarkGroupDto> groups;
     private Boolean openMarkClass;
     private Boolean openMarkClass;
+    private Boolean openDoubleMarking;
 
 
     public Long getExamId() {
     public Long getExamId() {
         return examId;
         return examId;
@@ -44,4 +45,12 @@ public class MarkGroupTaskDto {
     public void setOpenMarkClass(Boolean openMarkClass) {
     public void setOpenMarkClass(Boolean openMarkClass) {
         this.openMarkClass = openMarkClass;
         this.openMarkClass = openMarkClass;
     }
     }
+
+    public Boolean getOpenDoubleMarking() {
+        return openDoubleMarking;
+    }
+
+    public void setOpenDoubleMarking(Boolean openDoubleMarking) {
+        this.openDoubleMarking = openDoubleMarking;
+    }
 }
 }

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

@@ -105,6 +105,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         // 分班阅参数
         // 分班阅参数
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
         MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
         markGroupTaskDto.setOpenMarkClass(markPaper != null && markPaper.getOpenMarkClass());
         markGroupTaskDto.setOpenMarkClass(markPaper != null && markPaper.getOpenMarkClass());
+        markGroupTaskDto.setOpenDoubleMarking(markPaper!= null && markPaper.getOpenDoubleMarking());
         return markGroupTaskDto;
         return markGroupTaskDto;
     }
     }
 
 

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

@@ -918,14 +918,14 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             valueList.add(s.getClassName());
             valueList.add(s.getClassName());
             valueList.add(s.getCourseCode());
             valueList.add(s.getCourseCode());
             valueList.add(s.getCourseName());
             valueList.add(s.getCourseName());
-            valueList.add(s.getObjectiveScore()==null?"":s.getObjectiveScore().toString());
-            valueList.add(s.getSubjectiveScore()==null?"":s.getSubjectiveScore().toString());
-            valueList.add(s.getTotalScore()==null?"":s.getTotalScore().toString());
-            for (ScoreItem item : s.getScoreList(true,oQuestionList)) {
+            valueList.add(s.getObjectiveScore() == null ? "" : s.getObjectiveScore().toString());
+            valueList.add(s.getSubjectiveScore() == null ? "" : s.getSubjectiveScore().toString());
+            valueList.add(s.getTotalScore() == null ? "" : s.getTotalScore().toString());
+            for (ScoreItem item : s.getScoreList(true, oQuestionList)) {
                 valueList.add(item.getAnswer());
                 valueList.add(item.getAnswer());
-                valueList.add(item.getScore()==null?"":item.getScore().toString());
+                valueList.add(item.getScore() == null ? "" : item.getScore().toString());
             }
             }
-            for (ScoreItem item : s.getScoreList(false,sQuestionList)) {
+            for (ScoreItem item : s.getScoreList(false, sQuestionList)) {
                 valueList.add(item.getScore().toString());
                 valueList.add(item.getScore().toString());
             }
             }
             String[] columnValue = valueList.toArray(new String[valueList.size()]);
             String[] columnValue = valueList.toArray(new String[valueList.size()]);
@@ -959,7 +959,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
                     .divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2));
                     .divide2String(Calculator.multiply(ret.getOverview().getExcellentCount(), 100), total, 2));
             ret.getOverview().setAvgScore(Calculator.round(ret.getOverview().getAvgScore(), 2));
             ret.getOverview().setAvgScore(Calculator.round(ret.getOverview().getAvgScore(), 2));
         }
         }
-        List<ArchiveStudentVo> studentList= baseMapper.studentList(query);
+        List<ArchiveStudentVo> studentList = baseMapper.studentList(query);
         fillScoreRange(ret, studentList);
         fillScoreRange(ret, studentList);
 
 
         ret.setCollege(baseMapper.college(query));
         ret.setCollege(baseMapper.college(query));
@@ -1012,7 +1012,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
             }
             }
         }
         }
 
 
-        fillObjective(ret, studentList,query.getExamId(),query.getPaperNumber());
+        fillObjective(ret, studentList, query.getExamId(), query.getPaperNumber());
         List<Long> studentIds = studentList.stream().map(ArchiveStudentVo::getStudentId).collect(Collectors.toList());
         List<Long> studentIds = studentList.stream().map(ArchiveStudentVo::getStudentId).collect(Collectors.toList());
         ret.setSubjective(markSubjectiveScoreService.getSubjectiveVo(studentIds));
         ret.setSubjective(markSubjectiveScoreService.getSubjectiveVo(studentIds));
         if (CollectionUtils.isNotEmpty(ret.getSubjective())) {
         if (CollectionUtils.isNotEmpty(ret.getSubjective())) {
@@ -1168,7 +1168,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         return this.update(updateWrapper);
         return this.update(updateWrapper);
     }
     }
 
 
-    private void fillObjective(ScoreReportVo ret, List<ArchiveStudentVo> studentList,Long examId, String paperNumber) {
+    private void fillObjective(ScoreReportVo ret, List<ArchiveStudentVo> studentList, Long examId, String paperNumber) {
         List<MarkQuestion> qs = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null, true);
         List<MarkQuestion> qs = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null, true);
         Map<String, QuestionVo> map = new HashMap<>();
         Map<String, QuestionVo> map = new HashMap<>();
         List<QuestionVo> list = new ArrayList<>();
         List<QuestionVo> list = new ArrayList<>();
@@ -1246,23 +1246,23 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         return this.list(wrapper);
         return this.list(wrapper);
     }
     }
 
 
-    private void fillScoreRange(ScoreReportVo ret, List<ArchiveStudentVo> list ) {
+    private void fillScoreRange(ScoreReportVo ret, List<ArchiveStudentVo> list) {
         List<ScoreRangeVo> scoreRange = new ArrayList<>();
         List<ScoreRangeVo> scoreRange = new ArrayList<>();
         ret.setScoreRange(scoreRange);
         ret.setScoreRange(scoreRange);
-        scoreRange.add(getScoreRangeVo( list, 1.0, 9.5));
-        scoreRange.add(getScoreRangeVo( list, 10.0, 19.5));
-        scoreRange.add(getScoreRangeVo( list, 20.0, 29.5));
-        scoreRange.add(getScoreRangeVo( list, 30.0, 39.5));
-        scoreRange.add(getScoreRangeVo( list, 40.0, 49.5));
-        scoreRange.add(getScoreRangeVo( list, 50.0, 59.5));
-        scoreRange.add(getScoreRangeVo( list, 60.0, 69.5));
-        scoreRange.add(getScoreRangeVo( list, 70.0, 79.5));
-        scoreRange.add(getScoreRangeVo( list, 80.0, 89.5));
-        scoreRange.add(getScoreRangeVo( list, 90.0, 100.0));
+        scoreRange.add(getScoreRangeVo(list, 1.0, 9.5));
+        scoreRange.add(getScoreRangeVo(list, 10.0, 19.5));
+        scoreRange.add(getScoreRangeVo(list, 20.0, 29.5));
+        scoreRange.add(getScoreRangeVo(list, 30.0, 39.5));
+        scoreRange.add(getScoreRangeVo(list, 40.0, 49.5));
+        scoreRange.add(getScoreRangeVo(list, 50.0, 59.5));
+        scoreRange.add(getScoreRangeVo(list, 60.0, 69.5));
+        scoreRange.add(getScoreRangeVo(list, 70.0, 79.5));
+        scoreRange.add(getScoreRangeVo(list, 80.0, 89.5));
+        scoreRange.add(getScoreRangeVo(list, 90.0, 100.0));
     }
     }
 
 
     private ScoreRangeVo getScoreRangeVo(List<ArchiveStudentVo> list, Double start, Double end) {
     private ScoreRangeVo getScoreRangeVo(List<ArchiveStudentVo> list, Double start, Double end) {
-        int count = (int) list.stream().filter(s-> s.getTotalScore()>=start && s.getTotalScore()<=end).count();
+        int count = (int) list.stream().filter(s -> s.getTotalScore() >= start && s.getTotalScore() <= end).count();
         Double rate = null;
         Double rate = null;
         if (list.size() != 0) {
         if (list.size() != 0) {
             rate = Calculator.multiply(count, list.size(), 2);
             rate = Calculator.multiply(count, list.size(), 2);
@@ -1345,6 +1345,11 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
 
 
     @Override
     @Override
     public List<MarkStudentScoreVo> listMarkStudentScoreList(Long examId, String paperNumber) {
     public List<MarkStudentScoreVo> listMarkStudentScoreList(Long examId, String paperNumber) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
+        if (!MarkPaperStatus.FINISH.equals(markPaper.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("科目未结束评卷,不能同步考生成绩");
+        }
+
         List<MarkStudent> markStudentList = this.listByExamIdAndPaperNumberAndNotAbsent(examId, paperNumber);
         List<MarkStudent> markStudentList = this.listByExamIdAndPaperNumberAndNotAbsent(examId, paperNumber);
         List<MarkQuestion> objectiveQuestionList = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null, true);
         List<MarkQuestion> objectiveQuestionList = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null, true);
         List<MarkQuestion> subjectiveQuestionList = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null, false);
         List<MarkQuestion> subjectiveQuestionList = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber, null, false);

+ 13 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/utils/CardParseUtils.java

@@ -9,9 +9,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 
 
 /**
 /**
  * 题卡格式中试卷结构解析
  * 题卡格式中试卷结构解析
@@ -76,6 +74,10 @@ public class CardParseUtils {
             i++;
             i++;
         }
         }
 
 
+        Map<String, String> answerMap = new HashMap<>();
+        if(jsonObject.containsKey("answers")){
+            answerMap = JSON.parseObject(jsonObject.getString("answers"), Map.class);
+        }
         List<Struct> structList = new ArrayList<>();
         List<Struct> structList = new ArrayList<>();
         for (StructData structData : structDataList) {
         for (StructData structData : structDataList) {
             int startNumber = structData.getStartNumber();
             int startNumber = structData.getStartNumber();
@@ -84,6 +86,14 @@ public class CardParseUtils {
                 struct.setqType(structData.getqType());
                 struct.setqType(structData.getqType());
                 struct.setMainNumber(structData.getMainNumber());
                 struct.setMainNumber(structData.getMainNumber());
                 struct.setSubNumber(startNumber + i1);
                 struct.setSubNumber(startNumber + i1);
+                if(!answerMap.isEmpty()) {
+                    String key = struct.getMainNumber() + "-" + struct.getSubNumber();
+                    if(answerMap.containsKey(key)){
+                        Answer answer = JSON.parseObject(JSON.toJSONString(answerMap.get(key)), Answer.class);
+                        struct.setAnswer(answer.getAnswer());
+                        struct.setScore(answer.getScore());
+                    }
+                }
                 struct.setMainTitle(structData.getMainTitle());
                 struct.setMainTitle(structData.getMainTitle());
                 struct.setType(structData.getType());
                 struct.setType(structData.getType());
                 struct.setObjective(structData.getObjective());
                 struct.setObjective(structData.getObjective());

+ 2 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/PrintFinishService.java

@@ -17,4 +17,6 @@ public interface PrintFinishService {
     void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo, String content);
     void insertScanAnswerCard(ExamDetailCourseInitMarkDto dto, PaperInfoVo paperInfoVo, String content);
 
 
     void insertMarkQuestion(Long examId, String paperNumber, String paperType, String content);
     void insertMarkQuestion(Long examId, String paperNumber, String paperType, String content);
+
+    void insertPaperAnswerFile(Long examId, String paperNumber, String paperType, Long paperId);
 }
 }

+ 40 - 8
teachcloud-task/src/main/java/com/qmth/teachcloud/task/service/impl/PrintFinishServiceImpl.java

@@ -1,20 +1,17 @@
 package com.qmth.teachcloud.task.service.impl;
 package com.qmth.teachcloud.task.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
 import com.qmth.distributed.print.business.bean.dto.initMarkData.ExamDetailCourseInitMarkDto;
-import com.qmth.distributed.print.business.entity.ExamCard;
-import com.qmth.distributed.print.business.entity.ExamDetail;
-import com.qmth.distributed.print.business.entity.ExamStudent;
-import com.qmth.distributed.print.business.entity.ExamTaskDetail;
+import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
 import com.qmth.distributed.print.business.enums.CardTypeEnum;
-import com.qmth.distributed.print.business.service.ExamCardService;
-import com.qmth.distributed.print.business.service.ExamDetailService;
-import com.qmth.distributed.print.business.service.ExamStudentService;
-import com.qmth.distributed.print.business.service.ExamTaskDetailService;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.util.ExamTaskUtil;
 import com.qmth.teachcloud.common.util.ExamTaskUtil;
 import com.qmth.teachcloud.mark.bean.answercard.CardFile;
 import com.qmth.teachcloud.mark.bean.answercard.CardFile;
 import com.qmth.teachcloud.mark.bean.vo.parseCard.Struct;
 import com.qmth.teachcloud.mark.bean.vo.parseCard.Struct;
@@ -51,6 +48,8 @@ public class PrintFinishServiceImpl implements PrintFinishService {
 
 
     private static final Logger log = LoggerFactory.getLogger(PrintFinishServiceImpl.class);
     private static final Logger log = LoggerFactory.getLogger(PrintFinishServiceImpl.class);
 
 
+    @Resource
+    private BasicAttachmentService basicAttachmentService;
     @Resource
     @Resource
     private MarkPaperService markPaperService;
     private MarkPaperService markPaperService;
     @Resource
     @Resource
@@ -68,6 +67,8 @@ public class PrintFinishServiceImpl implements PrintFinishService {
     @Resource
     @Resource
     private ExamTaskDetailService examTaskDetailService;
     private ExamTaskDetailService examTaskDetailService;
     @Resource
     @Resource
+    private ExamTaskPaperDataService examTaskPaperDataService;
+    @Resource
     private ExamCardService examCardService;
     private ExamCardService examCardService;
     @Resource
     @Resource
     private FileStoreUtils fileStoreUtils;
     private FileStoreUtils fileStoreUtils;
@@ -158,6 +159,10 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getContent());
                     this.insertMarkQuestion(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getContent());
                     // 生成并保存卡格式文件(后缀为.json)
                     // 生成并保存卡格式文件(后缀为.json)
                     this.insertScanAnswerCard(dto, paperInfoVo, examCard.getContent());
                     this.insertScanAnswerCard(dto, paperInfoVo, examCard.getContent());
+                    // 题库获取的试卷,同步标答文件
+                    if (examCard.getPaperId() != null) {
+                        this.insertPaperAnswerFile(dto.getExamId(), dto.getPaperNumber(), paperType, examCard.getPaperId());
+                    }
                 }
                 }
             }
             }
         }
         }
@@ -253,6 +258,16 @@ public class PrintFinishServiceImpl implements PrintFinishService {
                     markQuestion.setQuestionType(struct.getType());
                     markQuestion.setQuestionType(struct.getType());
                     markQuestion.setPaperIndex(struct.getPaperIndex());
                     markQuestion.setPaperIndex(struct.getPaperIndex());
                     markQuestion.setPageIndex(struct.getPageIndex());
                     markQuestion.setPageIndex(struct.getPageIndex());
+                    if (StringUtils.isNotBlank(struct.getAnswer())) {
+                        markQuestion.setAnswer(struct.getAnswer());
+                    }
+                    if (struct.getScore() != null) {
+                        markQuestion.setTotalScore(struct.getScore());
+                        // 间隔分(整数默认1,小数默认0.5)
+                        if (!markQuestion.getObjective()) {
+                            markQuestion.setIntervalScore(markQuestion.getTotalScore() % 1 > 0 ? 0.5 : 1);
+                        }
+                    }
                     markQuestions.add(markQuestion);
                     markQuestions.add(markQuestion);
                 }
                 }
                 markQuestionService.saveBatch(markQuestions);
                 markQuestionService.saveBatch(markQuestions);
@@ -271,4 +286,21 @@ public class PrintFinishServiceImpl implements PrintFinishService {
             log.info("同步结构失败");
             log.info("同步结构失败");
         }
         }
     }
     }
+
+    @Override
+    public void insertPaperAnswerFile(Long examId, String paperNumber, String paperType, Long paperId) {
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumberAndPaperType(examId, paperNumber, paperType);
+        if (markPaper != null) {
+            ExamTaskPaperData examTaskPaperData = examTaskPaperDataService.selectByMultiId(new ExamTaskPaperData(examId, paperNumber, paperId));
+            if (examTaskPaperData != null && examTaskPaperData.getAnswerPdfAttachmentId() != null) {
+                BasicAttachment basicAttachment = basicAttachmentService.getById(examTaskPaperData.getAnswerPdfAttachmentId());
+                if (basicAttachment != null && StringUtils.isNotBlank(basicAttachment.getPath())) {
+                    UpdateWrapper<MarkPaper> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().set(MarkPaper::getAnswerFilePath, basicAttachment.getPath())
+                            .eq(MarkPaper::getId, markPaper.getId());
+                    markPaperService.update(updateWrapper);
+                }
+            }
+        }
+    }
 }
 }

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

@@ -101,7 +101,7 @@ public class StartRunning implements CommandLineRunner {
         Map initMarkDataJobMap = new HashMap();
         Map initMarkDataJobMap = new HashMap();
         initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
         initMarkDataJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
         quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName());
         quartzService.deleteJob(JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName());
-        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */5 * * * ?", initMarkDataJobMap);
+        quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA.getGroupName(), "0 */1 * * * ?", initMarkDataJobMap);
         log.info("增加初始化阅卷数据定时任务 end");
         log.info("增加初始化阅卷数据定时任务 end");
 
 
         // 每10分钟一次
         // 每10分钟一次