浏览代码

报告调整

wangliang 1 年之前
父节点
当前提交
0131032a64
共有 15 个文件被更改,包括 314 次插入116 次删除
  1. 5 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetWebDto.java
  2. 6 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/CourseTargetWordDto.java
  3. 53 12
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/report/ReportExamStudentFinalScoreDto.java
  4. 16 5
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/FinalScoreResult.java
  5. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCFinalScoreServiceImpl.java
  6. 7 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCPaperStructServiceImpl.java
  7. 2 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TCUsualScoreServiceImpl.java
  8. 56 23
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRBasicInfoServiceImpl.java
  9. 126 36
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java
  10. 3 3
      distributed-print-business/src/main/resources/mapper/TCFinalScoreMapper.xml
  11. 8 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCFinalScoreController.java
  12. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCPaperStructController.java
  13. 14 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/TCUsualScoreController.java
  14. 11 11
      distributed-print/src/main/resources/application.properties
  15. 3 8
      teachcloud-task/src/main/resources/application.properties

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

@@ -56,7 +56,7 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
     private String dimensionPoint;
     private String dimensionPoint;
 
 
     @ApiModelProperty(value = "小题卷面总分")
     @ApiModelProperty(value = "小题卷面总分")
-    private Double questionScoreSum = 0.0d;
+    private Double finalScoreQuestionScoreSum = 0.0d;
 
 
     public CourseTargetWebDto() {
     public CourseTargetWebDto() {
 
 
@@ -71,12 +71,12 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
         this.targetSumScore = courseWeightDto.getTotalScore();
         this.targetSumScore = courseWeightDto.getTotalScore();
     }
     }
 
 
-    public Double getQuestionScoreSum() {
-        return questionScoreSum;
+    public Double getFinalScoreQuestionScoreSum() {
+        return finalScoreQuestionScoreSum;
     }
     }
 
 
-    public void setQuestionScoreSum(Double questionScoreSum) {
-        this.questionScoreSum = questionScoreSum;
+    public void setFinalScoreQuestionScoreSum(Double finalScoreQuestionScoreSum) {
+        this.finalScoreQuestionScoreSum = finalScoreQuestionScoreSum;
     }
     }
 
 
     public String getDimensionPoint() {
     public String getDimensionPoint() {

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

@@ -57,8 +57,8 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
     @ApiModelProperty(value = "知识点集合")
     @ApiModelProperty(value = "知识点集合")
     private String dimensionPoint;
     private String dimensionPoint;
 
 
-    @ApiModelProperty(value = "小题卷面总分")
-    private Double questionScoreSum = 0.0d;
+    @ApiModelProperty(value = "期末成绩小题卷面总分")
+    private Double finalScoreQuestionScoreSum = 0.0d;
 
 
     public CourseTargetWordDto() {
     public CourseTargetWordDto() {
 
 
@@ -73,12 +73,12 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
         this.targetSumWeight = courseWeightDto.getTotalWeight();
         this.targetSumWeight = courseWeightDto.getTotalWeight();
     }
     }
 
 
-    public Double getQuestionScoreSum() {
-        return questionScoreSum;
+    public Double getFinalScoreQuestionScoreSum() {
+        return finalScoreQuestionScoreSum;
     }
     }
 
 
-    public void setQuestionScoreSum(Double questionScoreSum) {
-        this.questionScoreSum = questionScoreSum;
+    public void setFinalScoreQuestionScoreSum(Double finalScoreQuestionScoreSum) {
+        this.finalScoreQuestionScoreSum = finalScoreQuestionScoreSum;
     }
     }
 
 
     public String getDimensionPoint() {
     public String getDimensionPoint() {

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

@@ -35,8 +35,8 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
     @ApiModelProperty(value = "目标分值")
     @ApiModelProperty(value = "目标分值")
     private BigDecimal targetScore;
     private BigDecimal targetScore;
 
 
-    @ApiModelProperty(value = "课程目标转换总分")
-    private Double targetMatrixSumScore;
+    @ApiModelProperty(value = "课程目标知识点转换总分")
+    private Double targetDimensionMatrixSumScore;
 
 
     @ApiModelProperty(value = "课程目标集合")
     @ApiModelProperty(value = "课程目标集合")
     private List<DimensionDto> dimensionList;
     private List<DimensionDto> dimensionList;
@@ -44,40 +44,81 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
     @ApiModelProperty(value = "课程目标考核要素的平均分")
     @ApiModelProperty(value = "课程目标考核要素的平均分")
     private Double matrixAvgScore;
     private Double matrixAvgScore;
 
 
-    @ApiModelProperty(value = "卷面分")
-    private Double score;
+    @ApiModelProperty(value = "知识点卷面总分")
+    private Double dimensionScoreSum;
+
+    @ApiModelProperty(value = "课程卷面总分")
+    private Double targetScoreSum;
+
+    @ApiModelProperty(value = "课程目标转换总分")
+    private Double targetMatrixSumScore;
 
 
     public ReportExamStudentFinalScoreDto() {
     public ReportExamStudentFinalScoreDto() {
 
 
     }
     }
 
 
-    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double score) {
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double dimensionScoreSum) {
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
         this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
         this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
         this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
         this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
         this.dimensionList = dimensionList;
         this.dimensionList = dimensionList;
-        this.score = score;
+        this.dimensionScoreSum = dimensionScoreSum;
     }
     }
 
 
-    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double targetMatrixSumScore, Double score) {
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double targetDimensionMatrixSumScore, Double dimensionScoreSum) {
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
         this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
         this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
         this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
         this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
         this.dimensionList = dimensionList;
         this.dimensionList = dimensionList;
+        this.targetDimensionMatrixSumScore = targetDimensionMatrixSumScore;
+        this.dimensionScoreSum = dimensionScoreSum;
+    }
+
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, Double targetScoreSum) {
+        this.evaluationId = finalScoreWordDto.getEvaluationId();
+        this.evaluation = finalScoreWordDto.getEvaluation();
+        this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
+        this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
+        this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
+        this.targetScoreSum = targetScoreSum;
+    }
+
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, Double targetMatrixSumScore, Double targetScoreSum) {
+        this.evaluationId = finalScoreWordDto.getEvaluationId();
+        this.evaluation = finalScoreWordDto.getEvaluation();
+        this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
+        this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
+        this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
         this.targetMatrixSumScore = targetMatrixSumScore;
         this.targetMatrixSumScore = targetMatrixSumScore;
-        this.score = score;
+        this.targetScoreSum = targetScoreSum;
+    }
+
+    public Double getTargetDimensionMatrixSumScore() {
+        return targetDimensionMatrixSumScore;
+    }
+
+    public void setTargetDimensionMatrixSumScore(Double targetDimensionMatrixSumScore) {
+        this.targetDimensionMatrixSumScore = targetDimensionMatrixSumScore;
+    }
+
+    public Double getDimensionScoreSum() {
+        return dimensionScoreSum;
+    }
+
+    public void setDimensionScoreSum(Double dimensionScoreSum) {
+        this.dimensionScoreSum = dimensionScoreSum;
     }
     }
 
 
-    public Double getScore() {
-        return score;
+    public Double getTargetScoreSum() {
+        return targetScoreSum;
     }
     }
 
 
-    public void setScore(Double score) {
-        this.score = score;
+    public void setTargetScoreSum(Double targetScoreSum) {
+        this.targetScoreSum = targetScoreSum;
     }
     }
 
 
     public Double getTargetMatrixSumScore() {
     public Double getTargetMatrixSumScore() {

+ 16 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/result/FinalScoreResult.java

@@ -27,7 +27,10 @@ public class FinalScoreResult implements Serializable {
     private String administrativeClass;
     private String administrativeClass;
 
 
     @ApiModelProperty(value = "期末考试分数")
     @ApiModelProperty(value = "期末考试分数")
-    private Map<Long, Double> finalScore = new LinkedHashMap<>();
+    private Map<Long, Double> finalScoreDimension = new LinkedHashMap<>();
+
+    @ApiModelProperty(value = "期末考试分数")
+    private Map<Long, Double> finalScoreTarget = new LinkedHashMap<>();
 
 
     @ApiModelProperty(value = "期末考试分数明细")
     @ApiModelProperty(value = "期末考试分数明细")
     private String finalScoreDetail;
     private String finalScoreDetail;
@@ -89,12 +92,20 @@ public class FinalScoreResult implements Serializable {
         this.studentCode = studentCode;
         this.studentCode = studentCode;
     }
     }
 
 
-    public Map<Long, Double> getFinalScore() {
-        return finalScore;
+    public Map<Long, Double> getFinalScoreDimension() {
+        return finalScoreDimension;
+    }
+
+    public void setFinalScoreDimension(Map<Long, Double> finalScoreDimension) {
+        this.finalScoreDimension = finalScoreDimension;
+    }
+
+    public Map<Long, Double> getFinalScoreTarget() {
+        return finalScoreTarget;
     }
     }
 
 
-    public void setFinalScore(Map<Long, Double> finalScore) {
-        this.finalScore = finalScore;
+    public void setFinalScoreTarget(Map<Long, Double> finalScoreTarget) {
+        this.finalScoreTarget = finalScoreTarget;
     }
     }
 
 
     public String getUsualScore() {
     public String getUsualScore() {

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

@@ -87,8 +87,8 @@ public class TCFinalScoreServiceImpl extends ServiceImpl<TCFinalScoreMapper, TCF
         Map<String, String> messageMap = new LinkedHashMap<>();
         Map<String, String> messageMap = new LinkedHashMap<>();
         try {
         try {
             MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
             MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
-            Double totalScore = markPaper.getTotalScore();
-            Objects.requireNonNull(totalScore, "试卷满分为空");
+            Double totalScore = 100d;
+//            Objects.requireNonNull(totalScore, "试卷满分为空");
 
 
             StringJoiner errorData = new StringJoiner("");
             StringJoiner errorData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");

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

@@ -8,6 +8,7 @@ import com.qmth.boot.tools.excel.enums.ExcelType;
 import com.qmth.distributed.print.business.bean.excel.PaperStructDto;
 import com.qmth.distributed.print.business.bean.excel.PaperStructDto;
 import com.qmth.distributed.print.business.entity.TCPaperStruct;
 import com.qmth.distributed.print.business.entity.TCPaperStruct;
 import com.qmth.distributed.print.business.mapper.TCPaperStructMapper;
 import com.qmth.distributed.print.business.mapper.TCPaperStructMapper;
+import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.TCFinalScoreService;
 import com.qmth.distributed.print.business.service.TCFinalScoreService;
 import com.qmth.distributed.print.business.service.TCPaperStructService;
 import com.qmth.distributed.print.business.service.TCPaperStructService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
@@ -18,6 +19,7 @@ import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
 import com.qmth.teachcloud.common.util.JacksonUtil;
 import com.qmth.teachcloud.common.util.JacksonUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.mark.entity.MarkPaper;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -51,6 +53,9 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
     @Resource
     @Resource
     TRBasicInfoService trBasicInfoService;
     TRBasicInfoService trBasicInfoService;
 
 
+    @Resource
+    PrintCommonService printCommonService;
+
     /**
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
      * 根据考试id/课程编码/试卷编码查询数据库数据
      *
      *
@@ -86,6 +91,7 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
         long start = System.currentTimeMillis();
         long start = System.currentTimeMillis();
         Map<String, String> messageMap = new LinkedHashMap<>();
         Map<String, String> messageMap = new LinkedHashMap<>();
         try {
         try {
+            MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
             StringJoiner errorData = new StringJoiner("");
             StringJoiner errorData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");
 
 
@@ -139,7 +145,7 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
                 }
                 }
                 if (!CollectionUtils.isEmpty(paperStructDtoNewList)) {
                 if (!CollectionUtils.isEmpty(paperStructDtoNewList)) {
                     successData.add("共导入").add(paperStructDtoNewList.size() + "").add("条数据");
                     successData.add("共导入").add(paperStructDtoNewList.size() + "").add("条数据");
-                    TCPaperStruct tcPaperStruct = new TCPaperStruct(examId, courseCode, null, paperNumber, JacksonUtil.parseJson(paperStructDtoNewList), totalScore, 60d, sysUser.getId());
+                    TCPaperStruct tcPaperStruct = new TCPaperStruct(examId, courseCode, markPaper.getCourseName(), paperNumber, JacksonUtil.parseJson(paperStructDtoNewList), totalScore, 60d, sysUser.getId());
                     TCPaperStruct tcPaperStructDb = tcPaperStructService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber);
                     TCPaperStruct tcPaperStructDb = tcPaperStructService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber);
                     if (Objects.nonNull(tcPaperStructDb) && !tcPaperStructDb.equals(tcPaperStruct)) {
                     if (Objects.nonNull(tcPaperStructDb) && !tcPaperStructDb.equals(tcPaperStruct)) {
                         tcFinalScoreService.remove(examId, courseCode, paperNumber);
                         tcFinalScoreService.remove(examId, courseCode, paperNumber);

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

@@ -72,8 +72,8 @@ public class TCUsualScoreServiceImpl extends ServiceImpl<TCUsualScoreMapper, TCU
         Map<String, String> messageMap = new LinkedHashMap<>();
         Map<String, String> messageMap = new LinkedHashMap<>();
         try {
         try {
             MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
             MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
-            Double totalScore = markPaper.getTotalScore();
-            Objects.requireNonNull(totalScore, "试卷满分为空");
+            Double totalScore = 100d;
+//            Objects.requireNonNull(totalScore, "试卷满分为空");
 
 
             StringJoiner errorData = new StringJoiner("");
             StringJoiner errorData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");

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

@@ -124,7 +124,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             throw ExceptionResultEnum.ERROR.exception("考试数据为空");
             throw ExceptionResultEnum.ERROR.exception("考试数据为空");
         }
         }
 
 
-        Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = new LinkedHashMap<>();//汇总考生课程目标-知识点卷面分(知识点得分用)
+//        Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = new LinkedHashMap<>();//汇总考生课程目标-知识点卷面分(知识点得分用)
+        Map<String, Map<Long, Double>> finalScoreExamStudentTargetMap = new LinkedHashMap<>();//汇总考生课程目标-课程目标卷面分
         Map<Long, Map<Long, DimensionDto>> targetDimensionMap = new LinkedHashMap<>();//课程目标-知识点-卷面分(word报表用)
         Map<Long, Map<Long, DimensionDto>> targetDimensionMap = new LinkedHashMap<>();//课程目标-知识点-卷面分(word报表用)
 
 
         List<ReportExamStudentDto> examStudentList = null;//考生集合
         List<ReportExamStudentDto> examStudentList = null;//考生集合
@@ -144,7 +145,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             weightSettingSign = courseWeightResult.getWeightSettingSign();
             weightSettingSign = courseWeightResult.getWeightSettingSign();
             dimensionSign = courseWeightResult.getDimensionSign();
             dimensionSign = courseWeightResult.getDimensionSign();
 
 
-            BigDecimal bigDecimal = new BigDecimal(100);
             for (CourseWeightDto courseWeightDto : courseWeightDtoList) {
             for (CourseWeightDto courseWeightDto : courseWeightDtoList) {
                 List<CourseWeightDetailDto> courseWeightDetailDtoList = courseWeightDto.getEvaluationList();
                 List<CourseWeightDetailDto> courseWeightDetailDtoList = courseWeightDto.getEvaluationList();
                 CourseTargetWordDto courseTargetWordDto = new CourseTargetWordDto(courseWeightDto);
                 CourseTargetWordDto courseTargetWordDto = new CourseTargetWordDto(courseWeightDto);
@@ -168,8 +168,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             reportEvaluationDtoList.add(reportEvaluationDto);
                             reportEvaluationDtoList.add(reportEvaluationDto);
                         }//非期末考试
                         }//非期末考试
                         else if (courseWeightDetailDto.getEnable() && !Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
                         else if (courseWeightDetailDto.getEnable() && !Objects.equals(courseWeightDetailDto.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) {
-                            BigDecimal usualScoreRealityWeight = usualScoreWordDto.getUsualScoreTargetSumWeight().divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).multiply(courseWeightDetailDto.getWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                            Double originalTargetScore = courseWeightDto.getTotalWeight().multiply(courseWeightDetailDto.getWeight()).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                            BigDecimal usualScoreRealityWeight = usualScoreWordDto.getUsualScoreTargetSumWeight().divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).multiply(courseWeightDetailDto.getWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            Double originalTargetScore = courseWeightDto.getTotalWeight().multiply(courseWeightDetailDto.getWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
                             ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, usualScoreRealityWeight, 0.0d, originalTargetScore);
                             ReportEvaluationDto reportEvaluationDto = new ReportEvaluationDto(courseWeightDto.getCourseTargetId(), courseWeightDetailDto, usualScoreRealityWeight, 0.0d, originalTargetScore);
                             usualScoreTargetSumScore = usualScoreTargetSumScore.add(reportEvaluationDto.getTargetScore());
                             usualScoreTargetSumScore = usualScoreTargetSumScore.add(reportEvaluationDto.getTargetScore());
                             usualScoreDetailList.add(reportEvaluationDto);
                             usualScoreDetailList.add(reportEvaluationDto);
@@ -201,12 +201,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     if (Objects.nonNull(paperStructDimensionResult)) {
                     if (Objects.nonNull(paperStructDimensionResult)) {
                         List<CourseTargetWebDto> courseTargetDtoList = paperStructDimensionResult.getTargetList();
                         List<CourseTargetWebDto> courseTargetDtoList = paperStructDimensionResult.getTargetList();
                         for (CourseTargetWebDto courseTargetDto : courseTargetDtoList) {
                         for (CourseTargetWebDto courseTargetDto : courseTargetDtoList) {
+                            this.calculateFinalScoreByTargetExamStudent(finalScoreExamStudentTargetMap, finalScoreResult, courseTargetDto, score);
                             //知识点-期末考试明细分
                             //知识点-期末考试明细分
                             List<DimensionDto> dimensionDtoList = courseTargetDto.getDimensionList();
                             List<DimensionDto> dimensionDtoList = courseTargetDto.getDimensionList();
                             for (DimensionDto dimensionDto : dimensionDtoList) {
                             for (DimensionDto dimensionDto : dimensionDtoList) {
                                 //考生知识点
                                 //考生知识点
-                                this.calculateFinalScoreByExamStudent(finalScoreExamStudentDimensionMap,
-                                        finalScoreResult, courseTargetDto, dimensionDto, score);
+//                                this.calculateFinalScoreByDimensionExamStudent(finalScoreExamStudentDimensionMap,
+//                                        finalScoreResult, courseTargetDto, dimensionDto, score);
                                 if (i == 0) {//计算各知识点原始卷面分总和
                                 if (i == 0) {//计算各知识点原始卷面分总和
                                     Double paperScore = paperStructDimensionResult.getScore();
                                     Double paperScore = paperStructDimensionResult.getScore();
                                     //目标-考生知识点去重
                                     //目标-考生知识点去重
@@ -246,12 +247,16 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         finalTargetWebMap.get(k).setDimensionScoreSum(dimensionScoreSum);
                         finalTargetWebMap.get(k).setDimensionScoreSum(dimensionScoreSum);
                         finalTargetWebMap.get(k).setDimensionPoint(String.join(",", dimensionDtoNameList));
                         finalTargetWebMap.get(k).setDimensionPoint(String.join(",", dimensionDtoNameList));
                     }
                     }
-                    Map<Long, Map<Long, DimensionDto>> mapExamStudent1 = finalScoreExamStudentDimensionMap.get(finalScoreResult.getStudentCode());
-                    Map<Long, DimensionDto> mapExamStudent2 = mapExamStudent1.get(k);
-                    List<DimensionDto> list = new ArrayList<>(mapExamStudent2.values());
-                    Double score = list.stream().mapToDouble(DimensionDto::getDimensionScore).sum();
-                    Map<Long, Double> map = finalScoreResult.getFinalScore();
-                    map.put(k, score);
+//                    Map<Long, Map<Long, DimensionDto>> mapExamStudent1 = finalScoreExamStudentDimensionMap.get(finalScoreResult.getStudentCode());
+//                    Map<Long, DimensionDto> mapExamStudent2 = mapExamStudent1.get(k);
+//                    List<DimensionDto> list = new ArrayList<>(mapExamStudent2.values());
+//                    Double score = list.stream().mapToDouble(DimensionDto::getDimensionScore).sum();
+//                    Map<Long, Double> mapDimension = finalScoreResult.getFinalScoreDimension();
+//                    mapDimension.put(k, score);
+
+                    Map<Long, Double> doubleMap = finalScoreExamStudentTargetMap.get(finalScoreResult.getStudentCode());
+                    Map<Long, Double> mapTarget = finalScoreResult.getFinalScoreTarget();
+                    mapTarget.put(k, doubleMap.get(k));
                 });
                 });
 
 
                 //解析平时作业分数图
                 //解析平时作业分数图
@@ -263,7 +268,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
 
 
         paramsMap.put("finalScoreResultList", finalScoreResultList);
         paramsMap.put("finalScoreResultList", finalScoreResultList);
         paramsMap.put("usualScoreMap", usualScoreMap);
         paramsMap.put("usualScoreMap", usualScoreMap);
-        paramsMap.put("finalScoreExamStudentDimensionMap", finalScoreExamStudentDimensionMap);
+//        paramsMap.put("finalScoreExamStudentDimensionMap", finalScoreExamStudentDimensionMap);
+        paramsMap.put("finalScoreExamStudentTargetMap", finalScoreExamStudentTargetMap);
         paramsMap.put("examStudentList", examStudentList);
         paramsMap.put("examStudentList", examStudentList);
         paramsMap.put("finalScoreResultMap", finalScoreResultMap);
         paramsMap.put("finalScoreResultMap", finalScoreResultMap);
         paramsMap.put("targetWordMap", targetWordMap);
         paramsMap.put("targetWordMap", targetWordMap);
@@ -619,7 +625,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     }
                     }
                     //期末考试
                     //期末考试
                     ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
                     ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
-                    if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
+                    if (Objects.nonNull(reportExamStudentFinalScoreDto) && Objects.equals(reportExamStudentFinalScoreDto.getEvaluation(), SystemConstant.FINAL_SCORE_STR)) {
                         examStudent_cells_2.add(Cells.of(SystemConstant.FINAL_SCORE_STR).center().create());
                         examStudent_cells_2.add(Cells.of(SystemConstant.FINAL_SCORE_STR).center().create());
                     }
                     }
                 }
                 }
@@ -686,7 +692,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             }
                             }
                             //期末考试
                             //期末考试
                             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
                             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = reportExamStudentTargetDto.getFinalScore();
-                            if (Objects.nonNull(reportExamStudentFinalScoreDto) && !CollectionUtils.isEmpty(reportExamStudentFinalScoreDto.getDimensionList())) {
+                            if (Objects.nonNull(reportExamStudentFinalScoreDto) && Objects.equals(reportExamStudentFinalScoreDto.getEvaluation(), SystemConstant.FINAL_SCORE_STR)) {
                                 courseReportBean.getCourseBasicBean().setFinalScoreWeight(reportExamStudentFinalScoreDto.getTargetWeight());
                                 courseReportBean.getCourseBasicBean().setFinalScoreWeight(reportExamStudentFinalScoreDto.getTargetWeight());
                                 switch (trExamStudent.getName()) {
                                 switch (trExamStudent.getName()) {
                                     case "目标分":
                                     case "目标分":
@@ -701,7 +707,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                         examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentTargetDto.getTargetMatrixAvgScore())).create());
                                         examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentTargetDto.getTargetMatrixAvgScore())).create());
                                         break;
                                         break;
                                     default:
                                     default:
-                                        examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getScore())).create());
+                                        examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getTargetScoreSum())).create());
                                         break;
                                         break;
                                 }
                                 }
                             }
                             }
@@ -928,11 +934,11 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      * @param dimensionDto
      * @param dimensionDto
      * @param score
      * @param score
      */
      */
-    protected void calculateFinalScoreByExamStudent(Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap,
-                                                    FinalScoreResult finalScoreResult,
-                                                    CourseTargetWebDto courseTargetDto,
-                                                    DimensionDto dimensionDto,
-                                                    Double score) {
+    protected void calculateFinalScoreByDimensionExamStudent(Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap,
+                                                             FinalScoreResult finalScoreResult,
+                                                             CourseTargetWebDto courseTargetDto,
+                                                             DimensionDto dimensionDto,
+                                                             Double score) {
         if (!finalScoreExamStudentDimensionMap.containsKey(finalScoreResult.getStudentCode())) {
         if (!finalScoreExamStudentDimensionMap.containsKey(finalScoreResult.getStudentCode())) {
             Map<Long, Map<Long, DimensionDto>> map = new LinkedHashMap<>();
             Map<Long, Map<Long, DimensionDto>> map = new LinkedHashMap<>();
             Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
             Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
@@ -959,6 +965,34 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         }
         }
     }
     }
 
 
+    /**
+     * 计算考生期末成绩课程目标卷面分纬度
+     *
+     * @param finalScoreExamStudentTargetMap
+     * @param finalScoreResult
+     * @param courseTargetDto
+     * @param score
+     */
+    protected void calculateFinalScoreByTargetExamStudent(Map<String, Map<Long, Double>> finalScoreExamStudentTargetMap,
+                                                          FinalScoreResult finalScoreResult,
+                                                          CourseTargetWebDto courseTargetDto,
+                                                          Double score) {
+        if (!finalScoreExamStudentTargetMap.containsKey(finalScoreResult.getStudentCode())) {
+            Map<Long, Double> map = new LinkedHashMap<>();
+            map.put(courseTargetDto.getTargetId(), score);
+            finalScoreExamStudentTargetMap.put(finalScoreResult.getStudentCode(), map);
+        } else {
+            Map<Long, Double> 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());
+            }
+            finalScoreExamStudentTargetMap.put(finalScoreResult.getStudentCode(), map);
+        }
+    }
+
     /**
     /**
      * 计算考生平时成绩
      * 计算考生平时成绩
      *
      *
@@ -970,7 +1004,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
     protected ReportExamStudentUsualScoreDto calculateUsualScoreByExamStudent(FinalScoreResult finalScoreResult,
     protected ReportExamStudentUsualScoreDto calculateUsualScoreByExamStudent(FinalScoreResult finalScoreResult,
                                                                               Map<String, ReportEvaluationDto> usualScoreMap,
                                                                               Map<String, ReportEvaluationDto> usualScoreMap,
                                                                               Map<Long, CourseTargetWordDto> targetWordMap) {
                                                                               Map<Long, CourseTargetWordDto> targetWordMap) {
-        BigDecimal bigDecimal = new BigDecimal(100);
         List<TCUsualScoreDto> tcUsualScoreDtoList = GsonUtil.fromJson(finalScoreResult.getUsualScore(), new TypeToken<List<TCUsualScoreDto>>() {
         List<TCUsualScoreDto> tcUsualScoreDtoList = GsonUtil.fromJson(finalScoreResult.getUsualScore(), new TypeToken<List<TCUsualScoreDto>>() {
         }.getType());
         }.getType());
         Map<Long, List<ReportExamStudentUsualScoreObjDto>> scoreListMap = new LinkedHashMap<>();
         Map<Long, List<ReportExamStudentUsualScoreObjDto>> scoreListMap = new LinkedHashMap<>();
@@ -983,7 +1016,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 Double score = Objects.nonNull(t.getScore()) ? Double.parseDouble(t.getScore()) : 0d;
                 Double score = Objects.nonNull(t.getScore()) ? Double.parseDouble(t.getScore()) : 0d;
                 CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
                 CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
                 UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
                 UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
-                Double matrixScore = new BigDecimal(score).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                Double matrixScore = new BigDecimal(score).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
                 reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumWeight(), usualScoreWordDto.getUsualScoreTargetSumScore()));
                 reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumWeight(), usualScoreWordDto.getUsualScoreTargetSumScore()));
                 scoreListMap.put(reportEvaluationDto.getTargetId(), reportExamStudentUsualScoreObjDtoList);
                 scoreListMap.put(reportEvaluationDto.getTargetId(), reportExamStudentUsualScoreObjDtoList);
             }
             }

+ 126 - 36
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java

@@ -9,7 +9,7 @@ import com.qmth.distributed.print.business.entity.TRExamStudent;
 import com.qmth.distributed.print.business.mapper.TRExamStudentMapper;
 import com.qmth.distributed.print.business.mapper.TRExamStudentMapper;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
 import com.qmth.distributed.print.business.service.TRBasicInfoService;
 import com.qmth.distributed.print.business.service.TRExamStudentService;
 import com.qmth.distributed.print.business.service.TRExamStudentService;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.contant.SystemConstant;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -51,59 +51,47 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
     @Transactional
     @Transactional
     public List<ReportExamStudentDto> getExamStudentReportDetail(TRBasicInfo trBasicInfo, Map<String, Object> paramsMap) {
     public List<ReportExamStudentDto> getExamStudentReportDetail(TRBasicInfo trBasicInfo, Map<String, Object> paramsMap) {
         List<ReportExamStudentDto> examStudentList = (List<ReportExamStudentDto>) paramsMap.get("examStudentList");
         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, 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, FinalScoreResult> finalScoreResultMap = (Map<String, FinalScoreResult>) paramsMap.get("finalScoreResultMap");
+        Map<String, Map<Long, Double>> finalScoreExamStudentTargetMap = (Map<String, Map<Long, Double>>) paramsMap.get("finalScoreExamStudentTargetMap");
         Map<Long, CourseTargetWordDto> targetWordMap = (Map<Long, CourseTargetWordDto>) paramsMap.get("targetWordMap");
         Map<Long, CourseTargetWordDto> targetWordMap = (Map<Long, CourseTargetWordDto>) paramsMap.get("targetWordMap");
         if (!CollectionUtils.isEmpty(examStudentList)) {
         if (!CollectionUtils.isEmpty(examStudentList)) {
-            BigDecimal bigDecimal = new BigDecimal(100);
             List<TRExamStudent> trExamStudentList = new ArrayList<>(examStudentList.size());
             List<TRExamStudent> trExamStudentList = new ArrayList<>(examStudentList.size());
             Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap = new LinkedHashMap<>();
             Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap = new LinkedHashMap<>();
             for (ReportExamStudentDto reportExamStudentDto : examStudentList) {
             for (ReportExamStudentDto reportExamStudentDto : examStudentList) {
-                Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
+//                Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
+                Map<Long, Double> map = finalScoreExamStudentTargetMap.get(reportExamStudentDto.getStudentCode());
                 FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
                 FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
                 ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto = finalScoreResult.getUsualScoreDto();
                 ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto = finalScoreResult.getUsualScoreDto();
-                //课程目标循环
                 map.forEach((k, v) -> {
                 map.forEach((k, v) -> {
-                    List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
-                    Collections.sort(dimensionDtoList);
                     List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
                     List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
                     if (targetWordMap.containsKey(k)) {
                     if (targetWordMap.containsKey(k)) {
                         List<ReportExamStudentUsualScoreObjDto> scoreObjDtoList = reportExamStudentUsualScoreSumDto.getScoreMap().get(k);
                         List<ReportExamStudentUsualScoreObjDto> scoreObjDtoList = reportExamStudentUsualScoreSumDto.getScoreMap().get(k);
                         CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
                         CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
-                        ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList, finalScoreResult.getFinalScore().get(k));
+                        ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k));
                         ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
                         ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
 
 
-                        BigDecimal dimensionMatrixSumScore = new BigDecimal(0);
+                        BigDecimal targetMatrixSumScore = new BigDecimal(0);
                         if (!reportExamStudentTargetDtoMap.containsKey(k)) {
                         if (!reportExamStudentTargetDtoMap.containsKey(k)) {
-                            //各知识点转换分数
-                            for (DimensionDto dimensionDto : dimensionDtoList) {
-                                Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                                dimensionDto.setDimensionMatrixScore(matrixScore);
-                                dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
-                            }
+                            Double targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                            targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
                             //平时作业总和+累加
                             //平时作业总和+累加
                             Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
                             Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
                             reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
                             reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
-                            reportExamStudentFinalScoreDto.setTargetMatrixSumScore(dimensionMatrixSumScore.doubleValue());
-                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList.stream().map(DimensionDto::new).collect(Collectors.toList()), dimensionMatrixSumScore.doubleValue(), finalScoreResult.getFinalScore().get(k));
+                            reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
+                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), targetMatrixSumScore.doubleValue(), finalScoreResult.getFinalScoreTarget().get(k));
                             ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
                             ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
                             reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
                             reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
                         } else {
                         } else {
                             ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
                             ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
                             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
                             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
-                            List<DimensionDto> dimensionDtos = reportExamStudentFinalScoreAvgDto.getDimensionList();
-                            //各知识点转换分数
-                            for (int i = 0; i < dimensionDtoList.size(); i++) {
-                                DimensionDto dimensionDto = dimensionDtoList.get(i);
-                                Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(bigDecimal, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                                dimensionDto.setDimensionMatrixScore(matrixScore);
-                                reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
-                                dimensionDtos.get(i).setDimensionMatrixScore(dimensionDtos.get(i).getDimensionMatrixScore() + matrixScore);
-                                dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                            }
-                            reportExamStudentFinalScoreDto.setTargetMatrixSumScore(dimensionMatrixSumScore.doubleValue());
-                            reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(dimensionMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                            Double targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                            targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
+
+                            reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
+                            reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(targetMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
                             ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
 
 
                             //平时作业总和+累加
                             //平时作业总和+累加
@@ -127,13 +115,14 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
             //加入目标分&平均分&各课程目标平均分
             //加入目标分&平均分&各课程目标平均分
             BigDecimal size = new BigDecimal(examStudentList.size());
             BigDecimal size = new BigDecimal(examStudentList.size());
             List<ReportExamStudentTargetDto> targetDtoList = this.targetDtoParams(reportExamStudentTargetDtoMap, size);
             List<ReportExamStudentTargetDto> targetDtoList = this.targetDtoParams(reportExamStudentTargetDtoMap, size);
-            AtomicReference<Double> dimensionScoreSum = new AtomicReference<>(0.0d);
+            AtomicReference<Double> targetScoreSum = new AtomicReference<>(0.0d);
             AtomicReference<Double> usualScoreSum = new AtomicReference<>(0.0d);
             AtomicReference<Double> usualScoreSum = new AtomicReference<>(0.0d);
             targetDtoList.stream().peek(e -> {
             targetDtoList.stream().peek(e -> {
-                dimensionScoreSum.set(dimensionScoreSum.get() + e.getFinalScore().getDimensionList().stream().mapToDouble(DimensionDto::getDimensionMatrixAvgScore).sum());
+                targetScoreSum.set(targetScoreSum.get() + e.getFinalScore().getMatrixAvgScore());
                 usualScoreSum.set(usualScoreSum.get() + e.getUsualScore().getScoreList().stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixAvgScore).sum());
                 usualScoreSum.set(usualScoreSum.get() + e.getUsualScore().getScoreList().stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixAvgScore).sum());
             }).collect(Collectors.toList());
             }).collect(Collectors.toList());
-            Double score = new BigDecimal(dimensionScoreSum.get()).add(new BigDecimal(usualScoreSum.get())).setScale(1, BigDecimal.ROUND_DOWN).doubleValue();
+
+            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);
             ReportExamStudentDto reportExamStudentTargetDto = new ReportExamStudentDto("目标分", "目标分", null, 100.d, targetDtoList);
             ReportExamStudentDto reportExamStudentAvgDto = new ReportExamStudentDto("平均分", "平均分", null, score, targetDtoList);
             ReportExamStudentDto reportExamStudentAvgDto = new ReportExamStudentDto("平均分", "平均分", null, score, targetDtoList);
             ReportExamStudentDto reportExamStudentTargetAvgDto = new ReportExamStudentDto("各课程目标平均分", "各课程目标平均分", null, null, targetDtoList);
             ReportExamStudentDto reportExamStudentTargetAvgDto = new ReportExamStudentDto("各课程目标平均分", "各课程目标平均分", null, null, targetDtoList);
@@ -175,17 +164,90 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
     }
     }
 
 
     /**
     /**
-     * 处理目标分&平均分&各课程目标平均分参数
+     * 知识点纬度数据构建
+     *
+     * @param map
+     * @param targetWordMap
+     * @param reportExamStudentDto
+     * @param reportExamStudentUsualScoreSumDto
+     * @param reportExamStudentTargetDtoMap
+     * @param finalScoreResult
+     */
+    protected void dimensionDataBuild(Map<Long, Map<Long, DimensionDto>> map, Map<Long, CourseTargetWordDto> targetWordMap,
+                                      ReportExamStudentDto reportExamStudentDto, ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto,
+                                      Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, FinalScoreResult finalScoreResult) {
+        //课程目标循环
+        map.forEach((k, v) -> {
+            List<DimensionDto> dimensionDtoList = new ArrayList<>(v.values());
+            Collections.sort(dimensionDtoList);
+            List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
+            if (targetWordMap.containsKey(k)) {
+                List<ReportExamStudentUsualScoreObjDto> scoreObjDtoList = reportExamStudentUsualScoreSumDto.getScoreMap().get(k);
+                CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
+                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList, finalScoreResult.getFinalScoreDimension().get(k));
+                ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
+
+                BigDecimal dimensionMatrixSumScore = new BigDecimal(0);
+                if (!reportExamStudentTargetDtoMap.containsKey(k)) {
+                    //各知识点转换分数
+                    for (DimensionDto dimensionDto : dimensionDtoList) {
+                        Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                        dimensionDto.setDimensionMatrixScore(matrixScore);
+                        dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
+                    }
+                    //平时作业总和+累加
+                    Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixScore).sum();
+                    reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
+                    reportExamStudentFinalScoreDto.setTargetDimensionMatrixSumScore(dimensionMatrixSumScore.doubleValue());
+                    ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), dimensionDtoList.stream().map(DimensionDto::new).collect(Collectors.toList()), dimensionMatrixSumScore.doubleValue(), finalScoreResult.getFinalScoreDimension().get(k));
+                    ReportExamStudentTargetDto reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())));
+                    reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
+                } else {
+                    ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
+                    ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
+                    List<DimensionDto> dimensionDtos = reportExamStudentFinalScoreAvgDto.getDimensionList();
+                    //各知识点转换分数
+                    for (int i = 0; i < dimensionDtoList.size(); i++) {
+                        DimensionDto dimensionDto = dimensionDtoList.get(i);
+                        Double matrixScore = new BigDecimal(dimensionDto.getDimensionScore()).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                        dimensionDto.setDimensionMatrixScore(matrixScore);
+                        reportExamStudentDto.setScore(reportExamStudentDto.getScore() + matrixScore);
+                        dimensionDtos.get(i).setDimensionMatrixScore(dimensionDtos.get(i).getDimensionMatrixScore() + matrixScore);
+                        dimensionMatrixSumScore = dimensionMatrixSumScore.add(new BigDecimal(matrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                    }
+                    reportExamStudentFinalScoreDto.setTargetDimensionMatrixSumScore(dimensionMatrixSumScore.doubleValue());
+                    reportExamStudentFinalScoreAvgDto.setTargetDimensionMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetDimensionMatrixSumScore()).add(dimensionMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                    ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
+
+                    //平时作业总和+累加
+                    List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                    List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjAvgDtoList = reportExamStudentUsualScoreAvgDto.getScoreList();
+                    for (int i = 0; i < reportExamStudentUsualScoreObjDtoList.size(); i++) {
+                        ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoList.get(i);
+                        reportExamStudentDto.setScore(reportExamStudentDto.getScore() + reportExamStudentUsualScoreObjDto.getMatrixScore());
+                        reportExamStudentUsualScoreObjAvgDtoList.get(i).setMatrixScore(new BigDecimal(reportExamStudentUsualScoreObjAvgDtoList.get(i).getMatrixScore()).add(new BigDecimal(reportExamStudentUsualScoreObjDto.getMatrixScore())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                    }
+                    reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
+                }
+                targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
+            }
+            reportExamStudentDto.setTargetList(targetList);
+        });
+    }
+
+    /**
+     * 处理目标分&平均分&各课程目标平均分参数-知识点纬度
      *
      *
      * @param reportExamStudentTargetDtoMap
      * @param reportExamStudentTargetDtoMap
      * @param size
      * @param size
      * @return
      * @return
      */
      */
-    protected List<ReportExamStudentTargetDto> targetDtoParams(Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, BigDecimal size) {
+    protected List<ReportExamStudentTargetDto> targetDimensionDtoParams(Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, BigDecimal size) {
         List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
         List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
         reportExamStudentTargetDtoMap.forEach((k, v) -> {
         reportExamStudentTargetDtoMap.forEach((k, v) -> {
             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
             ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
-            BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+            BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetDimensionMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
 //            //如果换算出来的知识点总分超过了期末考试目标分,则
 //            //如果换算出来的知识点总分超过了期末考试目标分,则
 //            if (reportExamStudentFinalScoreDto.getTargetScore().compareTo(matrixAvgScore) == -1) {
 //            if (reportExamStudentFinalScoreDto.getTargetScore().compareTo(matrixAvgScore) == -1) {
 //                throw ExceptionResultEnum.ERROR.exception("[" + v.getTargetName() + "]知识点总平均分超过了期末考试目标分,请重新设置知识点");
 //                throw ExceptionResultEnum.ERROR.exception("[" + v.getTargetName() + "]知识点总平均分超过了期末考试目标分,请重新设置知识点");
@@ -210,4 +272,32 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         Collections.sort(targetDtoList);
         Collections.sort(targetDtoList);
         return targetDtoList;
         return targetDtoList;
     }
     }
+
+    /**
+     * 处理目标分&平均分&各课程目标平均分参数-课程目标纬度
+     *
+     * @param reportExamStudentTargetDtoMap
+     * @param size
+     * @return
+     */
+    protected List<ReportExamStudentTargetDto> targetDtoParams(Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap, BigDecimal size) {
+        List<ReportExamStudentTargetDto> targetDtoList = new ArrayList<>();
+        reportExamStudentTargetDtoMap.forEach((k, v) -> {
+            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = v.getFinalScore();//课程目标考核要素的平均分
+            BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+            reportExamStudentFinalScoreDto.setMatrixAvgScore(matrixAvgScore.doubleValue());
+
+            v.setTargetMatrixAvgScore(reportExamStudentFinalScoreDto.getMatrixAvgScore());
+            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = v.getUsualScore();
+            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+            for (ReportExamStudentUsualScoreObjDto r : reportExamStudentUsualScoreObjDtoList) {
+                r.setMatrixAvgScore(new BigDecimal(r.getMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                v.setTargetMatrixAvgScore(v.getTargetMatrixAvgScore() + r.getMatrixAvgScore());
+            }
+            v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
+            targetDtoList.add(v);
+        });
+        Collections.sort(targetDtoList);
+        return targetDtoList;
+    }
 }
 }

+ 3 - 3
distributed-print-business/src/main/resources/mapper/TCFinalScoreMapper.xml

@@ -24,7 +24,7 @@
             min(case when tcfs.score is not null then tcfs.score else null end) finalScoreMinScore,
             min(case when tcfs.score is not null then tcfs.score else null end) finalScoreMinScore,
             avg(case when tcfs.score is not null then tcfs.score else null end) finalScoreAvgScore
             avg(case when tcfs.score is not null then tcfs.score else null end) finalScoreAvgScore
             from t_c_final_score tcfs
             from t_c_final_score tcfs
-            join t_c_usual_score tcus on tcfs.exam_id = tcus.exam_id and tcfs.course_code = tcus.course_code and tcfs.paper_number and tcus.paper_number and tcfs.student_code = tcus.student_code
+            join t_c_usual_score tcus on tcfs.exam_id = tcus.exam_id and tcfs.course_code = tcus.course_code and tcfs.paper_number = tcus.paper_number and tcfs.student_code = tcus.student_code
         <where>
         <where>
             <if test="examId != null and examId != ''">
             <if test="examId != null and examId != ''">
                 and tcfs.exam_id = #{examId}
                 and tcfs.exam_id = #{examId}
@@ -58,13 +58,13 @@
 
 
     <select id="examStudentOverview" resultType="com.qmth.distributed.print.business.bean.result.FinalScoreResult">
     <select id="examStudentOverview" resultType="com.qmth.distributed.print.business.bean.result.FinalScoreResult">
         select
         select
-            distinct tcfs.name,
+            tcfs.name,
             tcfs.student_code as studentCode,
             tcfs.student_code as studentCode,
             tcfs.score_detail as finalScoreDetail,
             tcfs.score_detail as finalScoreDetail,
             tcus.score as usualScore,
             tcus.score as usualScore,
             es.clazz_name as administrativeClass
             es.clazz_name as administrativeClass
         from t_c_final_score tcfs
         from t_c_final_score tcfs
-        join t_c_usual_score tcus on tcfs.exam_id = tcus.exam_id and tcfs.course_code = tcus.course_code and tcfs.paper_number and tcus.paper_number and tcfs.student_code = tcus.student_code
+        join t_c_usual_score tcus on tcfs.exam_id = tcus.exam_id and tcfs.course_code = tcus.course_code and tcfs.paper_number = tcus.paper_number and tcfs.student_code = tcus.student_code
         join exam_student es on es.exam_id = tcfs.exam_id and es.paper_number = tcfs.paper_number and es.student_code = tcfs.student_code
         join exam_student es on es.exam_id = tcfs.exam_id and es.paper_number = tcfs.paper_number and es.student_code = tcfs.student_code
         <where>
         <where>
             <if test="examId != null and examId != ''">
             <if test="examId != null and examId != ''">

+ 8 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TCFinalScoreController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.gson.reflect.TypeToken;
 import com.google.gson.reflect.TypeToken;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.bean.dto.TCFinalScoreDto;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
 import com.qmth.distributed.print.business.bean.excel.PaperStructDto;
 import com.qmth.distributed.print.business.bean.excel.PaperStructDto;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
@@ -197,6 +198,13 @@ public class TCFinalScoreController {
         TCFinalScore tcFinalScoreDb = tcFinalScoreService.getById(tcFinalScore.getId());
         TCFinalScore tcFinalScoreDb = tcFinalScoreService.getById(tcFinalScore.getId());
         Objects.requireNonNull(tcFinalScoreDb, "未找到期末成绩信息");
         Objects.requireNonNull(tcFinalScoreDb, "未找到期末成绩信息");
 
 
+        List<TCFinalScoreDto> tcFinalScoreDtoList = GsonUtil.fromJson(tcFinalScore.getScoreDetail(), new TypeToken<List<TCFinalScoreDto>>() {
+        }.getType());
+        Double score = tcFinalScoreDtoList.stream().mapToDouble(e -> Double.valueOf(e.getScore())).sum();
+        if (score.doubleValue() > 100d) {
+            throw ExceptionResultEnum.ERROR.exception("分数总分不能大于试卷总分");
+        }
+
         tcFinalScoreService.getFinalScoreSyncLock(tcFinalScoreDb.getExamId(), tcFinalScoreDb.getCourseCode(), tcFinalScoreDb.getPaperNumber());
         tcFinalScoreService.getFinalScoreSyncLock(tcFinalScoreDb.getExamId(), tcFinalScoreDb.getCourseCode(), tcFinalScoreDb.getPaperNumber());
 
 
         TCFinalScore tcFinalScoreSource = new TCFinalScore();
         TCFinalScore tcFinalScoreSource = new TCFinalScore();

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

@@ -108,7 +108,7 @@ public class TCPaperStructController {
             }
             }
             paperStructDimensionResultList.stream().filter(s -> {
             paperStructDimensionResultList.stream().filter(s -> {
                 if (Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())) {
                 if (Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())) {
-                    s.getTargetList().stream().peek(e -> e.setQuestionScoreSum(score)).collect(Collectors.toList());
+                    s.getTargetList().stream().peek(e -> e.setFinalScoreQuestionScoreSum(score)).collect(Collectors.toList());
                     return true;
                     return true;
                 }
                 }
                 return false;
                 return false;
@@ -152,7 +152,7 @@ public class TCPaperStructController {
             for (MarkQuestion markQuestion : markQuestionList) {
             for (MarkQuestion markQuestion : markQuestionList) {
                 paperStructDimensionResultList.add(new PaperStructDimensionResult(markQuestion.getMainNumber(), markQuestion.getSubNumber(), markQuestion.getTotalScore()));
                 paperStructDimensionResultList.add(new PaperStructDimensionResult(markQuestion.getMainNumber(), markQuestion.getSubNumber(), markQuestion.getTotalScore()));
             }
             }
-        } else{
+        } else {
             CourseWeightResult courseWeightResult = trBasicInfoService.findCourseWeightResultRmi(examId, courseCode);
             CourseWeightResult courseWeightResult = trBasicInfoService.findCourseWeightResultRmi(examId, courseCode);
             if (Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != courseWeightResult.getDimensionSign().longValue()) {
             if (Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != courseWeightResult.getDimensionSign().longValue()) {
                 trBasicInfoService.clearReportData(examId, courseCode, paperNumber, false);
                 trBasicInfoService.clearReportData(examId, courseCode, paperNumber, false);

+ 14 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TCUsualScoreController.java

@@ -1,9 +1,11 @@
 package com.qmth.distributed.print.api;
 package com.qmth.distributed.print.api;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.gson.reflect.TypeToken;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDetailDto;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDto;
 import com.qmth.distributed.print.business.bean.dto.CourseWeightDto;
+import com.qmth.distributed.print.business.bean.dto.TCUsualScoreDto;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
 import com.qmth.distributed.print.business.bean.excel.ExcelField;
 import com.qmth.distributed.print.business.bean.result.CourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.CourseWeightResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
@@ -15,7 +17,9 @@ import com.qmth.distributed.print.business.service.TRBasicInfoService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
+import com.qmth.teachcloud.common.util.GsonUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -33,6 +37,7 @@ import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.Min;
 import java.io.IOException;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
@@ -141,6 +146,15 @@ public class TCUsualScoreController {
         if (bindingResult.hasErrors()) {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
         }
+        List<TCUsualScoreDto> tcFinalScoreDtoList = GsonUtil.fromJson(tcUsualScore.getScore(), new TypeToken<List<TCUsualScoreDto>>() {
+        }.getType());
+        tcFinalScoreDtoList.stream().peek(e -> {
+            BigDecimal score = new BigDecimal(e.getScore());
+            if (score.compareTo(SystemConstant.PERCENT) == 1) {
+                throw ExceptionResultEnum.ERROR.exception("[" + e.getName() + "]分数不能大于试卷总分");
+            }
+        }).collect(Collectors.toList());
+
         TCUsualScore tcUsualScoreDb = tcUsualScoreService.getById(tcUsualScore.getId());
         TCUsualScore tcUsualScoreDb = tcUsualScoreService.getById(tcUsualScore.getId());
         Objects.requireNonNull(tcUsualScoreDb, "未找到平时成绩信息");
         Objects.requireNonNull(tcUsualScoreDb, "未找到平时成绩信息");
 
 

+ 11 - 11
distributed-print/src/main/resources/application.properties

@@ -12,12 +12,12 @@ spring.application.name=teachcloud
 #\u6570\u636E\u6E90\u914D\u7F6E
 #\u6570\u636E\u6E90\u914D\u7F6E
 db.host=localhost
 db.host=localhost
 db.port=3306
 db.port=3306
-db.name=teachcloud_db_dev
+db.name=teachcloud-v3.3.1
 db.username=root
 db.username=root
-db.password=12345678
+db.password=123456789
 
 
 #redis\u6570\u636E\u6E90\u914D\u7F6E
 #redis\u6570\u636E\u6E90\u914D\u7F6E
-com.qmth.redis.host=${db.host}
+com.qmth.redis.host=127.0.0.1
 com.qmth.redis.port=6379
 com.qmth.redis.port=6379
 com.qmth.redis.db=4
 com.qmth.redis.db=4
 #com.qmth.redis.password=
 #com.qmth.redis.password=
@@ -47,19 +47,19 @@ spring.activiti.check-process-definitions=false
 #full\uFF1A\u4FDD\u5B58\u5386\u53F2\u6570\u636E\u7684\u6700\u9AD8\u7EA7\u522B\uFF0C\u9664\u4E86\u4F1A\u4FDD\u5B58audit\u7EA7\u522B\u7684\u6570\u636E\u5916\uFF0C\u8FD8\u4F1A\u4FDD\u5B58\u5176\u4ED6\u5168\u90E8\u6D41\u7A0B\u76F8\u5173\u7684\u7EC6\u8282\u6570\u636E\uFF0C\u5305\u62EC\u4E00\u4E9B\u6D41\u7A0B\u53C2\u6570\u7B49\u3002
 #full\uFF1A\u4FDD\u5B58\u5386\u53F2\u6570\u636E\u7684\u6700\u9AD8\u7EA7\u522B\uFF0C\u9664\u4E86\u4F1A\u4FDD\u5B58audit\u7EA7\u522B\u7684\u6570\u636E\u5916\uFF0C\u8FD8\u4F1A\u4FDD\u5B58\u5176\u4ED6\u5168\u90E8\u6D41\u7A0B\u76F8\u5173\u7684\u7EC6\u8282\u6570\u636E\uFF0C\u5305\u62EC\u4E00\u4E9B\u6D41\u7A0B\u53C2\u6570\u7B49\u3002
 spring.activiti.history-level=audit
 spring.activiti.history-level=audit
 
 
-#com.qmth.fss.public.config=oss://key:secret@teachcloud-dps-dev-public.oss-api.qmth.com.cn
-#com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-public
 #com.qmth.fss.private.config=oss://key:secret@teachcloud-dps-dev-private.oss-api.qmth.com.cn
 #com.qmth.fss.private.config=oss://key:secret@teachcloud-dps-dev-private.oss-api.qmth.com.cn
 #com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-private
 #com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-private
+#com.qmth.fss.public.config=oss://key:secret@teachcloud-dps-dev-public.oss-api.qmth.com.cn
+#com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-public
 
 
-#com.qmth.fss.public.config=/Users/xiaofei/qmth/temporary/zxzk/file-temp
-#com.qmth.fss.public.server=http://localhost:7001
-#com.qmth.fss.private.config=/Users/xiaofei/qmth/temporary/zxzk/pdf-temp
-#com.qmth.fss.private.server=http://localhost:7001
+#com.qmth.fss.public.config=../static/
+#com.qmth.fss.public.server=/static/
+#com.qmth.fss.private.config=../static/
+#com.qmth.fss.private.server=/static/
 
 
-com.qmth.fss.public.config=/Users/yin/Downloads/file-temp
+com.qmth.fss.public.config=/Users/king/Downloads/file-temp
 com.qmth.fss.public.server=/file-temp/
 com.qmth.fss.public.server=/file-temp/
-com.qmth.fss.private.config=/Users/yin/Downloads/pdf-temp
+com.qmth.fss.private.config=/Users/king/Downloads/pdf-temp
 com.qmth.fss.private.server=/pdf-temp/
 com.qmth.fss.private.server=/pdf-temp/
 
 
 #\u7CFB\u7EDF\u914D\u7F6E
 #\u7CFB\u7EDF\u914D\u7F6E

+ 3 - 8
teachcloud-task/src/main/resources/application.properties

@@ -48,21 +48,16 @@ spring.activiti.check-process-definitions=false
 #full\uFF1A\u4FDD\u5B58\u5386\u53F2\u6570\u636E\u7684\u6700\u9AD8\u7EA7\u522B\uFF0C\u9664\u4E86\u4F1A\u4FDD\u5B58audit\u7EA7\u522B\u7684\u6570\u636E\u5916\uFF0C\u8FD8\u4F1A\u4FDD\u5B58\u5176\u4ED6\u5168\u90E8\u6D41\u7A0B\u76F8\u5173\u7684\u7EC6\u8282\u6570\u636E\uFF0C\u5305\u62EC\u4E00\u4E9B\u6D41\u7A0B\u53C2\u6570\u7B49\u3002
 #full\uFF1A\u4FDD\u5B58\u5386\u53F2\u6570\u636E\u7684\u6700\u9AD8\u7EA7\u522B\uFF0C\u9664\u4E86\u4F1A\u4FDD\u5B58audit\u7EA7\u522B\u7684\u6570\u636E\u5916\uFF0C\u8FD8\u4F1A\u4FDD\u5B58\u5176\u4ED6\u5168\u90E8\u6D41\u7A0B\u76F8\u5173\u7684\u7EC6\u8282\u6570\u636E\uFF0C\u5305\u62EC\u4E00\u4E9B\u6D41\u7A0B\u53C2\u6570\u7B49\u3002
 spring.activiti.history-level=audit
 spring.activiti.history-level=audit
 
 
-#com.qmth.fss.public.config=oss://key:secret@teachcloud-dps-dev1-public.oss-api.qmth.com.cn
-#com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-public
-#com.qmth.fss.private.config=oss://key:secret@teachcloud-dps-dev1-private.oss-api.qmth.com.cn
+#com.qmth.fss.private.config=oss://key:secret@teachcloud-dps-dev-private.oss-api.qmth.com.cn
 #com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-private
 #com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-private
+#com.qmth.fss.public.config=oss://key:secret@teachcloud-dps-dev-public.oss-api.qmth.com.cn
+#com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-public
 
 
 #com.qmth.fss.public.config=../static/
 #com.qmth.fss.public.config=../static/
 #com.qmth.fss.public.server=/static/
 #com.qmth.fss.public.server=/static/
 #com.qmth.fss.private.config=../static/
 #com.qmth.fss.private.config=../static/
 #com.qmth.fss.private.server=/static/
 #com.qmth.fss.private.server=/static/
 
 
-#com.qmth.fss.public.config=/Users/xiaofei/qmth/temporary/zxzk/file-temp
-#com.qmth.fss.public.server=http://localhost:7001
-#com.qmth.fss.private.config=/Users/xiaofei/qmth/temporary/zxzk/pdf-temp
-#com.qmth.fss.private.server=http://localhost:7001
-
 com.qmth.fss.public.config=/Users/king/Downloads/file-temp
 com.qmth.fss.public.config=/Users/king/Downloads/file-temp
 com.qmth.fss.public.server=/file-temp/
 com.qmth.fss.public.server=/file-temp/
 com.qmth.fss.private.config=/Users/king/Downloads/pdf-temp
 com.qmth.fss.private.config=/Users/king/Downloads/pdf-temp