ソースを参照

Merge remote-tracking branch 'origin/dev_v3.3.4' into dev_v3.3.4

caozixuan 1 年間 前
コミット
e41df6789c
28 ファイル変更536 行追加525 行削除
  1. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/obe/MatrixSubRequirementDto.java
  2. 12 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetWebDto.java
  3. 18 18
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetWordDto.java
  4. 19 17
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/DimensionDto.java
  5. 3 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/FinalScoreWordDto.java
  6. 3 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ObeSubRequirementsDto.java
  7. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseBasicInfoDto.java
  8. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportCourseEvaluationResultDto.java
  9. 13 13
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportEvaluationDto.java
  10. 6 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentDto.java
  11. 25 25
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentFinalScoreDto.java
  12. 6 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentTargetDto.java
  13. 18 18
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentUsualScoreObjDto.java
  14. 10 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportScoreRangeViewDto.java
  15. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportScoreViewDto.java
  16. 7 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/FinalScoreResult.java
  17. 5 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/PaperStructDimensionResult.java
  18. 7 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRBasicInfo.java
  19. 4 3
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRExamStudent.java
  20. 2 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseRequirementMatrixServiceImpl.java
  21. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseRequirementReportServiceImpl.java
  22. 3 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseTargetServiceImpl.java
  23. 275 274
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCultureProgramRequirementServiceImpl.java
  24. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCFinalScoreServiceImpl.java
  25. 37 37
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java
  26. 38 39
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java
  27. 5 4
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCPaperStructController.java
  28. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/TRBasicInfoController.java

+ 5 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/obe/MatrixSubRequirementDto.java

@@ -4,12 +4,14 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.distributed.print.business.entity.BasicProfessional;
 
+import java.math.BigDecimal;
+
 public class MatrixSubRequirementDto extends BasicProfessional {
 
     @JsonSerialize(using = ToStringSerializer.class)
     private Long id;
     private String name;
-    private Double scale;
+    private BigDecimal scale = new BigDecimal(0);
     private String content;
 
     @JsonSerialize(using = ToStringSerializer.class)
@@ -43,11 +45,11 @@ public class MatrixSubRequirementDto extends BasicProfessional {
         this.name = name;
     }
 
-    public Double getScale() {
+    public BigDecimal getScale() {
         return scale;
     }
 
-    public void setScale(Double scale) {
+    public void setScale(BigDecimal scale) {
         this.scale = scale;
     }
 
@@ -58,5 +60,4 @@ public class MatrixSubRequirementDto extends BasicProfessional {
     public void setContent(String content) {
         this.content = content;
     }
-
 }

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

@@ -47,13 +47,13 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
     private List<ReportEvaluationDto> evaluationList;
 
     @ApiModelProperty(value = "知识点卷面总分")
-    private Double dimensionScoreSum = 0.0d;
+    private BigDecimal dimensionScoreSum = new BigDecimal(0);
 
     @ApiModelProperty(value = "知识点集合")
     private String dimensionPoint;
 
     @ApiModelProperty(value = "小题卷面总分")
-    private Double finalScoreQuestionScoreSum = 0.0d;
+    private BigDecimal finalScoreQuestionScoreSum = new BigDecimal(0);
 
     public CourseTargetWebDto() {
 
@@ -67,11 +67,19 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
         this.targetSumWeight = courseWeightDto.getTotalWeight();
     }
 
-    public Double getFinalScoreQuestionScoreSum() {
+    public BigDecimal getDimensionScoreSum() {
+        return dimensionScoreSum;
+    }
+
+    public void setDimensionScoreSum(BigDecimal dimensionScoreSum) {
+        this.dimensionScoreSum = dimensionScoreSum;
+    }
+
+    public BigDecimal getFinalScoreQuestionScoreSum() {
         return finalScoreQuestionScoreSum;
     }
 
-    public void setFinalScoreQuestionScoreSum(Double finalScoreQuestionScoreSum) {
+    public void setFinalScoreQuestionScoreSum(BigDecimal finalScoreQuestionScoreSum) {
         this.finalScoreQuestionScoreSum = finalScoreQuestionScoreSum;
     }
 
@@ -83,14 +91,6 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
         this.dimensionPoint = dimensionPoint;
     }
 
-    public Double getDimensionScoreSum() {
-        return dimensionScoreSum;
-    }
-
-    public void setDimensionScoreSum(Double dimensionScoreSum) {
-        this.dimensionScoreSum = dimensionScoreSum;
-    }
-
     public String getGraduationRequirementPoint() {
         return graduationRequirementPoint;
     }

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

@@ -37,7 +37,7 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
     private BigDecimal targetSumWeight = new BigDecimal(0);
 
     @ApiModelProperty(value = "换算平均分")
-    private Double matrixAvgScore = 0.0d;
+    private BigDecimal matrixAvgScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "目标达成评价值")
     private BigDecimal evaluationValue = new BigDecimal(0);
@@ -49,13 +49,13 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
     private FinalScoreWordDto finalScoreDto;
 
     @ApiModelProperty(value = "知识点卷面总分")
-    private Double dimensionScoreSum = 0.0d;
+    private BigDecimal dimensionScoreSum = new BigDecimal(0);
 
     @ApiModelProperty(value = "知识点集合")
     private String dimensionPoint;
 
     @ApiModelProperty(value = "期末成绩小题卷面总分")
-    private Double finalScoreQuestionScoreSum = 0.0d;
+    private BigDecimal finalScoreQuestionScoreSum = new BigDecimal(0);
 
     @ApiModelProperty("指标点名称")
     private String obeCultureProgramRequirementName;
@@ -93,14 +93,6 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
         this.parentRequirementName = parentRequirementName;
     }
 
-    public Double getFinalScoreQuestionScoreSum() {
-        return finalScoreQuestionScoreSum;
-    }
-
-    public void setFinalScoreQuestionScoreSum(Double finalScoreQuestionScoreSum) {
-        this.finalScoreQuestionScoreSum = finalScoreQuestionScoreSum;
-    }
-
     public String getDimensionPoint() {
         return dimensionPoint;
     }
@@ -109,14 +101,26 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
         this.dimensionPoint = dimensionPoint;
     }
 
-    public Double getDimensionScoreSum() {
+    public void setMatrixAvgScore(BigDecimal matrixAvgScore) {
+        this.matrixAvgScore = matrixAvgScore;
+    }
+
+    public BigDecimal getDimensionScoreSum() {
         return dimensionScoreSum;
     }
 
-    public void setDimensionScoreSum(Double dimensionScoreSum) {
+    public void setDimensionScoreSum(BigDecimal dimensionScoreSum) {
         this.dimensionScoreSum = dimensionScoreSum;
     }
 
+    public BigDecimal getFinalScoreQuestionScoreSum() {
+        return finalScoreQuestionScoreSum;
+    }
+
+    public void setFinalScoreQuestionScoreSum(BigDecimal finalScoreQuestionScoreSum) {
+        this.finalScoreQuestionScoreSum = finalScoreQuestionScoreSum;
+    }
+
     public BigDecimal getEvaluationValue() {
         return evaluationValue;
     }
@@ -181,14 +185,10 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
         this.finalScoreDto = finalScoreDto;
     }
 
-    public Double getMatrixAvgScore() {
+    public BigDecimal getMatrixAvgScore() {
         return matrixAvgScore;
     }
 
-    public void setMatrixAvgScore(Double matrixAvgScore) {
-        this.matrixAvgScore = matrixAvgScore;
-    }
-
     @Override
     public int compareTo(@NotNull CourseTargetWordDto o) {
         if (o.getTargetId().longValue() < this.getTargetId().longValue()) {

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

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.jetbrains.annotations.NotNull;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @Description: 课程知识点dto
@@ -33,13 +34,13 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
     private String dimensionName;
 
     @ApiModelProperty(value = "知识点分数")
-    private Double dimensionScore;
+    private BigDecimal dimensionScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "换算分数")
-    private Double dimensionMatrixScore;
+    private BigDecimal dimensionMatrixScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "换算平均分")
-    private Double dimensionMatrixAvgScore;
+    private BigDecimal dimensionMatrixAvgScore = new BigDecimal(0);
 
     public DimensionDto() {
 
@@ -55,7 +56,7 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
         this.dimensionMatrixAvgScore = dimensionDto.getDimensionMatrixAvgScore();
     }
 
-    public DimensionDto(Long targetId, DimensionDto dimensionDto, Double dimensionScore) {
+    public DimensionDto(Long targetId, DimensionDto dimensionDto, BigDecimal dimensionScore) {
         this.targetId = targetId;
         this.dimensionId = dimensionDto.getDimensionId();
         this.dimensionCode = dimensionDto.getDimensionCode();
@@ -63,7 +64,7 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
         this.dimensionScore = dimensionScore;
     }
 
-    public DimensionDto(Long targetId, DimensionDto dimensionDto, Double dimensionScore, Double dimensionMatrixScore) {
+    public DimensionDto(Long targetId, DimensionDto dimensionDto, BigDecimal dimensionScore, BigDecimal dimensionMatrixScore) {
         this.targetId = targetId;
         this.dimensionId = dimensionDto.getDimensionId();
         this.dimensionCode = dimensionDto.getDimensionCode();
@@ -71,19 +72,28 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
         this.dimensionScore = dimensionScore;
         this.dimensionMatrixScore = dimensionMatrixScore;
     }
-    public Double getDimensionMatrixScore() {
+
+    public BigDecimal getDimensionScore() {
+        return dimensionScore;
+    }
+
+    public void setDimensionScore(BigDecimal dimensionScore) {
+        this.dimensionScore = dimensionScore;
+    }
+
+    public BigDecimal getDimensionMatrixScore() {
         return dimensionMatrixScore;
     }
 
-    public void setDimensionMatrixScore(Double dimensionMatrixScore) {
+    public void setDimensionMatrixScore(BigDecimal dimensionMatrixScore) {
         this.dimensionMatrixScore = dimensionMatrixScore;
     }
 
-    public Double getDimensionMatrixAvgScore() {
+    public BigDecimal getDimensionMatrixAvgScore() {
         return dimensionMatrixAvgScore;
     }
 
-    public void setDimensionMatrixAvgScore(Double dimensionMatrixAvgScore) {
+    public void setDimensionMatrixAvgScore(BigDecimal dimensionMatrixAvgScore) {
         this.dimensionMatrixAvgScore = dimensionMatrixAvgScore;
     }
 
@@ -119,14 +129,6 @@ public class DimensionDto implements Serializable, Comparable<DimensionDto> {
         this.dimensionName = dimensionName;
     }
 
-    public Double getDimensionScore() {
-        return dimensionScore;
-    }
-
-    public void setDimensionScore(Double dimensionScore) {
-        this.dimensionScore = dimensionScore;
-    }
-
     @Override
     public int compareTo(@NotNull DimensionDto o) {
         return this.getDimensionCode().compareTo(o.getDimensionCode());

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

@@ -41,7 +41,7 @@ public class FinalScoreWordDto implements Serializable {
     private BigDecimal finalScoreSumWeight = new BigDecimal(0);
 
     @ApiModelProperty(value = "期末成绩知识点分数")
-    private Double finalScoreDimensionScore;
+    private BigDecimal finalScoreDimensionScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "知识点集合")
     private List<DimensionDto> dimensionList;
@@ -90,11 +90,11 @@ public class FinalScoreWordDto implements Serializable {
         this.finalScoreSumWeight = finalScoreSumWeight;
     }
 
-    public Double getFinalScoreDimensionScore() {
+    public BigDecimal getFinalScoreDimensionScore() {
         return finalScoreDimensionScore;
     }
 
-    public void setFinalScoreDimensionScore(Double finalScoreDimensionScore) {
+    public void setFinalScoreDimensionScore(BigDecimal finalScoreDimensionScore) {
         this.finalScoreDimensionScore = finalScoreDimensionScore;
     }
 

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

@@ -30,7 +30,7 @@ public class ObeSubRequirementsDto extends CourseTargetWebDto {
     private String name;
 
     @ApiModelProperty(value = "权重")
-    private Double scale;
+    private BigDecimal scale = new BigDecimal(0);
 
     @ApiModelProperty(value = "描述")
     private String content;
@@ -97,11 +97,11 @@ public class ObeSubRequirementsDto extends CourseTargetWebDto {
         this.name = name;
     }
 
-    public Double getScale() {
+    public BigDecimal getScale() {
         return scale;
     }
 
-    public void setScale(Double scale) {
+    public void setScale(BigDecimal scale) {
         this.scale = scale;
     }
 

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

@@ -4,6 +4,7 @@ import com.qmth.distributed.print.business.entity.TRBasicInfo;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @Description: 报告课程基本情况dto
@@ -39,7 +40,7 @@ public class ReportCourseBasicInfoDto implements Serializable {
     private Integer participantCount;
 
     @ApiModelProperty(value = "课程目标达成度期望值")
-    private Double courseDegree;
+    private BigDecimal courseDegree = new BigDecimal(0);
 
     @ApiModelProperty(value = "任课老师")
     private String teacher;
@@ -57,7 +58,7 @@ public class ReportCourseBasicInfoDto implements Serializable {
     private String college;
 
     @ApiModelProperty(name = "课程英文名称")
-    String courseEnName;
+    private String courseEnName;
 
     public ReportCourseBasicInfoDto() {
 
@@ -169,11 +170,11 @@ public class ReportCourseBasicInfoDto implements Serializable {
         this.participantCount = participantCount;
     }
 
-    public Double getCourseDegree() {
+    public BigDecimal getCourseDegree() {
         return courseDegree;
     }
 
-    public void setCourseDegree(Double courseDegree) {
+    public void setCourseDegree(BigDecimal courseDegree) {
         this.courseDegree = courseDegree;
     }
 

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

@@ -22,7 +22,7 @@ public class ReportCourseEvaluationResultDto implements Serializable {
     private Long weightSettingSign;
 
     @ApiModelProperty(value = "课程目标总达成评价值")
-    private BigDecimal targetEvaluationSumValue;
+    private BigDecimal targetEvaluationSumValue = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标集合")
     private List<CourseTargetWebDto> targetList;

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

@@ -35,22 +35,22 @@ public class ReportEvaluationDto implements Serializable, Comparable<ReportEvalu
     private String evaluationDesc;
 
     @ApiModelProperty(value = "权重")
-    private BigDecimal targetWeight;
+    private BigDecimal targetWeight = new BigDecimal(0);
 
     @ApiModelProperty(value = "目标分值")
-    private BigDecimal targetScore;
+    private BigDecimal targetScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "换算平均分")
-    private Double targetAvgScore;
+    private BigDecimal targetAvgScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "卷面分")
-    private Double score;
+    private BigDecimal score = new BigDecimal(0);
 
     public ReportEvaluationDto() {
 
     }
 
-    public ReportEvaluationDto(Long targetId, CourseWeightDetailDto courseWeightDetailDto, Double score) {
+    public ReportEvaluationDto(Long targetId, CourseWeightDetailDto courseWeightDetailDto, BigDecimal score) {
         this.targetId = targetId;
         this.evaluationId = courseWeightDetailDto.getEvaluationId();
         this.evaluation = courseWeightDetailDto.getEvaluationName();
@@ -60,20 +60,20 @@ public class ReportEvaluationDto implements Serializable, Comparable<ReportEvalu
         this.score = score;
     }
 
-    public Double getScore() {
-        return score;
+    public BigDecimal getTargetAvgScore() {
+        return targetAvgScore;
     }
 
-    public void setScore(Double score) {
-        this.score = score;
+    public void setTargetAvgScore(BigDecimal targetAvgScore) {
+        this.targetAvgScore = targetAvgScore;
     }
 
-    public Double getTargetAvgScore() {
-        return targetAvgScore;
+    public BigDecimal getScore() {
+        return score;
     }
 
-    public void setTargetAvgScore(Double targetAvgScore) {
-        this.targetAvgScore = targetAvgScore;
+    public void setScore(BigDecimal score) {
+        this.score = score;
     }
 
     public Long getTargetId() {

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

@@ -7,6 +7,7 @@ import com.qmth.teachcloud.common.util.GsonUtil;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Objects;
 
@@ -29,7 +30,7 @@ public class ReportExamStudentDto implements Serializable {
     private String administrativeClass;
 
     @ApiModelProperty(value = "综合成绩")
-    private Double score;
+    private BigDecimal score = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标集合")
     private List<ReportExamStudentTargetDto> targetList;
@@ -47,7 +48,7 @@ public class ReportExamStudentDto implements Serializable {
         }.getType());
     }
 
-    public ReportExamStudentDto(String name, String studentCode, String administrativeClass, Double score, List<ReportExamStudentTargetDto> targetList) {
+    public ReportExamStudentDto(String name, String studentCode, String administrativeClass, BigDecimal score, List<ReportExamStudentTargetDto> targetList) {
         this.name = name;
         this.studentCode = studentCode;
         this.administrativeClass = administrativeClass;
@@ -85,11 +86,11 @@ public class ReportExamStudentDto implements Serializable {
         this.administrativeClass = administrativeClass;
     }
 
-    public Double getScore() {
-        return Objects.isNull(score) ? 0.0d : score;
+    public BigDecimal getScore() {
+        return score;
     }
 
-    public void setScore(Double score) {
+    public void setScore(BigDecimal score) {
         this.score = score;
     }
 

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

@@ -30,28 +30,28 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
     private String evaluationDesc;
 
     @ApiModelProperty(value = "权重")
-    private BigDecimal targetWeight;
+    private BigDecimal targetWeight = new BigDecimal(0);
 
     @ApiModelProperty(value = "目标分值")
-    private BigDecimal targetScore;
+    private BigDecimal targetScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标知识点转换总分")
-    private Double targetDimensionMatrixSumScore;
+    private BigDecimal targetDimensionMatrixSumScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标集合")
     private List<DimensionDto> dimensionList;
 
     @ApiModelProperty(value = "课程目标考核要素的平均分")
-    private Double matrixAvgScore;
+    private BigDecimal matrixAvgScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "知识点卷面总分")
-    private Double dimensionScoreSum;
+    private BigDecimal dimensionScoreSum = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程卷面总分")
-    private Double targetScoreSum;
+    private BigDecimal targetScoreSum = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标转换总分")
-    private Double targetMatrixSumScore;
+    private BigDecimal targetMatrixSumScore = new BigDecimal(0);
 
     public ReportExamStudentFinalScoreDto() {
 
@@ -78,7 +78,7 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
 //        this.dimensionScoreSum = dimensionScoreSum;
 //    }
 
-    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, Double targetScoreSum) {
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, BigDecimal targetScoreSum) {
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
@@ -87,7 +87,7 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
         this.targetScoreSum = targetScoreSum;
     }
 
-    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, Double targetMatrixSumScore, Double targetScoreSum) {
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, BigDecimal targetMatrixSumScore, BigDecimal targetScoreSum) {
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
@@ -97,46 +97,46 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
         this.targetScoreSum = targetScoreSum;
     }
 
-    public Double getTargetDimensionMatrixSumScore() {
+    public BigDecimal getTargetDimensionMatrixSumScore() {
         return targetDimensionMatrixSumScore;
     }
 
-    public void setTargetDimensionMatrixSumScore(Double targetDimensionMatrixSumScore) {
+    public void setTargetDimensionMatrixSumScore(BigDecimal targetDimensionMatrixSumScore) {
         this.targetDimensionMatrixSumScore = targetDimensionMatrixSumScore;
     }
 
-    public Double getDimensionScoreSum() {
+    public BigDecimal getMatrixAvgScore() {
+        return matrixAvgScore;
+    }
+
+    public void setMatrixAvgScore(BigDecimal matrixAvgScore) {
+        this.matrixAvgScore = matrixAvgScore;
+    }
+
+    public BigDecimal getDimensionScoreSum() {
         return dimensionScoreSum;
     }
 
-    public void setDimensionScoreSum(Double dimensionScoreSum) {
+    public void setDimensionScoreSum(BigDecimal dimensionScoreSum) {
         this.dimensionScoreSum = dimensionScoreSum;
     }
 
-    public Double getTargetScoreSum() {
+    public BigDecimal getTargetScoreSum() {
         return targetScoreSum;
     }
 
-    public void setTargetScoreSum(Double targetScoreSum) {
+    public void setTargetScoreSum(BigDecimal targetScoreSum) {
         this.targetScoreSum = targetScoreSum;
     }
 
-    public Double getTargetMatrixSumScore() {
+    public BigDecimal getTargetMatrixSumScore() {
         return targetMatrixSumScore;
     }
 
-    public void setTargetMatrixSumScore(Double targetMatrixSumScore) {
+    public void setTargetMatrixSumScore(BigDecimal targetMatrixSumScore) {
         this.targetMatrixSumScore = targetMatrixSumScore;
     }
 
-    public Double getMatrixAvgScore() {
-        return matrixAvgScore;
-    }
-
-    public void setMatrixAvgScore(Double matrixAvgScore) {
-        this.matrixAvgScore = matrixAvgScore;
-    }
-
     public Long getEvaluationId() {
         return evaluationId;
     }

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

@@ -30,16 +30,16 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
     private String graduationRequirement;
 
     @ApiModelProperty(value = "目标整体权重")
-    private BigDecimal targetSumWeight;
+    private BigDecimal targetSumWeight = new BigDecimal(0);
 
     @ApiModelProperty(value = "目标达成评价值")
-    private BigDecimal evaluationValue;
+    private BigDecimal evaluationValue = new BigDecimal(0);
 
     @ApiModelProperty(value = "各课程目标平均分")
-    private Double targetMatrixAvgScore;
+    private BigDecimal targetMatrixAvgScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "个人达成度")
-    private BigDecimal matrixDegree;
+    private BigDecimal matrixDegree = new BigDecimal(0);
 
     @ApiModelProperty(value = "期末成绩")
     private ReportExamStudentFinalScoreDto finalScore;
@@ -80,11 +80,11 @@ public class ReportExamStudentTargetDto implements Serializable, Comparable<Repo
         this.matrixDegree = matrixDegree;
     }
 
-    public Double getTargetMatrixAvgScore() {
+    public BigDecimal getTargetMatrixAvgScore() {
         return targetMatrixAvgScore;
     }
 
-    public void setTargetMatrixAvgScore(Double targetMatrixAvgScore) {
+    public void setTargetMatrixAvgScore(BigDecimal targetMatrixAvgScore) {
         this.targetMatrixAvgScore = targetMatrixAvgScore;
     }
 

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

@@ -37,22 +37,22 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
     private BigDecimal targetWeight;
 
     @ApiModelProperty(value = "作业目标分值")
-    private BigDecimal targetScore;
+    private BigDecimal targetScore = new BigDecimal(0);
 
 //    @ApiModelProperty(value = "作业整体权重")
 //    private BigDecimal targetSumWeight;
 
     @ApiModelProperty(value = "作业整体分值")
-    private BigDecimal targetSumScore;
+    private BigDecimal targetSumScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "卷面分数")
-    private Double score;
+    private BigDecimal score = new BigDecimal(0);
 
     @ApiModelProperty(value = "换算分数")
-    private Double matrixScore;
+    private BigDecimal matrixScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标考核要素的平均分")
-    private Double matrixAvgScore;
+    private BigDecimal matrixAvgScore = new BigDecimal(0);
 
     public ReportExamStudentUsualScoreObjDto() {
 
@@ -70,7 +70,7 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
         this.targetSumScore = reportExamStudentUsualScoreObjDto.getTargetSumScore();
     }
 
-    public ReportExamStudentUsualScoreObjDto(Long targetId, ReportEvaluationDto reportEvaluationDto, Double score, Double matrixScore, BigDecimal targetSumScore) {
+    public ReportExamStudentUsualScoreObjDto(Long targetId, ReportEvaluationDto reportEvaluationDto, BigDecimal score, BigDecimal matrixScore, BigDecimal targetSumScore) {
         this.evaluationId = reportEvaluationDto.getEvaluationId();
         this.evaluation = reportEvaluationDto.getEvaluation();
         this.evaluationDesc = reportEvaluationDto.getEvaluationDesc();
@@ -82,14 +82,6 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
         this.targetSumScore = targetSumScore;
     }
 
-    public Double getMatrixAvgScore() {
-        return matrixAvgScore;
-    }
-
-    public void setMatrixAvgScore(Double matrixAvgScore) {
-        this.matrixAvgScore = matrixAvgScore;
-    }
-
     public Long getTargetId() {
         return targetId;
     }
@@ -146,22 +138,30 @@ public class ReportExamStudentUsualScoreObjDto implements Serializable, Comparab
         this.targetScore = targetScore;
     }
 
-    public Double getScore() {
+    public BigDecimal getScore() {
         return score;
     }
 
-    public void setScore(Double score) {
+    public void setScore(BigDecimal score) {
         this.score = score;
     }
 
-    public Double getMatrixScore() {
+    public BigDecimal getMatrixScore() {
         return matrixScore;
     }
 
-    public void setMatrixScore(Double matrixScore) {
+    public void setMatrixScore(BigDecimal matrixScore) {
         this.matrixScore = matrixScore;
     }
 
+    public BigDecimal getMatrixAvgScore() {
+        return matrixAvgScore;
+    }
+
+    public void setMatrixAvgScore(BigDecimal matrixAvgScore) {
+        this.matrixAvgScore = matrixAvgScore;
+    }
+
     @Override
     public int compareTo(@NotNull ReportExamStudentUsualScoreObjDto o) {
         return this.getEvaluation().compareTo(o.getEvaluation());

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

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * @Description: 报告课程目标考核分布-分数范围dto
@@ -19,13 +20,13 @@ public class ReportScoreRangeViewDto implements Serializable {
     private Integer studentCount;
 
     @ApiModelProperty(value = "最小分")
-    private Double minScore;
+    private BigDecimal minScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "最大分")
-    private Double maxScore;
+    private BigDecimal maxScore = new BigDecimal(0);
 
     @ApiModelProperty(value = "比率")
-    private Double rate;
+    private BigDecimal rate = new BigDecimal(0);
 
     public Integer getStudentCount() {
         return studentCount;
@@ -35,27 +36,27 @@ public class ReportScoreRangeViewDto implements Serializable {
         this.studentCount = studentCount;
     }
 
-    public Double getMinScore() {
+    public BigDecimal getMinScore() {
         return minScore;
     }
 
-    public void setMinScore(Double minScore) {
+    public void setMinScore(BigDecimal minScore) {
         this.minScore = minScore;
     }
 
-    public Double getMaxScore() {
+    public BigDecimal getMaxScore() {
         return maxScore;
     }
 
-    public void setMaxScore(Double maxScore) {
+    public void setMaxScore(BigDecimal maxScore) {
         this.maxScore = maxScore;
     }
 
-    public Double getRate() {
+    public BigDecimal getRate() {
         return rate;
     }
 
-    public void setRate(Double rate) {
+    public void setRate(BigDecimal rate) {
         this.rate = rate;
     }
 }

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

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.business.bean.dto.report;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -18,7 +19,7 @@ public class ReportScoreViewDto implements Serializable {
     private Integer failCount;
 
     @ApiModelProperty(value = "不及格比率")
-    private Double failRate;
+    private BigDecimal failRate = new BigDecimal(0);
 
     @ApiModelProperty(value = "分数范围")
     private List<ReportScoreRangeViewDto> scoreRange;
@@ -27,7 +28,7 @@ public class ReportScoreViewDto implements Serializable {
 
     }
 
-    public ReportScoreViewDto(Integer failCount, Double failRate, List<ReportScoreRangeViewDto> scoreRange) {
+    public ReportScoreViewDto(Integer failCount, BigDecimal failRate, List<ReportScoreRangeViewDto> scoreRange) {
         this.failCount = failCount;
         this.failRate = failRate;
         this.scoreRange = scoreRange;
@@ -41,11 +42,11 @@ public class ReportScoreViewDto implements Serializable {
         this.failCount = failCount;
     }
 
-    public Double getFailRate() {
+    public BigDecimal getFailRate() {
         return failRate;
     }
 
-    public void setFailRate(Double failRate) {
+    public void setFailRate(BigDecimal failRate) {
         this.failRate = failRate;
     }
 

+ 7 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/FinalScoreResult.java

@@ -5,6 +5,7 @@ import com.qmth.distributed.print.business.bean.dto.report.ReportExamStudentUsua
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -27,10 +28,10 @@ public class FinalScoreResult implements Serializable {
     private String administrativeClass;
 
     @ApiModelProperty(value = "期末考试分数")
-    private Map<Long, Double> finalScoreDimension = new LinkedHashMap<>();
+    private Map<Long, BigDecimal> finalScoreDimension = new LinkedHashMap<>();
 
     @ApiModelProperty(value = "期末考试分数")
-    private Map<Long, Double> finalScoreTarget = new LinkedHashMap<>();
+    private Map<Long, BigDecimal> finalScoreTarget = new LinkedHashMap<>();
 
     @ApiModelProperty(value = "期末考试分数明细")
     private String finalScoreDetail;
@@ -92,19 +93,19 @@ public class FinalScoreResult implements Serializable {
         this.studentCode = studentCode;
     }
 
-    public Map<Long, Double> getFinalScoreDimension() {
+    public Map<Long, BigDecimal> getFinalScoreDimension() {
         return finalScoreDimension;
     }
 
-    public void setFinalScoreDimension(Map<Long, Double> finalScoreDimension) {
+    public void setFinalScoreDimension(Map<Long, BigDecimal> finalScoreDimension) {
         this.finalScoreDimension = finalScoreDimension;
     }
 
-    public Map<Long, Double> getFinalScoreTarget() {
+    public Map<Long, BigDecimal> getFinalScoreTarget() {
         return finalScoreTarget;
     }
 
-    public void setFinalScoreTarget(Map<Long, Double> finalScoreTarget) {
+    public void setFinalScoreTarget(Map<Long, BigDecimal> finalScoreTarget) {
         this.finalScoreTarget = finalScoreTarget;
     }
 

+ 5 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/report/PaperStructDimensionResult.java

@@ -7,6 +7,7 @@ import org.hibernate.validator.constraints.Range;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -34,7 +35,7 @@ public class PaperStructDimensionResult implements Serializable {
 
     @ApiModelProperty(value = "分数")
     @NotNull(message = "分数不能为空")
-    private Double score;
+    private BigDecimal score = new BigDecimal(0);
 
     @ApiModelProperty(value = "课程目标名称")
     @NotNull(message = "课程目标名称不能为空")
@@ -48,7 +49,7 @@ public class PaperStructDimensionResult implements Serializable {
 
     }
 
-    public PaperStructDimensionResult(Integer mainNumber, Integer subNumber, String paperNumber, Double score) {
+    public PaperStructDimensionResult(Integer mainNumber, Integer subNumber, String paperNumber, BigDecimal score) {
         this.mainNumber = mainNumber;
         this.subNumber = subNumber;
         this.paperNumber = paperNumber;
@@ -87,11 +88,11 @@ public class PaperStructDimensionResult implements Serializable {
         this.subNumber = subNumber;
     }
 
-    public Double getScore() {
+    public BigDecimal getScore() {
         return score;
     }
 
-    public void setScore(Double score) {
+    public void setScore(BigDecimal score) {
         this.score = score;
     }
 

+ 7 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRBasicInfo.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * <p>
@@ -75,7 +76,7 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
     private Integer participantCount = 0;
 
     @ApiModelProperty(value = "课程目标达成度期望值")
-    private Double courseDegree;
+    private BigDecimal courseDegree = new BigDecimal(0);
 
     @ApiModelProperty(value = "任课老师")
     private String teacher;
@@ -108,7 +109,7 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
     private String courseSuggest;
 
     @ApiModelProperty(name = "课程英文名称")
-    String courseEnName;
+    private String courseEnName;
 
     @ApiModelProperty(value = "报告信息")
     @TableField(exist = false)
@@ -121,7 +122,7 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
     public TRBasicInfo(Long cultureProgramId, Long courseId, String courseCode, String courseName,
                        String paperNumber, String openTime, String teachingObject, String teacher, Integer participantCount,
                        Long userId, String profession, String finishPoints, String requirementPoints,
-                       String courseSuggest, Double courseDegree, String courseEnName) {
+                       String courseSuggest, BigDecimal courseDegree, String courseEnName) {
         insertInfo(userId);
         this.cultureProgramId = cultureProgramId;
         this.courseId = courseId;
@@ -135,9 +136,6 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
         this.enable = true;
         this.reportResult = new ReportResult();
         this.profession = profession;
-        this.finishPoints = finishPoints;
-        this.requirementPoints = requirementPoints;
-        this.courseSuggest = courseSuggest;
         this.courseDegree = courseDegree;
         this.courseEnName = courseEnName;
         this.finishPoints = finishPoints;
@@ -236,7 +234,7 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
 
     public void setBasicInfo(Long examId, String courseCode, String courseName, String paperNumber, String openTime,
                              String teachingObject, String teacher, Integer participantCount, Long cultureProgramId,
-                             Long courseId, Double courseDegree, String profession, String courseEnName, String college,
+                             Long courseId, BigDecimal courseDegree, String profession, String courseEnName, String college,
                              String finishPoints, String requirementPoints, String courseSuggest) {
         this.examId = examId;
         this.courseCode = courseCode;
@@ -363,11 +361,11 @@ public class TRBasicInfo extends BaseEntity implements Serializable {
         this.teachingObject = teachingObject;
     }
 
-    public Double getCourseDegree() {
+    public BigDecimal getCourseDegree() {
         return courseDegree;
     }
 
-    public void setCourseDegree(Double courseDegree) {
+    public void setCourseDegree(BigDecimal courseDegree) {
         this.courseDegree = courseDegree;
     }
 

+ 4 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TRExamStudent.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * <p>
@@ -41,7 +42,7 @@ public class TRExamStudent implements Serializable {
     private String administrativeClass;
 
     @ApiModelProperty(value = "综合成绩")
-    private Double score;
+    private BigDecimal score = new BigDecimal(0);
 
     @ApiModelProperty(value = "考生课程考核成绩评价明细结果")
     private String resultDetail;
@@ -67,11 +68,11 @@ public class TRExamStudent implements Serializable {
         this.resultDetail = JacksonUtil.parseJson(reportExamStudentDto.getTargetList());
     }
 
-    public Double getScore() {
+    public BigDecimal getScore() {
         return score;
     }
 
-    public void setScore(Double score) {
+    public void setScore(BigDecimal score) {
         this.score = score;
     }
 

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

@@ -30,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -106,7 +107,7 @@ public class ObeCourseRequirementMatrixServiceImpl extends ServiceImpl<ObeCourse
                         MatrixSubRequirementDto matrixSubRequirementDto = new MatrixSubRequirementDto();
                         matrixSubRequirementDto.setId(tpMatrix.getId());
                         matrixSubRequirementDto.setName(tpMatrix.getRequirementSortNum() + "-" + tpMatrix.getSubRequirementSortNum());
-                        matrixSubRequirementDto.setScale(tpMatrix.getScale());
+                        matrixSubRequirementDto.setScale(new BigDecimal(tpMatrix.getScale()));
                         matrixSubRequirementDto.setContent(tpMatrix.getRequirementContent());
                         matrixSubRequirementDto.setSubRequirementId(tpMatrix.getObeSubRequirementId());
                         return matrixSubRequirementDto;

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

@@ -142,7 +142,7 @@ public class ObeCourseRequirementReportServiceImpl extends ServiceImpl<ObeCourse
                             for (Map.Entry<Long, List<ObeSubRequirementsDto>> entry : matrixSubRequirementIdMap.entrySet()) {
                                 Double evaluationValue = entry.getValue().stream().mapToDouble(x -> Objects.nonNull(x.getEvaluationValue()) ? x.getEvaluationValue().doubleValue() : 0.0d).average().orElse(0.0d);
                                 ObeSubRequirementsDto obeSubRequirementsDto = entry.getValue().get(0);
-                                BigDecimal bigDecimal = new BigDecimal(evaluationValue).multiply(new BigDecimal(obeSubRequirementsDto.getScale())).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal bigDecimal = new BigDecimal(evaluationValue).multiply(obeSubRequirementsDto.getScale()).setScale(2, BigDecimal.ROUND_HALF_UP);
                                 entry.getValue().stream().peek(x -> x.setMatrixDegree(bigDecimal)).collect(Collectors.toList());
                             }
                         }

+ 3 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCourseTargetServiceImpl.java

@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -245,7 +246,7 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
                                 }
                                 subCell.setMainNumber(mainNumber);
                                 subCell.setSubNumber(subNumberIndex.getAndIncrement());
-                                subCell.setScore(score);
+                                subCell.setScore(new BigDecimal(score));
                                 result.add(subCell);
                             }
 
@@ -274,7 +275,7 @@ public class ObeCourseTargetServiceImpl extends ServiceImpl<ObeCourseTargetMappe
                             }
                             cell.setMainNumber(mainNumber);
                             cell.setSubNumber(subNumberIndex.getAndIncrement());
-                            cell.setScore(score);
+                            cell.setScore(new BigDecimal(score));
                             result.add(cell);
                         }
                     }

+ 275 - 274
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ObeCultureProgramRequirementServiceImpl.java

@@ -1,274 +1,275 @@
-package com.qmth.distributed.print.business.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.distributed.print.business.bean.dto.obe.CourseRequirementMatrixDto;
-import com.qmth.distributed.print.business.bean.dto.obe.MatrixRequirementDto;
-import com.qmth.distributed.print.business.bean.dto.obe.MatrixSubRequirementDto;
-import com.qmth.distributed.print.business.entity.ObeCourseRequirementMatrix;
-import com.qmth.distributed.print.business.entity.ObeCultureProgram;
-import com.qmth.distributed.print.business.entity.ObeCultureProgramRequirement;
-import com.qmth.distributed.print.business.enums.CultureProgramRequirementEnum;
-import com.qmth.distributed.print.business.mapper.ObeCourseRequirementMatrixMapper;
-import com.qmth.distributed.print.business.mapper.ObeCultureProgramRequirementMapper;
-import com.qmth.distributed.print.business.service.ObeCourseRequirementMatrixService;
-import com.qmth.distributed.print.business.service.ObeCultureProgramRequirementService;
-import com.qmth.distributed.print.business.service.ObeCultureProgramService;
-import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.util.ServletUtil;
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.LinkedMultiValueMap;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.stream.Collectors;
-
-/**
- * <p>
- * 培养方案毕业要求 服务实现类
- * </p>
- *
- * @author xf
- * @since 2024-06-05
- */
-@Service
-public class ObeCultureProgramRequirementServiceImpl extends ServiceImpl<ObeCultureProgramRequirementMapper, ObeCultureProgramRequirement> implements ObeCultureProgramRequirementService {
-
-    private static final String NAME_PREFIX = "指标点";
-
-    @Resource
-    private ObeCultureProgramService obeCultureProgramService;
-    @Resource
-    private ObeCourseRequirementMatrixService obeCourseRequirementMatrixService;
-    @Resource
-    private ObeCourseRequirementMatrixMapper obeCourseRequirementMatrixMapper;
-
-    @Override
-    public List<ObeCultureProgramRequirement> listRequirement(Long cultureProgramId) {
-        List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = this.listByCultureProgramId(cultureProgramId);
-
-        List<ObeCultureProgramRequirement> obeCultureProgramRequirements = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(obeCultureProgramRequirementList)) {
-            Map<Long, ObeCultureProgramRequirement> obeCultureProgramRequirementMap = obeCultureProgramRequirementList.stream().filter(obeCultureProgramRequirement -> obeCultureProgramRequirement.getParentId() == null).collect(Collectors.toMap(ObeCultureProgramRequirement::getId, obeCultureProgramRequirement -> obeCultureProgramRequirement));
-            for (ObeCultureProgramRequirement obeCultureProgramRequirement : obeCultureProgramRequirementList) {
-                if (obeCultureProgramRequirement.getParentId() != null) {
-                    obeCultureProgramRequirementMap.get(obeCultureProgramRequirement.getParentId()).getSubRequirementList().add(obeCultureProgramRequirement);
-                }
-            }
-            obeCultureProgramRequirements = obeCultureProgramRequirementMap.values().stream().collect(Collectors.toList());
-            obeCultureProgramRequirements.sort(Comparator.comparingInt(ObeCultureProgramRequirement::getSortNum));
-        }
-        return obeCultureProgramRequirements;
-    }
-
-    @Override
-    public boolean saveRequirement(ObeCultureProgramRequirement obeCultureProgramRequirement) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        // 修改
-        if (obeCultureProgramRequirement.getId() != null) {
-            obeCultureProgramRequirement.updateInfo(sysUser.getId());
-            return this.updateById(obeCultureProgramRequirement);
-        }
-        // 新增
-//        else {
-//            ObeCultureProgramRequirement obeCultureProgramRequirementParent = this.getById(obeCultureProgramRequirement.getParentId());
-//            obeCultureProgramRequirement.setSortNum(this.getMaxSortNum(obeCultureProgramRequirement.getCultureProgramId(), obeCultureProgramRequirement.getParentId()) + 1);
-//            obeCultureProgramRequirement.setName(concatRequirementName(obeCultureProgramRequirementParent.getSortNum(), obeCultureProgramRequirement.getSortNum()));
-//            obeCultureProgramRequirement.insertInfo(sysUser.getId());
-//            if (this.save(obeCultureProgramRequirement)) {
-//                obeCourseRequirementMatrixService.updateMatrix(obeCultureProgramRequirement.getCultureProgramId(), Arrays.asList(obeCultureProgramRequirement), null);
-//            }
-//            return true;
-//        }
-        return true;
-    }
-
-    @Override
-    public boolean addRequirementNode(ObeCultureProgramRequirement obeCultureProgramRequirement) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-
-        ObeCultureProgramRequirement parentRequirement = this.getById(obeCultureProgramRequirement.getId());
-        ObeCultureProgramRequirement cultureProgramRequirement = new ObeCultureProgramRequirement();
-        cultureProgramRequirement.setCultureProgramId(obeCultureProgramRequirement.getCultureProgramId());
-        cultureProgramRequirement.setSortNum(this.getMaxSortNum(cultureProgramRequirement.getCultureProgramId(), obeCultureProgramRequirement.getId()) + 1);
-        cultureProgramRequirement.setName(concatRequirementName(parentRequirement.getSortNum(), cultureProgramRequirement.getSortNum()));
-        cultureProgramRequirement.setParentId(obeCultureProgramRequirement.getId());
-        cultureProgramRequirement.insertInfo(sysUser.getId());
-        if (this.save(cultureProgramRequirement)) {
-            parentRequirement.getSubRequirementList().add(cultureProgramRequirement);
-            obeCourseRequirementMatrixService.updateMatrix(cultureProgramRequirement.getCultureProgramId(), Arrays.asList(parentRequirement), null);
-        }
-        return true;
-    }
-
-    @Override
-    public int getMaxSortNum(Long cultureProgramId, Long parentId) {
-        QueryWrapper<ObeCultureProgramRequirement> queryWrapper = new QueryWrapper<>();
-        LambdaQueryWrapper<ObeCultureProgramRequirement> lambda = queryWrapper.lambda();
-        lambda.eq(ObeCultureProgramRequirement::getCultureProgramId, cultureProgramId);
-        if (parentId != null) {
-            lambda.eq(ObeCultureProgramRequirement::getParentId, parentId);
-        }
-        lambda.orderByDesc(ObeCultureProgramRequirement::getSortNum);
-        lambda.last("limit 1");
-        ObeCultureProgramRequirement requirement = this.getOne(queryWrapper);
-        if (requirement == null) {
-            return 0;
-        } else {
-            return requirement.getSortNum();
-        }
-    }
-
-    @Transactional
-    @Override
-    public boolean removeRequirement(Long id) {
-        ObeCultureProgramRequirement obeCultureProgramRequirement = this.getById(id);
-        ObeCultureProgramRequirement obeCultureProgramRequirementParent = this.getById(obeCultureProgramRequirement.getParentId());
-        obeCourseRequirementMatrixService.removeMatrixByCondition(new ObeCourseRequirementMatrix(null, null, null, id));
-        if (this.removeById(id)) {
-            List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = this.listByCultureProgramIdAndParentId(obeCultureProgramRequirement.getCultureProgramId(), obeCultureProgramRequirement.getParentId());
-            if (CollectionUtils.isEmpty(obeCultureProgramRequirementList)) {
-                throw ExceptionResultEnum.ERROR.exception("当前数据为最后一个节点,无法删除");
-            }
-            for (int i = 0; i < obeCultureProgramRequirementList.size(); i++) {
-                obeCultureProgramRequirementList.get(i).setSortNum(i + 1);
-                obeCultureProgramRequirementList.get(i).setName(concatRequirementName(obeCultureProgramRequirementParent.getSortNum(), (i + 1)));
-            }
-            this.updateBatchById(obeCultureProgramRequirementList);
-        }
-        return true;
-    }
-
-    @Transactional
-    @Override
-    public void initRequirement(Long cultureProgramId) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = new ArrayList<>();
-        for (CultureProgramRequirementEnum value : CultureProgramRequirementEnum.values()) {
-            // 一级节点
-            ObeCultureProgramRequirement obeCultureProgramRequirement = new ObeCultureProgramRequirement(cultureProgramId, value.name(), value.getName(), value.getContent(), null, value.ordinal() + 1);
-            obeCultureProgramRequirement.insertInfo(sysUser.getId());
-            obeCultureProgramRequirementList.add(obeCultureProgramRequirement);
-            // 每个一级节点默认创建一个二级节点
-            ObeCultureProgramRequirement obeSubCultureProgramRequirement = new ObeCultureProgramRequirement(cultureProgramId, null, concatRequirementName(obeCultureProgramRequirement.getSortNum(), 1), null, obeCultureProgramRequirement.getId(), 1);
-            obeSubCultureProgramRequirement.insertInfo(sysUser.getId());
-            obeCultureProgramRequirementList.add(obeSubCultureProgramRequirement);
-        }
-
-        this.saveBatch(obeCultureProgramRequirementList);
-    }
-
-    @Override
-    public List<ObeCultureProgramRequirement> listByCultureProgramIdAndParentId(Long cultureProgramId, Long parentId) {
-        QueryWrapper<ObeCultureProgramRequirement> queryWrapper = new QueryWrapper<>();
-        LambdaQueryWrapper<ObeCultureProgramRequirement> lambda = queryWrapper.lambda();
-        lambda.eq(ObeCultureProgramRequirement::getCultureProgramId, cultureProgramId);
-        if (parentId != null) {
-            lambda.eq(ObeCultureProgramRequirement::getParentId, parentId);
-        } else {
-            lambda.isNull(ObeCultureProgramRequirement::getParentId);
-        }
-        lambda.orderByAsc(ObeCultureProgramRequirement::getSortNum);
-        return this.list(queryWrapper);
-    }
-
-    @Transactional
-    @Override
-    public boolean saveRequirementExpect(ObeCultureProgramRequirement obeCultureProgramRequirement) {
-        if (obeCultureProgramRequirement.getCultureProgramId() == null) {
-            throw ExceptionResultEnum.ERROR.exception("培养方案ID有误");
-        }
-        UpdateWrapper<ObeCultureProgram> obeCultureProgramUpdateWrapper = new UpdateWrapper<>();
-        obeCultureProgramUpdateWrapper.lambda().set(ObeCultureProgram::getExpectValue, obeCultureProgramRequirement.getExpectValue())
-                .eq(ObeCultureProgram::getId, obeCultureProgramRequirement.getCultureProgramId());
-        obeCultureProgramService.update(obeCultureProgramUpdateWrapper);
-
-        UpdateWrapper<ObeCultureProgramRequirement> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(ObeCultureProgramRequirement::getExpectValue, obeCultureProgramRequirement.getExpectValue())
-                .eq(ObeCultureProgramRequirement::getCultureProgramId, obeCultureProgramRequirement.getCultureProgramId())
-                .isNull(ObeCultureProgramRequirement::getParentId);
-        return this.update(updateWrapper);
-    }
-
-    @Override
-    public void removeByCultureProgramId(Long id) {
-        this.remove(new QueryWrapper<ObeCultureProgramRequirement>().lambda().eq(ObeCultureProgramRequirement::getCultureProgramId, id));
-    }
-
-    @Override
-    public Map<Long, Long> copyByCultureProgramId(Long id, Long obeCultureProgramNewId) {
-        List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = this.listByCultureProgramId(id);
-        // 原id与新id的映射关系
-        Map<Long, Long> idMap = new HashMap<>();
-        for (ObeCultureProgramRequirement obeCultureProgramRequirement : obeCultureProgramRequirementList) {
-            Long newId = SystemConstant.getDbUuid();
-            idMap.put(obeCultureProgramRequirement.getId(), newId);
-            obeCultureProgramRequirement.setId(newId);
-            obeCultureProgramRequirement.setCultureProgramId(obeCultureProgramNewId);
-        }
-        for (ObeCultureProgramRequirement obeCultureProgramRequirement : obeCultureProgramRequirementList) {
-            obeCultureProgramRequirement.setParentId(idMap.get(obeCultureProgramRequirement.getParentId()));
-        }
-        if (CollectionUtils.isNotEmpty(obeCultureProgramRequirementList)) {
-            this.saveBatch(obeCultureProgramRequirementList);
-        }
-        return idMap;
-    }
-
-    @Override
-    public List<ObeCultureProgramRequirement> listByCultureProgramId(Long cultureProgramId) {
-        QueryWrapper<ObeCultureProgramRequirement> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(ObeCultureProgramRequirement::getCultureProgramId, cultureProgramId)
-                .orderByAsc(ObeCultureProgramRequirement::getSortNum);
-        return this.list(queryWrapper);
-    }
-
-    @Override
-    public List<MatrixRequirementDto> listSubRequirement(Long cultureProgramId, Long courseId) {
-        List<CourseRequirementMatrixDto> tpMatrixList = obeCourseRequirementMatrixMapper.listMatrix(cultureProgramId, courseId);
-
-        List<CourseRequirementMatrixDto> filterCollect = tpMatrixList.stream().filter(tpMatrix -> tpMatrix.getScale() != null).collect(Collectors.toList());
-        tpMatrixList = CollectionUtils.isNotEmpty(filterCollect) ? filterCollect : tpMatrixList;
-
-        LinkedMultiValueMap<Long, CourseRequirementMatrixDto> requirementMap = new LinkedMultiValueMap<>();
-        for (CourseRequirementMatrixDto tpMatrix : tpMatrixList) {
-            requirementMap.add(tpMatrix.getObeRequirementId(), tpMatrix);
-        }
-        List<MatrixRequirementDto> matrixRequirementDtoList = new ArrayList<>();
-        requirementMap.entrySet().stream().forEach(requirementEntry -> {
-            ObeCultureProgramRequirement tpRequirement = this.getById(requirementEntry.getKey());
-            MatrixRequirementDto matrixRequirementDto = new MatrixRequirementDto();
-            matrixRequirementDto.setId(tpRequirement.getId());
-            matrixRequirementDto.setName(tpRequirement.getName());
-            matrixRequirementDto.setExpectValue(tpRequirement.getExpectValue());
-            List<CourseRequirementMatrixDto> requirementList = requirementEntry.getValue();
-            // 排序,解决字符串1和10排序问题
-            if (requirementList.size() > 1) {
-                requirementList.sort(Comparator.comparingInt(o -> o.getSubRequirementSortNum()));
-            }
-
-            List<MatrixSubRequirementDto> matrixSubRequirementDtoList = requirementList.stream().map(tpMatrix -> {
-                MatrixSubRequirementDto matrixSubRequirementDto = new MatrixSubRequirementDto();
-                matrixSubRequirementDto.setId(tpMatrix.getObeSubRequirementId());
-                matrixSubRequirementDto.setName(concatRequirementName(tpMatrix.getRequirementSortNum(), tpMatrix.getSubRequirementSortNum()));
-                matrixSubRequirementDto.setScale(tpMatrix.getScale());
-                matrixSubRequirementDto.setContent(tpMatrix.getRequirementContent());
-                return matrixSubRequirementDto;
-            }).collect(Collectors.toList());
-            matrixRequirementDto.setSubRequirements(matrixSubRequirementDtoList);
-            matrixRequirementDtoList.add(matrixRequirementDto);
-        });
-
-        return matrixRequirementDtoList;
-    }
-
-    private String concatRequirementName(int requirementNum, int subRequirementNum) {
-        return NAME_PREFIX + requirementNum + "-" + subRequirementNum;
-    }
-}
+package com.qmth.distributed.print.business.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.obe.CourseRequirementMatrixDto;
+import com.qmth.distributed.print.business.bean.dto.obe.MatrixRequirementDto;
+import com.qmth.distributed.print.business.bean.dto.obe.MatrixSubRequirementDto;
+import com.qmth.distributed.print.business.entity.ObeCourseRequirementMatrix;
+import com.qmth.distributed.print.business.entity.ObeCultureProgram;
+import com.qmth.distributed.print.business.entity.ObeCultureProgramRequirement;
+import com.qmth.distributed.print.business.enums.CultureProgramRequirementEnum;
+import com.qmth.distributed.print.business.mapper.ObeCourseRequirementMatrixMapper;
+import com.qmth.distributed.print.business.mapper.ObeCultureProgramRequirementMapper;
+import com.qmth.distributed.print.business.service.ObeCourseRequirementMatrixService;
+import com.qmth.distributed.print.business.service.ObeCultureProgramRequirementService;
+import com.qmth.distributed.print.business.service.ObeCultureProgramService;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.ServletUtil;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 培养方案毕业要求 服务实现类
+ * </p>
+ *
+ * @author xf
+ * @since 2024-06-05
+ */
+@Service
+public class ObeCultureProgramRequirementServiceImpl extends ServiceImpl<ObeCultureProgramRequirementMapper, ObeCultureProgramRequirement> implements ObeCultureProgramRequirementService {
+
+    private static final String NAME_PREFIX = "指标点";
+
+    @Resource
+    private ObeCultureProgramService obeCultureProgramService;
+    @Resource
+    private ObeCourseRequirementMatrixService obeCourseRequirementMatrixService;
+    @Resource
+    private ObeCourseRequirementMatrixMapper obeCourseRequirementMatrixMapper;
+
+    @Override
+    public List<ObeCultureProgramRequirement> listRequirement(Long cultureProgramId) {
+        List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = this.listByCultureProgramId(cultureProgramId);
+
+        List<ObeCultureProgramRequirement> obeCultureProgramRequirements = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(obeCultureProgramRequirementList)) {
+            Map<Long, ObeCultureProgramRequirement> obeCultureProgramRequirementMap = obeCultureProgramRequirementList.stream().filter(obeCultureProgramRequirement -> obeCultureProgramRequirement.getParentId() == null).collect(Collectors.toMap(ObeCultureProgramRequirement::getId, obeCultureProgramRequirement -> obeCultureProgramRequirement));
+            for (ObeCultureProgramRequirement obeCultureProgramRequirement : obeCultureProgramRequirementList) {
+                if (obeCultureProgramRequirement.getParentId() != null) {
+                    obeCultureProgramRequirementMap.get(obeCultureProgramRequirement.getParentId()).getSubRequirementList().add(obeCultureProgramRequirement);
+                }
+            }
+            obeCultureProgramRequirements = obeCultureProgramRequirementMap.values().stream().collect(Collectors.toList());
+            obeCultureProgramRequirements.sort(Comparator.comparingInt(ObeCultureProgramRequirement::getSortNum));
+        }
+        return obeCultureProgramRequirements;
+    }
+
+    @Override
+    public boolean saveRequirement(ObeCultureProgramRequirement obeCultureProgramRequirement) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        // 修改
+        if (obeCultureProgramRequirement.getId() != null) {
+            obeCultureProgramRequirement.updateInfo(sysUser.getId());
+            return this.updateById(obeCultureProgramRequirement);
+        }
+        // 新增
+//        else {
+//            ObeCultureProgramRequirement obeCultureProgramRequirementParent = this.getById(obeCultureProgramRequirement.getParentId());
+//            obeCultureProgramRequirement.setSortNum(this.getMaxSortNum(obeCultureProgramRequirement.getCultureProgramId(), obeCultureProgramRequirement.getParentId()) + 1);
+//            obeCultureProgramRequirement.setName(concatRequirementName(obeCultureProgramRequirementParent.getSortNum(), obeCultureProgramRequirement.getSortNum()));
+//            obeCultureProgramRequirement.insertInfo(sysUser.getId());
+//            if (this.save(obeCultureProgramRequirement)) {
+//                obeCourseRequirementMatrixService.updateMatrix(obeCultureProgramRequirement.getCultureProgramId(), Arrays.asList(obeCultureProgramRequirement), null);
+//            }
+//            return true;
+//        }
+        return true;
+    }
+
+    @Override
+    public boolean addRequirementNode(ObeCultureProgramRequirement obeCultureProgramRequirement) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+
+        ObeCultureProgramRequirement parentRequirement = this.getById(obeCultureProgramRequirement.getId());
+        ObeCultureProgramRequirement cultureProgramRequirement = new ObeCultureProgramRequirement();
+        cultureProgramRequirement.setCultureProgramId(obeCultureProgramRequirement.getCultureProgramId());
+        cultureProgramRequirement.setSortNum(this.getMaxSortNum(cultureProgramRequirement.getCultureProgramId(), obeCultureProgramRequirement.getId()) + 1);
+        cultureProgramRequirement.setName(concatRequirementName(parentRequirement.getSortNum(), cultureProgramRequirement.getSortNum()));
+        cultureProgramRequirement.setParentId(obeCultureProgramRequirement.getId());
+        cultureProgramRequirement.insertInfo(sysUser.getId());
+        if (this.save(cultureProgramRequirement)) {
+            parentRequirement.getSubRequirementList().add(cultureProgramRequirement);
+            obeCourseRequirementMatrixService.updateMatrix(cultureProgramRequirement.getCultureProgramId(), Arrays.asList(parentRequirement), null);
+        }
+        return true;
+    }
+
+    @Override
+    public int getMaxSortNum(Long cultureProgramId, Long parentId) {
+        QueryWrapper<ObeCultureProgramRequirement> queryWrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<ObeCultureProgramRequirement> lambda = queryWrapper.lambda();
+        lambda.eq(ObeCultureProgramRequirement::getCultureProgramId, cultureProgramId);
+        if (parentId != null) {
+            lambda.eq(ObeCultureProgramRequirement::getParentId, parentId);
+        }
+        lambda.orderByDesc(ObeCultureProgramRequirement::getSortNum);
+        lambda.last("limit 1");
+        ObeCultureProgramRequirement requirement = this.getOne(queryWrapper);
+        if (requirement == null) {
+            return 0;
+        } else {
+            return requirement.getSortNum();
+        }
+    }
+
+    @Transactional
+    @Override
+    public boolean removeRequirement(Long id) {
+        ObeCultureProgramRequirement obeCultureProgramRequirement = this.getById(id);
+        ObeCultureProgramRequirement obeCultureProgramRequirementParent = this.getById(obeCultureProgramRequirement.getParentId());
+        obeCourseRequirementMatrixService.removeMatrixByCondition(new ObeCourseRequirementMatrix(null, null, null, id));
+        if (this.removeById(id)) {
+            List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = this.listByCultureProgramIdAndParentId(obeCultureProgramRequirement.getCultureProgramId(), obeCultureProgramRequirement.getParentId());
+            if (CollectionUtils.isEmpty(obeCultureProgramRequirementList)) {
+                throw ExceptionResultEnum.ERROR.exception("当前数据为最后一个节点,无法删除");
+            }
+            for (int i = 0; i < obeCultureProgramRequirementList.size(); i++) {
+                obeCultureProgramRequirementList.get(i).setSortNum(i + 1);
+                obeCultureProgramRequirementList.get(i).setName(concatRequirementName(obeCultureProgramRequirementParent.getSortNum(), (i + 1)));
+            }
+            this.updateBatchById(obeCultureProgramRequirementList);
+        }
+        return true;
+    }
+
+    @Transactional
+    @Override
+    public void initRequirement(Long cultureProgramId) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = new ArrayList<>();
+        for (CultureProgramRequirementEnum value : CultureProgramRequirementEnum.values()) {
+            // 一级节点
+            ObeCultureProgramRequirement obeCultureProgramRequirement = new ObeCultureProgramRequirement(cultureProgramId, value.name(), value.getName(), value.getContent(), null, value.ordinal() + 1);
+            obeCultureProgramRequirement.insertInfo(sysUser.getId());
+            obeCultureProgramRequirementList.add(obeCultureProgramRequirement);
+            // 每个一级节点默认创建一个二级节点
+            ObeCultureProgramRequirement obeSubCultureProgramRequirement = new ObeCultureProgramRequirement(cultureProgramId, null, concatRequirementName(obeCultureProgramRequirement.getSortNum(), 1), null, obeCultureProgramRequirement.getId(), 1);
+            obeSubCultureProgramRequirement.insertInfo(sysUser.getId());
+            obeCultureProgramRequirementList.add(obeSubCultureProgramRequirement);
+        }
+
+        this.saveBatch(obeCultureProgramRequirementList);
+    }
+
+    @Override
+    public List<ObeCultureProgramRequirement> listByCultureProgramIdAndParentId(Long cultureProgramId, Long parentId) {
+        QueryWrapper<ObeCultureProgramRequirement> queryWrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<ObeCultureProgramRequirement> lambda = queryWrapper.lambda();
+        lambda.eq(ObeCultureProgramRequirement::getCultureProgramId, cultureProgramId);
+        if (parentId != null) {
+            lambda.eq(ObeCultureProgramRequirement::getParentId, parentId);
+        } else {
+            lambda.isNull(ObeCultureProgramRequirement::getParentId);
+        }
+        lambda.orderByAsc(ObeCultureProgramRequirement::getSortNum);
+        return this.list(queryWrapper);
+    }
+
+    @Transactional
+    @Override
+    public boolean saveRequirementExpect(ObeCultureProgramRequirement obeCultureProgramRequirement) {
+        if (obeCultureProgramRequirement.getCultureProgramId() == null) {
+            throw ExceptionResultEnum.ERROR.exception("培养方案ID有误");
+        }
+        UpdateWrapper<ObeCultureProgram> obeCultureProgramUpdateWrapper = new UpdateWrapper<>();
+        obeCultureProgramUpdateWrapper.lambda().set(ObeCultureProgram::getExpectValue, obeCultureProgramRequirement.getExpectValue())
+                .eq(ObeCultureProgram::getId, obeCultureProgramRequirement.getCultureProgramId());
+        obeCultureProgramService.update(obeCultureProgramUpdateWrapper);
+
+        UpdateWrapper<ObeCultureProgramRequirement> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(ObeCultureProgramRequirement::getExpectValue, obeCultureProgramRequirement.getExpectValue())
+                .eq(ObeCultureProgramRequirement::getCultureProgramId, obeCultureProgramRequirement.getCultureProgramId())
+                .isNull(ObeCultureProgramRequirement::getParentId);
+        return this.update(updateWrapper);
+    }
+
+    @Override
+    public void removeByCultureProgramId(Long id) {
+        this.remove(new QueryWrapper<ObeCultureProgramRequirement>().lambda().eq(ObeCultureProgramRequirement::getCultureProgramId, id));
+    }
+
+    @Override
+    public Map<Long, Long> copyByCultureProgramId(Long id, Long obeCultureProgramNewId) {
+        List<ObeCultureProgramRequirement> obeCultureProgramRequirementList = this.listByCultureProgramId(id);
+        // 原id与新id的映射关系
+        Map<Long, Long> idMap = new HashMap<>();
+        for (ObeCultureProgramRequirement obeCultureProgramRequirement : obeCultureProgramRequirementList) {
+            Long newId = SystemConstant.getDbUuid();
+            idMap.put(obeCultureProgramRequirement.getId(), newId);
+            obeCultureProgramRequirement.setId(newId);
+            obeCultureProgramRequirement.setCultureProgramId(obeCultureProgramNewId);
+        }
+        for (ObeCultureProgramRequirement obeCultureProgramRequirement : obeCultureProgramRequirementList) {
+            obeCultureProgramRequirement.setParentId(idMap.get(obeCultureProgramRequirement.getParentId()));
+        }
+        if (CollectionUtils.isNotEmpty(obeCultureProgramRequirementList)) {
+            this.saveBatch(obeCultureProgramRequirementList);
+        }
+        return idMap;
+    }
+
+    @Override
+    public List<ObeCultureProgramRequirement> listByCultureProgramId(Long cultureProgramId) {
+        QueryWrapper<ObeCultureProgramRequirement> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ObeCultureProgramRequirement::getCultureProgramId, cultureProgramId)
+                .orderByAsc(ObeCultureProgramRequirement::getSortNum);
+        return this.list(queryWrapper);
+    }
+
+    @Override
+    public List<MatrixRequirementDto> listSubRequirement(Long cultureProgramId, Long courseId) {
+        List<CourseRequirementMatrixDto> tpMatrixList = obeCourseRequirementMatrixMapper.listMatrix(cultureProgramId, courseId);
+
+        List<CourseRequirementMatrixDto> filterCollect = tpMatrixList.stream().filter(tpMatrix -> tpMatrix.getScale() != null).collect(Collectors.toList());
+        tpMatrixList = CollectionUtils.isNotEmpty(filterCollect) ? filterCollect : tpMatrixList;
+
+        LinkedMultiValueMap<Long, CourseRequirementMatrixDto> requirementMap = new LinkedMultiValueMap<>();
+        for (CourseRequirementMatrixDto tpMatrix : tpMatrixList) {
+            requirementMap.add(tpMatrix.getObeRequirementId(), tpMatrix);
+        }
+        List<MatrixRequirementDto> matrixRequirementDtoList = new ArrayList<>();
+        requirementMap.entrySet().stream().forEach(requirementEntry -> {
+            ObeCultureProgramRequirement tpRequirement = this.getById(requirementEntry.getKey());
+            MatrixRequirementDto matrixRequirementDto = new MatrixRequirementDto();
+            matrixRequirementDto.setId(tpRequirement.getId());
+            matrixRequirementDto.setName(tpRequirement.getName());
+            matrixRequirementDto.setExpectValue(tpRequirement.getExpectValue());
+            List<CourseRequirementMatrixDto> requirementList = requirementEntry.getValue();
+            // 排序,解决字符串1和10排序问题
+            if (requirementList.size() > 1) {
+                requirementList.sort(Comparator.comparingInt(o -> o.getSubRequirementSortNum()));
+            }
+
+            List<MatrixSubRequirementDto> matrixSubRequirementDtoList = requirementList.stream().map(tpMatrix -> {
+                MatrixSubRequirementDto matrixSubRequirementDto = new MatrixSubRequirementDto();
+                matrixSubRequirementDto.setId(tpMatrix.getObeSubRequirementId());
+                matrixSubRequirementDto.setName(concatRequirementName(tpMatrix.getRequirementSortNum(), tpMatrix.getSubRequirementSortNum()));
+                matrixSubRequirementDto.setScale(new BigDecimal(tpMatrix.getScale()));
+                matrixSubRequirementDto.setContent(tpMatrix.getRequirementContent());
+                return matrixSubRequirementDto;
+            }).collect(Collectors.toList());
+            matrixRequirementDto.setSubRequirements(matrixSubRequirementDtoList);
+            matrixRequirementDtoList.add(matrixRequirementDto);
+        });
+
+        return matrixRequirementDtoList;
+    }
+
+    private String concatRequirementName(int requirementNum, int subRequirementNum) {
+        return NAME_PREFIX + requirementNum + "-" + subRequirementNum;
+    }
+}

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

@@ -280,7 +280,7 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
                             String name = scoreItem.getMainNumber() + "-" + scoreItem.getSubNumber();
                             tcFinalScoreDtoList.add(new TCFinalScoreDto(scoreItem.getScore().toString(), name));
                             if (i == 0) {
-                                paperStructDimensionResultList.add(new PaperStructDimensionResult(scoreItem.getMainNumber(), scoreItem.getSubNumber(), paperNumber, scoreItem.getTotalScore()));
+                                paperStructDimensionResultList.add(new PaperStructDimensionResult(scoreItem.getMainNumber(), scoreItem.getSubNumber(), paperNumber, new BigDecimal(scoreItem.getTotalScore())));
                             }
                         }
                         tcFinalScoreList.add(new TCFinalScore(markStudentScoreVo, JacksonUtil.parseJson(tcFinalScoreDtoList), SourceEnum.SYNC, sysUser.getId(), cultureProgramId, courseId));

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

@@ -126,7 +126,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         List<ScoreRangeVo> scoreRangeVoList = finalScoreDto.getScoreRange();
         if (!CollectionUtils.isEmpty(scoreRangeVoList)) {
             Integer failCount = scoreRangeVoList.get(0).getStudentCount();//第一行数据默认为不及格
-            Double failRate = scoreRangeVoList.get(0).getRate();
+            BigDecimal failRate = new BigDecimal(scoreRangeVoList.get(0).getRate());
 
             scoreRangeVoList.remove(0);
             List<ReportScoreRangeViewDto> scoreRangeViewDtoList = GsonUtil.fromJson(JacksonUtil.parseJson(scoreRangeVoList), new TypeToken<List<ReportScoreRangeViewDto>>() {
@@ -154,7 +154,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         }
 
 //        Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = new LinkedHashMap<>();//汇总考生课程目标-知识点卷面分(知识点得分用)
-        Map<String, Map<Long, Double>> finalScoreExamStudentTargetMap = new LinkedHashMap<>();//汇总考生课程目标-课程目标卷面分
+        Map<String, Map<Long, BigDecimal>> finalScoreExamStudentTargetMap = new LinkedHashMap<>();//汇总考生课程目标-课程目标卷面分
         Map<Long, Map<Long, DimensionDto>> targetDimensionMap = new LinkedHashMap<>();//课程目标-知识点-卷面分(word报表用)
 
         List<ReportExamStudentDto> examStudentList = null;//考生集合
@@ -193,13 +193,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         if (courseWeightDetailDto.getEnable() && Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
                             FinalScoreWordDto finalScoreWordDto = new FinalScoreWordDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto);
                             courseTargetWordDto.setFinalScoreDto(finalScoreWordDto);
-                            ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, 0.0d);
+                            ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, new BigDecimal(0));
                             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, 0.0d);
+                            ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, new BigDecimal(0));
                             usualScoreTargetSumScore = usualScoreTargetSumScore.add(reportEvaluationDto.getTargetScore());
                             usualScoreDetailList.add(reportEvaluationDto);
                             reportEvaluationDtoList.add(reportEvaluationDto);
@@ -225,7 +225,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 List<TCFinalScoreDto> tcFinalScoreDtoList = GsonUtil.fromJson(finalScoreResult.getFinalScoreDetail(), new TypeToken<List<TCFinalScoreDto>>() {
                 }.getType());
                 for (TCFinalScoreDto t : tcFinalScoreDtoList) {
-                    Double score = Objects.nonNull(t.getScore()) ? Double.parseDouble(t.getScore().toString()) : 0d;
+                    BigDecimal score = Objects.nonNull(t.getScore()) ? new BigDecimal(t.getScore()) : new BigDecimal(0);
                     PaperStructDimensionResult paperStructDimensionResult = paperStructResultMap.get(t.getName().toString());
                     if (Objects.nonNull(paperStructDimensionResult)) {
                         List<CourseTargetWebDto> courseTargetDtoList = paperStructDimensionResult.getTargetList();
@@ -238,7 +238,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 //                                this.calculateFinalScoreByDimensionExamStudent(finalScoreExamStudentDimensionMap,
 //                                        finalScoreResult, courseTargetDto, dimensionDto, score);
                                 if (i == 0) {//计算各知识点原始卷面分总和
-                                    Double paperScore = paperStructDimensionResult.getScore();
+                                    BigDecimal paperScore = paperStructDimensionResult.getScore();
                                     //目标-考生知识点去重
                                     if (!targetDimensionMap.containsKey(courseTargetDto.getTargetId())) {
                                         Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
@@ -250,7 +250,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                             dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, paperScore));
                                         } else {
                                             DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
-                                            dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, dimensionDtoTemp.getDimensionScore().doubleValue() + paperScore.doubleValue()));
+                                            dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(courseTargetDto.getTargetId(), dimensionDto, dimensionDtoTemp.getDimensionScore().add(paperScore)));
                                         }
                                         targetDimensionMap.put(courseTargetDto.getTargetId(), dimensionMap);
                                     }
@@ -265,17 +265,17 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 targetDimensionMap.forEach((k, v) -> {
                     List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
                     Collections.sort(dimensionDtoList);
-                    Double dimensionScoreSum = dimensionDtoList.stream().mapToDouble(DimensionDto::getDimensionScore).sum();
+                    Double dimensionScoreSum = dimensionDtoList.stream().mapToDouble(s -> s.getDimensionScore().doubleValue()).sum();
                     List<String> dimensionDtoNameList = dimensionDtoList.stream().map(s -> s.getDimensionName()).collect(Collectors.toList());
                     if (finalTargetWordMap.containsKey(k)) {
                         if (Objects.nonNull(finalTargetWordMap.get(k).getFinalScoreDto())) {
                             finalTargetWordMap.get(k).getFinalScoreDto().setDimensionList(dimensionDtoList);
                         }
-                        finalTargetWordMap.get(k).setDimensionScoreSum(dimensionScoreSum);
+                        finalTargetWordMap.get(k).setDimensionScoreSum(new BigDecimal(dimensionScoreSum));
                         finalTargetWordMap.get(k).setDimensionPoint(String.join(",", dimensionDtoNameList));
                     }
                     if (finalTargetWebMap.containsKey(k)) {
-                        finalTargetWebMap.get(k).setDimensionScoreSum(dimensionScoreSum);
+                        finalTargetWebMap.get(k).setDimensionScoreSum(new BigDecimal(dimensionScoreSum));
                         finalTargetWebMap.get(k).setDimensionPoint(String.join(",", dimensionDtoNameList));
                     }
 //                    Map<Long, Map<Long, DimensionDto>> mapExamStudent1 = finalScoreExamStudentDimensionMap.get(finalScoreResult.getStudentCode());
@@ -285,8 +285,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 //                    Map<Long, Double> mapDimension = finalScoreResult.getFinalScoreDimension();
 //                    mapDimension.put(k, score);
 
-                    Map<Long, Double> doubleMap = finalScoreExamStudentTargetMap.get(finalScoreResult.getStudentCode());
-                    Map<Long, Double> mapTarget = finalScoreResult.getFinalScoreTarget();
+                    Map<Long, BigDecimal> doubleMap = finalScoreExamStudentTargetMap.get(finalScoreResult.getStudentCode());
+                    Map<Long, BigDecimal> mapTarget = finalScoreResult.getFinalScoreTarget();
                     mapTarget.put(k, doubleMap.get(k));
                 });
 
@@ -357,7 +357,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     }
                 }
                 for (ReportExamStudentTargetDto r : reportExamStudentTargetAvgDtoList) {
-                    Double targetAvgSumScore = 0.0d;//平均分总和
+                    BigDecimal targetAvgSumScore = new BigDecimal(0);//平均分总和
                     BigDecimal targetSumScore = new BigDecimal(0);//目标分总和
 //                    BigDecimal targetEvaluationValue = new BigDecimal(0);
                     if (targetWebMap.containsKey(r.getTargetId())) {
@@ -375,7 +375,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
                             reportEvaluationDto = reportEvaluationDtoMap.get(reportExamStudentFinalScoreDto.getEvaluationId());
                             reportEvaluationDto.setTargetAvgScore(reportExamStudentFinalScoreDto.getMatrixAvgScore());
-                            targetAvgSumScore = targetAvgSumScore + reportEvaluationDto.getTargetAvgScore();
+                            targetAvgSumScore = targetAvgSumScore.add(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);
@@ -388,7 +388,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
                                 reportEvaluationDto = reportEvaluationDtoMap.get(reportExamStudentUsualScoreObjDto.getEvaluationId());
                                 reportEvaluationDto.setTargetAvgScore(reportExamStudentUsualScoreObjDto.getMatrixAvgScore());
-                                targetAvgSumScore = targetAvgSumScore + reportEvaluationDto.getTargetAvgScore();
+                                targetAvgSumScore = targetAvgSumScore.add(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);
@@ -400,7 +400,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         //目标下各平均分总和/科目目标分
                         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);
+                            targetEvaluationValue = targetEvaluationValueMap.get(r.getTargetId()).divide(new BigDecimal(targetEvaluationValueSizeMap.get(r.getTargetId())), 4, 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);
@@ -449,9 +449,9 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         Objects.requireNonNull(basicProfessional, "未找到专业信息");
         Double expectValue = obeCourseWeightResult.getSubmitForm().get(0).getExpectValue();
         if (Objects.isNull(trBasicInfo)) {
-            trBasicInfo = new TRBasicInfo(cultureProgramId, courseId, markPaper.getCourseCode(), markPaper.getCourseName(), markPaper.getPaperNumber(), basicSemester.getName(), teachingObject, teacher, null, userId, basicProfessional.getName(), Objects.nonNull(trBasicInfo) ? trBasicInfo.getFinishPoints() : null, Objects.nonNull(trBasicInfo) ? trBasicInfo.getRequirementPoints() : null, Objects.nonNull(trBasicInfo) ? trBasicInfo.getCourseSuggest() : null, expectValue, Objects.nonNull(trBasicInfo) ? trBasicInfo.getCourseEnName() : null);
+            trBasicInfo = new TRBasicInfo(cultureProgramId, courseId, markPaper.getCourseCode(), markPaper.getCourseName(), markPaper.getPaperNumber(), basicSemester.getName(), teachingObject, teacher, null, userId, basicProfessional.getName(), Objects.nonNull(trBasicInfo) ? trBasicInfo.getFinishPoints() : null, Objects.nonNull(trBasicInfo) ? trBasicInfo.getRequirementPoints() : null, Objects.nonNull(trBasicInfo) ? trBasicInfo.getCourseSuggest() : null, new BigDecimal(expectValue), Objects.nonNull(trBasicInfo) ? trBasicInfo.getCourseEnName() : null);
         } else {
-            trBasicInfo.setBasicInfo(markPaper.getExamId(), markPaper.getCourseCode(), markPaper.getCourseName(), markPaper.getPaperNumber(), basicSemester.getName(), teachingObject, teacher, null, cultureProgramId, courseId, expectValue, basicProfessional.getName(), trBasicInfo.getCourseEnName(), trBasicInfo.getCollege(), trBasicInfo.getFinishPoints(), trBasicInfo.getRequirementPoints(), trBasicInfo.getCourseSuggest());
+            trBasicInfo.setBasicInfo(markPaper.getExamId(), markPaper.getCourseCode(), markPaper.getCourseName(), markPaper.getPaperNumber(), basicSemester.getName(), teachingObject, teacher, null, cultureProgramId, courseId, new BigDecimal(expectValue), basicProfessional.getName(), trBasicInfo.getCourseEnName(), trBasicInfo.getCollege(), trBasicInfo.getFinishPoints(), trBasicInfo.getRequirementPoints(), trBasicInfo.getCourseSuggest());
         }
         //课程基本情况
         ReportCourseBasicInfoDto reportCourseBasicInfoDto = new ReportCourseBasicInfoDto(trBasicInfo);
@@ -841,7 +841,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 examStudent_cells_2.add(Cells.of("综合成绩").center().create());
             }
 
-            List<Double> scoreList = new ArrayList<>();
+            List<BigDecimal> scoreList = new ArrayList<>();
             for (int i = 0; i < trExamStudentList.size(); i++) {
                 TRExamStudent trExamStudent = trExamStudentList.get(i);
                 RowRenderData examStudent_row = new RowRenderData();
@@ -889,7 +889,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 //                                            break;
                                         case "平均分":
                                             examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentUsualScoreObjDto.getMatrixAvgScore())).create());
-                                            targetAvgScore = targetAvgScore.add(new BigDecimal(reportExamStudentUsualScoreObjDto.getMatrixAvgScore()));
+                                            targetAvgScore = targetAvgScore.add(reportExamStudentUsualScoreObjDto.getMatrixAvgScore());
                                             break;
                                         case "各课程目标平均分":
                                             examStudent_cells.add(Cells.of(targetCourseDegreeMap.get(reportExamStudentTargetDto.getTargetId()) + "").create());
@@ -911,7 +911,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 //                                        break;
                                     case "平均分":
                                         examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getMatrixAvgScore())).create());
-                                        targetAvgScore = targetAvgScore.add(new BigDecimal(reportExamStudentFinalScoreDto.getMatrixAvgScore()));
+                                        targetAvgScore = targetAvgScore.add(reportExamStudentFinalScoreDto.getMatrixAvgScore());
                                         break;
                                     case "各课程目标平均分":
                                         examStudent_cells.add(Cells.of(targetCourseDegreeMap.get(reportExamStudentTargetDto.getTargetId()) + "").create());
@@ -929,7 +929,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 //                        examStudent_cells.add(Cells.of(SystemConstant.df.format(targetSumScore.setScale(2, BigDecimal.ROUND_HALF_UP))).create());
 //                        break;
                     case "平均分":
-                        examStudent_cells.add(Cells.of(SystemConstant.df.format(targetAvgScore.setScale(1, BigDecimal.ROUND_DOWN))).create());
+                        examStudent_cells.add(Cells.of(SystemConstant.df.format(targetAvgScore.setScale(2, BigDecimal.ROUND_HALF_UP))).create());
                         break;
                     case "各课程目标平均分":
                         examStudent_cells.add(Cells.of("").create());
@@ -1000,10 +1000,10 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 Integer[] scoreSizes = new Integer[]{0, 0, 0, 0, 0};
                 BigDecimal[] scorePercent = new BigDecimal[]{new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0), new BigDecimal(0)};
                 Map<String, Object> map = new HashMap<>();
-                Double maxScore = scoreList.stream().mapToDouble(s -> s).max().orElse(0.0d);
-                Double minScore = scoreList.stream().mapToDouble(s -> s).min().orElse(0.0d);
-                Double avgScore = scoreList.stream().mapToDouble(s -> s).average().orElse(0.0d);
-                for (Double d : scoreList) {
+                Double maxScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).max().orElse(0.0d);
+                Double minScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).min().orElse(0.0d);
+                Double avgScore = scoreList.stream().mapToDouble(s -> s.doubleValue()).average().orElse(0.0d);
+                for (BigDecimal d : scoreList) {
                     if (d.doubleValue() <= 100 && d.doubleValue() >= 90) {
                         scoreSizes[0] = scoreSizes[0] + 1;
                     } else if (d.doubleValue() <= 89 && d.doubleValue() >= 80) {
@@ -1017,7 +1017,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     }
                 }
                 for (int i = 0; i < scoreSizes.length; i++) {
-                    scorePercent[i] = new BigDecimal(scoreSizes[i]).divide(new BigDecimal(scoreList.size()), 2, BigDecimal.ROUND_HALF_UP).multiply(SystemConstant.PERCENT).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    scorePercent[i] = new BigDecimal(scoreSizes[i]).divide(new BigDecimal(scoreList.size()), 4, BigDecimal.ROUND_HALF_UP).multiply(SystemConstant.PERCENT).setScale(2, BigDecimal.ROUND_HALF_UP);
                 }
                 map.put("scoreSizes", scoreSizes);
                 map.put("scorePercent", scorePercent);
@@ -1176,7 +1176,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             }.getType());
             for (CourseWeightDto c : obeCourseWeightResult.getSubmitForm()) {
                 Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName()))
-                        .mapToDouble(PaperStructDimensionResult::getScore).sum();
+                        .mapToDouble(s -> s.getScore().doubleValue()).sum();
                 Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重");
                 ////                Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
                 //                if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
@@ -1351,21 +1351,21 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      * @param courseTargetDto
      * @param score
      */
-    protected void calculateFinalScoreByTargetExamStudent(Map<String, Map<Long, Double>> finalScoreExamStudentTargetMap,
+    protected void calculateFinalScoreByTargetExamStudent(Map<String, Map<Long, BigDecimal>> finalScoreExamStudentTargetMap,
                                                           FinalScoreResult finalScoreResult,
                                                           CourseTargetWebDto courseTargetDto,
-                                                          Double score) {
+                                                          BigDecimal score) {
         if (!finalScoreExamStudentTargetMap.containsKey(finalScoreResult.getStudentCode())) {
-            Map<Long, Double> map = new LinkedHashMap<>();
+            Map<Long, BigDecimal> map = new LinkedHashMap<>();
             map.put(courseTargetDto.getTargetId(), score);
             finalScoreExamStudentTargetMap.put(finalScoreResult.getStudentCode(), map);
         } else {
-            Map<Long, Double> map = finalScoreExamStudentTargetMap.get(finalScoreResult.getStudentCode());
+            Map<Long, BigDecimal> map = finalScoreExamStudentTargetMap.get(finalScoreResult.getStudentCode());
             if (!map.containsKey(courseTargetDto.getTargetId())) {
                 map.put(courseTargetDto.getTargetId(), score);
             } else {
-                Double scoreTemp = map.get(courseTargetDto.getTargetId());
-                map.put(courseTargetDto.getTargetId(), scoreTemp.doubleValue() + score.doubleValue());
+                BigDecimal scoreTemp = map.get(courseTargetDto.getTargetId());
+                map.put(courseTargetDto.getTargetId(), scoreTemp.add(score));
             }
             finalScoreExamStudentTargetMap.put(finalScoreResult.getStudentCode(), map);
         }
@@ -1391,12 +1391,12 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 ReportEvaluationDto reportEvaluationDto = usualScoreMap.get(t.getName());
                 List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = !scoreListMap.containsKey(reportEvaluationDto.getTargetId()) ? new ArrayList<>() : scoreListMap.get(reportEvaluationDto.getTargetId());
                 //计算平时作业转换
-                Double score = Objects.nonNull(t.getScore()) ? Double.parseDouble(t.getScore()) : 0d;
+                BigDecimal score = Objects.nonNull(t.getScore()) ? new BigDecimal(t.getScore()) : new BigDecimal(0);
                 CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
                 UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
                 //old平时作业换算:分数/100*作业目标分
                 //new平时作业换算:分数/作业目标分
-                Double matrixScore = new BigDecimal(score).divide(reportEvaluationDto.getTargetScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetWeight()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                BigDecimal matrixScore = score.divide(reportEvaluationDto.getTargetScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
                 reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumScore()));
                 scoreListMap.put(reportEvaluationDto.getTargetId(), reportExamStudentUsualScoreObjDtoList);
             }
@@ -1424,7 +1424,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         int count = tcFinalScoreService.getCountByScoreRange(examId, courseCode, paperNumber, cultureProgramId, courseId, start, end);
         Double rate = null;
         if (toltal != 0) {
-            rate = new BigDecimal(count).divide(new BigDecimal(toltal), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).multiply(SystemConstant.PERCENT).doubleValue();
+            rate = new BigDecimal(count).divide(new BigDecimal(toltal), 4, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).multiply(SystemConstant.PERCENT).doubleValue();
         }
         return new ScoreRangeVo(count, start, end, rate);
     }

+ 38 - 39
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java

@@ -63,14 +63,14 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         List<ReportExamStudentDto> examStudentList = (List<ReportExamStudentDto>) paramsMap.get("examStudentList");
 //        Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = (Map<String, Map<Long, Map<Long, DimensionDto>>>) paramsMap.get("finalScoreExamStudentDimensionMap");
         Map<String, FinalScoreResult> finalScoreResultMap = (Map<String, FinalScoreResult>) paramsMap.get("finalScoreResultMap");
-        Map<String, Map<Long, Double>> finalScoreExamStudentTargetMap = (Map<String, Map<Long, Double>>) paramsMap.get("finalScoreExamStudentTargetMap");
+        Map<String, Map<Long, BigDecimal>> finalScoreExamStudentTargetMap = (Map<String, Map<Long, BigDecimal>>) paramsMap.get("finalScoreExamStudentTargetMap");
         Map<Long, CourseTargetWordDto> targetWordMap = (Map<Long, CourseTargetWordDto>) paramsMap.get("targetWordMap");
         if (!CollectionUtils.isEmpty(examStudentList)) {
             List<TRExamStudent> trExamStudentList = new ArrayList<>(examStudentList.size());
             Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap = new LinkedHashMap<>();
             for (ReportExamStudentDto reportExamStudentDto : examStudentList) {
 //                Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
-                Map<Long, Double> map = finalScoreExamStudentTargetMap.get(reportExamStudentDto.getStudentCode());
+                Map<Long, BigDecimal> map = finalScoreExamStudentTargetMap.get(reportExamStudentDto.getStudentCode());
                 FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
                 ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto = finalScoreResult.getUsualScoreDto();
                 map.forEach((k, v) -> {
@@ -87,36 +87,35 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                         BigDecimal targetMatrixSumScore = new BigDecimal(0);
                         AtomicReference<BigDecimal> matrixDegree = new AtomicReference<>(new BigDecimal(0));
                         if (!reportExamStudentTargetDtoMap.containsKey(k)) {
-                            Double targetMatrixScore = 0.0d;
+                            BigDecimal targetMatrixScore = new BigDecimal(0);
                             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).divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).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);
+                                targetMatrixScore = v.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal targetEvaluationValue = v.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 4, 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);
+//                            targetMatrixSumScore = targetMatrixSumScore.add(targetMatrixScore).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            targetMatrixSumScore = targetMatrixSumScore.add(targetMatrixScore);
+                            reportExamStudentDto.setScore(reportExamStudentDto.getScore().add(targetMatrixScore));
 
                             if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
-                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
+                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore);
                             }
                             ReportExamStudentTargetDto reportExamStudentTargetDto = null;
                             //平时作业总和+累加
                             if (!CollectionUtils.isEmpty(scoreObjDtoList)) {
                                 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);
+                                    BigDecimal targetEvaluationValue = r.getScore().divide(r.getTargetScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(r.getTargetWeight().divide(courseTargetWordDto.getTargetSumWeight(), 4, 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);
+                                Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(s -> s.getMatrixScore().doubleValue()).sum();
+                                reportExamStudentDto.setScore(reportExamStudentDto.getScore().add(new BigDecimal(usualMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP)));
                                 ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = null;
                                 if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
-                                    reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), targetMatrixSumScore.doubleValue(), finalScoreResult.getFinalScoreTarget().get(k));
+                                    reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), targetMatrixSumScore, finalScoreResult.getFinalScoreTarget().get(k));
                                 }
 //                                ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
                                 reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())), matrixDegree.get());
@@ -127,22 +126,23 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                         } else {
                             ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
                             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = null;
-                            Double targetMatrixScore = 0.0d;
+                            BigDecimal targetMatrixScore = new BigDecimal(0);
                             if (Objects.nonNull(reportExamStudentTargetDto.getFinalScore())) {
                                 reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
-                                targetMatrixScore = new BigDecimal(v).divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                targetMatrixScore = v.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
 
-                                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);
+                                BigDecimal targetEvaluationValue = v.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 4, 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);
+//                            targetMatrixSumScore = targetMatrixSumScore.add(targetMatrixScore).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            targetMatrixSumScore = targetMatrixSumScore.add(targetMatrixScore);
+                            reportExamStudentDto.setScore(reportExamStudentDto.getScore().add(targetMatrixScore));
 
                             if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
-                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
-                                reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(targetMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore);
+//                                reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore().add(targetMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP));
+                                reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore().add(targetMatrixSumScore));
                             }
                             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
 
@@ -152,11 +152,11 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                                 List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjAvgDtoList = reportExamStudentUsualScoreAvgDto.getScoreList();
                                 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);
+                                    reportExamStudentDto.setScore(reportExamStudentDto.getScore().add(reportExamStudentUsualScoreObjDto.getMatrixScore()));
+//                                    BigDecimal bigDecimal = reportExamStudentUsualScoreObjDto.getScore().setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    BigDecimal targetEvaluationValue = reportExamStudentUsualScoreObjDto.getScore().divide(reportExamStudentUsualScoreObjDto.getTargetScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(reportExamStudentUsualScoreObjDto.getTargetWeight().divide(courseTargetWordDto.getTargetSumWeight(), 4, 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());
+                                    reportExamStudentUsualScoreObjAvgDtoList.get(i).setMatrixScore(reportExamStudentUsualScoreObjAvgDtoList.get(i).getMatrixScore().add(reportExamStudentUsualScoreObjDto.getMatrixScore()));
                                 }
                             }
                             reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
@@ -165,24 +165,24 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                     }
                     reportExamStudentDto.setTargetList(targetList);
                 });
-                reportExamStudentDto.setScore(new BigDecimal(reportExamStudentDto.getScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
+                reportExamStudentDto.setScore(reportExamStudentDto.getScore().setScale(2, BigDecimal.ROUND_HALF_UP));
                 Collections.sort(reportExamStudentDto.getTargetList());
                 trExamStudentList.add(new TRExamStudent(trBasicInfo.getId(), reportExamStudentDto));
             }
             //加入目标分&平均分&各课程目标平均分
             BigDecimal size = new BigDecimal(examStudentList.size());
             List<ReportExamStudentTargetDto> targetDtoList = this.targetDtoParams(reportExamStudentTargetDtoMap, size);
-            AtomicReference<Double> targetScoreSum = new AtomicReference<>(0.0d);
-            AtomicReference<Double> usualScoreSum = new AtomicReference<>(0.0d);
+            AtomicReference<BigDecimal> targetScoreSum = new AtomicReference<>(new BigDecimal(0));
+            AtomicReference<BigDecimal> usualScoreSum = new AtomicReference<>(new BigDecimal(0));
             targetDtoList.stream().peek(e -> {
-                targetScoreSum.set(targetScoreSum.get() + (Objects.nonNull(e.getFinalScore()) ? e.getFinalScore().getMatrixAvgScore() : 0.0d));
+                targetScoreSum.set(targetScoreSum.get().add((Objects.nonNull(e.getFinalScore()) ? e.getFinalScore().getMatrixAvgScore() : new BigDecimal(0))));
                 if (Objects.nonNull(e.getUsualScore()) && !CollectionUtils.isEmpty(e.getUsualScore().getScoreList())) {
-                    usualScoreSum.set(usualScoreSum.get() + e.getUsualScore().getScoreList().stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixAvgScore).sum());
+                    usualScoreSum.set(usualScoreSum.get().add(new BigDecimal(e.getUsualScore().getScoreList().stream().mapToDouble(s -> s.getMatrixAvgScore().doubleValue()).sum())).setScale(2, BigDecimal.ROUND_HALF_UP));
                 }
             }).collect(Collectors.toList());
 
-            Double score = new BigDecimal(targetScoreSum.get()).add(new BigDecimal(usualScoreSum.get())).setScale(1, BigDecimal.ROUND_DOWN).doubleValue();
-            ReportExamStudentDto reportExamStudentTargetDto = new ReportExamStudentDto("目标分", "目标分", null, 100.d, targetDtoList);
+            BigDecimal score = targetScoreSum.get().add(usualScoreSum.get()).setScale(2, BigDecimal.ROUND_HALF_UP);
+            ReportExamStudentDto reportExamStudentTargetDto = new ReportExamStudentDto("目标分", "目标分", null, SystemConstant.PERCENT, targetDtoList);
             ReportExamStudentDto reportExamStudentAvgDto = new ReportExamStudentDto("平均分", "平均分", null, score, targetDtoList);
             ReportExamStudentDto reportExamStudentTargetAvgDto = new ReportExamStudentDto("各课程目标平均分", "各课程目标平均分", null, null, targetDtoList);
 
@@ -422,20 +422,19 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         reportExamStudentTargetDtoMap.forEach((k, v) -> {
             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
             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());
-
+                BigDecimal matrixAvgScore = reportExamStudentFinalScoreDto.getTargetMatrixSumScore().divide(size, 4, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+                reportExamStudentFinalScoreDto.setMatrixAvgScore(matrixAvgScore);
                 v.setTargetMatrixAvgScore(reportExamStudentFinalScoreDto.getMatrixAvgScore());
             }
             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = v.getUsualScore();
             if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
                 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(Objects.nonNull(v.getTargetMatrixAvgScore()) ? v.getTargetMatrixAvgScore() : 0.0d + r.getMatrixAvgScore());
+                    r.setMatrixAvgScore(r.getMatrixScore().divide(size, 4, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP));
+                    v.setTargetMatrixAvgScore(Objects.nonNull(v.getTargetMatrixAvgScore()) ? v.getTargetMatrixAvgScore() : new BigDecimal(0).add(r.getMatrixAvgScore()));
                 }
             }
-            v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
+            v.setTargetMatrixAvgScore(v.getTargetMatrixAvgScore().setScale(2, BigDecimal.ROUND_HALF_UP));
             targetDtoList.add(v);
         });
         Collections.sort(targetDtoList);

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

@@ -39,6 +39,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -162,7 +163,7 @@ public class TCPaperStructController {
                 }
             }
             List<PaperStructDimensionResult> paperStructDimensionResultList = paperStructParams.getPaperStruct();
-            Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum();
+            Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(s->s.getScore().doubleValue()).sum();
             Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重");
 //            Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
 //            if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
@@ -170,7 +171,7 @@ public class TCPaperStructController {
 //            }
             paperStructDimensionResultList.stream().filter(s -> {
                 if (Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())) {
-                    s.getTargetList().stream().peek(e -> e.setFinalScoreQuestionScoreSum(score)).collect(Collectors.toList());
+                    s.getTargetList().stream().peek(e -> e.setFinalScoreQuestionScoreSum(new BigDecimal(score))).collect(Collectors.toList());
                     return true;
                 }
                 return false;
@@ -214,7 +215,7 @@ public class TCPaperStructController {
             }
             paperStructDimensionResultList = new ArrayList<>(markQuestionList.size());
             for (MarkQuestion markQuestion : markQuestionList) {
-                paperStructDimensionResultList.add(new PaperStructDimensionResult(markQuestion.getMainNumber(), markQuestion.getSubNumber(), markQuestion.getPaperNumber(), markQuestion.getTotalScore()));
+                paperStructDimensionResultList.add(new PaperStructDimensionResult(markQuestion.getMainNumber(), markQuestion.getSubNumber(), markQuestion.getPaperNumber(), new BigDecimal(markQuestion.getTotalScore())));
             }
         } else {
             ObeCourseWeightResult obeCourseWeightResult = trBasicInfoService.findCourseWeightResultRmi(obeCourseOutline.getId());
@@ -246,7 +247,7 @@ public class TCPaperStructController {
             }.getType());
             paperStructDimensionResultList = new ArrayList<>(paperStructDtoList.size());
             for (PaperStructDto paperStructDto : paperStructDtoList) {
-                paperStructDimensionResultList.add(new PaperStructDimensionResult(paperStructDto.getMainNumber(), paperStructDto.getSubNumber(), tcPaperStruct.getPaperNumber(), paperStructDto.getScore()));
+                paperStructDimensionResultList.add(new PaperStructDimensionResult(paperStructDto.getMainNumber(), paperStructDto.getSubNumber(), tcPaperStruct.getPaperNumber(), new BigDecimal(paperStructDto.getScore())));
             }
         }
         return paperStructDimensionResultList;

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

@@ -236,7 +236,7 @@ public class TRBasicInfoController {
                 List<PaperStructDimensionResult> paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken<List<PaperStructDimensionResult>>() {
                 }.getType());
                 for (CourseWeightDto c : obeCourseWeightResult.getSubmitForm()) {
-                    Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum();
+                    Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(s -> s.getScore().doubleValue()).sum();
                     Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重");
 //                    Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值");
 //                    if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) {
@@ -389,7 +389,7 @@ public class TRBasicInfoController {
                     }.getType());
                     StringJoiner stringJoiner = new StringJoiner("");
                     for (CourseWeightDto c : courseWeightDtoList) {
-                        Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum();
+                        Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(s -> s.getScore().doubleValue()).sum();
                         if (Objects.isNull(c.getTotalWeight())) {
                             reportChangeResult.setTargetScoreChange(true);
                             stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("未设置权重").add("\r\n");