ソースを参照

add: 教研分析拉取知学知考并新增本地数据校验

caozixuan 3 年 前
コミット
79ed05d84c

+ 41 - 1
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/AnalyzeDataCheckService.java

@@ -16,4 +16,44 @@ public interface AnalyzeDataCheckService {
      * @param courseCode         课程编号
      */
     void checkPaperStructInDimensionDatasource(String knowledgeDimension, String abilityDimension, Long examId, String courseCode);
-}
+
+    /**
+     * 试卷整体检查 - 检查试卷结构't_b_paper_struct'表中各小题总分之和是否和试卷总分一致't_b_paper'
+     *
+     * @param schoolId   学校id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     */
+    void checkPaperTotal(Long schoolId, Long examId, String courseCode);
+
+    /**
+     * 校验考生作答相关数据
+     * <p>
+     * 1.试卷结构对应检查 - 本地的试卷结构和考生作答的结构中 题目类型,大题号,小题号是否对应
+     * 2.考生人数对应检查 - 本地试卷结构数量 * 考生数 =? 考生作答总记录数
+     * </p>
+     *
+     * @param schoolId   学校id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     */
+    void checkExamStudentAnswer(Long schoolId, Long examId, String courseCode);
+
+    /**
+     * 常规配置信息导入 - 't_b_common_level_config'、't_b_common_rank_level_config'
+     *
+     * @param schoolId   徐晓id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     */
+    void importConfigData(Long schoolId, Long examId, String courseCode);
+
+    /**
+     * 触发公式赋分 - 触发生成‘t_a_exam_course_record’,计算表的数据源
+     *
+     * @param schoolId   学校id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     */
+    void triggerAssign(Long schoolId, Long examId, String courseCode);
+}

+ 66 - 1
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/AnalyzeDataCheckServiceImpl.java

@@ -1,7 +1,17 @@
 package com.qmth.teachcloud.report.business.service.impl;
 
-import com.qmth.teachcloud.report.business.service.AnalyzeDataCheckService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.report.business.entity.TBPaper;
+import com.qmth.teachcloud.report.business.entity.TBPaperStruct;
+import com.qmth.teachcloud.report.business.service.*;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * @Description:
@@ -10,8 +20,63 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class AnalyzeDataCheckServiceImpl implements AnalyzeDataCheckService {
+    @Resource
+    private TBExamCourseService tbExamCourseService;
+    @Resource
+    private TBCommonLevelConfigService tbCommonLevelConfigService;
+    @Resource
+    private TBCommonRankLevelConfigService tbCommonRankLevelConfigService;
+    @Resource
+    private AnalyzeForReportService analyzeForReportService;
+    @Resource
+    private TBPaperService tbPaperService;
+    @Resource
+    private TBPaperStructService tbPaperStructService;
+
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void checkPaperStructInDimensionDatasource(String knowledgeDimension, String abilityDimension, Long examId, String courseCode) {
+        // TODO: 2022/6/9  
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void checkPaperTotal(Long schoolId, Long examId, String courseCode) {
+        TBPaper tbPaper = tbPaperService.getOne(new QueryWrapper<TBPaper>().lambda().eq(TBPaper::getExamId,examId).eq(TBPaper::getCourseCode,courseCode));
+        if (Objects.isNull(tbPaper)){
+            throw ExceptionResultEnum.ERROR.exception("未找到试卷");
+        }
+        Long paperId = tbPaper.getId();
+        BigDecimal totalScore = tbPaper.getTotalScore();
+
+        List<TBPaperStruct> tbPaperStructList = tbPaperStructService.list(new QueryWrapper<TBPaperStruct>().lambda().eq(TBPaperStruct::getPaperId,paperId));
+        BigDecimal sum = BigDecimal.ZERO;
+        for (TBPaperStruct tbPaperStruct : tbPaperStructList) {
+            sum = sum.add(tbPaperStruct.getFullScore());
+        }
+        if (totalScore.compareTo(sum) != 0){
+            throw ExceptionResultEnum.ERROR.exception("试卷总分和试卷结构中各个题目分数之和不一致");
+        }
+    }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void checkExamStudentAnswer(Long schoolId, Long examId, String courseCode) {
+        // TODO: 2022/6/9  
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void importConfigData(Long schoolId, Long examId, String courseCode) {
+        if (tbExamCourseService.verifyExamCourseCantRun(examId, schoolId, courseCode, null)) {
+            throw ExceptionResultEnum.ERROR.exception("课程编号[" + courseCode + "]的课程分析数据已测试或发布,不能变更基础数据");
+        }
+        tbCommonLevelConfigService.importLevelConfig(examId, courseCode, null);
+        tbCommonRankLevelConfigService.importRankLevelConfig(examId, courseCode, null);
+    }
+
+    @Override
+    public void triggerAssign(Long schoolId, Long examId, String courseCode) {
+        analyzeForReportService.normalAssignScore(examId,schoolId,courseCode);
     }
 }