wangliang 1 سال پیش
والد
کامیت
16e9375047
20فایلهای تغییر یافته به همراه702 افزوده شده و 530 حذف شده
  1. 1 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/CourseWeightDto.java
  2. 0 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetWebDto.java
  3. 0 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetWordDto.java
  4. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/FinalScoreWordDto.java
  5. 2 26
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportEvaluationDto.java
  6. 20 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentFinalScoreDto.java
  7. 22 23
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentTargetDto.java
  8. 1 14
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreDto.java
  9. 3 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreObjDto.java
  10. 12 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/UsualScoreWordDto.java
  11. 15 15
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TRBasicInfoService.java
  12. 49 49
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskAssignPaperTypeServiceImpl.java
  13. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseWeightServiceImpl.java
  14. 316 171
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java
  15. 163 124
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java
  16. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  17. 56 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/ObeReportController.java
  18. 4 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCPaperStructController.java
  19. 34 18
      distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java
  20. BIN
      distributed-print/src/main/resources/static/course_degree_report.docx

+ 1 - 13
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/CourseWeightDto.java

@@ -34,9 +34,6 @@ public class CourseWeightDto {
     @ApiModelProperty("目标整体权重")
     private BigDecimal totalWeight;
 
-    @ApiModelProperty("目标分值统计")
-    private BigDecimal totalScore;
-
     @ApiModelProperty("评价方式权重详情")
     private List<CourseWeightDetailDto> evaluationList;
 
@@ -44,12 +41,11 @@ public class CourseWeightDto {
 
     }
 
-    public CourseWeightDto(Long courseTargetId, String courseTargetName, String degreeRequirement, BigDecimal totalWeight, BigDecimal totalScore, List<CourseWeightDetailDto> evaluationList) {
+    public CourseWeightDto(Long courseTargetId, String courseTargetName, String degreeRequirement, BigDecimal totalWeight, List<CourseWeightDetailDto> evaluationList) {
         this.courseTargetId = courseTargetId;
         this.courseTargetName = courseTargetName;
         this.degreeRequirement = degreeRequirement;
         this.totalWeight = totalWeight;
-        this.totalScore = totalScore;
         this.evaluationList = evaluationList;
     }
 
@@ -101,14 +97,6 @@ public class CourseWeightDto {
         this.totalWeight = totalWeight;
     }
 
-    public BigDecimal getTotalScore() {
-        return totalScore;
-    }
-
-    public void setTotalScore(BigDecimal totalScore) {
-        this.totalScore = totalScore;
-    }
-
     public List<CourseWeightDetailDto> getEvaluationList() {
         return evaluationList;
     }

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

@@ -37,9 +37,6 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
     @ApiModelProperty(value = "目标整体权重")
     private BigDecimal targetSumWeight;
 
-    @ApiModelProperty(value = "目标整体分值")
-    private BigDecimal targetSumScore;
-
     @ApiModelProperty(value = "知识点集合")
     private List<DimensionDto> dimensionList;
 
@@ -68,7 +65,6 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
         this.graduationRequirement = courseWeightDto.getDegreeRequirement();
         this.graduationRequirementPoint = courseWeightDto.getDimensionStr();
         this.targetSumWeight = courseWeightDto.getTotalWeight();
-        this.targetSumScore = courseWeightDto.getTotalScore();
     }
 
     public Double getFinalScoreQuestionScoreSum() {
@@ -111,14 +107,6 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
         this.targetSumWeight = targetSumWeight;
     }
 
-    public BigDecimal getTargetSumScore() {
-        return targetSumScore;
-    }
-
-    public void setTargetSumScore(BigDecimal targetSumScore) {
-        this.targetSumScore = targetSumScore;
-    }
-
     public BigDecimal getEvaluationValue() {
         return evaluationValue;
     }

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

@@ -36,9 +36,6 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
     @ApiModelProperty(value = "目标整体权重")
     private BigDecimal targetSumWeight = new BigDecimal(0);
 
-    @ApiModelProperty(value = "目标整体分值")
-    private BigDecimal targetSumScore = new BigDecimal(0);
-
     @ApiModelProperty(value = "换算平均分")
     private Double matrixAvgScore = 0.0d;
 
@@ -69,7 +66,6 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
         this.targetName = courseWeightDto.getCourseTargetName();
         this.graduationRequirement = courseWeightDto.getDegreeRequirement();
         this.graduationRequirementPoint = courseWeightDto.getDimensionStr();
-        this.targetSumScore = courseWeightDto.getTotalScore();
         this.targetSumWeight = courseWeightDto.getTotalWeight();
     }
 
@@ -129,14 +125,6 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
         this.targetSumWeight = targetSumWeight;
     }
 
-    public BigDecimal getTargetSumScore() {
-        return targetSumScore;
-    }
-
-    public void setTargetSumScore(BigDecimal targetSumScore) {
-        this.targetSumScore = targetSumScore;
-    }
-
     public Long getTargetId() {
         return targetId;
     }

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/FinalScoreWordDto.java

@@ -50,11 +50,11 @@ public class FinalScoreWordDto implements Serializable {
 
     }
 
-    public FinalScoreWordDto(Long targetId, CourseWeightDetailDto courseWeightDetailDto, BigDecimal finalScoreSumWeight) {
+    public FinalScoreWordDto(Long targetId, CourseWeightDetailDto courseWeightDetailDto) {
         this.targetId = targetId;
         this.evaluationId = courseWeightDetailDto.getEvaluationId();
         this.evaluation = courseWeightDetailDto.getEvaluationName();
-        this.finalScoreSumWeight = finalScoreSumWeight;
+        this.finalScoreSumWeight = courseWeightDetailDto.getWeight();
         this.finalScoreTargetSumScore = courseWeightDetailDto.getTargetScore();
     }
 

+ 2 - 26
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportEvaluationDto.java

@@ -46,42 +46,18 @@ public class ReportEvaluationDto implements Serializable, Comparable<ReportEvalu
     @ApiModelProperty(value = "卷面分")
     private Double score;
 
-    @ApiModelProperty(value = "原始目标分")
-    private Double originalTargetScore;
-
-    @ApiModelProperty(value = "原始目标权重")
-    private BigDecimal originalTargetWeight;
-
     public ReportEvaluationDto() {
 
     }
 
-    public ReportEvaluationDto(Long targetId, CourseWeightDetailDto courseWeightDetailDto, BigDecimal targetWeight, Double score, Double originalTargetScore) {
+    public ReportEvaluationDto(Long targetId, CourseWeightDetailDto courseWeightDetailDto, Double score) {
         this.targetId = targetId;
         this.evaluationId = courseWeightDetailDto.getEvaluationId();
         this.evaluation = courseWeightDetailDto.getEvaluationName();
         this.evaluationDesc = courseWeightDetailDto.getEvaluationDesc();
-        this.targetWeight = targetWeight;
+        this.targetWeight = courseWeightDetailDto.getWeight();
         this.targetScore = courseWeightDetailDto.getTargetScore();
         this.score = score;
-        this.originalTargetWeight = courseWeightDetailDto.getWeight();
-        this.originalTargetScore = originalTargetScore;
-    }
-
-    public Double getOriginalTargetScore() {
-        return originalTargetScore;
-    }
-
-    public void setOriginalTargetScore(Double originalTargetScore) {
-        this.originalTargetScore = originalTargetScore;
-    }
-
-    public BigDecimal getOriginalTargetWeight() {
-        return originalTargetWeight;
-    }
-
-    public void setOriginalTargetWeight(BigDecimal originalTargetWeight) {
-        this.originalTargetWeight = originalTargetWeight;
     }
 
     public Double getScore() {

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

@@ -57,26 +57,26 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
 
     }
 
-    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double dimensionScoreSum) {
-        this.evaluationId = finalScoreWordDto.getEvaluationId();
-        this.evaluation = finalScoreWordDto.getEvaluation();
-        this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
-        this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
-        this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
-        this.dimensionList = dimensionList;
-        this.dimensionScoreSum = dimensionScoreSum;
-    }
-
-    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double targetDimensionMatrixSumScore, Double dimensionScoreSum) {
-        this.evaluationId = finalScoreWordDto.getEvaluationId();
-        this.evaluation = finalScoreWordDto.getEvaluation();
-        this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
-        this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
-        this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
-        this.dimensionList = dimensionList;
-        this.targetDimensionMatrixSumScore = targetDimensionMatrixSumScore;
-        this.dimensionScoreSum = dimensionScoreSum;
-    }
+//    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double dimensionScoreSum) {
+//        this.evaluationId = finalScoreWordDto.getEvaluationId();
+//        this.evaluation = finalScoreWordDto.getEvaluation();
+//        this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
+//        this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
+//        this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
+//        this.dimensionList = dimensionList;
+//        this.dimensionScoreSum = dimensionScoreSum;
+//    }
+//
+//    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double targetDimensionMatrixSumScore, Double dimensionScoreSum) {
+//        this.evaluationId = finalScoreWordDto.getEvaluationId();
+//        this.evaluation = finalScoreWordDto.getEvaluation();
+//        this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
+//        this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
+//        this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
+//        this.dimensionList = dimensionList;
+//        this.targetDimensionMatrixSumScore = targetDimensionMatrixSumScore;
+//        this.dimensionScoreSum = dimensionScoreSum;
+//    }
 
     public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, Double targetScoreSum) {
         this.evaluationId = finalScoreWordDto.getEvaluationId();

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

@@ -32,15 +32,15 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
     @ApiModelProperty(value = "目标整体权重")
     private BigDecimal targetSumWeight;
 
-    @ApiModelProperty(value = "目标整体分值")
-    private BigDecimal targetSumScore;
-
     @ApiModelProperty(value = "目标达成评价值")
     private BigDecimal evaluationValue;
 
     @ApiModelProperty(value = "各课程目标平均分")
     private Double targetMatrixAvgScore;
 
+    @ApiModelProperty(value = "个人达成度")
+    private BigDecimal matrixDegree;
+
     @ApiModelProperty(value = "期末成绩")
     private ReportExamStudentFinalScoreDto finalScore;
 
@@ -51,26 +51,33 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
 
     }
 
-    public ReportExamStudentTargetDto(CourseTargetWordDto courseTargetWordDto, ReportExamStudentFinalScoreDto finalScore, ReportExamStudentUsualScoreDto usualScore) {
+    public ReportExamStudentTargetDto(CourseTargetWordDto courseTargetWordDto, ReportExamStudentFinalScoreDto finalScore, ReportExamStudentUsualScoreDto usualScore, BigDecimal matrixDegree) {
         this.targetId = courseTargetWordDto.getTargetId();
         this.targetName = courseTargetWordDto.getTargetName();
         this.graduationRequirement = courseTargetWordDto.getGraduationRequirement();
         this.targetSumWeight = courseTargetWordDto.getTargetSumWeight();
-        this.targetSumScore = courseTargetWordDto.getTargetSumScore();
         this.finalScore = finalScore;
         this.usualScore = usualScore;
+        this.matrixDegree = matrixDegree;
+    }
+
+//    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.targetSumWeight = reportExamStudentTargetDto.getTargetSumWeight();
+//        this.finalScore = reportExamStudentTargetDto.getFinalScore();
+//        this.usualScore = reportExamStudentTargetDto.getUsualScore();
+//    }
+
+    public BigDecimal getMatrixDegree() {
+        return matrixDegree;
     }
 
-    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.targetSumWeight = reportExamStudentTargetDto.getTargetSumWeight();
-        this.targetSumScore = reportExamStudentTargetDto.getTargetSumScore();
-        this.finalScore = reportExamStudentTargetDto.getFinalScore();
-        this.usualScore = reportExamStudentTargetDto.getUsualScore();
+    public void setMatrixDegree(BigDecimal matrixDegree) {
+        this.matrixDegree = matrixDegree;
     }
 
     public Double getTargetMatrixAvgScore() {
@@ -129,14 +136,6 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
         this.targetSumWeight = targetSumWeight;
     }
 
-    public BigDecimal getTargetSumScore() {
-        return targetSumScore;
-    }
-
-    public void setTargetSumScore(BigDecimal targetSumScore) {
-        this.targetSumScore = targetSumScore;
-    }
-
     public BigDecimal getEvaluationValue() {
         return evaluationValue;
     }

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

@@ -18,9 +18,6 @@ import java.util.Map;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ReportExamStudentUsualScoreDto implements Serializable {
 
-    @ApiModelProperty(value = "权重")
-    private BigDecimal targetWeight;
-
     @ApiModelProperty(value = "平时成绩对象集合")
     private Map<Long, List<ReportExamStudentUsualScoreObjDto>> scoreMap;
 
@@ -31,25 +28,15 @@ public class ReportExamStudentUsualScoreDto implements Serializable {
 
     }
 
-    public ReportExamStudentUsualScoreDto(BigDecimal targetSumWeight, List<ReportExamStudentUsualScoreObjDto> scoreList) {
-        this.targetWeight = targetSumWeight;
+    public ReportExamStudentUsualScoreDto(List<ReportExamStudentUsualScoreObjDto> scoreList) {
         this.scoreList = scoreList;
     }
 
     public ReportExamStudentUsualScoreDto(ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto) {
-        this.targetWeight = reportExamStudentUsualScoreDto.getTargetWeight();
         this.scoreMap = reportExamStudentUsualScoreDto.getScoreMap();
         this.scoreList = reportExamStudentUsualScoreDto.getScoreList();
     }
 
-    public BigDecimal getTargetWeight() {
-        return targetWeight;
-    }
-
-    public void setTargetWeight(BigDecimal targetWeight) {
-        this.targetWeight = targetWeight;
-    }
-
     public ReportExamStudentUsualScoreDto(Map<Long, List<ReportExamStudentUsualScoreObjDto>> scoreMap) {
         this.scoreMap = scoreMap;
     }

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

@@ -39,8 +39,8 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
     @ApiModelProperty(value = "作业目标分值")
     private BigDecimal targetScore;
 
-    @ApiModelProperty(value = "作业整体权重")
-    private BigDecimal targetSumWeight;
+//    @ApiModelProperty(value = "作业整体权重")
+//    private BigDecimal targetSumWeight;
 
     @ApiModelProperty(value = "作业整体分值")
     private BigDecimal targetSumScore;
@@ -68,10 +68,9 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
         this.score = reportExamStudentUsualScoreObjDto.getScore();
         this.matrixScore = reportExamStudentUsualScoreObjDto.getMatrixScore();
         this.targetSumScore = reportExamStudentUsualScoreObjDto.getTargetSumScore();
-        this.targetSumWeight = reportExamStudentUsualScoreObjDto.getTargetSumWeight();
     }
 
-    public ReportExamStudentUsualScoreObjDto(Long targetId, ReportEvaluationDto reportEvaluationDto, Double score, Double matrixScore, BigDecimal targetSumWeight, BigDecimal targetSumScore) {
+    public ReportExamStudentUsualScoreObjDto(Long targetId, ReportEvaluationDto reportEvaluationDto, Double score, Double matrixScore, BigDecimal targetSumScore) {
         this.evaluationId = reportEvaluationDto.getEvaluationId();
         this.evaluation = reportEvaluationDto.getEvaluation();
         this.evaluationDesc = reportEvaluationDto.getEvaluationDesc();
@@ -81,7 +80,6 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
         this.matrixScore = matrixScore;
         this.targetId = targetId;
         this.targetSumScore = targetSumScore;
-        this.targetSumWeight = targetSumWeight;
     }
 
     public Double getMatrixAvgScore() {
@@ -100,14 +98,6 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
         this.targetId = targetId;
     }
 
-    public BigDecimal getTargetSumWeight() {
-        return targetSumWeight;
-    }
-
-    public void setTargetSumWeight(BigDecimal targetSumWeight) {
-        this.targetSumWeight = targetSumWeight;
-    }
-
     public BigDecimal getTargetSumScore() {
         return targetSumScore;
     }

+ 12 - 12
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/UsualScoreWordDto.java

@@ -20,8 +20,8 @@ public class UsualScoreWordDto implements Serializable {
     @ApiModelProperty(value = "平时成绩目标总分")
     private BigDecimal usualScoreTargetSumScore = new BigDecimal(0);
 
-    @ApiModelProperty(value = "平时成绩目标整体权重")
-    private BigDecimal usualScoreTargetSumWeight = new BigDecimal(0);
+//    @ApiModelProperty(value = "平时成绩目标整体权重")
+//    private BigDecimal usualScoreTargetSumWeight = new BigDecimal(0);
 
     @ApiModelProperty(value = "平时成绩详情")
     private List<ReportEvaluationDto> usualScoreDetailList;
@@ -30,9 +30,9 @@ public class UsualScoreWordDto implements Serializable {
 
     }
 
-    public UsualScoreWordDto(BigDecimal usualScoreTargetSumWeight) {
-        this.usualScoreTargetSumWeight = usualScoreTargetSumWeight;
-    }
+//    public UsualScoreWordDto(BigDecimal usualScoreTargetSumWeight) {
+//        this.usualScoreTargetSumWeight = usualScoreTargetSumWeight;
+//    }
 
     public List<ReportEvaluationDto> getUsualScoreDetailList() {
         return usualScoreDetailList;
@@ -50,11 +50,11 @@ public class UsualScoreWordDto implements Serializable {
         this.usualScoreTargetSumScore = usualScoreTargetSumScore;
     }
 
-    public BigDecimal getUsualScoreTargetSumWeight() {
-        return usualScoreTargetSumWeight;
-    }
-
-    public void setUsualScoreTargetSumWeight(BigDecimal usualScoreTargetSumWeight) {
-        this.usualScoreTargetSumWeight = usualScoreTargetSumWeight;
-    }
+//    public BigDecimal getUsualScoreTargetSumWeight() {
+//        return usualScoreTargetSumWeight;
+//    }
+//
+//    public void setUsualScoreTargetSumWeight(BigDecimal usualScoreTargetSumWeight) {
+//        this.usualScoreTargetSumWeight = usualScoreTargetSumWeight;
+//    }
 }

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

@@ -92,21 +92,21 @@ public interface TRBasicInfoService extends IService<TRBasicInfo> {
      */
     public TableRenderData buildWordTable2(List<CourseTargetWordDto> courseTargetWordDtoList);
 
-    /**
-     * 构建word动态表格3-课后作业的具体考核内容、目标分值及对应的课程目标
-     *
-     * @param courseTargetWordDtoList
-     * @return
-     */
-    public TableRenderData buildWordTable3(List<CourseTargetWordDto> courseTargetWordDtoList);
-
-    /**
-     * 构建word动态表格4-期末考试的具体考核内容、目标分值及对应的课程目标
-     *
-     * @param courseTargetWordDtoList
-     * @return
-     */
-    public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList);
+//    /**
+//     * 构建word动态表格3-课后作业的具体考核内容、目标分值及对应的课程目标
+//     *
+//     * @param courseTargetWordDtoList
+//     * @return
+//     */
+//    public TableRenderData buildWordTable3(List<CourseTargetWordDto> courseTargetWordDtoList);
+
+//    /**
+//     * 构建word动态表格4-期末考试的具体考核内容、目标分值及对应的课程目标
+//     *
+//     * @param courseTargetWordDtoList
+//     * @return
+//     */
+//    public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList);
 
     /**
      * 构建word动态表格5-各课程目标考核样本数据详情

+ 49 - 49
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskAssignPaperTypeServiceImpl.java

@@ -1,49 +1,49 @@
-package com.qmth.distributed.print.business.service.impl;
-
-import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
-import com.qmth.boot.core.concurrent.annotation.Lockable;
-import com.qmth.distributed.print.business.entity.*;
-import com.qmth.distributed.print.business.enums.AssignModeEnum;
-import com.qmth.distributed.print.business.mapper.ExamTaskAssignPaperTypeMapper;
-import com.qmth.distributed.print.business.service.ExamDetailService;
-import com.qmth.distributed.print.business.service.ExamTaskAssignPaperTypeService;
-import com.qmth.distributed.print.business.util.pdf.CreatePdfNewUtil;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-
-/**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author xf
- * @since 2024-02-07
- */
-@Service
-public class ExamTaskAssignPaperTypeServiceImpl extends MppServiceImpl<ExamTaskAssignPaperTypeMapper, ExamTaskAssignPaperType> implements ExamTaskAssignPaperTypeService {
-
-    @Resource
-    ExamDetailService examDetailService;
-    @Resource
-    CreatePdfNewUtil createPdfNewUtil;
-
-    @Lockable(name = "#p0.examId + '-' + #p1.paperNumber")
-    @Override
-    public ExamTaskAssignPaperType extractPaperType(TBTaskPdf tbTaskPdf, ExamDetailCourse examDetailCourse) {
-        ExamDetail examDetail = examDetailService.getById(tbTaskPdf.getId());
-        if (examDetail.getExamStartTime() == null) {
-            examDetail.setExamStartTime(-1l);
-        }
-        if (examDetail.getExamEndTime() == null) {
-            examDetail.setExamEndTime(-1l);
-        }
-        ExamTaskAssignPaperType examTaskAssignPaperType = this.selectByMultiId(new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime()));
-        if (examTaskAssignPaperType == null) {
-            String paperType = createPdfNewUtil.getPaperType(examDetail.getPrintPlanId(), examDetail.getExamId(), examDetailCourse.getPaperNumber());
-            examTaskAssignPaperType = new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime(), paperType, AssignModeEnum.AUTO);
-            this.saveOrUpdateByMultiId(examTaskAssignPaperType);
-        }
-        return examTaskAssignPaperType;
-    }
-}
+package com.qmth.distributed.print.business.service.impl;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import com.qmth.boot.core.concurrent.annotation.Lockable;
+import com.qmth.distributed.print.business.entity.*;
+import com.qmth.distributed.print.business.enums.AssignModeEnum;
+import com.qmth.distributed.print.business.mapper.ExamTaskAssignPaperTypeMapper;
+import com.qmth.distributed.print.business.service.ExamDetailService;
+import com.qmth.distributed.print.business.service.ExamTaskAssignPaperTypeService;
+import com.qmth.distributed.print.business.util.pdf.CreatePdfNewUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author xf
+ * @since 2024-02-07
+ */
+@Service
+public class ExamTaskAssignPaperTypeServiceImpl extends MppServiceImpl<ExamTaskAssignPaperTypeMapper, ExamTaskAssignPaperType> implements ExamTaskAssignPaperTypeService {
+
+    @Resource
+    ExamDetailService examDetailService;
+    @Resource
+    CreatePdfNewUtil createPdfNewUtil;
+
+    @Lockable(name = "#p0.examId + '-' + #p1.paperNumber")
+    @Override
+    public ExamTaskAssignPaperType extractPaperType(TBTaskPdf tbTaskPdf, ExamDetailCourse examDetailCourse) {
+        ExamDetail examDetail = examDetailService.getById(tbTaskPdf.getId());
+        if (examDetail.getExamStartTime() == null) {
+            examDetail.setExamStartTime(-1L);
+        }
+        if (examDetail.getExamEndTime() == null) {
+            examDetail.setExamEndTime(-1L);
+        }
+        ExamTaskAssignPaperType examTaskAssignPaperType = this.selectByMultiId(new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime()));
+        if (examTaskAssignPaperType == null) {
+            String paperType = createPdfNewUtil.getPaperType(examDetail.getPrintPlanId(), examDetail.getExamId(), examDetailCourse.getPaperNumber());
+            examTaskAssignPaperType = new ExamTaskAssignPaperType(tbTaskPdf.getExamId(), examDetailCourse.getPaperNumber(), examDetail.getExamStartTime(), examDetail.getExamEndTime(), paperType, AssignModeEnum.AUTO);
+            this.saveOrUpdateByMultiId(examTaskAssignPaperType);
+        }
+        return examTaskAssignPaperType;
+    }
+}

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

@@ -128,7 +128,7 @@ public class ObeCourseWeightServiceImpl extends ServiceImpl<ObeCourseWeightMappe
                 courseWeightDto.analyzeDimensionStr();
                 courseWeightDto.setDegreeRequirement(degreeRequirement);
                 courseWeightDto.setTotalWeight(totalWeight);
-                courseWeightDto.setTotalScore(totalScore);
+//                courseWeightDto.setTotalScore(totalScore);
                 courseWeightDto.setEvaluationList(courseWeightDetailDtoList);
                 courseWeightDto.analyzeDimensionStr();
                 submitForm.add(courseWeightDto);

+ 316 - 171
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java

@@ -11,12 +11,10 @@ import com.deepoove.poi.data.style.RowStyle;
 import com.google.gson.reflect.TypeToken;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.report.*;
-import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.FinalScoreResult;
+import com.qmth.distributed.print.business.bean.result.ObeCourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult;
 import com.qmth.distributed.print.business.bean.result.report.word.CourseReportBean;
-import com.qmth.distributed.print.business.bean.result.report.word.CourseTargetTableBean3;
-import com.qmth.distributed.print.business.bean.result.report.word.CourseTargetTableBean4;
 import com.qmth.distributed.print.business.entity.TCPaperStruct;
 import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import com.qmth.distributed.print.business.entity.TRExamStudent;
@@ -36,6 +34,8 @@ import com.qmth.teachcloud.mark.bean.archivescore.ScoreRangeVo;
 import com.qmth.teachcloud.mark.entity.MarkPaper;
 import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
 import org.apache.poi.xwpf.usermodel.XWPFTableCell;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -57,6 +57,7 @@ import java.util.stream.Collectors;
  */
 @Service
 public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBasicInfo> implements TRBasicInfoService {
+    private final static Logger log = LoggerFactory.getLogger(TRBasicInfoServiceImpl.class);
 
     @Resource
     TCFinalScoreService tcFinalScoreService;
@@ -142,6 +143,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      *
      * @param trBasicInfo
      * @param paperStructDimensionResultList
+     * @param obeCourseWeightResult
      * @return
      */
     @Override
@@ -184,24 +186,22 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 if (!CollectionUtils.isEmpty(courseWeightDetailDtoList)) {
                     List<ReportEvaluationDto> reportEvaluationDtoList = new ArrayList<>(courseWeightDetailDtoList.size());
                     List<ReportEvaluationDto> usualScoreDetailList = new ArrayList<>(courseWeightDetailDtoList.size());
-                    // TODO: 2024/6/6 fix
+//                    UsualScoreWordDto usualScoreWordDto = new UsualScoreWordDto(courseWeightResult.getCustomRate());
                     UsualScoreWordDto usualScoreWordDto = new UsualScoreWordDto();
                     usualScoreWordDto.setUsualScoreDetailList(usualScoreDetailList);
                     BigDecimal usualScoreTargetSumScore = new BigDecimal(0);//平常作业目标总分
                     for (CourseWeightDetailDto courseWeightDetailDto : courseWeightDetailDtoList) {
                         //期末考试
                         if (courseWeightDetailDto.getEnable() && Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
-                            // TODO: 2024/6/6 fix
-                            FinalScoreWordDto finalScoreWordDto = new FinalScoreWordDto();
+                            FinalScoreWordDto finalScoreWordDto = new FinalScoreWordDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto);
                             courseTargetWordDto.setFinalScoreDto(finalScoreWordDto);
-                            // TODO: 2024/6/6 fix
-                            ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto();
+                            ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, 0.0d);
                             reportEvaluationDtoList.add(reportEvaluationDto);
                         }//非期末考试
                         else if (courseWeightDetailDto.getEnable() && !Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
-                            BigDecimal usualScoreRealityWeight = usualScoreWordDto.getUsualScoreTargetSumWeight().divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).multiply(courseWeightDetailDto.getWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                            Double originalTargetScore = courseWeightDto.getTotalWeight().multiply(courseWeightDetailDto.getWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                            ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, usualScoreRealityWeight, 0.0d, originalTargetScore);
+//                            BigDecimal usualScoreRealityWeight = usualScoreWordDto.getUsualScoreTargetSumWeight().divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).multiply(courseWeightDetailDto.getWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                            Double originalTargetScore = courseWeightDto.getTotalWeight().multiply(courseWeightDetailDto.getWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                            ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, 0.0d);
                             usualScoreTargetSumScore = usualScoreTargetSumScore.add(reportEvaluationDto.getTargetScore());
                             usualScoreDetailList.add(reportEvaluationDto);
                             reportEvaluationDtoList.add(reportEvaluationDto);
@@ -270,7 +270,9 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     Double dimensionScoreSum = dimensionDtoList.stream().mapToDouble(DimensionDto::getDimensionScore).sum();
                     List<String> dimensionDtoNameList = dimensionDtoList.stream().map(s -> s.getDimensionName()).collect(Collectors.toList());
                     if (finalTargetWordMap.containsKey(k)) {
-                        finalTargetWordMap.get(k).getFinalScoreDto().setDimensionList(dimensionDtoList);
+                        if (Objects.nonNull(finalTargetWordMap.get(k).getFinalScoreDto())) {
+                            finalTargetWordMap.get(k).getFinalScoreDto().setDimensionList(dimensionDtoList);
+                        }
                         finalTargetWordMap.get(k).setDimensionScoreSum(dimensionScoreSum);
                         finalTargetWordMap.get(k).setDimensionPoint(String.join(",", dimensionDtoNameList));
                     }
@@ -328,9 +330,38 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             if (Objects.nonNull(targetAvg) && Objects.equals(targetAvg.getName(), "平均分") && Objects.nonNull(targetAvg.getResultDetail())) {
                 List<ReportExamStudentTargetDto> reportExamStudentTargetAvgDtoList = GsonUtil.fromJson(targetAvg.getResultDetail(), new TypeToken<List<ReportExamStudentTargetDto>>() {
                 }.getType());
+                List<TRExamStudent> trExamStudentNewList = new ArrayList<>();
+                trExamStudentNewList.addAll(trExamStudentList);
+
+                trExamStudentNewList.remove(trExamStudentNewList.size() - 1);
+                trExamStudentNewList.remove(trExamStudentNewList.size() - 1);
+                trExamStudentNewList.remove(trExamStudentNewList.size() - 1);
+                Map<Long, BigDecimal> targetEvaluationValueMap = new HashMap<>();
+                Map<Long, Integer> targetEvaluationValueSizeMap = new HashMap<>();
+                for (TRExamStudent trExamStudent : trExamStudentNewList) {
+                    List<ReportExamStudentTargetDto> targetList = GsonUtil.fromJson(trExamStudent.getResultDetail(), new TypeToken<List<ReportExamStudentTargetDto>>() {
+                    }.getType());
+                    for (ReportExamStudentTargetDto r : targetList) {
+                        if (targetEvaluationValueMap.containsKey(r.getTargetId())) {
+                            BigDecimal targetEvaluationValueTemp = targetEvaluationValueMap.get(r.getTargetId());
+                            BigDecimal targetEvaluationValue = new BigDecimal(0);
+                            targetEvaluationValue = targetEvaluationValue.add(r.getMatrixDegree()).add(targetEvaluationValueTemp);
+                            targetEvaluationValueMap.put(r.getTargetId(), targetEvaluationValue);
+
+                            Integer size = targetEvaluationValueSizeMap.get(r.getTargetId());
+                            targetEvaluationValueSizeMap.put(r.getTargetId(), size + 1);
+                        } else {
+                            BigDecimal targetEvaluationValue = new BigDecimal(0);
+                            targetEvaluationValue = targetEvaluationValue.add(r.getMatrixDegree());
+                            targetEvaluationValueMap.put(r.getTargetId(), targetEvaluationValue);
+                            targetEvaluationValueSizeMap.put(r.getTargetId(), 1);
+                        }
+                    }
+                }
                 for (ReportExamStudentTargetDto r : reportExamStudentTargetAvgDtoList) {
                     Double targetAvgSumScore = 0.0d;//平均分总和
                     BigDecimal targetSumScore = new BigDecimal(0);//目标分总和
+//                    BigDecimal targetEvaluationValue = new BigDecimal(0);
                     if (targetWebMap.containsKey(r.getTargetId())) {
                         CourseTargetWebDto courseTargetWebDto = targetWebMap.get(r.getTargetId());
                         CourseTargetWordDto courseTargetWordDto = targetWordMap.get(r.getTargetId());
@@ -342,10 +373,16 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = r.getUsualScore();
 
                         //期末成绩换算
-                        ReportEvaluationDto reportEvaluationDto = reportEvaluationDtoMap.get(reportExamStudentFinalScoreDto.getEvaluationId());
-                        reportEvaluationDto.setTargetAvgScore(reportExamStudentFinalScoreDto.getMatrixAvgScore());
-                        targetAvgSumScore = targetAvgSumScore + reportEvaluationDto.getTargetAvgScore();
-                        targetSumScore = targetSumScore.add(reportEvaluationDto.getTargetScore());
+                        ReportEvaluationDto reportEvaluationDto = null;
+                        if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
+                            reportEvaluationDto = reportEvaluationDtoMap.get(reportExamStudentFinalScoreDto.getEvaluationId());
+                            reportEvaluationDto.setTargetAvgScore(reportExamStudentFinalScoreDto.getMatrixAvgScore());
+                            targetAvgSumScore = targetAvgSumScore + reportEvaluationDto.getTargetAvgScore();
+                            targetSumScore = targetSumScore.add(reportEvaluationDto.getTargetScore());
+//                            BigDecimal bigDecimal = new BigDecimal(reportExamStudentFinalScoreDto.getTargetScoreSum()).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                            BigDecimal targetEvaluationValueTemp = bigDecimal.divide(reportEvaluationDto.getTargetScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetWeight().divide(courseTargetWebDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                            targetEvaluationValue = targetEvaluationValue.add(targetEvaluationValueTemp);
+                        }
 
                         //平时作业换算
                         List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
@@ -354,14 +391,22 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             reportEvaluationDto.setTargetAvgScore(reportExamStudentUsualScoreObjDto.getMatrixAvgScore());
                             targetAvgSumScore = targetAvgSumScore + reportEvaluationDto.getTargetAvgScore();
                             targetSumScore = targetSumScore.add(reportEvaluationDto.getTargetScore());
+//                            BigDecimal bigDecimal = new BigDecimal(reportExamStudentUsualScoreObjDto.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                            BigDecimal targetEvaluationValueTemp = bigDecimal.divide(reportEvaluationDto.getTargetScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetWeight().divide(courseTargetWebDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                            targetEvaluationValue = targetEvaluationValue.add(targetEvaluationValueTemp);
                         }
 
                         //计算目标达成度
-                        BigDecimal targetEvaluationValue = new BigDecimal(targetAvgSumScore).divide(targetSumScore, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
-                        courseTargetWebDto.setEvaluationValue(targetEvaluationValue);
-                        if (targetEvaluationSumValue.compareTo(new BigDecimal(0)) == 0 || targetEvaluationSumValue.compareTo(targetEvaluationValue) == 1) {
-                            targetEvaluationSumValue = targetEvaluationValue;
+                        //目标下各平均分总和/科目目标分
+                        BigDecimal targetEvaluationValue = new BigDecimal(0);
+                        if (targetEvaluationValueMap.containsKey(r.getTargetId())) {
+                            targetEvaluationValue = targetEvaluationValueMap.get(r.getTargetId()).divide(new BigDecimal(targetEvaluationValueSizeMap.get(r.getTargetId())), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
                         }
+//                        BigDecimal targetEvaluationValue = new BigDecimal(targetAvgSumScore).divide(targetSumScore, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        courseTargetWebDto.setEvaluationValue(targetEvaluationValue);
+//                        if (targetEvaluationSumValue.compareTo(new BigDecimal(0)) == 0 || targetEvaluationSumValue.compareTo(targetEvaluationValue) == 1) {
+//                            targetEvaluationSumValue = targetEvaluationValue;
+//                        }
                         courseTargetWordDto.setEvaluationValue(targetEvaluationValue);
                     }
                 }
@@ -421,8 +466,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             trBasicInfo.getReportResult().setCourseEvaluationSpreadInfo(reportCourseEvaluationSpreadDto);
         }
 
-        Map<String, Object> paramsMap = trBasicInfoService.getReportCalculateParams(trBasicInfo, paperStructDimensionResultList,
-                obeCourseWeightResult);
+        Map<String, Object> paramsMap = trBasicInfoService.getReportCalculateParams(trBasicInfo, paperStructDimensionResultList, obeCourseWeightResult);
 
         //课程目标达成评价明细结果-考生集合
         List<ReportExamStudentDto> examStudentNewList = trExamStudentService.getExamStudentReportDetail(trBasicInfo, paramsMap);
@@ -468,13 +512,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     @Override
     public TableRenderData buildWordTable1(List<CourseTargetWordDto> courseTargetWordDtoList) {
         //table1课程目标目标与毕业要求指标点的对应关系
-        RowRenderData header1 = Rows.of("课程目标", "毕业要求指标点").rowStyle(this.getHeadRowStyle()).create();
-        Tables.TableBuilder tableBuilder1 = Tables.ofPercentWidth(tbPercentWidth, new int[]{25, 75});
+        RowRenderData header1 = Rows.of("课程目标", "毕业要求指标点", "毕业要求").rowStyle(this.getHeadRowStyle()).create();
+        Tables.TableBuilder tableBuilder1 = Tables.ofPercentWidth(tbPercentWidth, new int[]{20, 40, 40});
         tableBuilder1.addRow(header1);
 
         for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
             CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
-            RowRenderData row = Rows.of(courseTargetWordDto.getTargetName(), courseTargetWordDto.getGraduationRequirement()).rowStyle(this.getRowStyle()).create();
+            RowRenderData row = Rows.of(courseTargetWordDto.getTargetName(), courseTargetWordDto.getGraduationRequirement(), courseTargetWordDto.getGraduationRequirementPoint()).rowStyle(this.getRowStyle()).create();
             tableBuilder1.addRow(row);
         }
         return tableBuilder1.left().create();
@@ -488,34 +532,120 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      */
     @Override
     public TableRenderData buildWordTable2(List<CourseTargetWordDto> courseTargetWordDtoList) {
-        RowRenderData header2_1 = Rows.of("课程目标", "支撑毕业要求", "考核/评价环节及目标分值", "", "目标分值统计").rowStyle(this.getHeadRowStyle()).create();
-        RowRenderData header2_2 = Rows.of("课程目标", "支撑毕业要求", "平时成绩", "期末考试", "目标分值统计").rowStyle(this.getHeadRowStyle()).center().create();
-        RowRenderData[] rowRenderData2 = new RowRenderData[courseTargetWordDtoList.size() + 3];
-        BigDecimal usualScoreTargetSum = new BigDecimal(0), finalScoreTargetSum = new BigDecimal(0);
+        Set<String> header2_1_set = new LinkedHashSet<>();
+        header2_1_set.add("课程目标");
+        header2_1_set.add("考核项目及比例(%)");
+
         for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
             CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
+            UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
+            if (Objects.nonNull(usualScoreWordDto) && !CollectionUtils.isEmpty(usualScoreWordDto.getUsualScoreDetailList())) {
+                Set<String> headTemp = usualScoreWordDto.getUsualScoreDetailList().stream().map(s -> s.getEvaluation()).collect(Collectors.toSet());
+                header2_1_set.addAll(headTemp);
+            }
             FinalScoreWordDto finalScoreWordDto = courseTargetWordDto.getFinalScoreDto();
-            finalScoreTargetSum = finalScoreTargetSum.add(finalScoreWordDto.getFinalScoreTargetSumScore());
+            if (Objects.nonNull(finalScoreWordDto)) {
+                header2_1_set.add(finalScoreWordDto.getEvaluation());
+            }
+        }
+        List<CellRenderData> cells_1 = new ArrayList<>(), cells_2 = new ArrayList<>();
+        cells_1.add(Cells.of("课程目标").center().create());
+        cells_1.add(Cells.of("考核项目及比例(%)").center().create());
+        cells_2.add(Cells.of("课程目标").center().create());
+
+        List<String> list = new ArrayList<>(header2_1_set);
+        for (int i = 2; i < list.size(); i++) {
+            cells_2.add(Cells.of(list.get(i)).center().create());
+            if (i < list.size() - 1) {
+                cells_1.add(Cells.of("").center().create());
+            }
+        }
+        cells_1.add(Cells.of("权重(%)").center().create());
+        cells_2.add(Cells.of("权重(%)").center().create());
 
+        RowRenderData[] rowRenderData2 = new RowRenderData[courseTargetWordDtoList.size() + 3];
+        RowRenderData header2_1 = new RowRenderData();
+        header2_1.setCells(cells_1);
+        header2_1.setRowStyle(this.getHeadRowStyle());
+
+        RowRenderData header2_2 = new RowRenderData();
+        header2_2.setCells(cells_2);
+        header2_2.setRowStyle(this.getHeadRowStyle());
+
+        list.remove(0);
+        list.remove(0);
+
+        RowRenderData totalRow = new RowRenderData();
+        List<CellRenderData> totalCell = new ArrayList<>();
+        totalCell.add(Cells.of("合计").create());
+        Map<String, BigDecimal> totalMap = new HashMap<>();
+        BigDecimal weight = new BigDecimal(0);
+        for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
+            CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
+            weight = weight.add(courseTargetWordDto.getTargetSumWeight());
+            Map<String, BigDecimal> map = new LinkedHashMap<>();
+            RowRenderData row = new RowRenderData();
+            List<CellRenderData> cell = new ArrayList<>();
+            cell.add(Cells.of(courseTargetWordDto.getTargetName()).create());
             UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
-            usualScoreTargetSum = usualScoreTargetSum.add(usualScoreWordDto.getUsualScoreTargetSumScore());
-            rowRenderData2[i + 2] = Rows.of(courseTargetWordDto.getTargetName(), courseTargetWordDto.getGraduationRequirement(), SystemConstant.df.format(usualScoreWordDto.getUsualScoreTargetSumScore()), SystemConstant.df.format(finalScoreWordDto.getFinalScoreTargetSumScore()), SystemConstant.df.format(usualScoreWordDto.getUsualScoreTargetSumScore().add(finalScoreWordDto.getFinalScoreTargetSumScore()))).rowStyle(this.getRowStyle()).create();
+            if (Objects.nonNull(usualScoreWordDto) && !CollectionUtils.isEmpty(usualScoreWordDto.getUsualScoreDetailList())) {
+                List<ReportEvaluationDto> reportEvaluationDtoList = usualScoreWordDto.getUsualScoreDetailList();
+                for (ReportEvaluationDto r : reportEvaluationDtoList) {
+                    map.put(r.getEvaluation(), r.getTargetWeight());
+                    if (totalMap.containsKey(r.getEvaluation())) {
+                        BigDecimal bigDecimal = totalMap.get(r.getEvaluation());
+                        bigDecimal = bigDecimal.add(r.getTargetWeight());
+                        totalMap.put(r.getEvaluation(), bigDecimal);
+                    } else {
+                        totalMap.put(r.getEvaluation(), r.getTargetWeight());
+                    }
+                }
+            }
+            FinalScoreWordDto finalScoreWordDto = courseTargetWordDto.getFinalScoreDto();
+            if (Objects.nonNull(finalScoreWordDto)) {
+                map.put(finalScoreWordDto.getEvaluation(), finalScoreWordDto.getFinalScoreSumWeight());
+                if (totalMap.containsKey(finalScoreWordDto.getEvaluation())) {
+                    BigDecimal bigDecimal = totalMap.get(finalScoreWordDto.getEvaluation());
+                    bigDecimal = bigDecimal.add(finalScoreWordDto.getFinalScoreSumWeight());
+                    totalMap.put(finalScoreWordDto.getEvaluation(), bigDecimal);
+                } else {
+                    totalMap.put(finalScoreWordDto.getEvaluation(), finalScoreWordDto.getFinalScoreSumWeight());
+                }
+            }
+            for (String s : list) {
+                if (map.containsKey(s)) {
+                    cell.add(Cells.of(map.get(s) + "").create());
+                } else {
+                    cell.add(Cells.of("").create());
+                }
+            }
+            cell.add(Cells.of(courseTargetWordDto.getTargetSumWeight() + "").create());
+            row.setCells(cell);
+            row.setRowStyle(this.getRowStyle());
+            rowRenderData2[i + 2] = row;
         }
         rowRenderData2[0] = header2_1;
         rowRenderData2[1] = header2_2;
 
-        RowRenderData header2_foot = Rows.of("合计", "", SystemConstant.df.format(usualScoreTargetSum), SystemConstant.df.format(finalScoreTargetSum), SystemConstant.df.format(usualScoreTargetSum.add(finalScoreTargetSum))).rowStyle(this.getRowStyle()).create();
-        rowRenderData2[rowRenderData2.length - 1] = header2_foot;
+        for (String s : list) {
+            if (totalMap.containsKey(s)) {
+                totalCell.add(Cells.of(totalMap.get(s) + "").create());
+            } else {
+                totalCell.add(Cells.of("").create());
+            }
+        }
+        totalCell.add(Cells.of(weight + "").create());
+        totalRow.setCells(totalCell);
+        totalRow.setRowStyle(this.getRowStyle());
+        rowRenderData2[rowRenderData2.length - 1] = totalRow;
 
         // 表格合并,根据坐标
         MergeCellRule mergeCellRule2 = MergeCellRule.builder().map(MergeCellRule.Grid.of(0, 0), MergeCellRule.Grid.of(1, 0)).
-                map(MergeCellRule.Grid.of(0, 1), MergeCellRule.Grid.of(1, 1)).
-                map(MergeCellRule.Grid.of(0, 2), MergeCellRule.Grid.of(0, 3)).
-                map(MergeCellRule.Grid.of(0, 4), MergeCellRule.Grid.of(1, 4)).
+                map(MergeCellRule.Grid.of(0, 1), MergeCellRule.Grid.of(0, list.size())).
                 map(MergeCellRule.Grid.of(rowRenderData2.length - 1, 0), MergeCellRule.Grid.of(rowRenderData2.length - 1, 1)).
                 build();
 
-        Tables.TableBuilder tableBuilder2 = Tables.ofPercentWidth(tbPercentWidth, new int[]{25, 26, 16, 16, 17});
+        Tables.TableBuilder tableBuilder2 = Tables.ofPercentWidth(tbPercentWidth);
         for (int i = 0; i < rowRenderData2.length; i++) {
             tableBuilder2.addRow(rowRenderData2[i]);
         }
@@ -523,96 +653,100 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     }
 
     /**
-     * 构建word动态表格3
-     *
-     * @param courseTargetWordDtoList
-     * @return
-     */
-    @Override
-    public TableRenderData buildWordTable3(List<CourseTargetWordDto> courseTargetWordDtoList) {
-        RowRenderData header3_1 = Rows.of("序号", "项目", "考核内容及要求", "目标分值", "对应的课程目标").rowStyle(this.getHeadRowStyle()).create();
-        String tableFootTitle3 = "合计${usualScoreSum}分,占课程总评成绩的${usualScoreSumWeight}%";
-        List<CourseTargetTableBean3> courseTargetTableBean3List = new ArrayList<>();
-        BigDecimal usualScoreSum3 = new BigDecimal(0), usualScoreTargetSumWeight3 = new BigDecimal(0);
-        Integer seq3 = 1;
-        for (CourseTargetWordDto courseTargetWordDto : courseTargetWordDtoList) {
-            UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
-            List<ReportEvaluationDto> reportEvaluationDtoList = usualScoreWordDto.getUsualScoreDetailList();
-            for (int i = 0; i < reportEvaluationDtoList.size(); i++) {
-                ReportEvaluationDto reportEvaluationDto = reportEvaluationDtoList.get(i);
-                CourseTargetTableBean3 courseTargetTableBean3 = new CourseTargetTableBean3(seq3++, reportEvaluationDto.getEvaluation(), reportEvaluationDto.getEvaluationDesc(), new BigDecimal(SystemConstant.df.format(reportEvaluationDto.getOriginalTargetScore())), courseTargetWordDto.getTargetName());
-                courseTargetTableBean3List.add(courseTargetTableBean3);
-                usualScoreSum3 = usualScoreSum3.add(new BigDecimal(reportEvaluationDto.getOriginalTargetScore()));
-            }
-            usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.add(usualScoreWordDto.getUsualScoreTargetSumWeight());
-        }
-        usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
-        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSum}", SystemConstant.df.format(usualScoreSum3));
-        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSumWeight}", SystemConstant.df.format(usualScoreTargetSumWeight3));
-
-        RowRenderData[] rowRenderData3 = new RowRenderData[courseTargetTableBean3List.size() + 2];
-        for (int i = 0; i < courseTargetTableBean3List.size(); i++) {
-            CourseTargetTableBean3 courseTargetTableBean3 = courseTargetTableBean3List.get(i);
-            rowRenderData3[i + 1] = Rows.of(courseTargetTableBean3.getNum().toString(), courseTargetTableBean3.getProject(), courseTargetTableBean3.getContent(), SystemConstant.df.format(courseTargetTableBean3.getTarget()), courseTargetTableBean3.getCourseTarget()).rowStyle(this.getRowStyle()).create();
-        }
-        rowRenderData3[0] = header3_1;
-        RowRenderData header3_foot = Rows.of(tableFootTitle3, "", "", "", "").center().create();
-        rowRenderData3[rowRenderData3.length - 1] = header3_foot;
-
-        //表格合并,根据坐标
-        MergeCellRule mergeCellRule3 = MergeCellRule.builder().map(MergeCellRule.Grid.of(rowRenderData3.length - 1, 0), MergeCellRule.Grid.of(rowRenderData3.length - 1, 4)).
-                build();
-
-        Tables.TableBuilder tableBuilder3 = Tables.ofPercentWidth(tbPercentWidth, new int[]{8, 20, 37, 14, 21});
-        for (int i = 0; i < rowRenderData3.length; i++) {
-            tableBuilder3.addRow(rowRenderData3[i]);
-        }
-        return tableBuilder3.mergeRule(mergeCellRule3).left().create();
-    }
-
-    /**
-     * 构建word动态表格4
-     *
-     * @param courseTargetWordDtoList
-     * @return
-     */
-    @Override
-    public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList) {
-        RowRenderData header4_1 = Rows.of("序号", "考核项目", "考核内容所涵盖的知识单元", "目标分值", "对应的课程目标").rowStyle(this.getHeadRowStyle()).create();
-        List<CourseTargetTableBean4> courseTargetTableBean4List = new ArrayList<>();
-        BigDecimal finalScoreSum4 = new BigDecimal(0), finalScoreTargetSumWeight4 = new BigDecimal(0);
-        for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
-            CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
-            FinalScoreWordDto finalScoreWordDto = courseTargetWordDto.getFinalScoreDto();
-            finalScoreSum4 = finalScoreSum4.add(courseTargetWordDto.getTargetSumScore());
-            finalScoreTargetSumWeight4 = finalScoreTargetSumWeight4.add(finalScoreWordDto.getFinalScoreSumWeight());
-            CourseTargetTableBean4 courseTargetTableBean4 = new CourseTargetTableBean4((i + 1), courseTargetWordDto.getGraduationRequirement(), courseTargetWordDto.getDimensionPoint(), Double.parseDouble(SystemConstant.df.format(courseTargetWordDto.getTargetSumScore())), courseTargetWordDto.getTargetName());
-            courseTargetTableBean4List.add(courseTargetTableBean4);
-        }
-        finalScoreTargetSumWeight4 = finalScoreTargetSumWeight4.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
-        String tableFootTitle4 = "合计${dimensionScoreSum}分,占课程总评成绩的${dimensionSumWeight}%";
-        tableFootTitle4 = tableFootTitle4.replace("${dimensionScoreSum}", SystemConstant.df.format(finalScoreSum4));
-        tableFootTitle4 = tableFootTitle4.replace("${dimensionSumWeight}", SystemConstant.df.format(finalScoreTargetSumWeight4));
-
-        RowRenderData[] rowRenderData4 = new RowRenderData[courseTargetTableBean4List.size() + 2];
-        for (int i = 0; i < courseTargetTableBean4List.size(); i++) {
-            CourseTargetTableBean4 courseTargetTableBean4 = courseTargetTableBean4List.get(i);
-            rowRenderData4[i + 1] = Rows.of(courseTargetTableBean4.getNum().toString(), courseTargetTableBean4.getProject(), courseTargetTableBean4.getContent(), SystemConstant.df.format(courseTargetTableBean4.getTargetScore()), courseTargetTableBean4.getCourseTarget()).rowStyle(this.getRowStyle()).create();
-        }
-        rowRenderData4[0] = header4_1;
-        RowRenderData header4_foot = Rows.of(tableFootTitle4, "", "", "", "").center().create();
-        rowRenderData4[rowRenderData4.length - 1] = header4_foot;
-
-        //表格合并,根据坐标
-        MergeCellRule mergeCellRule4 = MergeCellRule.builder().map(MergeCellRule.Grid.of(rowRenderData4.length - 1, 0), MergeCellRule.Grid.of(rowRenderData4.length - 1, 4)).
-                build();
-
-        Tables.TableBuilder tableBuilder4 = Tables.ofPercentWidth(tbPercentWidth, new int[]{8, 20, 37, 14, 21});
-        for (int i = 0; i < rowRenderData4.length; i++) {
-            tableBuilder4.addRow(rowRenderData4[i]);
-        }
-        return tableBuilder4.mergeRule(mergeCellRule4).left().create();
-    }
+     //     * 构建word动态表格3
+     //     *
+     //     * @param courseTargetWordDtoList
+     //     * @return
+     //     */
+//    @Override
+//    public TableRenderData buildWordTable3(List<CourseTargetWordDto> courseTargetWordDtoList) {
+//        RowRenderData header3_1 = Rows.of("序号", "项目", "考核内容及要求", "目标分值", "对应的课程目标").rowStyle(this.getHeadRowStyle()).create();
+////        String tableFootTitle3 = "合计${usualScoreSum}分,占课程总评成绩的${usualScoreSumWeight}%";
+//        String tableFootTitle3 = "合计${usualScoreSum}分";
+//        List<CourseTargetTableBean3> courseTargetTableBean3List = new ArrayList<>();
+//        BigDecimal usualScoreSum3 = new BigDecimal(0);
+////                usualScoreTargetSumWeight3 = new BigDecimal(0);
+//        Integer seq3 = 1;
+//        for (CourseTargetWordDto courseTargetWordDto : courseTargetWordDtoList) {
+//            UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
+//            List<ReportEvaluationDto> reportEvaluationDtoList = usualScoreWordDto.getUsualScoreDetailList();
+//            for (int i = 0; i < reportEvaluationDtoList.size(); i++) {
+//                ReportEvaluationDto reportEvaluationDto = reportEvaluationDtoList.get(i);
+//                CourseTargetTableBean3 courseTargetTableBean3 = new CourseTargetTableBean3(seq3++, reportEvaluationDto.getEvaluation(), reportEvaluationDto.getEvaluationDesc(), new BigDecimal(SystemConstant.df.format(reportEvaluationDto.getOriginalTargetScore())), courseTargetWordDto.getTargetName());
+//                courseTargetTableBean3List.add(courseTargetTableBean3);
+//                usualScoreSum3 = usualScoreSum3.add(new BigDecimal(reportEvaluationDto.getOriginalTargetScore()));
+//            }
+////            usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.add(usualScoreWordDto.getUsualScoreTargetSumWeight());
+//        }
+////        usualScoreTargetSumWeight3 = usualScoreTargetSumWeight3.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+//        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSum}", SystemConstant.df.format(usualScoreSum3));
+////        tableFootTitle3 = tableFootTitle3.replace("${usualScoreSumWeight}", SystemConstant.df.format(usualScoreTargetSumWeight3));
+//
+//        RowRenderData[] rowRenderData3 = new RowRenderData[courseTargetTableBean3List.size() + 2];
+//        for (int i = 0; i < courseTargetTableBean3List.size(); i++) {
+//            CourseTargetTableBean3 courseTargetTableBean3 = courseTargetTableBean3List.get(i);
+//            rowRenderData3[i + 1] = Rows.of(courseTargetTableBean3.getNum().toString(), courseTargetTableBean3.getProject(), courseTargetTableBean3.getContent(), SystemConstant.df.format(courseTargetTableBean3.getTarget()), courseTargetTableBean3.getCourseTarget()).rowStyle(this.getRowStyle()).create();
+//        }
+//        rowRenderData3[0] = header3_1;
+//        RowRenderData header3_foot = Rows.of(tableFootTitle3, "", "", "", "").center().create();
+//        rowRenderData3[rowRenderData3.length - 1] = header3_foot;
+//
+//        //表格合并,根据坐标
+//        MergeCellRule mergeCellRule3 = MergeCellRule.builder().map(MergeCellRule.Grid.of(rowRenderData3.length - 1, 0), MergeCellRule.Grid.of(rowRenderData3.length - 1, 4)).
+//                build();
+//
+//        Tables.TableBuilder tableBuilder3 = Tables.ofPercentWidth(tbPercentWidth, new int[]{8, 20, 37, 14, 21});
+//        for (int i = 0; i < rowRenderData3.length; i++) {
+//            tableBuilder3.addRow(rowRenderData3[i]);
+//        }
+//        return tableBuilder3.mergeRule(mergeCellRule3).left().create();
+//    }
+
+//    /**
+//     * 构建word动态表格4
+//     *
+//     * @param courseTargetWordDtoList
+//     * @return
+//     */
+//    @Override
+//    public TableRenderData buildWordTable4(List<CourseTargetWordDto> courseTargetWordDtoList) {
+//        RowRenderData header4_1 = Rows.of("序号", "考核项目", "考核内容所涵盖的知识单元", "目标分值", "对应的课程目标").rowStyle(this.getHeadRowStyle()).create();
+//        List<CourseTargetTableBean4> courseTargetTableBean4List = new ArrayList<>();
+//        BigDecimal finalScoreSum4 = new BigDecimal(0);
+////                finalScoreTargetSumWeight4 = new BigDecimal(0);
+//        for (int i = 0; i < courseTargetWordDtoList.size(); i++) {
+//            CourseTargetWordDto courseTargetWordDto = courseTargetWordDtoList.get(i);
+////            FinalScoreWordDto finalScoreWordDto = courseTargetWordDto.getFinalScoreDto();
+//            finalScoreSum4 = finalScoreSum4.add(courseTargetWordDto.getTargetSumScore());
+////            finalScoreTargetSumWeight4 = finalScoreTargetSumWeight4.add(finalScoreWordDto.getFinalScoreSumWeight());
+//            CourseTargetTableBean4 courseTargetTableBean4 = new CourseTargetTableBean4((i + 1), courseTargetWordDto.getGraduationRequirement(), courseTargetWordDto.getDimensionPoint(), Double.parseDouble(SystemConstant.df.format(courseTargetWordDto.getTargetSumScore())), courseTargetWordDto.getTargetName());
+//            courseTargetTableBean4List.add(courseTargetTableBean4);
+//        }
+////        finalScoreTargetSumWeight4 = finalScoreTargetSumWeight4.divide(new BigDecimal(courseTargetWordDtoList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+////        String tableFootTitle4 = "合计${dimensionScoreSum}分,占课程总评成绩的${dimensionSumWeight}%";
+//        String tableFootTitle4 = "合计${dimensionScoreSum}分";
+//        tableFootTitle4 = tableFootTitle4.replace("${dimensionScoreSum}", SystemConstant.df.format(finalScoreSum4));
+////        tableFootTitle4 = tableFootTitle4.replace("${dimensionSumWeight}", SystemConstant.df.format(finalScoreTargetSumWeight4));
+//
+//        RowRenderData[] rowRenderData4 = new RowRenderData[courseTargetTableBean4List.size() + 2];
+//        for (int i = 0; i < courseTargetTableBean4List.size(); i++) {
+//            CourseTargetTableBean4 courseTargetTableBean4 = courseTargetTableBean4List.get(i);
+//            rowRenderData4[i + 1] = Rows.of(courseTargetTableBean4.getNum().toString(), courseTargetTableBean4.getProject(), courseTargetTableBean4.getContent(), SystemConstant.df.format(courseTargetTableBean4.getTargetScore()), courseTargetTableBean4.getCourseTarget()).rowStyle(this.getRowStyle()).create();
+//        }
+//        rowRenderData4[0] = header4_1;
+//        RowRenderData header4_foot = Rows.of(tableFootTitle4, "", "", "", "").center().create();
+//        rowRenderData4[rowRenderData4.length - 1] = header4_foot;
+//
+//        //表格合并,根据坐标
+//        MergeCellRule mergeCellRule4 = MergeCellRule.builder().map(MergeCellRule.Grid.of(rowRenderData4.length - 1, 0), MergeCellRule.Grid.of(rowRenderData4.length - 1, 4)).
+//                build();
+//
+//        Tables.TableBuilder tableBuilder4 = Tables.ofPercentWidth(tbPercentWidth, new int[]{8, 20, 37, 14, 21});
+//        for (int i = 0; i < rowRenderData4.length; i++) {
+//            tableBuilder4.addRow(rowRenderData4[i]);
+//        }
+//        return tableBuilder4.mergeRule(mergeCellRule4).left().create();
+//    }
 
     /**
      * 构建word动态表格5
@@ -652,6 +786,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             if (Objects.nonNull(trExamStudentTemp.getResultDetail())) {
                 List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudentTemp.getResultDetail(), ReportExamStudentTargetDto.class);
                 for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
+                    int finalScoreSize = Objects.nonNull(reportExamStudentTargetDto.getFinalScore()) ? 1 : 0;
+                    int size = finalScoreSize + reportExamStudentTargetDto.getUsualScore().getScoreList().size();
                     examStudent_cells_1.add(Cells.of(reportExamStudentTargetDto.getTargetName()).center().create());
                     ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
                     //平常作业
@@ -667,6 +803,14 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
                     if (Objects.nonNull(reportExamStudentFinalScoreDto) && Objects.equals(reportExamStudentFinalScoreDto.getEvaluation(), SystemConstant.FINAL_SCORE_STR)) {
                         examStudent_cells_2.add(Cells.of(SystemConstant.FINAL_SCORE_STR).center().create());
+                    } else {
+                        int usualScoreSize = reportExamStudentTargetDto.getUsualScore().getScoreList().size();
+                        while ((size - usualScoreSize) >= 0) {
+                            examStudent_cells_1.remove(examStudent_cells_1.size() - 1);
+                            size = size - 1;
+                            Integer dynamicSize = targetUsualScoreSizeMap.get(reportExamStudentTargetDto.getTargetId());
+                            targetUsualScoreSizeMap.put(reportExamStudentTargetDto.getTargetId(), dynamicSize - 1);
+                        }
                     }
                 }
                 examStudent_cells_1.add(Cells.of("综合成绩").center().create());
@@ -709,7 +853,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
                             //平常作业
                             if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
-                                courseReportBean.getCourseBasicBean().setUsualScoreWeight(reportExamStudentUsualScoreDto.getTargetWeight());
+//                                courseReportBean.getCourseBasicBean().setUsualScoreWeight(reportExamStudentUsualScoreDto.getTargetWeight());
                                 List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
                                 for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
                                     switch (trExamStudent.getName()) {
@@ -844,7 +988,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     public ObeCourseWeightResult findCourseWeightResultRmi(Long teachCourseId) {
         ObeCourseWeightResult obeCourseWeightResult = obeCourseWeightService.findCourseWeight(teachCourseId);
         Objects.requireNonNull(obeCourseWeightResult, "未设置课程目标数据");
-        // TODO: 2024/6/6 fix
 //        Objects.requireNonNull(obeCourseWeightResult.getCustomRate(), "未设置平时成绩权重");
 //        Objects.requireNonNull(obeCourseWeightResult.getDefaultRate(), "未设置期末考试权重");
         Objects.requireNonNull(obeCourseWeightResult.getWeightSettingSign(), "课程权重变化id为空");
@@ -971,45 +1114,45 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         }
     }
 
-    /**
-     * 计算考生期末成绩知识点纬度
-     *
-     * @param finalScoreExamStudentDimensionMap
-     * @param finalScoreResult
-     * @param courseTargetDto
-     * @param dimensionDto
-     * @param score
-     */
-    protected void calculateFinalScoreByDimensionExamStudent(Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap,
-                                                             FinalScoreResult finalScoreResult,
-                                                             CourseTargetWebDto courseTargetDto,
-                                                             DimensionDto dimensionDto,
-                                                             Double score) {
-        if (!finalScoreExamStudentDimensionMap.containsKey(finalScoreResult.getStudentCode())) {
-            Map<Long, Map<Long, DimensionDto>> map = new LinkedHashMap<>();
-            Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
-            dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
-            map.put(courseTargetDto.getTargetId(), dimensionMap);
-            finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
-        } else {
-            Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(finalScoreResult.getStudentCode());
-            if (!map.containsKey(courseTargetDto.getTargetId())) {
-                Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
-                dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
-                map.put(courseTargetDto.getTargetId(), dimensionMap);
-            } else {
-                Map<Long, DimensionDto> dimensionMap = map.get(courseTargetDto.getTargetId());
-                if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
-                    dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
-                } else {
-                    DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
-                    dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
-                }
-                map.put(courseTargetDto.getTargetId(), dimensionMap);
-            }
-            finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
-        }
-    }
+//    /**
+//     * 计算考生期末成绩知识点纬度
+//     *
+//     * @param finalScoreExamStudentDimensionMap
+//     * @param finalScoreResult
+//     * @param courseTargetDto
+//     * @param dimensionDto
+//     * @param score
+//     */
+//    protected void calculateFinalScoreByDimensionExamStudent(Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap,
+//                                                             FinalScoreResult finalScoreResult,
+//                                                             CourseTargetWebDto courseTargetDto,
+//                                                             DimensionDto dimensionDto,
+//                                                             Double score) {
+//        if (!finalScoreExamStudentDimensionMap.containsKey(finalScoreResult.getStudentCode())) {
+//            Map<Long, Map<Long, DimensionDto>> map = new LinkedHashMap<>();
+//            Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
+//            dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
+//            map.put(courseTargetDto.getTargetId(), dimensionMap);
+//            finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
+//        } else {
+//            Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(finalScoreResult.getStudentCode());
+//            if (!map.containsKey(courseTargetDto.getTargetId())) {
+//                Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
+//                dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
+//                map.put(courseTargetDto.getTargetId(), dimensionMap);
+//            } else {
+//                Map<Long, DimensionDto> dimensionMap = map.get(courseTargetDto.getTargetId());
+//                if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
+//                    dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, score));
+//                } else {
+//                    DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
+//                    dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
+//                }
+//                map.put(courseTargetDto.getTargetId(), dimensionMap);
+//            }
+//            finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
+//        }
+//    }
 
     /**
      * 计算考生期末成绩课程目标卷面分纬度
@@ -1062,8 +1205,10 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 Double score = Objects.nonNull(t.getScore()) ? Double.parseDouble(t.getScore()) : 0d;
                 CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
                 UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
-                Double matrixScore = new BigDecimal(score).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumWeight(), usualScoreWordDto.getUsualScoreTargetSumScore()));
+                //old平时作业换算:分数/100*作业目标分
+                //new平时作业换算:分数/作业目标分
+                Double matrixScore = new BigDecimal(score).multiply(reportEvaluationDto.getTargetWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumScore()));
                 scoreListMap.put(reportEvaluationDto.getTargetId(), reportExamStudentUsualScoreObjDtoList);
             }
         }

+ 163 - 124
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java

@@ -69,30 +69,64 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                         List<ReportExamStudentUsualScoreObjDto> scoreObjDtoList = reportExamStudentUsualScoreSumDto.getScoreMap().get(k);
                         if (!CollectionUtils.isEmpty(scoreObjDtoList)) {
                             CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
-                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k));
-                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
+//                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k));
+//                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
+
+                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = Objects.nonNull(courseTargetWordDto.getFinalScoreDto()) ? new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k)) : null;
+                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(scoreObjDtoList);
 
                             BigDecimal targetMatrixSumScore = new BigDecimal(0);
+                            AtomicReference<BigDecimal> matrixDegree = new AtomicReference<>(new BigDecimal(0));
                             if (!reportExamStudentTargetDtoMap.containsKey(k)) {
-                                Double targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                Double targetMatrixScore = 0.0d;
+                                if (Objects.nonNull(courseTargetWordDto.getFinalScoreDto())) {
+                                    //old卷面分*权重/100
+                                    //new卷面分/目标分
+//                                    targetMatrixScore = new BigDecimal(v).divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                    //卷面分*权重/100
+                                    targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                    BigDecimal bigDecimal = new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    BigDecimal targetEvaluationValue = bigDecimal.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
+                                }
                                 targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
                                 reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
                                 //平时作业总和+累加
+                                for (ReportExamStudentUsualScoreObjDto r : scoreObjDtoList) {
+                                    BigDecimal bigDecimal = new BigDecimal(r.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    BigDecimal targetEvaluationValue = bigDecimal.divide(r.getTargetScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(r.getTargetWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
+                                }
                                 Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
                                 reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
-                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
-                                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), targetMatrixSumScore.doubleValue(), finalScoreResult.getFinalScoreTarget().get(k));
-                                ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
+                                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = null;
+                                if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
+                                    reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
+                                    reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), targetMatrixSumScore.doubleValue(), finalScoreResult.getFinalScoreTarget().get(k));
+                                }
+//                                ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
+                                ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())), matrixDegree.get());
                                 reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
                             } else {
                                 ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
-                                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
-                                Double targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = null;
+                                Double targetMatrixScore = 0.0d;
+                                if (Objects.nonNull(reportExamStudentTargetDto.getFinalScore())) {
+                                    reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
+                                    targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+
+                                    BigDecimal bigDecimal = new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    BigDecimal targetEvaluationValue = bigDecimal.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
+                                    reportExamStudentTargetDto.setMatrixDegree(matrixDegree.get());
+                                }
                                 targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
                                 reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
 
-                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
-                                reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(targetMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                                if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
+                                    reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
+                                    reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(targetMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                                }
                                 ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
 
                                 //平时作业总和+累加
@@ -101,16 +135,19 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                                 for (int i = 0; i < reportExamStudentUsualScoreObjDtoList.size(); i++) {
                                     ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoList.get(i);
                                     reportExamStudentDto.setScore(reportExamStudentDto.getScore() + reportExamStudentUsualScoreObjDto.getMatrixScore());
+                                    BigDecimal bigDecimal = new BigDecimal(reportExamStudentUsualScoreObjDto.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    BigDecimal targetEvaluationValue = bigDecimal.divide(reportExamStudentUsualScoreObjDto.getTargetScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(reportExamStudentUsualScoreObjDto.getTargetWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
                                     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);
                             }
-                            targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
+                            targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto, matrixDegree.get()));
                         }
                     }
                     reportExamStudentDto.setTargetList(targetList);
                 });
-                reportExamStudentDto.setScore(new BigDecimal(reportExamStudentDto.getScore()).setScale(0, BigDecimal.ROUND_DOWN).doubleValue());
+                reportExamStudentDto.setScore(new BigDecimal(reportExamStudentDto.getScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
                 Collections.sort(reportExamStudentDto.getTargetList());
                 trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentDto));
             }
@@ -120,7 +157,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
             AtomicReference<Double> targetScoreSum = new AtomicReference<>(0.0d);
             AtomicReference<Double> usualScoreSum = new AtomicReference<>(0.0d);
             targetDtoList.stream().peek(e -> {
-                targetScoreSum.set(targetScoreSum.get() + e.getFinalScore().getMatrixAvgScore());
+                targetScoreSum.set(targetScoreSum.get() + (Objects.nonNull(e.getFinalScore()) ? e.getFinalScore().getMatrixAvgScore() : 0.0d));
                 usualScoreSum.set(usualScoreSum.get() + e.getUsualScore().getScoreList().stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixAvgScore).sum());
             }).collect(Collectors.toList());
 
@@ -165,115 +202,115 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         return Objects.nonNull(trBasicInfo) ? trExamStudentService.remove(trBasicInfo.getId()) : false;
     }
 
-    /**
-     * 知识点纬度数据构建
-     *
-     * @param map
-     * @param targetWordMap
-     * @param reportExamStudentDto
-     * @param reportExamStudentUsualScoreSumDto
-     * @param reportExamStudentTargetDtoMap
-     * @param finalScoreResult
-     */
-    protected void dimensionDataBuild(Map<Long, Map<Long, DimensionDto>> map, Map<Long, CourseTargetWordDto> targetWordMap,
-                                      ReportExamStudentDto reportExamStudentDto, ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto,
-                                      Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, FinalScoreResult finalScoreResult) {
-        //课程目标循环
-        map.forEach((k, v) -> {
-            List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
-            Collections.sort(dimensionDtoList);
-            List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
-            if (targetWordMap.containsKey(k)) {
-                List<ReportExamStudentUsualScoreObjDto> scoreObjDtoList = reportExamStudentUsualScoreSumDto.getScoreMap().get(k);
-                CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
-                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList, finalScoreResult.getFinalScoreDimension().get(k));
-                ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
-
-                BigDecimal dimensionMatrixSumScore = new BigDecimal(0);
-                if (!reportExamStudentTargetDtoMap.containsKey(k)) {
-                    //各知识点转换分数
-                    for (DimensionDto dimensionDto : dimensionDtoList) {
-                        Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                        dimensionDto.setDimensionMatrixScore(matrixScore);
-                        dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                        reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
-                    }
-                    //平时作业总和+累加
-                    Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
-                    reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
-                    reportExamStudentFinalScoreDto.setTargetDimensionMatrixSumScore(dimensionMatrixSumScore.doubleValue());
-                    ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList.stream().map(DimensionDto::new).collect(Collectors.toList()), dimensionMatrixSumScore.doubleValue(), finalScoreResult.getFinalScoreDimension().get(k));
-                    ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), 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();
-                    //各知识点转换分数
-                    for (int i = 0; i < dimensionDtoList.size(); i++) {
-                        DimensionDto dimensionDto = dimensionDtoList.get(i);
-                        Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                        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);
-                    }
-                    reportExamStudentFinalScoreDto.setTargetDimensionMatrixSumScore(dimensionMatrixSumScore.doubleValue());
-                    reportExamStudentFinalScoreAvgDto.setTargetDimensionMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetDimensionMatrixSumScore()).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);
-                        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);
-                }
-                targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
-            }
-            reportExamStudentDto.setTargetList(targetList);
-        });
-    }
-
-    /**
-     * 处理目标分&平均分&各课程目标平均分参数-知识点纬度
-     *
-     * @param reportExamStudentTargetDtoMap
-     * @param size
-     * @return
-     */
-    protected List<ReportExamStudentTargetDto> targetDimensionDtoParams(Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, BigDecimal size) {
-        List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
-        reportExamStudentTargetDtoMap.forEach((k, v) -> {
-            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
-            BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetDimensionMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
-//            //如果换算出来的知识点总分超过了期末考试目标分,则
-//            if (reportExamStudentFinalScoreDto.getTargetScore().compareTo(matrixAvgScore) == -1) {
-//                throw ExceptionResultEnum.ERROR.exception("[" + v.getTargetName() + "]知识点总平均分超过了期末考试目标分,请重新设置知识点");
+//    /**
+//     * 知识点纬度数据构建
+//     *
+//     * @param map
+//     * @param targetWordMap
+//     * @param reportExamStudentDto
+//     * @param reportExamStudentUsualScoreSumDto
+//     * @param reportExamStudentTargetDtoMap
+//     * @param finalScoreResult
+//     */
+//    protected void dimensionDataBuild(Map<Long, Map<Long, DimensionDto>> map, Map<Long, CourseTargetWordDto> targetWordMap,
+//                                      ReportExamStudentDto reportExamStudentDto, ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto,
+//                                      Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, FinalScoreResult finalScoreResult) {
+//        //课程目标循环
+//        map.forEach((k, v) -> {
+//            List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
+//            Collections.sort(dimensionDtoList);
+//            List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
+//            if (targetWordMap.containsKey(k)) {
+//                List<ReportExamStudentUsualScoreObjDto> scoreObjDtoList = reportExamStudentUsualScoreSumDto.getScoreMap().get(k);
+//                CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
+//                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList, finalScoreResult.getFinalScoreDimension().get(k));
+//                ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(scoreObjDtoList);
+//
+//                BigDecimal dimensionMatrixSumScore = new BigDecimal(0);
+//                if (!reportExamStudentTargetDtoMap.containsKey(k)) {
+//                    //各知识点转换分数
+//                    for (DimensionDto dimensionDto : dimensionDtoList) {
+//                        Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+//                        dimensionDto.setDimensionMatrixScore(matrixScore);
+//                        dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+//                        reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
+//                    }
+//                    //平时作业总和+累加
+//                    Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
+//                    reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
+//                    reportExamStudentFinalScoreDto.setTargetDimensionMatrixSumScore(dimensionMatrixSumScore.doubleValue());
+//                    ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList.stream().map(DimensionDto::new).collect(Collectors.toList()), dimensionMatrixSumScore.doubleValue(), finalScoreResult.getFinalScoreDimension().get(k));
+//                    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();
+//                    //各知识点转换分数
+//                    for (int i = 0; i < dimensionDtoList.size(); i++) {
+//                        DimensionDto dimensionDto = dimensionDtoList.get(i);
+//                        Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+//                        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);
+//                    }
+//                    reportExamStudentFinalScoreDto.setTargetDimensionMatrixSumScore(dimensionMatrixSumScore.doubleValue());
+//                    reportExamStudentFinalScoreAvgDto.setTargetDimensionMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetDimensionMatrixSumScore()).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);
+//                        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);
+//                }
+//                targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
 //            }
-            reportExamStudentFinalScoreDto.setMatrixAvgScore(matrixAvgScore.doubleValue());
+//            reportExamStudentDto.setTargetList(targetList);
+//        });
+//    }
 
-            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.getMatrixAvgScore());
-            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = v.getUsualScore();
-            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
-            for (ReportExamStudentUsualScoreObjDto r : reportExamStudentUsualScoreObjDtoList) {
-                r.setMatrixAvgScore(new BigDecimal(r.getMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-                v.setTargetMatrixAvgScore(v.getTargetMatrixAvgScore() + r.getMatrixAvgScore());
-            }
-            v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
-            targetDtoList.add(v);
-        });
-        Collections.sort(targetDtoList);
-        return targetDtoList;
-    }
+//    /**
+//     * 处理目标分&平均分&各课程目标平均分参数-知识点纬度
+//     *
+//     * @param reportExamStudentTargetDtoMap
+//     * @param size
+//     * @return
+//     */
+//    protected List<ReportExamStudentTargetDto> targetDimensionDtoParams(Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, BigDecimal size) {
+//        List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
+//        reportExamStudentTargetDtoMap.forEach((k, v) -> {
+//            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
+//            BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetDimensionMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+////            //如果换算出来的知识点总分超过了期末考试目标分,则
+////            if (reportExamStudentFinalScoreDto.getTargetScore().compareTo(matrixAvgScore) == -1) {
+////                throw ExceptionResultEnum.ERROR.exception("[" + v.getTargetName() + "]知识点总平均分超过了期末考试目标分,请重新设置知识点");
+////            }
+//            reportExamStudentFinalScoreDto.setMatrixAvgScore(matrixAvgScore.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.getMatrixAvgScore());
+//            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = v.getUsualScore();
+//            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+//            for (ReportExamStudentUsualScoreObjDto r : reportExamStudentUsualScoreObjDtoList) {
+//                r.setMatrixAvgScore(new BigDecimal(r.getMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+//                v.setTargetMatrixAvgScore(v.getTargetMatrixAvgScore() + r.getMatrixAvgScore());
+//            }
+//            v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
+//            targetDtoList.add(v);
+//        });
+//        Collections.sort(targetDtoList);
+//        return targetDtoList;
+//    }
 
     /**
      * 处理目标分&平均分&各课程目标平均分参数-课程目标纬度
@@ -286,15 +323,17 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
         reportExamStudentTargetDtoMap.forEach((k, v) -> {
             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
-            BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
-            reportExamStudentFinalScoreDto.setMatrixAvgScore(matrixAvgScore.doubleValue());
+            if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
+                BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+                reportExamStudentFinalScoreDto.setMatrixAvgScore(matrixAvgScore.doubleValue());
 
-            v.setTargetMatrixAvgScore(reportExamStudentFinalScoreDto.getMatrixAvgScore());
+                v.setTargetMatrixAvgScore(reportExamStudentFinalScoreDto.getMatrixAvgScore());
+            }
             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = v.getUsualScore();
             List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
             for (ReportExamStudentUsualScoreObjDto r : reportExamStudentUsualScoreObjDtoList) {
                 r.setMatrixAvgScore(new BigDecimal(r.getMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-                v.setTargetMatrixAvgScore(v.getTargetMatrixAvgScore() + r.getMatrixAvgScore());
+                v.setTargetMatrixAvgScore(Objects.nonNull(v.getTargetMatrixAvgScore()) ? v.getTargetMatrixAvgScore() : 0.0d + r.getMatrixAvgScore());
             }
             v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
             targetDtoList.add(v);

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -1827,7 +1827,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             SysUser requestUser = (SysUser) map.get(SystemConstant.USER);
             DataPermissionRule dpr = null;
             if (CollectionUtils.isEmpty(idSet)) {
-                dpr = basicRoleDataPermissionService.findDataPermission(653l, requestUser);
+                dpr = basicRoleDataPermissionService.findDataPermission(653L, requestUser);
             }
             // 查询待下载数据
             List<ExamTaskDetailDto> examTaskDetailDtoList = downloadService.listExamQuery(semesterId, examId, orgId, courseName, idSet, dpr);

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 56 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ObeReportController.java


+ 4 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/TCPaperStructController.java

@@ -158,10 +158,10 @@ public class TCPaperStructController {
             List<PaperStructDimensionResult> paperStructDimensionResultList = paperStructParams.getPaperStruct();
             Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum();
             Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重");
-            Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
-            if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
-                throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
-            }
+//            Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
+//            if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
+//                throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
+//            }
             paperStructDimensionResultList.stream().filter(s -> {
                 if (Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())) {
                     s.getTargetList().stream().peek(e -> e.setFinalScoreQuestionScoreSum(score)).collect(Collectors.toList());

+ 34 - 18
distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

@@ -126,7 +126,7 @@ public class TRBasicInfoController {
         TRBasicInfo trBasicInfo = trBasicInfoService.queryBasicInfo(examId, courseCode, paperNumber, teachCourseId);
 
         ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(teachCourseId);
-        log.info("courseWeightResult:{}", JacksonUtil.parseJson(obeCourseWeightResult));
+        log.info("ObeCourseWeightResult:{}", JacksonUtil.parseJson(obeCourseWeightResult));
         TCPaperStruct tcPaperStruct = tcPaperStructService.queryPaperStruct(examId, courseCode, paperNumber, teachCourseId);
         if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStructDimension())) {
             List<PaperStructDimensionResult> paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken<List<PaperStructDimensionResult>>() {
@@ -134,10 +134,17 @@ public class TRBasicInfoController {
             for (CourseWeightDto c : obeCourseWeightResult.getSubmitForm()) {
                 Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum();
                 Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重");
-                Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
-                if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
-                    trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
-                    throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
+////                Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
+//                if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
+//                    trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
+//                    throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
+//                }
+                List<CourseWeightDetailDto> courseWeightDetailDtoList = c.getEvaluationList();
+                for (CourseWeightDetailDto courseWeightDetailDto : courseWeightDetailDtoList) {
+                    if (Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
+                        courseWeightDetailDto.setTargetScore(new BigDecimal(score));
+                        break;
+                    }
                 }
             }
         }
@@ -236,10 +243,17 @@ public class TRBasicInfoController {
                 for (CourseWeightDto c : obeCourseWeightResult.getSubmitForm()) {
                     Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum();
                     Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重");
-                    Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
-                    if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
-                        trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
-                        throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
+//                    Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
+//                    if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
+//                        trBasicInfoService.clearReportData(examId, courseCode, paperNumber, teachCourseId, false);
+//                        throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整");
+//                    }
+                    List<CourseWeightDetailDto> courseWeightDetailDtoList = c.getEvaluationList();
+                    for (CourseWeightDetailDto courseWeightDetailDto : courseWeightDetailDtoList) {
+                        if (Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
+                            courseWeightDetailDto.setTargetScore(new BigDecimal(score));
+                            break;
+                        }
                     }
                 }
             }
@@ -276,11 +290,11 @@ public class TRBasicInfoController {
                 //table2-课程目标达成评价依据
                 courseReportBean.setCourseTargetTable2(trBasicInfoService.buildWordTable2(courseTargetWordDtoList));
 
-                //table3-课程课后作业考核/评价内容及目标分值
-                courseReportBean.setCourseTargetTable3(trBasicInfoService.buildWordTable3(courseTargetWordDtoList));
-
-                //table4-课程期末考试考核/评价内容及目标分值
-                courseReportBean.setCourseTargetTable4(trBasicInfoService.buildWordTable4(courseTargetWordDtoList));
+//                //table3-课程课后作业考核/评价内容及目标分值
+//                courseReportBean.setCourseTargetTable3(trBasicInfoService.buildWordTable3(courseTargetWordDtoList));
+//
+//                //table4-课程期末考试考核/评价内容及目标分值
+//                courseReportBean.setCourseTargetTable4(trBasicInfoService.buildWordTable4(courseTargetWordDtoList));
 
                 //examstudent-课程目标达成评价依据-考生
                 courseReportBean.setExamStudentTable1(trBasicInfoService.buildWordTable5(trBasicInfo, courseReportBean));
@@ -384,10 +398,12 @@ public class TRBasicInfoController {
                         if (Objects.isNull(c.getTotalWeight())) {
                             reportChangeResult.setTargetScoreChange(true);
                             stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("未设置权重").add("\r\n");
-                        } else if (Objects.isNull(c.getTotalScore())) {
-                            reportChangeResult.setTargetScoreChange(true);
-                            stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("未设置目标分值").add("\r\n");
-                        } else if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
+                        }
+//                        else if (Objects.isNull(c.getTotalScore())) {
+//                            reportChangeResult.setTargetScoreChange(true);
+//                            stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("未设置目标分值").add("\r\n");
+//                        }
+                        else if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
                             reportChangeResult.setTargetScoreChange(true);
                             stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整").add("\r\n");
                         }

BIN
distributed-print/src/main/resources/static/course_degree_report.docx


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است