소스 검색

fix:知学知考教研分析部分改造

caozixuan 1 년 전
부모
커밋
b6505eb543
15개의 변경된 파일469개의 추가작업 그리고 441개의 파일을 삭제
  1. 0 11
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/GradeBatchStudentClazzDto.java
  2. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBSyncTaskService.java
  4. 1 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java
  5. 10 19
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java
  6. 130 72
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/OpenApiServiceImpl.java
  7. 3 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TBSyncTaskServiceImpl.java
  8. 13 7
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncTeachCloudReportService.java
  9. 10 18
      distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml
  10. 7 9
      distributed-print-business/src/main/resources/mapper/GradeBatchPaperMapper.xml
  11. 1 5
      distributed-print-business/src/main/resources/mapper/GradeInitializeMapper.xml
  12. 2 10
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SyncListResult.java
  13. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/TeachCloudReportTaskUtils.java
  14. 277 272
      teachcloud-report-business/src/main/resources/db/install/teachcloud_report_db.sql
  15. 11 0
      teachcloud-report-business/src/main/resources/upgrade/3.3.0.sql

+ 0 - 11
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/GradeBatchStudentClazzDto.java

@@ -25,9 +25,6 @@ public class GradeBatchStudentClazzDto {
     @ExcelNote("试卷类型")
     private String paperType;
 
-    @ExcelNote("班级ID")
-    private String clazzId;
-
     @ExcelNote("班级名称")
     private String clazzName;
 
@@ -69,14 +66,6 @@ public class GradeBatchStudentClazzDto {
         this.paperType = paperType;
     }
 
-    public String getClazzId() {
-        return clazzId;
-    }
-
-    public void setClazzId(String clazzId) {
-        this.clazzId = clazzId;
-    }
-
     public String getClazzName() {
         return clazzName;
     }

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java

@@ -46,8 +46,8 @@ public interface ExamStudentMapper extends BaseMapper<ExamStudent> {
     ExamStudentPdfInfoDto getByStudentId(Long id);
 
     @SuppressWarnings("MybatisXMapperMethodInspection")
-
-    List<ExamStudentCourseClassDto> listExamStudentByPaperNumberAndPaperType(@Param("batchId") Long batchId, @Param("paperNumber") String paperNumber, @Param("paperType") String paperType);
+    List<ExamStudentCourseClassDto> listExamStudentByPaperNumberAndPaperType(@Param("batchId") Long batchId, @Param("examId") Long examId, @Param("paperNumber") String paperNumber,
+            @Param("paperType") String paperType);
 
     List<String> listUserClass(@Param("schoolId") Long schoolId, @Param("examId") Long examId, @Param("paperNumber") String paperNumber);
 

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

@@ -15,7 +15,7 @@ import com.qmth.teachcloud.common.enums.TaskStatusEnum;
  */
 public interface TBSyncTaskService extends IService<TBSyncTask> {
 
-    TBSyncTask saveTask(Long schoolId, Long objectId, PushTypeEnum type, String remark);
+    TBSyncTask saveTask(Long schoolId, Long semesterId, Long examId, Long objectId, PushTypeEnum type, String remark);
 
     TBSyncTask saveTask(Long schoolId, Long semesterId, Long examId, String courseCode, String courseName, String paperNumber, String paperType, PushTypeEnum type, String remark);
 

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

@@ -21,7 +21,6 @@ import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -85,7 +84,6 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
         }
 
         List<GradeBatchPaperResult> datasource = this.baseMapper.findAbleAnalyzePaper(gradeBatch.getSemesterId(), examId, collegeId, courseCode, SystemConstant.translateSpecificSign(teacherName), dpr, schoolId);
-        List<GradeBatchPaperResult> needAddList = new ArrayList<>();
         for (GradeBatchPaperResult gradeBatchPaperResult : datasource) {
             // 额外处理开课学院
             Long teachingRoomId = gradeBatchPaperResult.getTeachingRoomId();
@@ -95,18 +93,8 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
             }
             gradeBatchPaperResult.setTeachCollegeId(teachCollege.getId());
             gradeBatchPaperResult.setTeachCollegeName(teachCollege.getName());
-
-            // 需要拆分的试卷类型
-            String paperType = gradeBatchPaperResult.getPaperType();
-            for (String paperTypeCell : paperType.split(",")) {
-                GradeBatchPaperResult needAdd = new GradeBatchPaperResult();
-                BeanUtils.copyProperties(gradeBatchPaperResult, needAdd);
-                needAdd.setPaperType(paperTypeCell);
-                needAdd.setPaperName(needAdd.getCourseName() + SystemConstant.HYPHEN + paperTypeCell);
-                needAddList.add(needAdd);
-            }
         }
-        return needAddList.stream().sorted(Comparator.comparing(GradeBatchPaperResult::getSemesterName)
+        return datasource.stream().sorted(Comparator.comparing(GradeBatchPaperResult::getSemesterName)
                 .thenComparing(GradeBatchPaperResult::getExamName)
                 .thenComparing(GradeBatchPaperResult::getTeachCollegeId)
                 .thenComparing(GradeBatchPaperResult::getCourseCode)

+ 10 - 19
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java

@@ -158,8 +158,8 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
 
         List<ExamStudentCourseClassDto> finalList = new ArrayList<>();
         for (GradeBatchPaper gradeBatchPaper : gradeBatchPaperList) {
-            // TODO: 2023/4/13  
-            List<ExamStudentCourseClassDto> examStudentClassList = examStudentMapper.listExamStudentByPaperNumberAndPaperType(batchId, gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
+            List<ExamStudentCourseClassDto> examStudentClassList = examStudentMapper.listExamStudentByPaperNumberAndPaperType(
+                    batchId, gradeBatchPaper.getExamId(), gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
             if (!examStudentClassList.isEmpty()) {
                 finalList.addAll(examStudentClassList);
             }
@@ -224,7 +224,7 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
 
         XSSFRow headRow = sheet.createRow(0);
         // 表头
-        String[] fieldsNameList = {"课程代码", "课程名称", "试卷编号", "试卷类型", "班级ID", "班级名称", "任课老师", "任课老师工号"};
+        String[] fieldsNameList = {"课程代码", "课程名称", "试卷编号", "试卷类型", "班级名称", "任课老师", "任课老师工号"};
         for (int i = 0; i < fieldsNameList.length; i++) {
             XSSFCell cell = headRow.createCell(i);
             cell.setCellValue(fieldsNameList[i]);
@@ -258,25 +258,20 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
             XSSFCell cell4 = row.createCell(4);
             cell4.setCellStyle(lockStyle);
             cell4.setCellStyle(dataStyle);
-            cell4.setCellValue(examStudentCourseDto.getClazzId());
+            cell4.setCellValue(examStudentCourseDto.getClazzName());
 
             XSSFCell cell5 = row.createCell(5);
-            cell5.setCellStyle(lockStyle);
-            cell5.setCellStyle(dataStyle);
-            cell5.setCellValue(examStudentCourseDto.getClazzName());
+            cell5.setCellStyle(unlockStyle);
+            cell5.setCellType(CellType.STRING);
+            if (StringUtils.isNotBlank(examStudentCourseDto.getTeacherName())) {
+                cell5.setCellValue(examStudentCourseDto.getTeacherName());
+            }
 
             XSSFCell cell6 = row.createCell(6);
             cell6.setCellStyle(unlockStyle);
             cell6.setCellType(CellType.STRING);
-            if (StringUtils.isNotBlank(examStudentCourseDto.getTeacherName())) {
-                cell6.setCellValue(examStudentCourseDto.getTeacherName());
-            }
-
-            XSSFCell cell7 = row.createCell(7);
-            cell7.setCellStyle(unlockStyle);
-            cell7.setCellType(CellType.STRING);
             if (StringUtils.isNotBlank(examStudentCourseDto.getTeacherNumber())) {
-                cell7.setCellValue(examStudentCourseDto.getTeacherNumber());
+                cell6.setCellValue(examStudentCourseDto.getTeacherNumber());
             }
         }
 
@@ -326,9 +321,6 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
                     if (StringUtils.isBlank(gradeBatchStudentClazzDto.getPaperType())) {
                         excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[试卷类型]必填"));
                     }
-                    if (StringUtils.isBlank(gradeBatchStudentClazzDto.getClazzId())) {
-                        excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[班级ID]必填"));
-                    }
                     if (StringUtils.isBlank(gradeBatchStudentClazzDto.getClazzName())) {
                         excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[班级名称]必填"));
                     }
@@ -396,7 +388,6 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
             gradeBatchStudentClazz.setCourseName(m.getCourseName());
             gradeBatchStudentClazz.setPaperNumber(m.getPaperNumber());
             gradeBatchStudentClazz.setPaperType(m.getPaperType());
-            gradeBatchStudentClazz.setClazzId(m.getClazzId());
             gradeBatchStudentClazz.setClazzName(m.getClazzName());
             gradeBatchStudentClazz.setTeacherName(m.getTeacherName());
             gradeBatchStudentClazz.setTeacherNumber(m.getTeacherNumber());

+ 130 - 72
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/OpenApiServiceImpl.java

@@ -8,10 +8,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.dto.open.*;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.service.*;
-import com.qmth.teachcloud.common.entity.BasicMajor;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
+import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.service.BasicMajorService;
+import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
+import com.qmth.teachcloud.mark.dto.mark.ScoreItem;
+import com.qmth.teachcloud.mark.entity.MarkPaper;
+import com.qmth.teachcloud.mark.entity.MarkStudent;
+import com.qmth.teachcloud.mark.service.MarkPaperService;
+import com.qmth.teachcloud.mark.service.MarkQuestionService;
+import com.qmth.teachcloud.mark.service.MarkStudentService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -20,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class OpenApiServiceImpl implements OpenApiService {
@@ -54,6 +63,15 @@ public class OpenApiServiceImpl implements OpenApiService {
     @Resource
     private GradeBatchService gradeBatchService;
 
+    @Resource
+    private MarkPaperService markPaperService;
+
+    @Resource
+    private MarkStudentService markStudentService;
+
+    @Resource
+    private MarkQuestionService markQuestionService;
+
     @Override
     public PaperConfig getPaperConfig(BasicSchool basicSchool, String thirdExamId, String gradeCourseCode) {
         GradeBatchPaper gradeBatchPaper = gradeBatchPaperService.findByThirdExamIdAndGradeCourseCode(basicSchool.getId(), thirdExamId, gradeCourseCode);
@@ -61,11 +79,13 @@ public class OpenApiServiceImpl implements OpenApiService {
             return null;
         }
         Long examId = null;
-        GradeBatch gradeBatch = gradeBatchService.getOne(new QueryWrapper<GradeBatch>().lambda().eq(GradeBatch::getThirdExamId,thirdExamId));
-        if (Objects.nonNull(gradeBatch)){
+        GradeBatch gradeBatch = gradeBatchService.getOne(
+                new QueryWrapper<GradeBatch>().lambda().eq(GradeBatch::getThirdExamId, thirdExamId));
+        if (Objects.nonNull(gradeBatch)) {
             examId = gradeBatch.getExamId();
         }
-        return gradePaperService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(),examId, gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
+        return gradePaperService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(), examId,
+                gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
     }
 
     @Override
@@ -74,7 +94,8 @@ public class OpenApiServiceImpl implements OpenApiService {
         if (gradeBatchPaper == null) {
             return new ArrayList<>();
         }
-        return gradePaperDimensionService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(),gradeBatchPaper.getExamId(), gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
+        return gradePaperDimensionService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(),
+                gradeBatchPaper.getExamId(), gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
     }
 
     @Override
@@ -83,7 +104,8 @@ public class OpenApiServiceImpl implements OpenApiService {
         if (gradeBatchPaper == null) {
             return new ArrayList<>();
         }
-        return gradePaperStructService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(),gradeBatchPaper.getExamId(), gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
+        return gradePaperStructService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(),
+                gradeBatchPaper.getExamId(), gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
     }
 
     @Override
@@ -94,12 +116,15 @@ public class OpenApiServiceImpl implements OpenApiService {
             return paperEvaluations;
         }
         Long examId = null;
-        GradeBatch gradeBatch = gradeBatchService.getOne(new QueryWrapper<GradeBatch>().lambda().eq(GradeBatch::getThirdExamId,thirdExamId));
-        if (Objects.nonNull(gradeBatch)){
+        GradeBatch gradeBatch = gradeBatchService.getOne(
+                new QueryWrapper<GradeBatch>().lambda().eq(GradeBatch::getThirdExamId, thirdExamId));
+        if (Objects.nonNull(gradeBatch)) {
             examId = gradeBatch.getExamId();
         }
-        List<GradeModuleDefine> gradeModuleDefineList = gradeModuleDefineService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(),examId, gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
-        List<GradeModuleEvaluation> gradeModuleEvaluationList = gradeModuleEvaluationService.findBySchoolIdAndPaperNumberAndPaperType(gradeBatchPaper.getSchoolId(),examId, gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
+        List<GradeModuleDefine> gradeModuleDefineList = gradeModuleDefineService.findBySchoolIdAndPaperNumberAndPaperType(
+                gradeBatchPaper.getSchoolId(), examId, gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
+        List<GradeModuleEvaluation> gradeModuleEvaluationList = gradeModuleEvaluationService.findBySchoolIdAndPaperNumberAndPaperType(
+                gradeBatchPaper.getSchoolId(), examId, gradeBatchPaper.getPaperNumber(), gradeBatchPaper.getPaperType());
         // 分组(分隔符_)
         if (!gradeModuleDefineList.isEmpty()) {
 
@@ -129,7 +154,8 @@ public class OpenApiServiceImpl implements OpenApiService {
 
                 if (!gradeModuleEvaluationList.isEmpty()) {
                     GradeModuleEvaluation gradeModuleEvaluation = gradeModuleEvaluationList.stream().filter(m -> moduleType.equals(m.getModuleType().name())).findFirst().orElseGet(null);
-                    paperEvaluation.setFormula(gradeModuleEvaluation == null ? null : gradeModuleEvaluation.getFormula().name());
+                    paperEvaluation.setFormula(
+                            gradeModuleEvaluation == null ? null : gradeModuleEvaluation.getFormula().name());
 
                     List<PaperEvaluation.ModuleEvaluation> moduleEvaluationList = gradeModuleEvaluationList.stream().filter(m -> moduleType.equals(m.getModuleType().name())).map(m -> {
                         PaperEvaluation.ModuleEvaluation moduleEvaluation = new PaperEvaluation.ModuleEvaluation();
@@ -153,78 +179,110 @@ public class OpenApiServiceImpl implements OpenApiService {
     @Override
     public List<ExamStudentScore> listExamStudentScore(BasicSchool basicSchool, String thirdExamId, String gradeCourseCode, Integer pageNumber, Integer pageSize) {
         GradeBatchPaper gradeBatchPaper = gradeBatchPaperService.findByThirdExamIdAndGradeCourseCode(basicSchool.getId(), thirdExamId, gradeCourseCode);
-        List<ExamStudentScore> examStudentScoreList = new ArrayList<>();
-        if (gradeBatchPaper == null) {
-            return examStudentScoreList;
-        }
+        Long examId = gradeBatchPaper.getExamId();
+        String paperNumber = gradeBatchPaper.getPaperNumber();
+        String paperType = gradeBatchPaper.getPaperType();
 
-        QueryWrapper<ExamTask> examTaskQueryWrapper = new QueryWrapper<>();
-        examTaskQueryWrapper.lambda()
-                .eq(ExamTask::getSchoolId, gradeBatchPaper.getSchoolId())
-                .eq(ExamTask::getExamId,gradeBatchPaper.getExamId())
-                .eq(ExamTask::getPaperNumber, gradeBatchPaper.getPaperNumber());
-        ExamTask examTask = examTaskService.getOne(examTaskQueryWrapper);
-        if (examTask == null) {
-            return examStudentScoreList;
+        MarkPaper markPaper = markPaperService.getOne(
+                new QueryWrapper<MarkPaper>().lambda().eq(MarkPaper::getExamId, examId)
+                        .eq(MarkPaper::getPaperNumber, paperNumber).eq(MarkPaper::getPaperType, paperType).last("limit 1"));
+
+        if (Objects.isNull(markPaper)) {
+            throw ExceptionResultEnum.ERROR.exception(
+                    String.format("考试id为[%s],试卷编号为[%s],试卷类型为[%s]的考试科目不存在", examId, paperNumber, paperType));
+        }
+        if (!MarkPaperStatus.FINISH.equals(markPaper.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception(
+                    String.format("考试id为[%s],试卷编号为[%s],试卷类型为[%s]的考试科目未评卷结束,不能开始分析计算", examId, paperNumber, paperType));
         }
+        QueryWrapper<MarkStudent> markStudentQueryWrapper = new QueryWrapper<>();
+        markStudentQueryWrapper.lambda().eq(MarkStudent::getExamId, examId).eq(MarkStudent::getPaperNumber, paperNumber)
+                .eq(MarkStudent::getPaperType, paperType);
 
+        Page<MarkStudent> page = new Page<>(pageNumber, pageSize);
+        IPage<MarkStudent> markStudentIPage = markStudentService.page(page, markStudentQueryWrapper);
+
+        // 任课老师
         QueryWrapper<GradeBatchStudentClazz> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(GradeBatchStudentClazz::getBatchId, gradeBatchPaper.getBatchId());
         List<GradeBatchStudentClazz> gradeBatchStudentClazzList = gradeBatchStudentClazzService.list(queryWrapper);
 
-        QueryWrapper<TSyncExamStudentScore> examStudentScoreQueryWrapper = new QueryWrapper<>();
-        String subjectCode = examTask.getCourseCode() + gradeBatchPaper.getPaperType() + examTask.getSequence();
-        examStudentScoreQueryWrapper.lambda().eq(TSyncExamStudentScore::getSchoolId, gradeBatchPaper.getSchoolId())
-                .eq(TSyncExamStudentScore::getSubjectCode, subjectCode);
+        // 试卷结构
+        // 客观题架构
+        List<MarkQuestion> os = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber,
+                paperType, true);
+        // 主观题结构
+        List<MarkQuestion> ss = markQuestionService.listByExamIdAndPaperNumberAndPaperType(examId, paperNumber,
+                paperType, false);
 
-        Page<TSyncExamStudentScore> page = new Page<>(pageNumber, pageSize);
-        IPage<TSyncExamStudentScore> tSyncExamStudentScoreIPage = tSyncExamStudentScoreService.page(page, examStudentScoreQueryWrapper);
-        examStudentScoreList = tSyncExamStudentScoreIPage.getRecords().stream().map(m -> {
+        return markStudentIPage.getRecords().stream().flatMap(e -> {
             ExamStudentScore examStudentScore = new ExamStudentScore();
-            String syncData = m.getSyncData();
-            JSONObject jsonObject = JSON.parseObject(syncData);
-            List<ExamStudentScore.TopicInfo> objectiveTopic = new ArrayList<>();
-            if (jsonObject.containsKey("objectiveScoreDetail")) {
-                String objective = jsonObject.getString("objectiveScoreDetail");
-                objectiveTopic = JSON.parseArray(objective, ExamStudentScore.TopicInfo.class);
+            examStudentScore.setName(e.getStudentName());
+            examStudentScore.setExamNumber(e.getStudentCode());
+            examStudentScore.setStudentCode(e.getStudentCode());
+            examStudentScore.setPaperNumber(gradeBatchPaper.getPaperNumber());
+            examStudentScore.setPaperName(e.getCourseName());
+            examStudentScore.setPaperType(paperType);
+            examStudentScore.setCollege(e.getCollege());
+            examStudentScore.setMajor(SystemConstant.strNotNull(e.getMajorName()) ? e.getMajorName() : "未知专业");
+            examStudentScore.setClassName(SystemConstant.strNotNull(e.getClassName()) ? e.getClassName() : "未知班级");
+
+            List<GradeBatchStudentClazz> gradeBatchStudentClasses = gradeBatchStudentClazzList.isEmpty() ?
+                    null :
+                    gradeBatchStudentClazzList.stream()
+                            .filter(s -> s.getClazzName().equals(e.getClassName()) && s.getPaperNumber().equals(examStudentScore.getPaperNumber()) && s.getPaperType()
+                                    .equals(examStudentScore.getPaperType())).collect(Collectors.toList());
+
+            GradeBatchStudentClazz gradeBatchStudentClazz = gradeBatchStudentClasses == null || gradeBatchStudentClasses.isEmpty() ?
+                    null :
+                    gradeBatchStudentClasses.get(0);
+            if (gradeBatchStudentClazz == null) {
+                throw ExceptionResultEnum.ERROR.exception(
+                        String.format("科目[%s],试卷编号[%s],班级[%s]未导入任课老师", e.getCourseName(), e.getPaperNumber(), e.getClassName()));
             }
-            examStudentScore.setObjectiveScoreDetail(objectiveTopic);
 
-            List<ExamStudentScore.TopicInfo> subjectiveTopic = new ArrayList<>();
-            if (jsonObject.containsKey("subjectiveScoreDetail")) {
-                String subjective = jsonObject.getString("subjectiveScoreDetail");
-                subjectiveTopic = JSON.parseArray(subjective, ExamStudentScore.TopicInfo.class);
+            examStudentScore.setTeacherName(gradeBatchStudentClazz.getTeacherName());
+            examStudentScore.setTeacherCode(gradeBatchStudentClazz.getTeacherNumber());
+            int status = 1;
+            if (e.getAbsent() || e.getManualAbsent() || e.getOmrAbsent()) {
+                status = 2;
+            } else if (e.getBreach()) {
+                status = 3;
             }
-            examStudentScore.setSubjectiveScoreDetail(subjectiveTopic);
-
-            if (objectiveTopic.isEmpty() && subjectiveTopic.isEmpty()) {
-                return null;
-            } else {
-                examStudentScore.setName(m.getName());
-                examStudentScore.setStudentCode(m.getStudentCode());
-                examStudentScore.setExamNumber(m.getExamNumber());
-                examStudentScore.setPaperNumber(gradeBatchPaper.getPaperNumber());
-                examStudentScore.setPaperName(m.getSubjectName());
-                examStudentScore.setPaperType(gradeBatchPaper.getPaperType());
-                examStudentScore.setCollege(m.getCollege());
-                examStudentScore.setMajor(m.getMajorName());
-                examStudentScore.setClassName(m.getClazzName());
-                List<GradeBatchStudentClazz> gradeBatchStudentClazzs = gradeBatchStudentClazzList.isEmpty() ? null : gradeBatchStudentClazzList.stream().filter(s -> s.getClazzId().equals(m.getClazzId().toString()) && s.getPaperNumber().equals(examStudentScore.getPaperNumber()) && s.getPaperType().equals(examStudentScore.getPaperType())).collect(Collectors.toList());
-                GradeBatchStudentClazz gradeBatchStudentClazz = gradeBatchStudentClazzs == null || gradeBatchStudentClazzs.isEmpty() ? null : gradeBatchStudentClazzs.get(0);
-                if(gradeBatchStudentClazz == null){
-                    throw ExceptionResultEnum.ERROR.exception(String.format("科目[%s],试卷编号[%s],班级[%s]未导入任课老师", examTask.getCourseName(), examTask.getPaperNumber(), m.getClazzName()));
-                }
-                examStudentScore.setTeacherName(gradeBatchStudentClazz.getTeacherName());
-                examStudentScore.setTeacherCode(gradeBatchStudentClazz.getTeacherNumber());
-                examStudentScore.setStatus(m.getStatus());
-                examStudentScore.setTotalScore(m.getTotalScore());
-                examStudentScore.setObjectiveScore(m.getObjectiveScore());
-                examStudentScore.setSubjectiveScore(m.getSubjectiveScore());
-
-                return examStudentScore;
+            examStudentScore.setStatus(status);
+            examStudentScore.setTotalScore(e.getTotalScore());
+            examStudentScore.setObjectiveScore(e.getObjectiveScore());
+            examStudentScore.setSubjectiveScore(e.getSubjectiveScore());
+            // 客观题详情
+            List<ScoreItem> objectiveScoreList = e.getScoreList(true, os);
+            // 主观题详情
+            List<ScoreItem> subjectiveScoreList = e.getScoreList(false, ss);
+            List<ExamStudentScore.TopicInfo> objectiveScoreDetail;
+            List<ExamStudentScore.TopicInfo> subjectiveScoreDetail;
+            if (CollectionUtils.isNotEmpty(objectiveScoreList)) {
+                objectiveScoreDetail = objectiveScoreList.stream().flatMap(ol -> {
+                    ExamStudentScore.TopicInfo topicInfo = new ExamStudentScore.TopicInfo();
+                    topicInfo.setMainNumber(ol.getMainNumber());
+                    topicInfo.setSubNumber(String.valueOf(ol.getSubNumber()));
+                    topicInfo.setAnswer(ol.getAnswer());
+                    topicInfo.setScore(ol.getScoreString());
+                    return Stream.of(topicInfo);
+                }).collect(Collectors.toList());
+                examStudentScore.setObjectiveScoreDetail(objectiveScoreDetail);
+            }
+
+            if (CollectionUtils.isNotEmpty(subjectiveScoreList)) {
+                subjectiveScoreDetail = subjectiveScoreList.stream().flatMap(sl -> {
+                    ExamStudentScore.TopicInfo topicInfo = new ExamStudentScore.TopicInfo();
+                    topicInfo.setMainNumber(sl.getMainNumber());
+                    topicInfo.setSubNumber(String.valueOf(sl.getSubNumber()));
+                    topicInfo.setAnswer(sl.getAnswer());
+                    topicInfo.setScore(sl.getScoreString());
+                    return Stream.of(topicInfo);
+                }).collect(Collectors.toList());
+                examStudentScore.setSubjectiveScoreDetail(subjectiveScoreDetail);
             }
-        }).collect(Collectors.toList());
-        List<ExamStudentScore> list = examStudentScoreList.stream().filter(Objects::nonNull).collect(Collectors.toList());
-        return list;
+            return Stream.of(examStudentScore);
+        }).filter(Objects::nonNull).collect(Collectors.toList());
     }
 }

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

@@ -48,7 +48,7 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
 
     @Transactional
     @Override
-    public TBSyncTask saveTask(Long schoolId, Long objectId, PushTypeEnum type, String remark) {
+    public TBSyncTask saveTask(Long schoolId, Long semesterId, Long examId, Long objectId, PushTypeEnum type, String remark) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         QueryWrapper<TBSyncTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(TBSyncTask::getSchoolId, schoolId)
@@ -66,6 +66,8 @@ public class TBSyncTaskServiceImpl extends ServiceImpl<TBSyncTaskMapper, TBSyncT
         tbSyncTask = new TBSyncTask();
         tbSyncTask.setId(id);
         tbSyncTask.setSchoolId(schoolId);
+        tbSyncTask.setSemesterId(semesterId);
+        tbSyncTask.setExamId(examId);
         tbSyncTask.setObjectId(objectId);
         tbSyncTask.setType(type);
         tbSyncTask.setRemark(remark);

+ 13 - 7
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncTeachCloudReportService.java

@@ -39,34 +39,40 @@ public class AsyncTeachCloudReportService {
      * @param gradeBatch 分析批次对象
      */
     public void syncGradeBatch(GradeBatch gradeBatch) {
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_PUSH, null);
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getSemesterId(),
+                gradeBatch.getExamId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_PUSH, null);
         dataSyncReportService.syncGradeBatch(gradeBatch, tbSyncTask);
     }
 
     /**
      * 开始计算
+     *
      * @param gradeBatch 分析批次对象
      */
     public void startCalc(GradeBatch gradeBatch) {
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.CALCULATE, null);
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getSemesterId(),
+                gradeBatch.getExamId(), gradeBatch.getId(), PushTypeEnum.CALCULATE, null);
         dataSyncReportService.startCalc(gradeBatch, tbSyncTask);
     }
 
     public void publish(GradeBatchPaper gradeBatchPaper) {
         GradeBatch gradeBatch = gradeBatchService.getById(gradeBatchPaper.getBatchId());
-        if(gradeBatch == null){
+        if (gradeBatch == null) {
             throw ExceptionResultEnum.ERROR.exception("没有批次信息");
         }
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatchPaper.getSchoolId(), gradeBatchPaper.getId(), PushTypeEnum.PUBLISH, null);
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatchPaper.getSchoolId(), gradeBatch.getSemesterId(),
+                gradeBatch.getExamId(), gradeBatchPaper.getId(), PushTypeEnum.PUBLISH, null);
         dataSyncReportService.publish(gradeBatch, gradeBatchPaper, tbSyncTask);
     }
 
     /**
      * 删除批次
+     *
      * @param gradeBatch 批次
      */
-    public void deleteGradeBatch(GradeBatch gradeBatch){
-        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_DELETE, null);
-        dataSyncReportService.deleteGradeBatch(gradeBatch,tbSyncTask);
+    public void deleteGradeBatch(GradeBatch gradeBatch) {
+        TBSyncTask tbSyncTask = tbSyncTaskService.saveTask(gradeBatch.getSchoolId(), gradeBatch.getSemesterId(),
+                gradeBatch.getExamId(), gradeBatch.getId(), PushTypeEnum.GRADE_BATCH_DELETE, null);
+        dataSyncReportService.deleteGradeBatch(gradeBatch, tbSyncTask);
     }
 }

+ 10 - 18
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -185,30 +185,22 @@
             a.course_name courseName,
             a.paper_number paperNumber,
             a.paper_type paperType,
-            a.clazz_id clazzId,
             a.clazz_name clazzName,
             b.teacher_name teacherName,
             b.teacher_number teacherNumber
         FROM
             (SELECT DISTINCT
-                 edc.course_code,
-                 edc.course_name,
-                 edc.paper_number,
-                 es.paper_type,
-                 CASE es.student_clazz_type
-                     WHEN 'TEACH_CLAZZ' THEN es.teach_clazz_id
-                     WHEN 'BASIC_CLAZZ' THEN es.clazz_id
-                     END clazz_id,
-                 CASE es.student_clazz_type
-                     WHEN 'TEACH_CLAZZ' THEN es.teach_clazz_name
-                     WHEN 'BASIC_CLAZZ' THEN es.clazz_name
-                     END clazz_name
+                 ms.course_code,
+                 ms.course_name,
+                 ms.paper_number,
+                 ms.paper_type,
+                 ms.class_name as clazz_name
              FROM
-                 exam_student es
-                     JOIN exam_detail_course edc ON es.exam_detail_course_id = edc.id
+                 mark_student ms
              WHERE
-                 edc.paper_number = #{paperNumber}
-               AND es.paper_type = #{paperType}) a
+                 ms.exam_id = #{examId}
+               AND ms.paper_number = #{paperNumber}
+               AND ms.paper_type = #{paperType}) a
                 LEFT JOIN
             (SELECT
                  *
@@ -218,7 +210,7 @@
                  batch_id = #{batchId}) b ON a.course_code = b.course_code
                 AND a.paper_number = b.paper_number
                 AND a.paper_type = b.paper_type
-                AND a.clazz_id = b.clazz_id
+                AND a.clazz_name = b.clazz_name
     </select>
     <select id="listUserClass" resultType="java.lang.String">
         SELECT DISTINCT

+ 7 - 9
distributed-print-business/src/main/resources/mapper/GradeBatchPaperMapper.xml

@@ -88,21 +88,19 @@
             et.teaching_room_id AS teachingRoomId,
             su.real_name AS teacherName,
             et.paper_number AS paperNumber,
-            etd.exposed_paper_type AS paperType
+            mp.paper_type AS paperType
         FROM
-            exam_task et
-                INNER JOIN
-            exam_task_detail etd ON et.id = etd.exam_task_id
+            mark_paper mp
                 LEFT JOIN
-            basic_exam be ON be.school_id = et.school_id
-                AND be.id = et.exam_id
+            exam_task et ON mp.exam_id = et.exam_id
+                AND mp.paper_number = et.paper_number
                 LEFT JOIN
-            basic_semester bs ON bs.school_id = et.school_id
-                AND bs.id = be.semester_id
+            basic_exam be ON be.id = et.exam_id
+                LEFT JOIN
+            basic_semester bs ON bs.id = be.semester_id
                 LEFT JOIN
             sys_user su ON et.user_id = su.id
         <where>
-            AND etd.exposed_paper_type != ''
             <if test="schoolId != null and schoolId != ''">
                 AND et.school_id = #{schoolId}
             </if>

+ 1 - 5
distributed-print-business/src/main/resources/mapper/GradeInitializeMapper.xml

@@ -14,8 +14,7 @@
             pnpt.paper_type AS paperType,
             pnpt.paper_name AS paperName,
             pnpt.status AS status,
-            pnpt.publish_status AS publishStatus,
-            eps.structure_change AS structureChange
+            pnpt.publish_status AS publishStatus
         FROM
             exam_task et
                 INNER JOIN
@@ -42,9 +41,6 @@
             basic_exam be ON et.exam_id = be.id AND be.enable
                 INNER JOIN
             basic_semester bs ON bs.id = be.semester_id AND bs.enable
-                LEFT JOIN
-            exam_paper_structure eps ON et.school_id = eps.school_id
-                AND et.paper_number = eps.paper_number AND eps.paper_type = pnpt.paper_type AND et.exam_id = eps.exam_id
         <where>
             <if test="schoolId != null and schoolId != ''">
                 AND et.school_id = #{schoolId}

+ 2 - 10
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/SyncListResult.java

@@ -46,8 +46,8 @@ public class SyncListResult implements Serializable {
     @ApiModelProperty(value = "同步对象ID(包含计划ID、试卷结构ID)")
     private String objectId;
 
-    @ApiModelProperty(value = "云阅卷考试ID")
-    private String thirdRelateId;
+//    @ApiModelProperty(value = "云阅卷考试ID")
+//    private String thirdRelateId;
 
     @ApiModelProperty(value = "任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成")
     private String status;
@@ -221,14 +221,6 @@ public class SyncListResult implements Serializable {
         this.resultStr = resultStr;
     }
 
-    public String getThirdRelateId() {
-        return thirdRelateId;
-    }
-
-    public void setThirdRelateId(String thirdRelateId) {
-        this.thirdRelateId = thirdRelateId;
-    }
-
     public String getRemark() {
         return remark;
     }

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/sync/TeachCloudReportTaskUtils.java

@@ -386,7 +386,7 @@ public class TeachCloudReportTaskUtils {
      */
     private void validUrl(String... urls) {
         if (StringUtils.isAnyBlank(urls)) {
-            throw ExceptionResultEnum.ERROR.exception("云阅卷同步接口未正确配置");
+            throw ExceptionResultEnum.ERROR.exception("教研分析同步接口未正确配置");
         }
     }
 }

+ 277 - 272
teachcloud-report-business/src/main/resources/db/install/teachcloud_report_db.sql

@@ -14,7 +14,7 @@ CREATE TABLE `basic_attachment` (
                                     `create_time` bigint DEFAULT NULL COMMENT '创建时间',
                                     `obj_id` bigint DEFAULT NULL COMMENT '关联业务id',
                                     PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='所有附件记录表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='所有附件记录表';
 
 -- ----------------------------
 -- Table structure for basic_campus
@@ -34,7 +34,7 @@ CREATE TABLE `basic_campus` (
                                 `update_time` bigint DEFAULT NULL COMMENT '更新时间',
                                 PRIMARY KEY (`id`) USING BTREE,
                                 UNIQUE KEY `campus_schoolId_code_idx` (`school_id`,`campus_code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='基础校区表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础校区表';
 
 -- ----------------------------
 -- Table structure for basic_course
@@ -55,7 +55,7 @@ CREATE TABLE `basic_course` (
                                 `enable` tinyint DEFAULT NULL,
                                 `short_code` varchar(10) DEFAULT NULL COMMENT '简码',
                                 PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='课程基础表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程基础表';
 
 -- ----------------------------
 -- Table structure for basic_school
@@ -70,13 +70,15 @@ CREATE TABLE `basic_school` (
                                 `access_key` varchar(64) DEFAULT NULL COMMENT '访问key',
                                 `access_secret` varchar(64) DEFAULT NULL COMMENT '访问secret',
                                 `remark` text COMMENT '备注',
-                                `logo` mediumtext DEFAULT NULL COMMENT 'logo',
                                 `create_id` bigint DEFAULT NULL COMMENT '创建人',
                                 `create_time` bigint DEFAULT NULL COMMENT '创建时间',
                                 `update_time` bigint DEFAULT NULL COMMENT '更新时间',
                                 `update_id` bigint DEFAULT NULL COMMENT '更新人',
+                                `logo` mediumtext DEFAULT NULL COMMENT 'logo',
+                                `init_password` varchar(100) DEFAULT NULL COMMENT '该学校用户的初始密码,默认为12345678',
+                                `default_school` TINYINT(1) NULL DEFAULT 0 COMMENT '默认学校',
                                 PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='学校基础表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校基础表';
 
 -- ----------------------------
 -- Table structure for basic_semester
@@ -98,7 +100,7 @@ CREATE TABLE `basic_semester` (
                                   `in_used` tinyint DEFAULT NULL COMMENT '是否当前使用学期',
                                   PRIMARY KEY (`id`) USING BTREE,
                                   UNIQUE KEY `semester_schoolId_name_idx` (`school_id`,`name`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='学期字典表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学期字典表';
 
 -- ----------------------------
 -- Table structure for basic_user_course
@@ -113,7 +115,7 @@ CREATE TABLE `basic_user_course` (
                                      `update_id` bigint DEFAULT NULL,
                                      `update_time` bigint DEFAULT NULL,
                                      PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户和课程关联表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户和课程关联表';
 
 -- ----------------------------
 -- Table structure for basic_verify_code
@@ -133,7 +135,7 @@ CREATE TABLE `basic_verify_code` (
                                      `school_id` bigint DEFAULT NULL COMMENT '学校id',
                                      `org_id` bigint DEFAULT NULL COMMENT '机构id',
                                      PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='短信验证码记录表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='短信验证码记录表';
 
 -- ----------------------------
 -- Table structure for grade_batch_student
@@ -156,7 +158,7 @@ CREATE TABLE `grade_batch_student` (
                                        `update_id` bigint DEFAULT NULL,
                                        `update_time` bigint DEFAULT NULL,
                                        PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考务数据(包含任课老师)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考务数据(包含任课老师)';
 
 -- ----------------------------
 -- Table structure for sys_config
@@ -177,7 +179,7 @@ CREATE TABLE `sys_config` (
                               `update_id` bigint DEFAULT NULL,
                               `update_time` bigint DEFAULT NULL,
                               PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参数表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参数表';
 
 -- ----------------------------
 -- Table structure for sys_org
@@ -199,7 +201,7 @@ CREATE TABLE `sys_org` (
                            `third_relate_id` int DEFAULT NULL COMMENT '云阅卷机构ID',
                            PRIMARY KEY (`id`) USING BTREE,
                            UNIQUE KEY `org_schoolId_code_idx` (`school_id`,`code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='学校组织架构';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校组织架构';
 
 -- ----------------------------
 -- Table structure for sys_privilege
@@ -219,7 +221,7 @@ CREATE TABLE `sys_privilege` (
                                  `front_display` tinyint DEFAULT '1' COMMENT '是否前端展示',
                                  PRIMARY KEY (`id`) USING BTREE,
                                  UNIQUE KEY `privilege_index` (`name`,`url`,`type`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='菜单权限表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='菜单权限表';
 
 -- ----------------------------
 -- Table structure for sys_role
@@ -240,7 +242,7 @@ CREATE TABLE `sys_role` (
                             `source` varchar(100) DEFAULT NULL COMMENT '角色来源,ANALYSIS:教研分析',
                             `interpret` varchar(1000) DEFAULT NULL COMMENT '角色说明',
                             PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='角色表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
 
 -- ----------------------------
 -- Table structure for sys_role_privilege
@@ -251,8 +253,9 @@ CREATE TABLE `sys_role_privilege` (
                                       `role_id` bigint NOT NULL COMMENT '角色ID',
                                       `privilege_id` bigint NOT NULL COMMENT '菜单ID',
                                       `enable` tinyint DEFAULT '1' COMMENT '是否禁用,false:禁用,true:启用',
+                                      `school_id` bigint DEFAULT NULL COMMENT '内置角色,按学校自定义的权限',
                                       PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=1544156395426516994 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='角色和菜单关联表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和菜单关联表';
 
 -- ----------------------------
 -- Table structure for sys_user
@@ -277,9 +280,11 @@ CREATE TABLE `sys_user` (
                             `pwd_count` tinyint DEFAULT '0' COMMENT '密码修改次数,默认为0',
                             `sync_status` varchar(100) DEFAULT NULL COMMENT '同步状态,NEED_PUSH_AGAIN("需要重新推送"),',
                             `historic_name` varchar(100) DEFAULT NULL COMMENT '历史用户名称',
+                            `ui_setting` text COMMENT '阅卷参数',
+							`allow_manual_card` tinyint(1) DEFAULT '0' COMMENT '是否允许新增卡格式',
                             PRIMARY KEY (`id`) USING BTREE,
                             UNIQUE KEY `user_schoolId_loginName_idx` (`school_id`,`login_name`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
 
 -- ----------------------------
 -- Table structure for sys_user_role
@@ -292,7 +297,7 @@ CREATE TABLE `sys_user_role` (
                                  `privilege_id` bigint DEFAULT NULL COMMENT '权限id',
                                  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否禁用,false:禁用,true:启用',
                                  PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=1417682386431332357 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户和角色关联表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户和角色关联表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course
@@ -345,7 +350,7 @@ CREATE TABLE `t_a_exam_course` (
                                    `coefficient` varchar(100) DEFAULT NULL COMMENT '赋分系数',
                                    PRIMARY KEY (`id`) USING BTREE,
                                    KEY `t_a_exam_course_idx` (`exam_id`,`course_code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考试课程维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试课程维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_clazz
@@ -367,7 +372,7 @@ CREATE TABLE `t_a_exam_course_clazz` (
                                          `college_name` varchar(100) NOT NULL COMMENT '所属考察学院名称',
                                          PRIMARY KEY (`id`) USING BTREE,
                                          KEY `t_a_exam_course_clazz_idx` (`exam_id`,`course_code`,`clazz_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程班级维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程班级维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_college_inspect
@@ -394,7 +399,7 @@ CREATE TABLE `t_a_exam_course_college_inspect` (
                                                    `relative_position` decimal(12,4) DEFAULT NULL COMMENT '相对位置',
                                                    PRIMARY KEY (`id`) USING BTREE,
                                                    KEY `t_a_exam_course_college_idx` (`exam_id`,`course_code`,`college_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程考察学院维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程考察学院维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_college_inspect_dio
@@ -414,7 +419,7 @@ CREATE TABLE `t_a_exam_course_college_inspect_dio` (
                                                        `score_rate` decimal(12,4) DEFAULT NULL COMMENT '该考察点学院平均得分率',
                                                        PRIMARY KEY (`id`) USING BTREE,
                                                        KEY `t_a_exam_course_college_inspect_dio_idx` (`school_id`,`exam_id`,`course_code`,`dimension_type`,`dimension_code`,`inspect_college_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程考察学院各考察点维度表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程考察学院各考察点维度表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_college_paper_struct
@@ -447,7 +452,7 @@ CREATE TABLE `t_a_exam_course_college_paper_struct` (
                                                         `difficult` varchar(32) DEFAULT NULL COMMENT '难度',
                                                         `paper_struct_judge` varchar(32) DEFAULT NULL COMMENT '试卷结构每道题目正确(全对),错误枚举\\nALL_CORRECT("全对"), NOT_QUITE_RIGHT("不完全正确的"),',
                                                         PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='教师考察学院下试卷结构维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师考察学院下试卷结构维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_college_teacher
@@ -492,7 +497,7 @@ CREATE TABLE `t_a_exam_course_college_teacher` (
                                                    `other_college_total_count` int DEFAULT NULL COMMENT '其他学院总人数',
                                                    PRIMARY KEY (`id`) USING BTREE,
                                                    KEY `t_a_exam_course_college_teacher_idx` (`exam_id`,`course_code`,`teacher_name`,`inspect_college_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程学院下授课教师维度分析表(考试id、课程编号、考察学院id、教师id)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程学院下授课教师维度分析表(考试id、课程编号、考察学院id、教师id)';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_difficult
@@ -513,7 +518,7 @@ CREATE TABLE `t_a_exam_course_difficult` (
                                              `sch_avg_score_rate` decimal(12,4) DEFAULT NULL COMMENT '各难度题在全校的平均得分率',
                                              `col_avg_score_rate` decimal(12,4) DEFAULT NULL COMMENT '各难度题在学院的平均得分率',
                                              PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考试课程,各难度题目得分率表(难度题得分率、中等难度题得分率、简单题得分率)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试课程,各难度题目得分率表(难度题得分率、中等难度题得分率、简单题得分率)';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_dio
@@ -533,7 +538,7 @@ CREATE TABLE `t_a_exam_course_dio` (
                                        `total_count` decimal(12,4) DEFAULT NULL COMMENT '该考察点考察的题目数量',
                                        PRIMARY KEY (`id`) USING BTREE,
                                        KEY `t_a_exam_course_dio_idx` (`exam_id`,`course_code`,`dimension_type`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程试卷考察点(整体情况)维度表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程试卷考察点(整体情况)维度表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_record
@@ -567,7 +572,7 @@ CREATE TABLE `t_a_exam_course_record` (
                                           PRIMARY KEY (`id`) USING BTREE,
                                           KEY `t_a_exam_course_record_idx` (`exam_id`,`course_code`,`exam_record_id`) USING BTREE,
                                           KEY `t_a_exam_course_record_exam_record_id_idx` (`exam_record_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程考生成绩维度表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程考生成绩维度表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_record_dio
@@ -594,7 +599,7 @@ CREATE TABLE `t_a_exam_course_record_dio` (
                                               `teacher_name` varchar(32) DEFAULT NULL,
                                               PRIMARY KEY (`id`) USING BTREE,
                                               KEY `mark_idx` (`school_id`,`exam_id`,`course_code`,`student_code`,`dimension_type`,`dimension_code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程考生各考察点维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程考生各考察点维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_record_mod
@@ -622,7 +627,7 @@ CREATE TABLE `t_a_exam_course_record_mod` (
                                               `inspect_college_name` varchar(32) DEFAULT NULL COMMENT '学生所属考察学院名称',
                                               PRIMARY KEY (`id`) USING BTREE,
                                               KEY `t_a_exam_course_record_mod_idx` (`school_id`,`exam_id`,`student_code`,`course_code`,`module_type`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程考生考察点模块维度表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程考生考察点模块维度表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_teacher
@@ -650,7 +655,7 @@ CREATE TABLE `t_a_exam_course_teacher` (
                                            `total_count` int DEFAULT NULL COMMENT '总人数',
                                            PRIMARY KEY (`id`) USING BTREE,
                                            KEY `t_a_exam_course_teacher_idx` (`exam_id`,`course_code`,`teacher_name`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='参考课程授课教师维度表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='参考课程授课教师维度表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_teacher_college_difficult
@@ -674,7 +679,7 @@ CREATE TABLE `t_a_exam_course_teacher_college_difficult` (
                                                              `col_avg_score_rate` decimal(12,4) DEFAULT NULL COMMENT '各难度题在考察学院集合的平均得分率',
                                                              `tea_col_avg_score_rate` decimal(12,4) DEFAULT NULL COMMENT '各难度题在教师考察学院下集合的平均得分率',
                                                              PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='授课教师-本院难度分布和该教师在本院难度分布对比';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='授课教师-本院难度分布和该教师在本院难度分布对比';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_teacher_college_dio
@@ -695,7 +700,7 @@ CREATE TABLE `t_a_exam_course_teacher_college_dio` (
                                                        `avg_score` decimal(12,4) DEFAULT NULL COMMENT '考察点平均分',
                                                        `score_rate` decimal(12,4) DEFAULT NULL COMMENT '考察点得分率',
                                                        PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='各个教师在考察学院下的各考察点得分情况表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='各个教师在考察学院下的各考察点得分情况表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_teacher_college_paper_struct
@@ -730,7 +735,7 @@ CREATE TABLE `t_a_exam_course_teacher_college_paper_struct` (
                                                                 `difficult` varchar(32) DEFAULT NULL COMMENT '难度',
                                                                 `paper_struct_judge` varchar(32) DEFAULT NULL COMMENT '试卷结构每道题目正确(全对),错误枚举\\nALL_CORRECT("全对"), NOT_QUITE_RIGHT("不完全正确的"),',
                                                                 PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='教师考察学院下试卷结构维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师考察学院下试卷结构维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_teacher_difficult
@@ -752,7 +757,7 @@ CREATE TABLE `t_a_exam_course_teacher_difficult` (
                                                      `sch_avg_score_rate` decimal(12,4) DEFAULT NULL COMMENT '各难度题在全校的平均得分率',
                                                      `tea_avg_score_rate` decimal(12,4) DEFAULT NULL COMMENT '各难度题在教师的平均得分率',
                                                      PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='授课教师-全校各难度得分率对比';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='授课教师-全校各难度得分率对比';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_teacher_dio
@@ -772,7 +777,7 @@ CREATE TABLE `t_a_exam_course_teacher_dio` (
                                                `score_rate` decimal(12,4) DEFAULT NULL COMMENT '该考察点教师平均得分率',
                                                PRIMARY KEY (`id`) USING BTREE,
                                                KEY `t_a_exam_course_teacher_dio_idx` (`exam_id`,`course_code`,`dimension_code`,`dimension_type`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='教师维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_course_teacher_paper_struct
@@ -805,7 +810,7 @@ CREATE TABLE `t_a_exam_course_teacher_paper_struct` (
                                                         `difficult` varchar(32) DEFAULT NULL COMMENT '难度',
                                                         `paper_struct_judge` varchar(32) DEFAULT NULL COMMENT '试卷结构每道题目正确(全对),错误枚举\\nALL_CORRECT("全对"), NOT_QUITE_RIGHT("不完全正确的"),',
                                                         PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='教师下试卷结构维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师下试卷结构维度分析表';
 
 -- ----------------------------
 -- Table structure for t_a_exam_total
@@ -828,7 +833,7 @@ CREATE TABLE `t_a_exam_total` (
                                   `absent_course_times` int DEFAULT NULL COMMENT '缺考科次',
                                   `exam_time` bigint DEFAULT NULL COMMENT '考试时间',
                                   PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考试维度总计';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试维度总计';
 
 -- ----------------------------
 -- Table structure for t_a_paper_struct
@@ -861,7 +866,7 @@ CREATE TABLE `t_a_paper_struct` (
                                     `paper_struct_judge` varchar(32) DEFAULT NULL COMMENT '试卷结构每道题目正确(全对),错误枚举\nALL_CORRECT("全对"), NOT_QUITE_RIGHT("不完全正确的"),',
                                     PRIMARY KEY (`id`) USING BTREE,
                                     KEY `t_a_paper_struct_idx` (`exam_id`,`course_code`,`paper_struct_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='试卷结构维度分析表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试卷结构维度分析表';
 
 -- ----------------------------
 -- Table structure for t_b_answer
@@ -879,7 +884,7 @@ CREATE TABLE `t_b_answer` (
                               `time` bigint DEFAULT NULL COMMENT '作答时间',
                               PRIMARY KEY (`id`) USING BTREE,
                               KEY `t_b_answer_idx` (`exam_record_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='基础考生作答记录详情表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础考生作答记录详情表';
 
 -- ----------------------------
 -- Table structure for t_b_cloud_exam
@@ -898,7 +903,7 @@ CREATE TABLE `t_b_cloud_exam` (
                                   `update_id` bigint DEFAULT NULL COMMENT '更新人id',
                                   `update_time` bigint DEFAULT NULL COMMENT '更新人名称',
                                   PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='云阅卷考试信息表(同步考生成绩使用)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='云阅卷考试信息表(同步考生成绩使用)';
 
 -- ----------------------------
 -- Table structure for t_b_common_level_config
@@ -916,7 +921,7 @@ CREATE TABLE `t_b_common_level_config` (
                                            `min` decimal(12,4) DEFAULT NULL COMMENT '最小边界(展示用)',
                                            `max` decimal(12,4) DEFAULT NULL COMMENT '最大边界(展示用)',
                                            PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='等级配置表(试卷难易度、成绩在学院排名百分比)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='等级配置表(试卷难易度、成绩在学院排名百分比)';
 
 -- ----------------------------
 -- Table structure for t_b_common_rank_level_config
@@ -933,7 +938,7 @@ CREATE TABLE `t_b_common_rank_level_config` (
                                                 `scope` varchar(32) DEFAULT NULL COMMENT '取值范围(计算用)',
                                                 `interpret` varchar(255) DEFAULT NULL COMMENT '解释',
                                                 PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='学生成绩在学院排名的配置表(赋分成绩在学院排名档次)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生成绩在学院排名的配置表(赋分成绩在学院排名档次)';
 
 -- ----------------------------
 -- Table structure for t_b_dimension
@@ -952,7 +957,7 @@ CREATE TABLE `t_b_dimension` (
                                  `interpretation` varchar(255) DEFAULT NULL COMMENT '一级维度术语解释',
                                  PRIMARY KEY (`id`) USING BTREE,
                                  KEY `t_b_dimension_idx` (`exam_id`,`course_code`,`dimension_type`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考察点维度基础表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考察点维度基础表';
 
 -- ----------------------------
 -- Table structure for t_b_exam
@@ -970,7 +975,7 @@ CREATE TABLE `t_b_exam` (
                             `update_id` bigint DEFAULT NULL,
                             `update_time` bigint DEFAULT NULL,
                             PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='教研分析基础考试信息表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教研分析基础考试信息表';
 
 -- ----------------------------
 -- Table structure for t_b_exam_course
@@ -993,7 +998,7 @@ CREATE TABLE `t_b_exam_course` (
                                    `update_time` bigint DEFAULT NULL COMMENT '更新时间',
                                    `paper_type` varchar(100) NOT NULL COMMENT '试卷编号',
                                    PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考试科目表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试科目表';
 
 -- ----------------------------
 -- Table structure for t_b_exam_record
@@ -1010,7 +1015,7 @@ CREATE TABLE `t_b_exam_record` (
                                    `total_score` decimal(12,4) DEFAULT NULL COMMENT '总分',
                                    PRIMARY KEY (`id`) USING BTREE,
                                    KEY `t_b_exam_record_idx` (`exam_student_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考生考试记录';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考生考试记录';
 
 -- ----------------------------
 -- Table structure for t_b_exam_student
@@ -1035,7 +1040,7 @@ CREATE TABLE `t_b_exam_student` (
                                     `student_current` tinyint NOT NULL DEFAULT '1' COMMENT '是否本届,false:非本届,true:本届',
                                     PRIMARY KEY (`id`) USING BTREE,
                                     KEY `t_b_exam_student_idx` (`exam_id`,`student_code`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考生表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考生表';
 
 -- ----------------------------
 -- Table structure for t_b_examination
@@ -1059,7 +1064,7 @@ CREATE TABLE `t_b_examination` (
                                    `study_type` varchar(64) DEFAULT NULL COMMENT '学习类型(应届、本届)',
                                    `grade` varchar(64) DEFAULT NULL COMMENT '年级',
                                    PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考务数据基础表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考务数据基础表';
 
 -- ----------------------------
 -- Table structure for t_b_examination_relation
@@ -1075,7 +1080,7 @@ CREATE TABLE `t_b_examination_relation` (
                                             `teacher_code` varchar(64) DEFAULT NULL COMMENT '教师编号',
                                             `teacher_name` varchar(64) DEFAULT NULL COMMENT '教师名称',
                                             PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考务关系表(学校-考试-课程-开课学院-教师)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考务关系表(学校-考试-课程-开课学院-教师)';
 
 -- ----------------------------
 -- Table structure for t_b_module_config
@@ -1095,7 +1100,7 @@ CREATE TABLE `t_b_module_config` (
                                      `advice` text COMMENT '学习建议',
                                      `attribute` varchar(32) DEFAULT NULL COMMENT '试卷结构表(t_b_paper_struct)中的模块属性列的列名称',
                                      PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='考察点模块配置表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考察点模块配置表';
 
 -- ----------------------------
 -- Table structure for t_b_module_proficiency
@@ -1115,7 +1120,7 @@ CREATE TABLE `t_b_module_proficiency` (
                                           `max` varchar(32) DEFAULT NULL COMMENT '展示用最大边界',
                                           `scope` varchar(32) DEFAULT NULL COMMENT '取值范围(计算用)',
                                           PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='模块二级考察点维度熟练度配置,及模块简要描述表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模块二级考察点维度熟练度配置,及模块简要描述表';
 
 -- ----------------------------
 -- Table structure for t_b_paper
@@ -1135,7 +1140,7 @@ CREATE TABLE `t_b_paper` (
                              `score_type` varchar(64) DEFAULT NULL COMMENT '赋分类型\\n1.NEED_ASSIGN_SCORE("是","需要且按照公式赋分")\\n2.NO_NEED_ASSIGN_SCORE("否","不需要赋分,标准分即为赋分")\\n3.SPECIAL_ASSIGN_SCORE("特殊赋分","特殊赋分,按照excel表进行赋分")',
                              PRIMARY KEY (`id`) USING BTREE,
                              KEY `t_b_paper_idx` (`exam_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='试卷基础信息表(赋分系数、试卷类型、满分、及格分等)';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试卷基础信息表(赋分系数、试卷类型、满分、及格分等)';
 
 -- ----------------------------
 -- Table structure for t_b_paper_struct
@@ -1157,7 +1162,7 @@ CREATE TABLE `t_b_paper_struct` (
                                     `literacy_dimension` varchar(255) DEFAULT NULL COMMENT '素养维度',
                                     PRIMARY KEY (`id`) USING BTREE,
                                     KEY `t_b_paper_struct_idx` (`paper_id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='试卷结构表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试卷结构表';
 
 -- ----------------------------
 -- Table structure for t_b_school_clazz
@@ -1174,7 +1179,7 @@ CREATE TABLE `t_b_school_clazz` (
                                     `update_id` bigint DEFAULT NULL,
                                     `update_time` bigint DEFAULT NULL,
                                     PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='学校班级表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校班级表';
 
 -- ----------------------------
 -- Table structure for t_b_school_major
@@ -1191,7 +1196,7 @@ CREATE TABLE `t_b_school_major` (
                                     `update_id` bigint DEFAULT NULL,
                                     `update_time` bigint DEFAULT NULL,
                                     PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='学校专业表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校专业表';
 
 -- ----------------------------
 -- Table structure for t_b_session
@@ -1214,7 +1219,7 @@ CREATE TABLE `t_b_session` (
                                `school_id` bigint DEFAULT NULL COMMENT '学校id',
                                `org_id` bigint DEFAULT NULL COMMENT '机构id',
                                PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='会话表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会话表';
 
 -- ----------------------------
 -- Table structure for t_b_student
@@ -1228,7 +1233,7 @@ CREATE TABLE `t_b_student` (
                                `gender` varchar(30) DEFAULT NULL COMMENT '性别,MAN:男,WOMAN:女',
                                `person_img_url` varchar(255) DEFAULT NULL COMMENT '照片地址',
                                PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='基础学生表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='基础学生表';
 
 -- ----------------------------
 -- Table structure for t_b_sync_task
@@ -1255,7 +1260,7 @@ CREATE TABLE `t_b_sync_task` (
                                  `report_file_path` varchar(500) DEFAULT NULL COMMENT '报告路径',
                                  `source` varchar(1000) DEFAULT NULL COMMENT '原始数据',
                                  PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='同步任务表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='同步任务表';
 
 -- ----------------------------
 -- Table structure for t_b_task
@@ -1285,7 +1290,7 @@ CREATE TABLE `t_b_task` (
                             `version` int DEFAULT '0' COMMENT '更新版本号',
                             `error_message` varchar(500) DEFAULT NULL COMMENT '人工错误原因',
                             PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='导入导出任务表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='导入导出任务表';
 
 -- ----------------------------
 -- Table structure for t_b_teacher
@@ -1299,7 +1304,7 @@ CREATE TABLE `t_b_teacher` (
                                `teacher_code` varchar(45) DEFAULT NULL COMMENT '教师编号(学校内唯一)',
                                `role_type` varchar(45) DEFAULT NULL COMMENT '角色类型',
                                PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='教师表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='教师表';
 
 -- ----------------------------
 -- Table structure for t_g_error
@@ -1311,7 +1316,7 @@ CREATE TABLE `t_g_error` (
                              `summary` mediumtext COMMENT '实时摘要信息',
                              `create_time` bigint DEFAULT NULL COMMENT '创建时间',
                              PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='全局异常错误信息表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全局异常错误信息表';
 
 -- ----------------------------
 -- Table structure for t_s_auth
@@ -1331,7 +1336,7 @@ CREATE TABLE `t_s_auth` (
                             `expire_time` bigint DEFAULT NULL COMMENT '过期时间',
                             `file` mediumblob COMMENT '文件数据',
                             PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='激活授权配置表';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='激活授权配置表';
 
 -- ----------------------------
 -- Table structure for t_school_role
@@ -1515,218 +1520,218 @@ INSERT INTO `sys_role` VALUES (3, NULL, '学院院长', 1, 'PRESIDENT', NULL, NU
 INSERT INTO `sys_role` VALUES (4, NULL, '任课老师', 1, 'TEACHER', NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL);
 INSERT INTO `sys_role` VALUES (5, NULL, '学校管理员', 1, 'SCHOOL_ADMIN', NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL);
 
-INSERT INTO `sys_role_privilege` VALUES (1, 1, 1, 1);
-INSERT INTO `sys_role_privilege` VALUES (2, 1, 2, 1);
-INSERT INTO `sys_role_privilege` VALUES (3, 1, 4, 1);
-INSERT INTO `sys_role_privilege` VALUES (4, 1, 5, 1);
-INSERT INTO `sys_role_privilege` VALUES (5, 1, 6, 1);
-INSERT INTO `sys_role_privilege` VALUES (6, 1, 7, 1);
-INSERT INTO `sys_role_privilege` VALUES (8, 1, 130, 1);
-INSERT INTO `sys_role_privilege` VALUES (9, 1, 144, 1);
-INSERT INTO `sys_role_privilege` VALUES (10, 1, 149, 1);
-INSERT INTO `sys_role_privilege` VALUES (11, 1, 250, 1);
-INSERT INTO `sys_role_privilege` VALUES (12, 1, 258, 1);
-INSERT INTO `sys_role_privilege` VALUES (13, 1, 259, 1);
-INSERT INTO `sys_role_privilege` VALUES (14, 1, 263, 1);
-INSERT INTO `sys_role_privilege` VALUES (15, 1, 268, 1);
-INSERT INTO `sys_role_privilege` VALUES (16, 1, 270, 1);
-INSERT INTO `sys_role_privilege` VALUES (17, 1, 271, 1);
-INSERT INTO `sys_role_privilege` VALUES (18, 1, 275, 1);
-INSERT INTO `sys_role_privilege` VALUES (19, 1, 278, 1);
-INSERT INTO `sys_role_privilege` VALUES (20, 1, 279, 1);
-INSERT INTO `sys_role_privilege` VALUES (21, 1, 281, 1);
-INSERT INTO `sys_role_privilege` VALUES (22, 1, 283, 1);
-INSERT INTO `sys_role_privilege` VALUES (23, 1, 284, 1);
-INSERT INTO `sys_role_privilege` VALUES (24, 1, 285, 1);
-INSERT INTO `sys_role_privilege` VALUES (25, 1, 286, 1);
-INSERT INTO `sys_role_privilege` VALUES (26, 1, 287, 1);
-INSERT INTO `sys_role_privilege` VALUES (27, 1, 288, 1);
-INSERT INTO `sys_role_privilege` VALUES (28, 1, 298, 1);
-INSERT INTO `sys_role_privilege` VALUES (29, 1, 330, 1);
-INSERT INTO `sys_role_privilege` VALUES (31, 1, 77, 1);
-INSERT INTO `sys_role_privilege` VALUES (32, 1, 78, 1);
-INSERT INTO `sys_role_privilege` VALUES (33, 1, 79, 1);
-INSERT INTO `sys_role_privilege` VALUES (34, 1, 80, 1);
-INSERT INTO `sys_role_privilege` VALUES (35, 1, 81, 1);
-INSERT INTO `sys_role_privilege` VALUES (36, 1, 82, 1);
-INSERT INTO `sys_role_privilege` VALUES (37, 1, 83, 1);
-INSERT INTO `sys_role_privilege` VALUES (38, 1, 84, 1);
-INSERT INTO `sys_role_privilege` VALUES (39, 1, 85, 1);
-INSERT INTO `sys_role_privilege` VALUES (40, 1, 86, 1);
-INSERT INTO `sys_role_privilege` VALUES (41, 1, 87, 1);
-INSERT INTO `sys_role_privilege` VALUES (42, 1, 88, 1);
-INSERT INTO `sys_role_privilege` VALUES (43, 1, 89, 1);
-INSERT INTO `sys_role_privilege` VALUES (44, 1, 90, 1);
-INSERT INTO `sys_role_privilege` VALUES (45, 1, 91, 1);
-INSERT INTO `sys_role_privilege` VALUES (46, 1, 92, 1);
-INSERT INTO `sys_role_privilege` VALUES (47, 1, 93, 1);
-INSERT INTO `sys_role_privilege` VALUES (48, 1, 94, 1);
-INSERT INTO `sys_role_privilege` VALUES (49, 1, 95, 1);
-INSERT INTO `sys_role_privilege` VALUES (50, 1, 131, 1);
-INSERT INTO `sys_role_privilege` VALUES (51, 1, 132, 1);
-INSERT INTO `sys_role_privilege` VALUES (52, 1, 134, 1);
-INSERT INTO `sys_role_privilege` VALUES (53, 1, 135, 1);
-INSERT INTO `sys_role_privilege` VALUES (54, 1, 145, 1);
-INSERT INTO `sys_role_privilege` VALUES (55, 1, 146, 1);
-INSERT INTO `sys_role_privilege` VALUES (56, 1, 147, 1);
-INSERT INTO `sys_role_privilege` VALUES (57, 1, 148, 1);
-INSERT INTO `sys_role_privilege` VALUES (58, 1, 151, 1);
-INSERT INTO `sys_role_privilege` VALUES (59, 1, 152, 1);
-INSERT INTO `sys_role_privilege` VALUES (60, 1, 153, 1);
-INSERT INTO `sys_role_privilege` VALUES (61, 1, 180, 1);
-INSERT INTO `sys_role_privilege` VALUES (62, 1, 184, 1);
-INSERT INTO `sys_role_privilege` VALUES (63, 1, 251, 1);
-INSERT INTO `sys_role_privilege` VALUES (64, 1, 252, 1);
-INSERT INTO `sys_role_privilege` VALUES (65, 1, 253, 1);
-INSERT INTO `sys_role_privilege` VALUES (66, 1, 254, 1);
-INSERT INTO `sys_role_privilege` VALUES (67, 1, 255, 1);
-INSERT INTO `sys_role_privilege` VALUES (68, 1, 256, 1);
-INSERT INTO `sys_role_privilege` VALUES (69, 1, 257, 1);
-INSERT INTO `sys_role_privilege` VALUES (70, 1, 260, 1);
-INSERT INTO `sys_role_privilege` VALUES (71, 1, 261, 1);
-INSERT INTO `sys_role_privilege` VALUES (72, 1, 262, 1);
-INSERT INTO `sys_role_privilege` VALUES (73, 1, 264, 1);
-INSERT INTO `sys_role_privilege` VALUES (74, 1, 265, 1);
-INSERT INTO `sys_role_privilege` VALUES (75, 1, 266, 1);
-INSERT INTO `sys_role_privilege` VALUES (76, 1, 267, 1);
-INSERT INTO `sys_role_privilege` VALUES (77, 1, 269, 1);
-INSERT INTO `sys_role_privilege` VALUES (78, 1, 272, 1);
-INSERT INTO `sys_role_privilege` VALUES (79, 1, 273, 1);
-INSERT INTO `sys_role_privilege` VALUES (80, 1, 274, 1);
-INSERT INTO `sys_role_privilege` VALUES (81, 1, 276, 1);
-INSERT INTO `sys_role_privilege` VALUES (82, 1, 277, 1);
-INSERT INTO `sys_role_privilege` VALUES (83, 1, 280, 1);
-INSERT INTO `sys_role_privilege` VALUES (84, 1, 282, 1);
-INSERT INTO `sys_role_privilege` VALUES (85, 1, 289, 1);
-INSERT INTO `sys_role_privilege` VALUES (86, 1, 290, 1);
-INSERT INTO `sys_role_privilege` VALUES (87, 1, 291, 1);
-INSERT INTO `sys_role_privilege` VALUES (88, 1, 292, 1);
-INSERT INTO `sys_role_privilege` VALUES (89, 1, 293, 1);
-INSERT INTO `sys_role_privilege` VALUES (90, 1, 294, 1);
-INSERT INTO `sys_role_privilege` VALUES (91, 1, 295, 1);
-INSERT INTO `sys_role_privilege` VALUES (92, 1, 296, 1);
-INSERT INTO `sys_role_privilege` VALUES (93, 1, 297, 1);
-INSERT INTO `sys_role_privilege` VALUES (94, 1, 299, 1);
-INSERT INTO `sys_role_privilege` VALUES (95, 1, 300, 1);
-INSERT INTO `sys_role_privilege` VALUES (96, 1, 301, 1);
-INSERT INTO `sys_role_privilege` VALUES (97, 1, 302, 1);
-INSERT INTO `sys_role_privilege` VALUES (98, 1, 303, 1);
-INSERT INTO `sys_role_privilege` VALUES (99, 1, 304, 1);
-INSERT INTO `sys_role_privilege` VALUES (100, 1, 305, 1);
-INSERT INTO `sys_role_privilege` VALUES (101, 1, 306, 1);
-INSERT INTO `sys_role_privilege` VALUES (102, 1, 307, 1);
-INSERT INTO `sys_role_privilege` VALUES (103, 1, 308, 1);
-INSERT INTO `sys_role_privilege` VALUES (104, 1, 309, 1);
-INSERT INTO `sys_role_privilege` VALUES (105, 1, 310, 1);
-INSERT INTO `sys_role_privilege` VALUES (106, 1, 311, 1);
-INSERT INTO `sys_role_privilege` VALUES (107, 1, 312, 1);
-INSERT INTO `sys_role_privilege` VALUES (108, 1, 313, 1);
-INSERT INTO `sys_role_privilege` VALUES (109, 1, 314, 1);
-INSERT INTO `sys_role_privilege` VALUES (110, 1, 315, 1);
-INSERT INTO `sys_role_privilege` VALUES (111, 1, 316, 1);
-INSERT INTO `sys_role_privilege` VALUES (112, 1, 317, 1);
-INSERT INTO `sys_role_privilege` VALUES (113, 1, 318, 1);
-INSERT INTO `sys_role_privilege` VALUES (114, 1, 319, 1);
-INSERT INTO `sys_role_privilege` VALUES (115, 1, 320, 1);
-INSERT INTO `sys_role_privilege` VALUES (116, 1, 321, 1);
-INSERT INTO `sys_role_privilege` VALUES (117, 1, 322, 1);
-INSERT INTO `sys_role_privilege` VALUES (118, 1, 323, 1);
-INSERT INTO `sys_role_privilege` VALUES (119, 1, 324, 1);
-INSERT INTO `sys_role_privilege` VALUES (120, 1, 325, 1);
-INSERT INTO `sys_role_privilege` VALUES (121, 1, 326, 1);
-INSERT INTO `sys_role_privilege` VALUES (122, 1, 327, 1);
-INSERT INTO `sys_role_privilege` VALUES (123, 1, 328, 1);
-INSERT INTO `sys_role_privilege` VALUES (124, 1, 329, 1);
-INSERT INTO `sys_role_privilege` VALUES (125, 1, 331, 1);
-INSERT INTO `sys_role_privilege` VALUES (126, 1, 332, 1);
-INSERT INTO `sys_role_privilege` VALUES (127, 1, 333, 1);
-INSERT INTO `sys_role_privilege` VALUES (128, 1, 334, 1);
-INSERT INTO `sys_role_privilege` VALUES (129, 1, 335, 1);
-INSERT INTO `sys_role_privilege` VALUES (130, 1, 336, 1);
-INSERT INTO `sys_role_privilege` VALUES (131, 1, 337, 1);
-INSERT INTO `sys_role_privilege` VALUES (132, 1, 338, 1);
-INSERT INTO `sys_role_privilege` VALUES (133, 2, 258, 1);
-INSERT INTO `sys_role_privilege` VALUES (134, 2, 259, 1);
-INSERT INTO `sys_role_privilege` VALUES (135, 2, 260, 1);
-INSERT INTO `sys_role_privilege` VALUES (136, 2, 261, 1);
-INSERT INTO `sys_role_privilege` VALUES (137, 2, 262, 1);
-INSERT INTO `sys_role_privilege` VALUES (138, 2, 263, 1);
-INSERT INTO `sys_role_privilege` VALUES (139, 2, 264, 1);
-INSERT INTO `sys_role_privilege` VALUES (140, 2, 265, 1);
-INSERT INTO `sys_role_privilege` VALUES (141, 2, 266, 1);
-INSERT INTO `sys_role_privilege` VALUES (142, 2, 267, 1);
-INSERT INTO `sys_role_privilege` VALUES (143, 2, 268, 1);
-INSERT INTO `sys_role_privilege` VALUES (144, 2, 269, 1);
-INSERT INTO `sys_role_privilege` VALUES (145, 2, 250, 1);
-INSERT INTO `sys_role_privilege` VALUES (146, 5, 1, 1);
-INSERT INTO `sys_role_privilege` VALUES (147, 5, 2, 1);
-INSERT INTO `sys_role_privilege` VALUES (148, 5, 4, 1);
-INSERT INTO `sys_role_privilege` VALUES (149, 5, 93, 1);
-INSERT INTO `sys_role_privilege` VALUES (150, 5, 94, 1);
-INSERT INTO `sys_role_privilege` VALUES (151, 5, 95, 1);
-INSERT INTO `sys_role_privilege` VALUES (152, 5, 5, 1);
-INSERT INTO `sys_role_privilege` VALUES (153, 5, 77, 1);
-INSERT INTO `sys_role_privilege` VALUES (154, 5, 78, 1);
-INSERT INTO `sys_role_privilege` VALUES (155, 5, 79, 1);
-INSERT INTO `sys_role_privilege` VALUES (156, 5, 80, 1);
-INSERT INTO `sys_role_privilege` VALUES (157, 5, 81, 1);
-INSERT INTO `sys_role_privilege` VALUES (158, 5, 87, 1);
-INSERT INTO `sys_role_privilege` VALUES (159, 5, 82, 1);
-INSERT INTO `sys_role_privilege` VALUES (160, 5, 184, 1);
-INSERT INTO `sys_role_privilege` VALUES (161, 5, 6, 1);
-INSERT INTO `sys_role_privilege` VALUES (162, 5, 83, 1);
-INSERT INTO `sys_role_privilege` VALUES (163, 5, 84, 1);
-INSERT INTO `sys_role_privilege` VALUES (164, 5, 85, 1);
-INSERT INTO `sys_role_privilege` VALUES (165, 5, 91, 1);
-INSERT INTO `sys_role_privilege` VALUES (166, 5, 86, 1);
-INSERT INTO `sys_role_privilege` VALUES (167, 5, 180, 1);
-INSERT INTO `sys_role_privilege` VALUES (168, 5, 298, 1);
-INSERT INTO `sys_role_privilege` VALUES (169, 5, 299, 1);
-INSERT INTO `sys_role_privilege` VALUES (170, 5, 300, 1);
-INSERT INTO `sys_role_privilege` VALUES (171, 5, 301, 1);
-INSERT INTO `sys_role_privilege` VALUES (172, 5, 250, 1);
-INSERT INTO `sys_role_privilege` VALUES (173, 5, 270, 1);
-INSERT INTO `sys_role_privilege` VALUES (174, 3, 283, 1);
-INSERT INTO `sys_role_privilege` VALUES (175, 3, 284, 1);
-INSERT INTO `sys_role_privilege` VALUES (176, 3, 289, 1);
-INSERT INTO `sys_role_privilege` VALUES (177, 3, 285, 1);
-INSERT INTO `sys_role_privilege` VALUES (178, 3, 290, 1);
-INSERT INTO `sys_role_privilege` VALUES (179, 3, 286, 1);
-INSERT INTO `sys_role_privilege` VALUES (180, 3, 291, 1);
-INSERT INTO `sys_role_privilege` VALUES (181, 3, 287, 1);
-INSERT INTO `sys_role_privilege` VALUES (182, 3, 292, 1);
-INSERT INTO `sys_role_privilege` VALUES (183, 3, 303, 1);
-INSERT INTO `sys_role_privilege` VALUES (184, 3, 304, 1);
-INSERT INTO `sys_role_privilege` VALUES (185, 3, 305, 1);
-INSERT INTO `sys_role_privilege` VALUES (186, 3, 288, 1);
-INSERT INTO `sys_role_privilege` VALUES (187, 3, 293, 1);
-INSERT INTO `sys_role_privilege` VALUES (188, 3, 294, 1);
-INSERT INTO `sys_role_privilege` VALUES (189, 3, 295, 1);
-INSERT INTO `sys_role_privilege` VALUES (190, 3, 296, 1);
-INSERT INTO `sys_role_privilege` VALUES (191, 3, 297, 1);
-INSERT INTO `sys_role_privilege` VALUES (192, 3, 271, 1);
-INSERT INTO `sys_role_privilege` VALUES (193, 3, 272, 1);
-INSERT INTO `sys_role_privilege` VALUES (194, 3, 273, 1);
-INSERT INTO `sys_role_privilege` VALUES (195, 3, 274, 1);
-INSERT INTO `sys_role_privilege` VALUES (196, 3, 275, 1);
-INSERT INTO `sys_role_privilege` VALUES (197, 3, 276, 1);
-INSERT INTO `sys_role_privilege` VALUES (198, 3, 277, 1);
-INSERT INTO `sys_role_privilege` VALUES (199, 3, 279, 1);
-INSERT INTO `sys_role_privilege` VALUES (200, 3, 280, 1);
-INSERT INTO `sys_role_privilege` VALUES (201, 3, 250, 1);
-INSERT INTO `sys_role_privilege` VALUES (202, 3, 270, 1);
-INSERT INTO `sys_role_privilege` VALUES (203, 3, 278, 1);
-INSERT INTO `sys_role_privilege` VALUES (204, 3, 315, 1);
-INSERT INTO `sys_role_privilege` VALUES (205, 4, 281, 1);
-INSERT INTO `sys_role_privilege` VALUES (206, 4, 282, 1);
-INSERT INTO `sys_role_privilege` VALUES (207, 4, 330, 1);
-INSERT INTO `sys_role_privilege` VALUES (208, 4, 331, 1);
-INSERT INTO `sys_role_privilege` VALUES (209, 4, 332, 1);
-INSERT INTO `sys_role_privilege` VALUES (210, 4, 333, 1);
-INSERT INTO `sys_role_privilege` VALUES (211, 4, 250, 1);
-INSERT INTO `sys_role_privilege` VALUES (212, 4, 278, 1);
-
-INSERT INTO `sys_user` VALUES (1, NULL, 'sysadmin', 'sysadmin', 'MTIzNDU2', NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
+INSERT INTO `sys_role_privilege` VALUES (1, 1, 1, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (2, 1, 2, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (3, 1, 4, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (4, 1, 5, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (5, 1, 6, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (6, 1, 7, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (8, 1, 130, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (9, 1, 144, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (10, 1, 149, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (11, 1, 250, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (12, 1, 258, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (13, 1, 259, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (14, 1, 263, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (15, 1, 268, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (16, 1, 270, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (17, 1, 271, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (18, 1, 275, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (19, 1, 278, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (20, 1, 279, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (21, 1, 281, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (22, 1, 283, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (23, 1, 284, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (24, 1, 285, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (25, 1, 286, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (26, 1, 287, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (27, 1, 288, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (28, 1, 298, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (29, 1, 330, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (31, 1, 77, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (32, 1, 78, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (33, 1, 79, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (34, 1, 80, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (35, 1, 81, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (36, 1, 82, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (37, 1, 83, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (38, 1, 84, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (39, 1, 85, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (40, 1, 86, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (41, 1, 87, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (42, 1, 88, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (43, 1, 89, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (44, 1, 90, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (45, 1, 91, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (46, 1, 92, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (47, 1, 93, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (48, 1, 94, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (49, 1, 95, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (50, 1, 131, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (51, 1, 132, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (52, 1, 134, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (53, 1, 135, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (54, 1, 145, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (55, 1, 146, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (56, 1, 147, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (57, 1, 148, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (58, 1, 151, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (59, 1, 152, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (60, 1, 153, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (61, 1, 180, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (62, 1, 184, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (63, 1, 251, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (64, 1, 252, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (65, 1, 253, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (66, 1, 254, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (67, 1, 255, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (68, 1, 256, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (69, 1, 257, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (70, 1, 260, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (71, 1, 261, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (72, 1, 262, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (73, 1, 264, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (74, 1, 265, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (75, 1, 266, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (76, 1, 267, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (77, 1, 269, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (78, 1, 272, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (79, 1, 273, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (80, 1, 274, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (81, 1, 276, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (82, 1, 277, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (83, 1, 280, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (84, 1, 282, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (85, 1, 289, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (86, 1, 290, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (87, 1, 291, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (88, 1, 292, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (89, 1, 293, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (90, 1, 294, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (91, 1, 295, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (92, 1, 296, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (93, 1, 297, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (94, 1, 299, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (95, 1, 300, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (96, 1, 301, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (97, 1, 302, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (98, 1, 303, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (99, 1, 304, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (100, 1, 305, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (101, 1, 306, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (102, 1, 307, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (103, 1, 308, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (104, 1, 309, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (105, 1, 310, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (106, 1, 311, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (107, 1, 312, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (108, 1, 313, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (109, 1, 314, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (110, 1, 315, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (111, 1, 316, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (112, 1, 317, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (113, 1, 318, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (114, 1, 319, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (115, 1, 320, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (116, 1, 321, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (117, 1, 322, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (118, 1, 323, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (119, 1, 324, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (120, 1, 325, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (121, 1, 326, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (122, 1, 327, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (123, 1, 328, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (124, 1, 329, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (125, 1, 331, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (126, 1, 332, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (127, 1, 333, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (128, 1, 334, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (129, 1, 335, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (130, 1, 336, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (131, 1, 337, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (132, 1, 338, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (133, 2, 258, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (134, 2, 259, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (135, 2, 260, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (136, 2, 261, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (137, 2, 262, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (138, 2, 263, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (139, 2, 264, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (140, 2, 265, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (141, 2, 266, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (142, 2, 267, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (143, 2, 268, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (144, 2, 269, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (145, 2, 250, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (146, 5, 1, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (147, 5, 2, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (148, 5, 4, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (149, 5, 93, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (150, 5, 94, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (151, 5, 95, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (152, 5, 5, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (153, 5, 77, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (154, 5, 78, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (155, 5, 79, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (156, 5, 80, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (157, 5, 81, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (158, 5, 87, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (159, 5, 82, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (160, 5, 184, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (161, 5, 6, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (162, 5, 83, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (163, 5, 84, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (164, 5, 85, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (165, 5, 91, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (166, 5, 86, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (167, 5, 180, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (168, 5, 298, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (169, 5, 299, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (170, 5, 300, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (171, 5, 301, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (172, 5, 250, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (173, 5, 270, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (174, 3, 283, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (175, 3, 284, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (176, 3, 289, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (177, 3, 285, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (178, 3, 290, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (179, 3, 286, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (180, 3, 291, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (181, 3, 287, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (182, 3, 292, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (183, 3, 303, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (184, 3, 304, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (185, 3, 305, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (186, 3, 288, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (187, 3, 293, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (188, 3, 294, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (189, 3, 295, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (190, 3, 296, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (191, 3, 297, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (192, 3, 271, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (193, 3, 272, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (194, 3, 273, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (195, 3, 274, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (196, 3, 275, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (197, 3, 276, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (198, 3, 277, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (199, 3, 279, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (200, 3, 280, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (201, 3, 250, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (202, 3, 270, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (203, 3, 278, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (204, 3, 315, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (205, 4, 281, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (206, 4, 282, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (207, 4, 330, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (208, 4, 331, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (209, 4, 332, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (210, 4, 333, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (211, 4, 250, 1, null);
+INSERT INTO `sys_role_privilege` VALUES (212, 4, 278, 1, null);
+
+INSERT INTO `sys_user` VALUES (1, NULL, 'sysadmin', 'sysadmin', 'MTIzNDU2', NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 
 INSERT INTO `sys_user_role` VALUES (1, 1, 1, NULL, 1);
 

+ 11 - 0
teachcloud-report-business/src/main/resources/upgrade/3.3.0.sql

@@ -0,0 +1,11 @@
+-- 2023-11-28
+ALTER TABLE sys_user
+    ADD COLUMN ui_setting TEXT NULL COMMENT '阅卷参数' AFTER historic_name,
+    ADD COLUMN allow_manual_card TINYINT(1) NULL DEFAULT '0' COMMENT '是否允许新增卡格式' AFTER ui_setting;
+
+ALTER TABLE sys_role_privilege
+    ADD COLUMN school_id BIGINT NULL COMMENT '内置角色,按学校自定义的权限' AFTER enable;
+
+ALTER TABLE basic_school
+    ADD COLUMN init_password VARCHAR(100) NULL COMMENT '该学校用户的初始密码,默认为12345678' AFTER logo,
+    CHANGE COLUMN logo logo MEDIUMTEXT NULL DEFAULT NULL COMMENT 'logo' AFTER update_id;