wangliang 1 жил өмнө
parent
commit
fb793cdf67

+ 19 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/DimensionDto.java

@@ -36,7 +36,10 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
     private Double dimensionScore = 0.0d;
 
     @ApiModelProperty(value = "换算分数")
-    private Double matrixScore = 0.0d;
+    private Double dimensionMatrixScore = 0.0d;
+
+    @ApiModelProperty(value = "换算分数")
+    private Double dimensionMatrixAvgScore = 0.0d;
 
     public DimensionDto() {
 
@@ -48,7 +51,8 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
         this.dimensionCode = dimensionDto.getDimensionCode();
         this.dimensionName = dimensionDto.getDimensionName();
         this.dimensionScore = dimensionDto.getDimensionScore();
-        this.matrixScore = dimensionDto.getMatrixScore();
+        this.dimensionMatrixScore = dimensionDto.getDimensionMatrixScore();
+        this.dimensionMatrixAvgScore = dimensionDto.getDimensionMatrixAvgScore();
     }
 
     public DimensionDto(Long targetId, DimensionDto dimensionDto, Double dimensionScore) {
@@ -59,21 +63,28 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
         this.dimensionScore = dimensionScore;
     }
 
-    public DimensionDto(Long targetId, DimensionDto dimensionDto, Double dimensionScore, Double matrixScore) {
+    public DimensionDto(Long targetId, DimensionDto dimensionDto, Double dimensionScore, Double dimensionMatrixScore) {
         this.targetId = targetId;
         this.dimensionId = dimensionDto.getDimensionId();
         this.dimensionCode = dimensionDto.getDimensionCode();
         this.dimensionName = dimensionDto.getDimensionName();
         this.dimensionScore = dimensionScore;
-        this.matrixScore = matrixScore;
+        this.dimensionMatrixScore = dimensionMatrixScore;
+    }
+    public Double getDimensionMatrixScore() {
+        return dimensionMatrixScore;
+    }
+
+    public void setDimensionMatrixScore(Double dimensionMatrixScore) {
+        this.dimensionMatrixScore = dimensionMatrixScore;
     }
 
-    public Double getMatrixScore() {
-        return matrixScore;
+    public Double getDimensionMatrixAvgScore() {
+        return dimensionMatrixAvgScore;
     }
 
-    public void setMatrixScore(Double matrixScore) {
-        this.matrixScore = matrixScore;
+    public void setDimensionMatrixAvgScore(Double dimensionMatrixAvgScore) {
+        this.dimensionMatrixAvgScore = dimensionMatrixAvgScore;
     }
 
     public Long getTargetId() {

+ 10 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentDto.java

@@ -28,7 +28,7 @@ public class ReportExamStudentDto implements Serializable {
     private String administrativeClass;
 
     @ApiModelProperty(value = "综合成绩")
-    private Double score;
+    private Double score = 0.0;
 
     @ApiModelProperty(value = "课程目标集合")
     private List<ReportExamStudentTargetDto> targetList;
@@ -45,6 +45,14 @@ public class ReportExamStudentDto implements Serializable {
         }.getType());
     }
 
+    public ReportExamStudentDto(String name, String studentCode, String administrativeClass, Double score, List<ReportExamStudentTargetDto> targetList) {
+        this.name = name;
+        this.studentCode = studentCode;
+        this.administrativeClass = administrativeClass;
+        this.score = score;
+        this.targetList = targetList;
+    }
+
     public ReportExamStudentDto(String name, String studentCode, String administrativeClass, Double score) {
         this.name = name;
         this.studentCode = studentCode;
@@ -52,6 +60,7 @@ public class ReportExamStudentDto implements Serializable {
         this.score = score;
     }
 
+
     public ReportExamStudentDto(FinalScoreResult finalScoreResult) {
         this.name = finalScoreResult.getName();
         this.studentCode = finalScoreResult.getStudentCode();

+ 38 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentFinalScoreDto.java

@@ -36,15 +36,30 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
     private BigDecimal targetScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标转换总分")
-    private Double dimensionMatrixSumScore;
+    private Double targetMatrixSumScore = 0.0d;
 
     @ApiModelProperty(value = "课程目标集合")
     private List<DimensionDto> dimensionList;
 
+    @ApiModelProperty(value = "课程目标考核要素的平均分")
+    private Double matrixAvgScore = 0.0d;
+
     public ReportExamStudentFinalScoreDto() {
 
     }
 
+    public ReportExamStudentFinalScoreDto(ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto) {
+        this.evaluationId = reportExamStudentFinalScoreDto.getEvaluationId();
+        this.evaluation = reportExamStudentFinalScoreDto.getEvaluation();
+        this.evaluationDesc = reportExamStudentFinalScoreDto.getEvaluationDesc();
+        this.targetWeight = reportExamStudentFinalScoreDto.getTargetWeight();
+        this.targetScore = reportExamStudentFinalScoreDto.getTargetScore();
+        this.dimensionList = reportExamStudentFinalScoreDto.getDimensionList();
+        this.targetMatrixSumScore = reportExamStudentFinalScoreDto.getTargetMatrixSumScore();
+        this.matrixAvgScore = reportExamStudentFinalScoreDto.getMatrixAvgScore();
+    }
+
+
     public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList) {
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluation = finalScoreWordDto.getEvaluation();
@@ -54,12 +69,30 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
         this.dimensionList = dimensionList;
     }
 
-    public Double getDimensionMatrixSumScore() {
-        return dimensionMatrixSumScore;
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double targetMatrixSumScore) {
+        this.evaluationId = finalScoreWordDto.getEvaluationId();
+        this.evaluation = finalScoreWordDto.getEvaluation();
+        this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
+        this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
+        this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
+        this.dimensionList = dimensionList;
+        this.targetMatrixSumScore = targetMatrixSumScore;
+    }
+
+    public Double getTargetMatrixSumScore() {
+        return targetMatrixSumScore;
+    }
+
+    public void setTargetMatrixSumScore(Double targetMatrixSumScore) {
+        this.targetMatrixSumScore = targetMatrixSumScore;
+    }
+
+    public Double getMatrixAvgScore() {
+        return matrixAvgScore;
     }
 
-    public void setDimensionMatrixSumScore(Double dimensionMatrixSumScore) {
-        this.dimensionMatrixSumScore = dimensionMatrixSumScore;
+    public void setMatrixAvgScore(Double matrixAvgScore) {
+        this.matrixAvgScore = matrixAvgScore;
     }
 
     public Long getEvaluationId() {

+ 23 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentTargetDto.java

@@ -38,6 +38,9 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
     @ApiModelProperty(value = "目标达成评价值")
     private BigDecimal evaluationValue = new BigDecimal(0);
 
+    @ApiModelProperty(value = "各课程目标平均分")
+    private Double targetMatrixAvgScore = 0.0;
+
     @ApiModelProperty(value = "期末成绩")
     private ReportExamStudentFinalScoreDto finalScore;
 
@@ -48,14 +51,6 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
 
     }
 
-    public ReportExamStudentTargetDto(CourseTargetWordDto courseTargetWordDto) {
-        this.targetId = courseTargetWordDto.getTargetId();
-        this.targetName = courseTargetWordDto.getTargetName();
-        this.graduationRequirement = courseTargetWordDto.getGraduationRequirement();
-        this.targetWeight = courseTargetWordDto.getTargetWeight();
-        this.targetScore = courseTargetWordDto.getTargetScore();
-    }
-
     public ReportExamStudentTargetDto(CourseTargetWordDto courseTargetWordDto, ReportExamStudentFinalScoreDto finalScore, ReportExamStudentUsualScoreDto usualScore) {
         this.targetId = courseTargetWordDto.getTargetId();
         this.targetName = courseTargetWordDto.getTargetName();
@@ -66,6 +61,26 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
         this.usualScore = usualScore;
     }
 
+    public ReportExamStudentTargetDto(ReportExamStudentTargetDto reportExamStudentTargetDto) {
+        this.targetId = reportExamStudentTargetDto.getTargetId();
+        this.targetName = reportExamStudentTargetDto.getTargetName();
+        this.graduationRequirement = reportExamStudentTargetDto.getGraduationRequirement();
+        this.evaluationValue = reportExamStudentTargetDto.getEvaluationValue();
+        this.targetMatrixAvgScore = reportExamStudentTargetDto.getTargetMatrixAvgScore();
+        this.targetWeight = reportExamStudentTargetDto.getTargetWeight();
+        this.targetScore = reportExamStudentTargetDto.getTargetScore();
+        this.finalScore = reportExamStudentTargetDto.getFinalScore();
+        this.usualScore = reportExamStudentTargetDto.getUsualScore();
+    }
+
+    public Double getTargetMatrixAvgScore() {
+        return targetMatrixAvgScore;
+    }
+
+    public void setTargetMatrixAvgScore(Double targetMatrixAvgScore) {
+        this.targetMatrixAvgScore = targetMatrixAvgScore;
+    }
+
     public BigDecimal getTargetScore() {
         return targetScore;
     }

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreDto.java

@@ -27,6 +27,11 @@ public class ReportExamStudentUsualScoreDto implements Serializable {
 
     }
 
+    public ReportExamStudentUsualScoreDto(ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto) {
+        this.scoreMap = reportExamStudentUsualScoreDto.getScoreMap();
+        this.scoreList = reportExamStudentUsualScoreDto.getScoreList();
+    }
+
     public ReportExamStudentUsualScoreDto(Map<Long, List<ReportExamStudentUsualScoreObjDto>> scoreMap) {
         this.scoreMap = scoreMap;
     }

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

@@ -51,6 +51,9 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
     @ApiModelProperty(value = "换算分数")
     private Double matrixScore = 0.0d;
 
+    @ApiModelProperty(value = "课程目标考核要素的平均分")
+    private Double matrixAvgScore = 0.0d;
+
     public ReportExamStudentUsualScoreObjDto() {
 
     }
@@ -81,6 +84,14 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
         this.targetSumWeight = targetSumWeight;
     }
 
+    public Double getMatrixAvgScore() {
+        return matrixAvgScore;
+    }
+
+    public void setMatrixAvgScore(Double matrixAvgScore) {
+        this.matrixAvgScore = matrixAvgScore;
+    }
+
     public Long getTargetId() {
         return targetId;
     }

+ 2 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRBasicInfoService.java

@@ -1,7 +1,8 @@
 package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.distributed.print.business.bean.dto.report.*;
+import com.qmth.distributed.print.business.bean.dto.report.ReportCourseEvaluationResultDto;
+import com.qmth.distributed.print.business.bean.dto.report.ReportScoreViewDto;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructResult;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
@@ -37,14 +38,6 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      */
     public Map<String, Object> getReportCalculateParams(TRBasicInfo trBasicInfo, List<PaperStructResult> paperStructResultList);
 
-    /**
-     * 计算报告中的各最大分最小分平均分总分
-     *
-     * @param paramsMap
-     * @return
-     */
-    public Map<String, Object> reportCalculateMaxMinAvgSumScore(Map<String, Object> paramsMap);
-
     /**
      * 计算课程达成度考生明细
      *

+ 0 - 72
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -104,10 +104,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         Map<String, Object> paramsMap = new HashMap<>();
         //查询考生数据
         List<FinalScoreResult> finalScoreResultList = tcFinalScoreService.examStudentOverview(trBasicInfo.getExamId(), trBasicInfo.getCourseCode(), trBasicInfo.getPaperNumber());//考生成绩
-//        Map<String, List<Double>> usualScoreMap = new LinkedHashMap<>();//汇总平常成绩分数(用来算最高分,最低分,平均分)
-//        Map<Long, List<Double>> finalScoreTargetMap = new LinkedHashMap<>();//汇总各课程目标期末考试分数(用来算最高分,最低分,平均分)
         Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = new LinkedHashMap<>();//汇总考生课程目标-知识点卷面分(知识点得分用)
-        Map<Long, Map<Long, DimensionDto>> finalScoreExamStudentDimensionSumMap = new LinkedHashMap<>();//汇总考生课程目标-知识点总分(期末考试用)
         Map<Long, Map<Long, DimensionDto>> targetDimensionMap = new LinkedHashMap<>();//课程目标-知识点-卷面分(word报表用)
 
         List<ReportExamStudentDto> examStudentList = null;//考生集合
@@ -235,29 +232,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                     }
                                     finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
                                 }
-
-                                //目标-考生知识点总分-期末考试总分
-                                if (!finalScoreExamStudentDimensionSumMap.containsKey(courseTargetDto.getTargetId())) {
-                                    Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
-                                    dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
-                                    Map<Long, DimensionDto> dimensionTempMap = new LinkedHashMap<>();
-                                    dimensionTempMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
-                                    finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
-                                    targetDimensionMap.put(courseTargetDto.getTargetId(), dimensionTempMap);
-                                } else {
-                                    Map<Long, DimensionDto> dimensionMap = finalScoreExamStudentDimensionSumMap.get(courseTargetDto.getTargetId());
-                                    if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
-                                        dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
-                                        Map<Long, DimensionDto> dimensionTempMap = targetDimensionMap.get(courseTargetDto.getTargetId());
-                                        dimensionTempMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
-                                        targetDimensionMap.put(courseTargetDto.getTargetId(), dimensionTempMap);
-                                    } else {
-                                        DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
-                                        dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
-                                        dimensionMap.put(dimensionDto.getDimensionId(), dimensionDtoTemp);
-                                    }
-                                    finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
-                                }
                             }
                         }
                     }
@@ -301,52 +275,10 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         paramsMap.put("finalScoreResultList", finalScoreResultList);
         paramsMap.put("usualScoreMap", usualScoreMap);
         paramsMap.put("finalScoreExamStudentDimensionMap", finalScoreExamStudentDimensionMap);
-        paramsMap.put("finalScoreExamStudentDimensionSumMap", finalScoreExamStudentDimensionSumMap);
         paramsMap.put("examStudentList", examStudentList);
         paramsMap.put("finalScoreResultMap", finalScoreResultMap);
-        paramsMap.put("paperStructResultMap", paperStructResultMap);
         paramsMap.put("targetWordMap", targetWordMap);
         paramsMap.put("targetWebMap", targetWebMap);
-        paramsMap.put("paperStructResultList", paperStructResultList);
-        return paramsMap;
-    }
-
-    /**
-     * 计算报告中的各最大分最小分平均分总分
-     *
-     * @param paramsMap
-     * @return
-     */
-    @Override
-    public Map<String, Object> reportCalculateMaxMinAvgSumScore(Map<String, Object> paramsMap) {
-        Map<String, List<Double>> usualScoreMap = (Map<String, List<Double>>) paramsMap.get("usualScoreMap");
-        Map<Long, List<Double>> finalScoreTargetMap = (Map<Long, List<Double>>) paramsMap.get("finalScoreTargetMap");
-        List<FinalScoreResult> finalScoreResultList = (List<FinalScoreResult>) paramsMap.get("finalScoreResultList");
-
-        Map<String, ReportEvaluationDto> usualScoreOverviewDtoMap = new LinkedHashMap<>();//整体平常成绩分数图
-        Map<Long, FinalScoreOverviewDto> finalScoreOverviewDtoMap = new LinkedHashMap<>();//各课程目标期末考试分数图
-
-//        //计算平常成绩最高分,最低分,平均分
-//        usualScoreMap.forEach((k, v) -> {
-//            Double maxScore = v.stream().mapToDouble(Double::doubleValue).max().orElse(0d);
-//            Double minScore = v.stream().mapToDouble(Double::doubleValue).min().orElse(0d);
-//            Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-//            Double sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
-//            usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
-//        });
-
-//        //计算各课程目标期末考试最高分,最低分,平均分
-//        finalScoreTargetMap.forEach((k, v) -> {
-//            Double maxScore = v.stream().mapToDouble(Double::doubleValue).max().orElse(0d);
-//            Double minScore = v.stream().mapToDouble(Double::doubleValue).min().orElse(0d);
-////            Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-//            Double sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
-//            Double avgScore = new BigDecimal(sumScore).divide(new BigDecimal(finalScoreResultList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-//            finalScoreOverviewDtoMap.put(k, new FinalScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
-//        });
-
-        paramsMap.put("usualScoreOverviewDtoMap", usualScoreOverviewDtoMap);
-        paramsMap.put("finalScoreOverviewDtoMap", finalScoreOverviewDtoMap);
         return paramsMap;
     }
 
@@ -455,8 +387,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         }
 
         Map<String, Object> paramsMap = trBasicInfoService.getReportCalculateParams(trBasicInfo, paperStructResultList);
-//        paramsMap = trBasicInfoService.reportCalculateMaxMinAvgSumScore(paramsMap);
-
 //        ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = trBasicInfoService.reportCalculateCourseEvaluationResult(paramsMap);
 //        if (Objects.nonNull(reportCourseEvaluationResultDto)) {
 //            trBasicInfo.setCourseEvaluationResult(JacksonUtil.parseJson(reportCourseEvaluationResultDto));
@@ -482,8 +412,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             jsonObject.put("targetWebMap", courseTargetWebDtoList);
             trBasicInfo.setCourseEvaluationResultDetail(jsonObject.toJSONString());
         }
-//        trBasicInfo.setCourseEvaluationResultDetail(JacksonUtil.parseJson(paramsMap));
-
         trBasicInfo.getReportResult().setCommonInfo(new ReportCommonDto(markPaper.getExamId(), markPaper.getCourseCode(), markPaper.getCourseName(), markPaper.getPaperNumber()));
         return trBasicInfo;
     }

+ 91 - 59
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java

@@ -8,7 +8,6 @@ import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.entity.TRExamStudent;
 import com.qmth.distributed.print.business.mapper.TRExamStudentMapper;
 import com.qmth.distributed.print.business.service.TRExamStudentService;
-import com.qmth.teachcloud.common.util.JacksonUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -17,6 +16,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -44,7 +44,6 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = (Map<String, Map<Long, Map<Long, DimensionDto>>>) paramsMap.get("finalScoreExamStudentDimensionMap");
         Map<String, FinalScoreResult> finalScoreResultMap = (Map<String, FinalScoreResult>) paramsMap.get("finalScoreResultMap");
         Map<Long, CourseTargetWordDto> targetWordMap = (Map<Long, CourseTargetWordDto>) paramsMap.get("targetWordMap");
-        Map<Long, Map<Long, DimensionDto>> finalScoreExamStudentDimensionSumMap = (Map<Long, Map<Long, DimensionDto>>) paramsMap.get("finalScoreExamStudentDimensionSumMap");
         if (!CollectionUtils.isEmpty(examStudentList)) {
             BigDecimal bigDecimal = new BigDecimal(100);
             List<TRExamStudent> trExamStudentList = new ArrayList<>(examStudentList.size());
@@ -53,6 +52,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                 Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
                 FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
                 ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto = finalScoreResult.getUsualScoreDto();
+                //课程目标循环
                 map.forEach((k, v) -> {
                     List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
                     List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
@@ -62,95 +62,127 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                         ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList);
                         ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(scoreObjDtoList);
 
+                        BigDecimal dimensionMatrixSumScore = new BigDecimal(0);
                         if (!reportExamStudentTargetDtoMap.containsKey(k)) {
                             //各知识点转换分数
-                            List<DimensionDto> dimensionDtoTempList = new ArrayList<>(v.values());
-                            Double dimensionMatrixSumScore = 0.0d;
                             for (DimensionDto dimensionDto : dimensionDtoList) {
                                 Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                                dimensionDto.setMatrixScore(matrixScore);
-                                dimensionMatrixSumScore = dimensionMatrixSumScore + matrixScore;
-                                dimensionDtoTempList.add(new DimensionDto(dimensionDto));
+                                dimensionDto.setDimensionMatrixScore(matrixScore);
+                                dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
                             }
-                            reportExamStudentFinalScoreDto.setDimensionMatrixSumScore(dimensionMatrixSumScore);
-
-                            List<ReportExamStudentUsualScoreObjDto> scoreObjDtoTempList = new ArrayList<>();
-                            for (ReportExamStudentUsualScoreObjDto r : scoreObjDtoList) {
-                                scoreObjDtoTempList.add(new ReportExamStudentUsualScoreObjDto(r));
-                            }
-                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoTempList);
-                            reportExamStudentFinalScoreTempDto.setDimensionMatrixSumScore(dimensionMatrixSumScore);
-                            ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(scoreObjDtoTempList));
+                            //平时作业总和+累加
+                            Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
+                            reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
+                            reportExamStudentFinalScoreDto.setTargetMatrixSumScore(dimensionMatrixSumScore.doubleValue());
+                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList.stream().map(DimensionDto::new).collect(Collectors.toList()), dimensionMatrixSumScore.doubleValue());
+                            ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
                             reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
                         } else {
                             ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
                             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
                             List<DimensionDto> dimensionDtos = reportExamStudentFinalScoreAvgDto.getDimensionList();
                             //各知识点转换分数
-                            Double dimensionMatrixSumScore = 0.0d;
                             for (int i = 0; i < dimensionDtoList.size(); i++) {
                                 DimensionDto dimensionDto = dimensionDtoList.get(i);
                                 Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                                dimensionDtos.get(i).setMatrixScore(dimensionDtos.get(i).getMatrixScore() + matrixScore);
-                                dimensionDtos.get(i).setDimensionScore(dimensionDtos.get(i).getDimensionScore() + dimensionDto.getDimensionScore());
-                                dimensionMatrixSumScore = dimensionMatrixSumScore + matrixScore;
+                                dimensionDto.setDimensionMatrixScore(matrixScore);
+                                reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
+                                dimensionDtos.get(i).setDimensionMatrixScore(dimensionDtos.get(i).getDimensionMatrixScore() + matrixScore);
+                                dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
                             }
-                            reportExamStudentFinalScoreAvgDto.setDimensionMatrixSumScore(reportExamStudentFinalScoreAvgDto.getDimensionMatrixSumScore() + dimensionMatrixSumScore);
+                            reportExamStudentFinalScoreDto.setTargetMatrixSumScore(dimensionMatrixSumScore.doubleValue());
+                            reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(dimensionMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
 
+                            //平时作业总和+累加
                             List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjAvgDtoList = reportExamStudentUsualScoreAvgDto.getScoreList();
                             for (int i = 0; i < reportExamStudentUsualScoreObjDtoList.size(); i++) {
                                 ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoList.get(i);
-                                reportExamStudentUsualScoreAvgDto.getScoreList().get(i).setMatrixScore(reportExamStudentUsualScoreAvgDto.getScoreList().get(i).getMatrixScore() + reportExamStudentUsualScoreObjDto.getMatrixScore());
-                                reportExamStudentUsualScoreAvgDto.getScoreList().get(i).setScore(reportExamStudentUsualScoreAvgDto.getScoreList().get(i).getScore() + reportExamStudentUsualScoreObjDto.getScore());
+                                reportExamStudentDto.setScore(reportExamStudentDto.getScore() + reportExamStudentUsualScoreObjDto.getMatrixScore());
+                                reportExamStudentUsualScoreObjAvgDtoList.get(i).setMatrixScore(new BigDecimal(reportExamStudentUsualScoreObjAvgDtoList.get(i).getMatrixScore()).add(new BigDecimal(reportExamStudentUsualScoreObjDto.getMatrixScore())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                             }
                             reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
                         }
-                        log.info("reportExamStudentTargetDtoMap:{}", JacksonUtil.parseJson(reportExamStudentTargetDtoMap));
                         targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
-                        log.info("targetList:{}", JacksonUtil.parseJson(targetList));
                     }
                     reportExamStudentDto.setTargetList(targetList);
                 });
+                reportExamStudentDto.setScore(new BigDecimal(reportExamStudentDto.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                 Collections.sort(reportExamStudentDto.getTargetList());
                 trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentDto));
             }
             //加入平均分
-//            Double avgScore = new BigDecimal(examStudentList.stream().mapToDouble(ReportExamStudentDto::getScore).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-//            ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", examStudentList.get(0).getAdministrativeClass(), avgScore);
-//            List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = new ArrayList<>();
-//            reportExamStudentTargetDtoList.addAll(examStudentList.get(0).getTargetList());
-//
-//            BigDecimal size = new BigDecimal(examStudentList.size());
-//            ReportExamStudentFinalScoreDto finalScoreAvgDto = reportExamStudentTargetDtoList.get(0).getFinalScore();
-//            Map<Long, DimensionDto> dimensionFinalScoreDtoMap = finalScoreExamStudentDimensionSumMap.get(reportExamStudentTargetDtoList.get(0).getTargetId());
-//            List<DimensionDto> dimensionFinalScoreDtoList = finalScoreAvgDto.getDimensionList();
-//            for (DimensionDto dimensionFinalScoreDto : dimensionFinalScoreDtoList) {
-//                if (dimensionFinalScoreDtoMap.containsKey(dimensionFinalScoreDto.getDimensionId())) {
-//                    Double avg = new BigDecimal(dimensionFinalScoreDto.getDimensionScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-//                    dimensionFinalScoreDto.setDimensionScore(avg);
-//                } else {
-//                    dimensionFinalScoreDto.setDimensionScore(0d);
-//                }
-//            }
-//
-//            ReportExamStudentUsualScoreDto usualScoreAvgDto = reportExamStudentTargetDtoList.get(0).getUsualScore();
-//            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = usualScoreAvgDto.getScoreList();
-//            for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
-////                if (usualScoreOverviewDtoMap.containsKey(reportExamStudentUsualScoreObjDto.getName())) {
-////                    UsualScoreOverviewDto usualScoreOverviewDto = usualScoreOverviewDtoMap.get(reportExamStudentUsualScoreObjDto.getName());
-////                    Double avg = new BigDecimal(usualScoreOverviewDto.getSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-////                    reportExamStudentUsualScoreObjDto.setScore(avg);
-////                } else {
-////                    reportExamStudentUsualScoreObjDto.setScore(0d);
-////                }
-//            }
-//            reportExamStudentDto.setTargetList(reportExamStudentTargetDtoList);
-//            examStudentList.get(0).setTargetList(JSONArray.parseArray(trExamStudentList.get(0).getResultDetail(), ReportExamStudentTargetDto.class));
-//            examStudentList.add(reportExamStudentDto);
+            BigDecimal size = new BigDecimal(examStudentList.size());
+            //综合成绩平均分
+            List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
+            Double score = new BigDecimal(examStudentList.stream().mapToDouble(ReportExamStudentDto::getScore).sum()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            ReportExamStudentDto reportExamStudentTargetDto = new ReportExamStudentDto("目标分", "目标分", null, 100.d, targetDtoList);
+            ReportExamStudentDto reportExamStudentAvgDto = new ReportExamStudentDto("平均分", "平均分", null, score, targetDtoList);
+            ReportExamStudentDto reportExamStudentTargetAvgDto = new ReportExamStudentDto("各课程目标平均分", "各课程目标平均分", null, null, targetDtoList);
+            reportExamStudentTargetDtoMap.forEach((k, v) -> {
+                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
+                reportExamStudentFinalScoreDto.setMatrixAvgScore(new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+
+                List<DimensionDto> dimensionDtoList = reportExamStudentFinalScoreDto.getDimensionList();
+                for (DimensionDto d : dimensionDtoList) {
+                    d.setDimensionMatrixAvgScore(new BigDecimal(d.getDimensionMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                }
+
+                v.setTargetMatrixAvgScore(reportExamStudentFinalScoreDto.getTargetMatrixSumScore());
+                ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = v.getUsualScore();
+                List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                for (ReportExamStudentUsualScoreObjDto r : reportExamStudentUsualScoreObjDtoList) {
+                    v.setTargetMatrixAvgScore(v.getTargetMatrixAvgScore() + r.getMatrixScore());
+                    r.setMatrixAvgScore(new BigDecimal(r.getMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                }
+                v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+
+                targetDtoList.add(v);
+            });
+            Collections.sort(targetDtoList);
+
+            //目标分处理
+            List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = reportExamStudentTargetDto.getTargetList();
+            reportExamStudentTargetDtoList = reportExamStudentTargetDtoList.stream().map(ReportExamStudentTargetDto::new).collect(Collectors.toList());
+            reportExamStudentTargetDtoList = reportExamStudentTargetDtoList.stream().peek(e -> {
+                e.setTargetMatrixAvgScore(null);
+                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(e.getFinalScore());
+                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(null);
+                reportExamStudentFinalScoreDto.setMatrixAvgScore(null);
+                List<DimensionDto> dimensionDtoList = reportExamStudentFinalScoreDto.getDimensionList().stream().map(DimensionDto::new).collect(Collectors.toList());
+                reportExamStudentFinalScoreDto.setDimensionList(dimensionDtoList.stream().peek(s -> {
+                    s.setDimensionMatrixScore(null);
+                    s.setDimensionMatrixAvgScore(null);
+                }).collect(Collectors.toList()));
+                e.setFinalScore(reportExamStudentFinalScoreDto);
+
+                ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(e.getUsualScore());
+                List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList().stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList());
+                reportExamStudentUsualScoreObjDtoList.stream().peek(k -> {
+                    k.setScore(null);
+                    k.setMatrixAvgScore(null);
+                    k.setMatrixScore(null);
+                }).collect(Collectors.toList());
+                e.setUsualScore(reportExamStudentUsualScoreDto);
+            }).collect(Collectors.toList());
+            reportExamStudentTargetDto.setTargetList(reportExamStudentTargetDtoList);
+
+            //各课程目标平均分处理
+            List<ReportExamStudentTargetDto> reportExamStudentTargetAvgDtoList = reportExamStudentTargetAvgDto.getTargetList();
+            reportExamStudentTargetAvgDtoList = reportExamStudentTargetAvgDtoList.stream().map(ReportExamStudentTargetDto::new).collect(Collectors.toList()).stream().peek(e -> {
+                e.setUsualScore(null);
+                e.setFinalScore(null);
+            }).collect(Collectors.toList());
+            reportExamStudentTargetAvgDto.setTargetList(reportExamStudentTargetAvgDtoList);
 
-            ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", null, null);
-            trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentDto));
+            examStudentList.add(reportExamStudentTargetDto);
+            examStudentList.add(reportExamStudentAvgDto);
+            examStudentList.add(reportExamStudentTargetAvgDto);
+            trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentTargetDto));
+            trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentAvgDto));
+            trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentTargetAvgDto));
             this.remove(new QueryWrapper<TRExamStudent>().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId()));
             this.saveBatch(trExamStudentList);
         }