Ver código fonte

3.2.5 模式2推送bug修复

xiaofei 2 anos atrás
pai
commit
cb71e8ec97

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamDetailCourseDto.java

@@ -16,6 +16,8 @@ public class ExamDetailCourseDto extends ExamDetailCourse {
 
     private ExamTaskSyncStatusEnum syncStatus;
 
+    private String sequence;
+
     public Long getExamTaskId() {
         return examTaskId;
     }
@@ -39,4 +41,12 @@ public class ExamDetailCourseDto extends ExamDetailCourse {
     public void setSyncStatus(ExamTaskSyncStatusEnum syncStatus) {
         this.syncStatus = syncStatus;
     }
+
+    public String getSequence() {
+        return sequence;
+    }
+
+    public void setSequence(String sequence) {
+        this.sequence = sequence;
+    }
 }

+ 37 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java

@@ -171,12 +171,19 @@ public class DataSyncServiceImpl implements DataSyncService {
                         // 同步考生
                         List<SyncExamStudentDto> syncExamStudentDtoList = examStudentService.listStudentByExamDetailCourseId(examDetailCourseList);
 
-                        long count = syncExamStudentDtoList.stream().filter(m -> StringUtils.isBlank(m.getPaperType())).count();
-                        if (count > 0) {
-                            throw ExceptionResultEnum.ERROR.exception("部分学生未关联试卷类型,数量[" + count + "]");
+                        // 没有考生就单独推送科目
+                        if (CollectionUtils.isEmpty(syncExamStudentDtoList)) {
+                            for (ExamDetailCourseDto examDetailCourseDto : examDetailCourseList) {
+                                saveSubject(schoolId, thirdRelateId, examDetailCourseDto.getCourseCode(), examDetailCourseDto.getCourseName(), examDetailCourseDto.getSequence(), examDetailCourseDto.getPaperType());
+                            }
+                        } else {
+                            long count = syncExamStudentDtoList.stream().filter(m -> StringUtils.isBlank(m.getPaperType())).count();
+                            if (count > 0) {
+                                throw ExceptionResultEnum.ERROR.exception("部分学生未关联试卷类型,数量[" + count + "]");
+                            }
+                            // 同步考生
+                            saveStudent(schoolId, thirdRelateId, syncExamStudentDtoList);
                         }
-                        // 同步考生
-                        saveStudent(schoolId, thirdRelateId, syncExamStudentDtoList);
 
                         // 同步题卡
                         for (ExamDetailCourseDto examDetailCourseDto : examDetailCourseList) {
@@ -622,6 +629,31 @@ public class DataSyncServiceImpl implements DataSyncService {
         return thirdRelateId;
     }
 
+    /**
+     * 创建科目
+     *
+     * @param schoolId      学校ID
+     * @param thirdRelateId 云阅卷考试ID
+     * @param courseCode    课程代码
+     * @param sequence      课程序号
+     * @param paperType     卷型
+     */
+    public Boolean saveSubject(Long schoolId, Long thirdRelateId, String courseCode, String courseName, String sequence, String paperType) {
+        try {
+            // 支持多卷型
+            String[] paperTypes = paperType.split(",");
+            for (String type : paperTypes) {
+                //参数
+                String examId = String.valueOf(thirdRelateId);
+                String subjectCode = courseCode + type + sequence;
+                cloudMarkingTaskUtils.syncSubject(schoolId, examId, subjectCode, courseName);
+            }
+        } catch (Exception e) {
+            log.error("保存云阅卷科目数据失败");
+        }
+        return true;
+    }
+
     /**
      * 新增考生
      *

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

@@ -48,4 +48,9 @@ ALTER TABLE `exam_detail_course_paper_type`
 
 insert into exam_detail_course_paper_type select id + cast(FLOOR(RAND()*10000000000000) as signed), id, paper_type from exam_detail_course where paper_type is not null and id>0;
 
+ALTER TABLE `exam_paper_structure`
+    CHANGE COLUMN `objective_structure` `objective_structure` MEDIUMTEXT NULL DEFAULT NULL COMMENT '客观题试卷结构JSON' ,
+    CHANGE COLUMN `subjective_structure` `subjective_structure` MEDIUMTEXT NULL DEFAULT NULL COMMENT '主观题试卷结构JSON' ,
+    CHANGE COLUMN `paper_info_json` `paper_info_json` MEDIUMTEXT NULL DEFAULT NULL COMMENT '整个试卷信息json(前端提供的全部信息)' ;
+
 -----------------------3.2.5 end----------------------

+ 2 - 1
distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml

@@ -235,7 +235,8 @@
                b.paper_number  paperNumber,
                b.paper_type paperType,
                ets.third_relate_id thirdRelateId,
-               ets.sync_status syncStatus
+               ets.sync_status syncStatus,
+               et.sequence
         FROM exam_detail_course b
                  LEFT JOIN
              exam_detail c ON b.exam_detail_id = c.id

+ 2 - 3
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -124,8 +124,8 @@
                a.paper_type    paperType,
                c.package_code pachageCode,
                et.sequence
-        FROM exam_detail_course b
-                 LEFT JOIN
+        FROM (select * from exam_detail_course WHERE id = #{examDetailCourseId}) b
+                  JOIN
              exam_student a ON a.exam_detail_course_id = b.id
                  LEFT JOIN
              exam_detail c ON b.exam_detail_id = c.id
@@ -134,7 +134,6 @@
                  and c.exam_id = et.exam_id
                  and b.course_code = et.course_code
                  and b.paper_number = et.paper_number
-        WHERE b.id = #{examDetailCourseId}
     </select>
     <select id="listExamStudentBySchoolIdAndClazzId"
             resultType="com.qmth.distributed.print.business.entity.ExamStudent">

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -83,6 +83,7 @@ public class SystemConstant {
      */
     public static final String CLOUD_MARK_SCHOOL_SAVE_API = "/api/school/sub/save";
     public static final String CLOUD_MARK_EXAM_SAVE_API = "/api/exam/save";
+    public static final String CLOUD_MARK_SUBJECT_SAVE_API = "/api/exam/subject/save";
     public static final String CLOUD_MARK_EXAM_LIST_API = "/api/exams";
     public static final String CLOUD_MARK_EXAM_STUDENT_SAVE_API = "/api/exam/student/save";
     public static final String CLOUD_MARK_FILE_UPLOAD_API = "/api/file/{type}/upload";

+ 30 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/CloudMarkingTaskUtils.java

@@ -142,6 +142,36 @@ public class CloudMarkingTaskUtils {
         }
     }
 
+    /**
+     * 科目创建/更新接口
+     *
+     * @param schoolId    学校ID
+     * @param examId      云阅卷考试ID
+     * @param subjectCode 科目代码
+     * @param subjectName 科目名称
+     */
+    public Boolean syncSubject(Long schoolId, String examId, String subjectCode, String subjectName) {
+        SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
+        Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
+        String hostUrl = sysConfig.getConfigValue();
+        String examSubjectSaveUrl = SystemConstant.CLOUD_MARK_SUBJECT_SAVE_API;
+        validUrl(hostUrl, examSubjectSaveUrl);
+        String postUrl = hostUrl.concat(examSubjectSaveUrl);
+        //参数
+        Map<String, Object> map = new HashMap<>();
+        map.put("examId", validParam(examId, null, true, "云阅卷考试ID"));
+        map.put("code", validParam(subjectCode, null, true, "科目代码"));
+        map.put("name", validParam(subjectName, null, true, "科目名称"));
+
+        String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, examSubjectSaveUrl), map, null, null, null);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        if (jsonObject.containsKey("updateTime")) {
+            return true;
+        } else {
+            throw ExceptionResultEnum.ERROR.exception("科目同步失败");
+        }
+    }
+
     /**
      * 考试成绩考生查询接口
      *