Przeglądaj źródła

bug
1.教研分析计算清除缓存
2.知学知考发布过的课程不能该试卷分析设置

caozixuan 3 lat temu
rodzic
commit
df2e8be849

+ 11 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/analyze/GradeInitResult.java

@@ -32,6 +32,9 @@ public class GradeInitResult {
     @ApiModelProperty(value = "试卷初始化状态")
     private String status;
 
+    @ApiModelProperty(value = "分析课程发布状态")
+    private Boolean publishStatus;
+
     public String getSemesterName() {
         return semesterName;
     }
@@ -95,4 +98,12 @@ public class GradeInitResult {
     public void setStatus(String status) {
         this.status = status;
     }
+
+    public Boolean getPublishStatus() {
+        return publishStatus;
+    }
+
+    public void setPublishStatus(Boolean publishStatus) {
+        this.publishStatus = publishStatus;
+    }
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchPaperServiceImpl.java

@@ -212,6 +212,9 @@ public class GradeBatchPaperServiceImpl extends ServiceImpl<GradeBatchPaperMappe
         if (gradeBatchPaperList.stream().anyMatch(e -> GradeAnalyzePaperStatusEnum.CALCULATING.equals(e.getStatus()))) {
             throw ExceptionResultEnum.ERROR.exception("选择的试卷有正在计算的分析课程");
         }
+        if (gradeBatchPaperList.stream().anyMatch(GradeBatchPaper::getPublishStatus)) {
+            throw ExceptionResultEnum.ERROR.exception("选择的试卷有已发布的分析课程,不能更新分析配置参数");
+        }
         List<Long> batchIdList = gradeBatchPaperList.stream().map(GradeBatchPaper::getBatchId).distinct().collect(Collectors.toList());
         if (batchIdList.size() > 0) {
             if (gradeBatchService.list(new QueryWrapper<GradeBatch>().lambda().in(GradeBatch::getId, batchIdList)).stream().anyMatch(e -> GradeAnalyzePaperStatusEnum.CALCULATING.equals(e.getStatus()))) {

+ 0 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeInitializeServiceImpl.java

@@ -15,7 +15,6 @@ import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @Description: 教研分析对接-数据初始化服务实现类

+ 4 - 2
distributed-print-business/src/main/resources/mapper/GradeInitializeMapper.xml

@@ -12,7 +12,8 @@
             et.paper_number AS paperNumber,
             pnpt.paper_type AS paperType,
             pnpt.paper_name AS paperName,
-            pnpt.status AS status
+            pnpt.status AS status,
+            pnpt.publish_status AS publishStatus
         FROM
             exam_task et
                 INNER JOIN
@@ -23,7 +24,8 @@
                  paper_number,
                  paper_type,
                  MAX(paper_name) AS paper_name,
-                 GROUP_CONCAT(status) AS status
+                 GROUP_CONCAT(status) AS status,
+                 MAX(publish_status) AS publish_status
              FROM
                  grade_batch_paper
              WHERE

+ 48 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/params/TBExamCourseDeleteParams.java

@@ -0,0 +1,48 @@
+package com.qmth.teachcloud.common.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description:
+ * @Author: CaoZixuan
+ * @Date:
+ */
+public class TBExamCourseDeleteParams {
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "考试id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long examId;
+
+    @ApiModelProperty(value = "课程编号")
+    private String courseCode;
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+}

+ 45 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TBExamCourseDeleteService.java

@@ -0,0 +1,45 @@
+package com.qmth.teachcloud.report.business.service;
+
+import com.qmth.teachcloud.common.bean.params.TBExamCourseDeleteParams;
+
+import java.util.List;
+
+/**
+ * @Description: 分析课程物理删除服务类
+ * @Author: CaoZixuan
+ * @Date: 2022-07-05
+ */
+public interface TBExamCourseDeleteService {
+    /**
+     * 删除基础表数据
+     *
+     * @param schoolId   学校id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     */
+    void deleteBasicTableData(Long schoolId, Long examId, String courseCode);
+
+    /**
+     * 删除分析表数据
+     *
+     * @param schoolId   学校id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     */
+    void deleteAnalyzeTableData(Long schoolId, Long examId, String courseCode);
+
+    /**
+     * 重算集合性的分析数据(比如考试概况会因为删除一个科目影响从而需要重算)
+     *
+     * @param schoolId   学校id
+     * @param examId     考试id
+     * @param courseCode 课程编号
+     */
+    void repeatCalculateTotalTableData(Long schoolId, Long examId, String courseCode);
+
+    /**
+     * 分析课程删除总控
+     * @param tbExamCourseDeleteParamsList 分析课程删除集合
+     */
+    void deleteTBExamCourse(List<TBExamCourseDeleteParams> tbExamCourseDeleteParamsList);
+}

+ 10 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/TBExamCourseService.java

@@ -27,6 +27,16 @@ public interface TBExamCourseService extends IService<TBExamCourse> {
      */
     boolean verifyExamCourseCantRun(Long examId, Long schoolId, String courseCode, String courseName);
 
+    /**
+     * 校验考试科目是否不能删除
+     *
+     * @param examId     考试id
+     * @param schoolId   学校id
+     * @param courseCode 课程编号
+     * @return true:不能删除 || false:可以删除
+     */
+    boolean verifyExamCourseCantDelete(Long examId, Long schoolId, String courseCode);
+
     List<String> findEffectiveByExamId(Long examId, String courseCode);
 
     /**

+ 78 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamCourseDeleteServiceImpl.java

@@ -0,0 +1,78 @@
+package com.qmth.teachcloud.report.business.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.teachcloud.common.bean.params.TBExamCourseDeleteParams;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.report.business.entity.TBCommonLevelConfig;
+import com.qmth.teachcloud.report.business.entity.TBCommonRankLevelConfig;
+import com.qmth.teachcloud.report.business.entity.TBDimension;
+import com.qmth.teachcloud.report.business.service.*;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Description: 分析课程物理删除服务实现类
+ * @Author: CaoZixuan
+ * @Date: 2022-07-05
+ */
+@Service
+public class TBExamCourseDeleteServiceImpl implements TBExamCourseDeleteService {
+    @Resource
+    TBCommonLevelConfigService tbCommonLevelConfigService;
+    @Resource
+    TBCommonRankLevelConfigService tbCommonRankLevelConfigService;
+    @Resource
+    TBDimensionService tbDimensionService;
+    @Resource
+    TBExamCourseService tbExamCourseService;
+    @Resource
+    TBExamStudentService tbExamStudentService;
+    @Resource
+    TBModuleConfigService tbModuleConfigService;
+    @Resource
+    TBModuleProficiencyService tbModuleProficiencyService;
+
+
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void deleteBasicTableData(Long schoolId, Long examId, String courseCode) {
+        if (tbExamCourseService.verifyExamCourseCantDelete(schoolId,examId,courseCode)){
+            throw ExceptionResultEnum.ERROR.exception("考试id为【" + examId + "】,课程编号为【" + courseCode + "】的分析课程当前不能被删除");
+        }
+        // 基础且无关联表删除
+        tbCommonLevelConfigService.remove(new QueryWrapper<TBCommonLevelConfig>()
+                .lambda()
+                .eq(TBCommonLevelConfig::getExamId,examId)
+                .eq(TBCommonLevelConfig::getCourseCode,courseCode));
+        tbCommonRankLevelConfigService.remove(new QueryWrapper<TBCommonRankLevelConfig>()
+                .lambda()
+                .eq(TBCommonRankLevelConfig::getExamId,examId)
+                .eq(TBCommonRankLevelConfig::getCourseCode,courseCode));
+        tbDimensionService.remove(new QueryWrapper<TBDimension>()
+                .lambda()
+                .eq(TBDimension::getExamId,examId)
+                .eq(TBDimension::getCourseCode,courseCode));
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void deleteAnalyzeTableData(Long schoolId, Long examId, String courseCode) {
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void repeatCalculateTotalTableData(Long schoolId, Long examId, String courseCode) {
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void deleteTBExamCourse(List<TBExamCourseDeleteParams> tbExamCourseDeleteParamsList) {
+
+    }
+}

+ 38 - 11
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/TBExamCourseServiceImpl.java

@@ -58,7 +58,7 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
         schoolCourseQuery.lambda()
                 .eq(BasicCourse::getSchoolId, schoolId)
                 .eq(BasicCourse::getCode, courseCode);
-        if (SystemConstant.strNotNull(courseName)){
+        if (SystemConstant.strNotNull(courseName)) {
             schoolCourseQuery.lambda().eq(BasicCourse::getName, courseName);
         }
         List<BasicCourse> tbSchoolCourseList = basicCourseService.list(schoolCourseQuery);
@@ -70,7 +70,7 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
         examCourseQuery.lambda()
                 .eq(TBExamCourse::getExamId, examId)
                 .eq(TBExamCourse::getCourseCode, courseCode);
-        if (SystemConstant.strNotNull(courseName)){
+        if (SystemConstant.strNotNull(courseName)) {
             examCourseQuery.lambda().eq(TBExamCourse::getCourseName, courseName);
         }
         List<TBExamCourse> tbExamCourseList = this.list(examCourseQuery);
@@ -84,6 +84,33 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
                 publishStatusEnum.equals(PublishStatusEnum.PUBLISH);
     }
 
+    @Override
+    public boolean verifyExamCourseCantDelete(Long examId, Long schoolId, String courseCode) {
+        QueryWrapper<BasicCourse> schoolCourseQuery = new QueryWrapper<>();
+        schoolCourseQuery.lambda()
+                .eq(BasicCourse::getSchoolId, schoolId)
+                .eq(BasicCourse::getCode, courseCode);
+        List<BasicCourse> tbSchoolCourseList = basicCourseService.list(schoolCourseQuery);
+        if (tbSchoolCourseList.size() != 1) {
+            throw ExceptionResultEnum.ERROR.exception("学校课程基础数据异常");
+        }
+
+        QueryWrapper<TBExamCourse> examCourseQuery = new QueryWrapper<>();
+        examCourseQuery.lambda()
+                .eq(TBExamCourse::getExamId, examId)
+                .eq(TBExamCourse::getCourseCode, courseCode);
+        List<TBExamCourse> tbExamCourseList = this.list(examCourseQuery);
+        if (tbExamCourseList.size() != 1) {
+            throw ExceptionResultEnum.ERROR.exception("考试课程基础数据异常");
+        }
+        TBExamCourse tbExamCourse = tbExamCourseList.get(0);
+        TestStatusEnum testStatusEnum = tbExamCourse.getTestStatus();
+        PublishStatusEnum publishStatusEnum = tbExamCourse.getPublishStatus();
+        // 已发布的和计算中的 分析课程不能被删除
+        return testStatusEnum.equals(TestStatusEnum.TEST) || testStatusEnum.equals(TestStatusEnum.CHECKED) ||
+                publishStatusEnum.equals(PublishStatusEnum.PUBLISH) || publishStatusEnum.equals(PublishStatusEnum.COMPUTING);
+    }
+
     @Override
     public List<String> findEffectiveByExamId(Long examId, String courseCode) {
         List<PublishStatusEnum> publishStatusEnumList = new ArrayList<>();
@@ -159,19 +186,19 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
         if (tbExamCourseList.size() > 0) {
             // 编辑
             TBExamCourse tbExamCourse = tbExamCourseList.get(0);
-            if (this.verifyExamCourseCantRun(examId, schoolId, courseCode, null)){
+            if (this.verifyExamCourseCantRun(examId, schoolId, courseCode, null)) {
                 throw ExceptionResultEnum.ERROR.exception("考试id【" + examId + "】,课程编号为【" + courseCode + "】的课程试卷已经发布或检查,无法更新");
             }
-            if (!Objects.equals(courseName,tbExamCourse.getCourseName()) ||
-                    !Objects.equals(paperType,tbExamCourse.getPaperType()) ||
-                    !Objects.equals(teachCollegeName,tbExamCourse.getTeachCollegeName())){
+            if (!Objects.equals(courseName, tbExamCourse.getCourseName()) ||
+                    !Objects.equals(paperType, tbExamCourse.getPaperType()) ||
+                    !Objects.equals(teachCollegeName, tbExamCourse.getTeachCollegeName())) {
                 tbExamCourse.setOpenDataMd5(null);
             }
             tbExamCourse.setPaperType(paperType);
             tbExamCourse.setCourseName(courseName);
             tbExamCourse.setTeachCollegeName(teachCollegeName);
             this.updateById(tbExamCourse);
-        }else {
+        } else {
             // 新增
             TBExamCourse tbExamCourse = new TBExamCourse();
             tbExamCourse.setId(SystemConstant.getDbUuid());
@@ -191,10 +218,10 @@ public class TBExamCourseServiceImpl extends ServiceImpl<TBExamCourseMapper, TBE
     @Override
     public boolean checkFinishCalculate(Long schoolId, Long examId, String courseCode) {
         TBExamCourse tbExamCourse = this.getOne(new QueryWrapper<TBExamCourse>().lambda()
-                .eq(TBExamCourse::getSchoolId,schoolId)
-                .eq(TBExamCourse::getExamId,examId)
-                .eq(TBExamCourse::getCourseCode,courseCode));
-        if (Objects.isNull(tbExamCourse)){
+                .eq(TBExamCourse::getSchoolId, schoolId)
+                .eq(TBExamCourse::getExamId, examId)
+                .eq(TBExamCourse::getCourseCode, courseCode));
+        if (Objects.isNull(tbExamCourse)) {
             throw ExceptionResultEnum.ERROR.exception("未找到基础分析课程");
         }
         return !PublishStatusEnum.UN_COMPUTE.equals(tbExamCourse.getPublishStatus());

+ 26 - 20
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/templete/strategy/CalculateTaskTemplate.java

@@ -29,8 +29,6 @@ import java.util.Objects;
 
 /**
  * @Description: 分析数据模版
- * @Param:
- * @return:
  * @Author: wangliang
  * @Date: 2022/6/7
  */
@@ -40,10 +38,9 @@ public abstract class CalculateTaskTemplate {
     /**
      * 创建异步任务
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
      */
-    protected void createSyncTask(CalculateParams calculateParams) throws IOException {
+    protected void createSyncTask(CalculateParams calculateParams) {
         log.info("createSyncTask come in");
         TBSyncTaskService tbSyncTaskService = SpringContextHolder.getBean(TBSyncTaskService.class);
         Collections.sort(calculateParams.getCourseCode());
@@ -68,24 +65,24 @@ public abstract class CalculateTaskTemplate {
     /**
      * 数据校验,由具体类实现
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
+     * @throws IOException 异常
      */
     public abstract void dataVaild(CalculateParams calculateParams) throws IOException;
 
     /**
      * 数据计算,由具体类实现
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
+     * @throws IOException 异常
      */
     public abstract void calculate(CalculateParams calculateParams) throws IOException, InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException;
 
     /**
      * 更新任务进度方法
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
+     * @throws IOException 异常
      */
     public void updateProgress(CalculateParams calculateParams) throws IOException {
         log.info("updateProgress come in");
@@ -105,8 +102,8 @@ public abstract class CalculateTaskTemplate {
     /**
      * 完成任务方法
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
+     * @throws IOException 异常
      */
     protected void finished(CalculateParams calculateParams) throws IOException {
         log.info("finished come in");
@@ -121,8 +118,8 @@ public abstract class CalculateTaskTemplate {
     /**
      * 任务异常方法
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
+     * @throws IOException 异常
      */
     protected void exception(CalculateParams calculateParams) throws IOException {
         log.info("exception come in");
@@ -135,8 +132,8 @@ public abstract class CalculateTaskTemplate {
     /**
      * 回调通知方法
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
+     * @throws IOException 异常
      */
     protected void callback(CalculateParams calculateParams) throws IOException {
         log.info("callback come in");
@@ -169,12 +166,13 @@ public abstract class CalculateTaskTemplate {
     /**
      * 开始计算
      *
-     * @param calculateParams
-     * @throws IOException
+     * @param calculateParams 计算参数
+     * @throws IOException 异常
      */
     public void start(CalculateParams calculateParams) throws IOException {
         RedisUtil redisUtil = SpringContextHolder.getBean(RedisUtil.class);
-        String source = null;
+        String source;
+        String exception = null;
         if (Objects.nonNull(calculateParams.getTbSyncTask())) {
             source = calculateParams.getTbSyncTask().getSource();
         } else {
@@ -190,6 +188,7 @@ public abstract class CalculateTaskTemplate {
             calculate(calculateParams);
             finished(calculateParams);
         } catch (Exception e) {
+            exception = e.getMessage();
             log.error(SystemConstant.LOG_ERROR, e);
             if (Objects.nonNull(calculateParams.getTbSyncTask())) {
                 calculateParams.getTbSyncTask().setSummary(e.getMessage());
@@ -201,6 +200,13 @@ public abstract class CalculateTaskTemplate {
                 ResultUtil.error(e.getMessage());
             }
         } finally {
+            if (Objects.isNull(exception)) {
+                CommonCacheService commonCacheService = SpringContextHolder.getBean(CommonCacheService.class);
+                commonCacheService.removeExamStudentReportCache();
+                commonCacheService.removeCollegeDeanCache();
+                commonCacheService.removeCollegeCourseCache();
+                commonCacheService.removeSurveyTeacherViewCache();
+            }
             redisUtil.releaseLock(SystemConstant.REDIS_LOCK_CALCULATE_PREFIX + source);
         }
     }