Explorar o código

add: 知学知考 分析试卷-评价模型设置

caozixuan %!s(int64=3) %!d(string=hai) anos
pai
achega
a0f6f30c23

+ 89 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradeModuleEvaluationDatasource.java

@@ -0,0 +1,89 @@
+package com.qmth.distributed.print.business.bean.params.analyze;
+
+import com.qmth.distributed.print.business.enums.DimensionEnum;
+import com.qmth.teachcloud.common.enums.EvaluationEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 分析维度模块评价详细内容
+ * @Author: CaoZixuan
+ * @Date: 2022-05-31
+ */
+public class GradeModuleEvaluationDatasource {
+    @ApiModelProperty(value = "模块类型(知识、维度、素养)")
+    private DimensionEnum moduleType;
+
+    @ApiModelProperty(value = "计算公式规则")
+    private EvaluationEnum formula;
+
+    @ApiModelProperty(value = "取值范围(计算用)")
+    private String scope;
+
+    @ApiModelProperty(value = "等级")
+    private String levelCode;
+
+    @ApiModelProperty(value = "水平等级层次")
+    private String levelName;
+
+    @ApiModelProperty(value = "诊断结果")
+    private String result;
+
+    @ApiModelProperty(value = "学习建议")
+    private String advice;
+
+    public DimensionEnum getModuleType() {
+        return moduleType;
+    }
+
+    public void setModuleType(DimensionEnum moduleType) {
+        this.moduleType = moduleType;
+    }
+
+    public EvaluationEnum getFormula() {
+        return formula;
+    }
+
+    public void setFormula(EvaluationEnum formula) {
+        this.formula = formula;
+    }
+
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(String scope) {
+        this.scope = scope;
+    }
+
+    public String getLevelCode() {
+        return levelCode;
+    }
+
+    public void setLevelCode(String levelCode) {
+        this.levelCode = levelCode;
+    }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public String getAdvice() {
+        return advice;
+    }
+
+    public void setAdvice(String advice) {
+        this.advice = advice;
+    }
+}

+ 56 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/analyze/GradeModuleEvaluationParam.java

@@ -0,0 +1,56 @@
+package com.qmth.distributed.print.business.bean.params.analyze;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Description: 分析维度模块评价参数
+ * @Author: CaoZixuan
+ * @Date: 2022-05-31
+ */
+public class GradeModuleEvaluationParam {
+    @ApiModelProperty(value = "试卷编号")
+    private String paperNumber;
+
+    @ApiModelProperty(value = "试卷类型")
+    private String paperType;
+
+    @ApiModelProperty(value = "试卷名称")
+    private String paperName;
+
+    @ApiModelProperty(value = "模块评价详细信息集合")
+    private List<GradeModuleEvaluationDatasource> gradeModuleEvaluationDatasourceList;
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getPaperType() {
+        return paperType;
+    }
+
+    public void setPaperType(String paperType) {
+        this.paperType = paperType;
+    }
+
+    public String getPaperName() {
+        return paperName;
+    }
+
+    public void setPaperName(String paperName) {
+        this.paperName = paperName;
+    }
+
+    public List<GradeModuleEvaluationDatasource> getGradeModuleEvaluationDatasourceList() {
+        return gradeModuleEvaluationDatasourceList;
+    }
+
+    public void setGradeModuleEvaluationDatasourceList(List<GradeModuleEvaluationDatasource> gradeModuleEvaluationDatasourceList) {
+        this.gradeModuleEvaluationDatasourceList = gradeModuleEvaluationDatasourceList;
+    }
+}

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

@@ -0,0 +1,111 @@
+package com.qmth.distributed.print.business.bean.result.analyze;
+
+import com.qmth.distributed.print.business.enums.DimensionEnum;
+import com.qmth.teachcloud.common.enums.EvaluationEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 分析维度模块评价查询返回值
+ * @Author: CaoZixuan
+ * @Date: 2022-05-31
+ */
+public class GradeModuleEvaluationResult {
+    @ApiModelProperty(value = "模块类型(知识、维度、素养)")
+    private DimensionEnum moduleType;
+
+    @ApiModelProperty(value = "计算公式规则")
+    private EvaluationEnum formula;
+
+    @ApiModelProperty(value = "取值范围(计算用)")
+    private String scope;
+
+    @ApiModelProperty(value = "展示用范围最小阈值")
+    private String min;
+
+    @ApiModelProperty(value = "展示用范围最大阈值")
+    private String max;
+
+    @ApiModelProperty(value = "等级")
+    private String levelCode;
+
+    @ApiModelProperty(value = "水平等级层次")
+    private String levelName;
+
+    @ApiModelProperty(value = "诊断结果")
+    private String result;
+
+    @ApiModelProperty(value = "学习建议")
+    private String advice;
+
+    public DimensionEnum getModuleType() {
+        return moduleType;
+    }
+
+    public void setModuleType(DimensionEnum moduleType) {
+        this.moduleType = moduleType;
+    }
+
+    public EvaluationEnum getFormula() {
+        return formula;
+    }
+
+    public void setFormula(EvaluationEnum formula) {
+        this.formula = formula;
+    }
+
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(String scope) {
+        this.scope = scope;
+    }
+
+    public String getMin() {
+        return min;
+    }
+
+    public void setMin(String min) {
+        this.min = min;
+    }
+
+    public String getMax() {
+        return max;
+    }
+
+    public void setMax(String max) {
+        this.max = max;
+    }
+
+    public String getLevelCode() {
+        return levelCode;
+    }
+
+    public void setLevelCode(String levelCode) {
+        this.levelCode = levelCode;
+    }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public String getResult() {
+        return result;
+    }
+
+    public void setResult(String result) {
+        this.result = result;
+    }
+
+    public String getAdvice() {
+        return advice;
+    }
+
+    public void setAdvice(String advice) {
+        this.advice = advice;
+    }
+}

+ 8 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/GradeModuleEvaluation.java

@@ -2,7 +2,9 @@ package com.qmth.distributed.print.business.entity;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.enums.DimensionEnum;
 import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.enums.EvaluationEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -35,10 +37,10 @@ public class GradeModuleEvaluation extends BaseEntity implements Serializable {
     private String paperName;
 
     @ApiModelProperty(value = "模块类型(知识、维度、素养)")
-    private String moduleType;
+    private DimensionEnum moduleType;
 
     @ApiModelProperty(value = "计算公式规则")
-    private String formula;
+    private EvaluationEnum formula;
 
     @ApiModelProperty(value = "取值范围(计算用)")
     private String scope;
@@ -87,19 +89,19 @@ public class GradeModuleEvaluation extends BaseEntity implements Serializable {
         this.paperName = paperName;
     }
 
-    public String getModuleType() {
+    public DimensionEnum getModuleType() {
         return moduleType;
     }
 
-    public void setModuleType(String moduleType) {
+    public void setModuleType(DimensionEnum moduleType) {
         this.moduleType = moduleType;
     }
 
-    public String getFormula() {
+    public EvaluationEnum getFormula() {
         return formula;
     }
 
-    public void setFormula(String formula) {
+    public void setFormula(EvaluationEnum formula) {
         this.formula = formula;
     }
 

+ 20 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeModuleEvaluationService.java

@@ -1,9 +1,13 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.bean.params.analyze.GradeModuleEvaluationParam;
+import com.qmth.distributed.print.business.bean.result.analyze.GradeModuleEvaluationResult;
 import com.qmth.distributed.print.business.entity.GradeModuleEvaluation;
+import com.qmth.teachcloud.common.entity.SysUser;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -15,5 +19,21 @@ import java.util.List;
  */
 public interface GradeModuleEvaluationService extends IService<GradeModuleEvaluation> {
 
+    /**
+     * 查询分析维度模块评价
+     * @param paperNumber 试卷编号
+     * @param paperType 试卷类型
+     * @param requestUser 请求用户
+     * @return 结果
+     */
+    List<GradeModuleEvaluationResult> findGradeModuleEvaluation(String paperNumber, String paperType, SysUser requestUser);
+
+    /**
+     * 保存分析维度模块评价
+     * @param gradeModuleEvaluationParam 模块评价参数
+     * @param requestUser 请求用户
+     */
+    void saveGradeModuleEvaluationBatch(GradeModuleEvaluationParam gradeModuleEvaluationParam,SysUser requestUser);
+
     List<GradeModuleEvaluation> findBySchoolIdAndPaperNumberAndPaperType(Long schoolId, String paperNumber, String paperType);
 }

+ 85 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeModuleEvaluationServiceImpl.java

@@ -2,12 +2,23 @@ package com.qmth.distributed.print.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.params.analyze.GradeModuleEvaluationDatasource;
+import com.qmth.distributed.print.business.bean.params.analyze.GradeModuleEvaluationParam;
+import com.qmth.distributed.print.business.bean.result.analyze.GradeModuleEvaluationResult;
 import com.qmth.distributed.print.business.entity.GradeModuleEvaluation;
 import com.qmth.distributed.print.business.mapper.GradeModuleEvaluationMapper;
+import com.qmth.distributed.print.business.service.GradeBatchPaperService;
 import com.qmth.distributed.print.business.service.GradeModuleEvaluationService;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -19,6 +30,80 @@ import java.util.List;
  */
 @Service
 public class GradeModuleEvaluationServiceImpl extends ServiceImpl<GradeModuleEvaluationMapper, GradeModuleEvaluation> implements GradeModuleEvaluationService {
+    @Resource
+    private GradeBatchPaperService gradeBatchPaperService;
+
+    @Override
+    public List<GradeModuleEvaluationResult> findGradeModuleEvaluation(String paperNumber, String paperType, SysUser requestUser) {
+        Long schoolId = requestUser.getSchoolId();
+        List<GradeModuleEvaluation> evaluationList = this.list(new QueryWrapper<GradeModuleEvaluation>()
+                .lambda()
+                .eq(GradeModuleEvaluation::getSchoolId, schoolId)
+                .eq(GradeModuleEvaluation::getPaperNumber, paperNumber)
+                .eq(GradeModuleEvaluation::getPaperType, paperType));
+
+        List<GradeModuleEvaluationResult> result = new ArrayList<>();
+        if (evaluationList != null && evaluationList.size() > 0) {
+            result = evaluationList.stream().flatMap(e -> {
+                GradeModuleEvaluationResult cell = new GradeModuleEvaluationResult();
+                cell.setModuleType(e.getModuleType());
+                cell.setFormula(e.getFormula());
+                String scope = e.getScope();
+                // 解析区间
+                String[] scopeArr = scope.substring(1, scope.length() - 1).split(",");
+                if (scopeArr.length != 2) {
+                    throw ExceptionResultEnum.ERROR.exception("区间【" + scope + "】解析失败");
+                }
+                cell.setScope(scope);
+                cell.setMin(scopeArr[0]);
+                cell.setMax(scopeArr[1]);
+                cell.setLevelCode(e.getLevelCode());
+                cell.setLevelName(e.getLevelName());
+                cell.setResult(e.getResult());
+                cell.setAdvice(e.getAdvice());
+                return Stream.of(cell);
+            }).collect(Collectors.toList());
+        }
+        return result;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveGradeModuleEvaluationBatch(GradeModuleEvaluationParam gradeModuleEvaluationParam, SysUser requestUser) {
+        Long schoolId = requestUser.getSchoolId();
+        String paperNumber = gradeModuleEvaluationParam.getPaperNumber();
+        String paperType = gradeModuleEvaluationParam.getPaperType();
+        String paperName = gradeModuleEvaluationParam.getPaperName();
+        List<GradeModuleEvaluationDatasource> datasource = gradeModuleEvaluationParam.getGradeModuleEvaluationDatasourceList();
+
+        List<GradeModuleEvaluation> gradeModuleEvaluationList = datasource.stream().flatMap(e -> {
+            GradeModuleEvaluation cell = new GradeModuleEvaluation();
+            cell.setSchoolId(schoolId);
+            cell.setPaperNumber(paperNumber);
+            cell.setPaperType(paperType);
+            cell.setPaperName(paperName);
+            cell.setModuleType(e.getModuleType());
+            cell.setFormula(e.getFormula());
+            cell.setScope(e.getScope());
+            cell.setLevelCode(e.getLevelCode());
+            cell.setLevelName(e.getLevelName());
+            cell.setResult(e.getResult());
+            cell.setAdvice(e.getAdvice());
+            return Stream.of(cell);
+        }).collect(Collectors.toList());
+
+        // 根据试卷编号和试卷类型判断分析课程是否有操作权限(批次分析试卷没有在计算中的才能操作)
+        gradeBatchPaperService.checkOperateAuth(schoolId, paperNumber, paperType);
+        // 删除原有的模块评价
+        this.remove(new QueryWrapper<GradeModuleEvaluation>()
+                .lambda()
+                .eq(GradeModuleEvaluation::getSchoolId, schoolId)
+                .eq(GradeModuleEvaluation::getPaperNumber, paperNumber)
+                .eq(GradeModuleEvaluation::getPaperType, paperType));
+
+        // 新增
+        this.saveBatch(gradeModuleEvaluationList);
+    }
 
     @Override
     public List<GradeModuleEvaluation> findBySchoolIdAndPaperNumberAndPaperType(Long schoolId, String paperNumber, String paperType) {

+ 21 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/EvaluationEnum.java

@@ -0,0 +1,21 @@
+package com.qmth.teachcloud.common.enums;
+
+/**
+ * @Description: 评价方式类型
+ * @Author: CaoZixuan
+ * @Date: 2022-05-31
+ */
+public enum EvaluationEnum {
+    PERSONAL_SCORE_RATE("个人得分率"),
+    PERCENTILE_RANK("百分等级"),
+    ;
+    EvaluationEnum(String desc) {
+        this.desc = desc;
+    }
+
+    private final String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+}