wangliang il y a 1 an
Parent
commit
0131032a64
15 fichiers modifiés avec 314 ajouts et 116 suppressions
  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;
 
     @ApiModelProperty(value = "小题卷面总分")
-    private Double questionScoreSum = 0.0d;
+    private Double finalScoreQuestionScoreSum = 0.0d;
 
     public CourseTargetWebDto() {
 
@@ -71,12 +71,12 @@ public class CourseTargetWebDto implements Serializable, Comparable<CourseTarget
         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() {

+ 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 = "知识点集合")
     private String dimensionPoint;
 
-    @ApiModelProperty(value = "小题卷面总分")
-    private Double questionScoreSum = 0.0d;
+    @ApiModelProperty(value = "期末成绩小题卷面总分")
+    private Double finalScoreQuestionScoreSum = 0.0d;
 
     public CourseTargetWordDto() {
 
@@ -73,12 +73,12 @@ public class CourseTargetWordDto implements Serializable, Comparable<CourseTarge
         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() {

+ 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 = "目标分值")
     private BigDecimal targetScore;
 
-    @ApiModelProperty(value = "课程目标转换总分")
-    private Double targetMatrixSumScore;
+    @ApiModelProperty(value = "课程目标知识点转换总分")
+    private Double targetDimensionMatrixSumScore;
 
     @ApiModelProperty(value = "课程目标集合")
     private List<DimensionDto> dimensionList;
@@ -44,40 +44,81 @@ public class ReportExamStudentFinalScoreDto implements Serializable {
     @ApiModelProperty(value = "课程目标考核要素的平均分")
     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(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double score) {
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, List<DimensionDto> dimensionList, Double dimensionScoreSum) {
         this.evaluationId = finalScoreWordDto.getEvaluationId();
         this.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
         this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
         this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
         this.dimensionList = dimensionList;
-        this.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.evaluation = finalScoreWordDto.getEvaluation();
         this.evaluationDesc = finalScoreWordDto.getEvaluationDesc();
         this.targetWeight = finalScoreWordDto.getFinalScoreSumWeight();
         this.targetScore = finalScoreWordDto.getFinalScoreTargetSumScore();
         this.dimensionList = dimensionList;
+        this.targetDimensionMatrixSumScore = targetDimensionMatrixSumScore;
+        this.dimensionScoreSum = dimensionScoreSum;
+    }
+
+    public ReportExamStudentFinalScoreDto(FinalScoreWordDto finalScoreWordDto, Double targetScoreSum) {
+        this.evaluationId = finalScoreWordDto.getEvaluationId();
+        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.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() {

+ 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;
 
     @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 = "期末考试分数明细")
     private String finalScoreDetail;
@@ -89,12 +92,20 @@ public class FinalScoreResult implements Serializable {
         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() {

+ 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<>();
         try {
             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 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.entity.TCPaperStruct;
 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.TCPaperStructService;
 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.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.mark.entity.MarkPaper;
 import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -51,6 +53,9 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
     @Resource
     TRBasicInfoService trBasicInfoService;
 
+    @Resource
+    PrintCommonService printCommonService;
+
     /**
      * 根据考试id/课程编码/试卷编码查询数据库数据
      *
@@ -86,6 +91,7 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
         long start = System.currentTimeMillis();
         Map<String, String> messageMap = new LinkedHashMap<>();
         try {
+            MarkPaper markPaper = printCommonService.scoreImportExcelVaild(file, examId, courseCode, paperNumber);
             StringJoiner errorData = new StringJoiner("");
             StringJoiner successData = new StringJoiner("");
 
@@ -139,7 +145,7 @@ public class TCPaperStructServiceImpl extends ServiceImpl<TCPaperStructMapper, T
                 }
                 if (!CollectionUtils.isEmpty(paperStructDtoNewList)) {
                     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);
                     if (Objects.nonNull(tcPaperStructDb) && !tcPaperStructDb.equals(tcPaperStruct)) {
                         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<>();
         try {
             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 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("考试数据为空");
         }
 
-        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报表用)
 
         List<ReportExamStudentDto> examStudentList = null;//考生集合
@@ -144,7 +145,6 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
             weightSettingSign = courseWeightResult.getWeightSettingSign();
             dimensionSign = courseWeightResult.getDimensionSign();
 
-            BigDecimal bigDecimal = new BigDecimal(100);
             for (CourseWeightDto courseWeightDto : courseWeightDtoList) {
                 List<CourseWeightDetailDto> courseWeightDetailDtoList = courseWeightDto.getEvaluationList();
                 CourseTargetWordDto courseTargetWordDto = new CourseTargetWordDto(courseWeightDto);
@@ -168,8 +168,8 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             reportEvaluationDtoList.add(reportEvaluationDto);
                         }//非期末考试
                         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);
                             usualScoreTargetSumScore = usualScoreTargetSumScore.add(reportEvaluationDto.getTargetScore());
                             usualScoreDetailList.add(reportEvaluationDto);
@@ -201,12 +201,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     if (Objects.nonNull(paperStructDimensionResult)) {
                         List<CourseTargetWebDto> courseTargetDtoList = paperStructDimensionResult.getTargetList();
                         for (CourseTargetWebDto courseTargetDto : courseTargetDtoList) {
+                            this.calculateFinalScoreByTargetExamStudent(finalScoreExamStudentTargetMap, finalScoreResult, courseTargetDto, score);
                             //知识点-期末考试明细分
                             List<DimensionDto> dimensionDtoList = courseTargetDto.getDimensionList();
                             for (DimensionDto dimensionDto : dimensionDtoList) {
                                 //考生知识点
-                                this.calculateFinalScoreByExamStudent(finalScoreExamStudentDimensionMap,
-                                        finalScoreResult, courseTargetDto, dimensionDto, score);
+//                                this.calculateFinalScoreByDimensionExamStudent(finalScoreExamStudentDimensionMap,
+//                                        finalScoreResult, courseTargetDto, dimensionDto, score);
                                 if (i == 0) {//计算各知识点原始卷面分总和
                                     Double paperScore = paperStructDimensionResult.getScore();
                                     //目标-考生知识点去重
@@ -246,12 +247,16 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         finalTargetWebMap.get(k).setDimensionScoreSum(dimensionScoreSum);
                         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("usualScoreMap", usualScoreMap);
-        paramsMap.put("finalScoreExamStudentDimensionMap", finalScoreExamStudentDimensionMap);
+//        paramsMap.put("finalScoreExamStudentDimensionMap", finalScoreExamStudentDimensionMap);
+        paramsMap.put("finalScoreExamStudentTargetMap", finalScoreExamStudentTargetMap);
         paramsMap.put("examStudentList", examStudentList);
         paramsMap.put("finalScoreResultMap", finalScoreResultMap);
         paramsMap.put("targetWordMap", targetWordMap);
@@ -619,7 +625,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                     }
                     //期末考试
                     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());
                     }
                 }
@@ -686,7 +692,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             }
                             //期末考试
                             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());
                                 switch (trExamStudent.getName()) {
                                     case "目标分":
@@ -701,7 +707,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                                         examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentTargetDto.getTargetMatrixAvgScore())).create());
                                         break;
                                     default:
-                                        examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getScore())).create());
+                                        examStudent_cells.add(Cells.of(SystemConstant.df.format(reportExamStudentFinalScoreDto.getTargetScoreSum())).create());
                                         break;
                                 }
                             }
@@ -928,11 +934,11 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      * @param dimensionDto
      * @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())) {
             Map<Long, Map<Long, DimensionDto>> map = 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,
                                                                               Map<String, ReportEvaluationDto> usualScoreMap,
                                                                               Map<Long, CourseTargetWordDto> targetWordMap) {
-        BigDecimal bigDecimal = new BigDecimal(100);
         List<TCUsualScoreDto> tcUsualScoreDtoList = GsonUtil.fromJson(finalScoreResult.getUsualScore(), new TypeToken<List<TCUsualScoreDto>>() {
         }.getType());
         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;
                 CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
                 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()));
                 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.service.TRBasicInfoService;
 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.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -51,59 +51,47 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
     @Transactional
     public List<ReportExamStudentDto> getExamStudentReportDetail(TRBasicInfo trBasicInfo, Map<String, Object> paramsMap) {
         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, Map<Long, Double>> finalScoreExamStudentTargetMap = (Map<String, Map<Long, Double>>) paramsMap.get("finalScoreExamStudentTargetMap");
         Map<Long, CourseTargetWordDto> targetWordMap = (Map<Long, CourseTargetWordDto>) paramsMap.get("targetWordMap");
         if (!CollectionUtils.isEmpty(examStudentList)) {
-            BigDecimal bigDecimal = new BigDecimal(100);
             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, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
+                Map<Long, Double> map = finalScoreExamStudentTargetMap.get(reportExamStudentDto.getStudentCode());
                 FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
                 ReportExamStudentUsualScoreDto reportExamStudentUsualScoreSumDto = finalScoreResult.getUsualScoreDto();
-                //课程目标循环
                 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.getFinalScore().get(k));
+                        ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k));
                         ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
 
-                        BigDecimal dimensionMatrixSumScore = new BigDecimal(0);
+                        BigDecimal targetMatrixSumScore = new BigDecimal(0);
                         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();
                             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())));
                             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(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();
 
                             //平时作业总和+累加
@@ -127,13 +115,14 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
             //加入目标分&平均分&各课程目标平均分
             BigDecimal size = new BigDecimal(examStudentList.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);
             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());
             }).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 reportExamStudentAvgDto = new ReportExamStudentDto("平均分", "平均分", null, score, 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 size
      * @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<>();
         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);
+            BigDecimal matrixAvgScore = new BigDecimal(reportExamStudentFinalScoreDto.getTargetDimensionMatrixSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
 //            //如果换算出来的知识点总分超过了期末考试目标分,则
 //            if (reportExamStudentFinalScoreDto.getTargetScore().compareTo(matrixAvgScore) == -1) {
 //                throw ExceptionResultEnum.ERROR.exception("[" + v.getTargetName() + "]知识点总平均分超过了期末考试目标分,请重新设置知识点");
@@ -210,4 +272,32 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         Collections.sort(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,
             avg(case when tcfs.score is not null then tcfs.score else null end) finalScoreAvgScore
             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>
             <if test="examId != null and examId != ''">
                 and tcfs.exam_id = #{examId}
@@ -58,13 +58,13 @@
 
     <select id="examStudentOverview" resultType="com.qmth.distributed.print.business.bean.result.FinalScoreResult">
         select
-            distinct tcfs.name,
+            tcfs.name,
             tcfs.student_code as studentCode,
             tcfs.score_detail as finalScoreDetail,
             tcus.score as usualScore,
             es.clazz_name as administrativeClass
         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
         <where>
             <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.qmth.boot.api.constant.ApiConstant;
 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.PaperStructDto;
 import com.qmth.distributed.print.business.bean.result.EditResult;
@@ -197,6 +198,13 @@ public class TCFinalScoreController {
         TCFinalScore tcFinalScoreDb = tcFinalScoreService.getById(tcFinalScore.getId());
         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());
 
         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 -> {
                 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 false;
@@ -152,7 +152,7 @@ public class TCPaperStructController {
             for (MarkQuestion markQuestion : markQuestionList) {
                 paperStructDimensionResultList.add(new PaperStructDimensionResult(markQuestion.getMainNumber(), markQuestion.getSubNumber(), markQuestion.getTotalScore()));
             }
-        } else{
+        } else {
             CourseWeightResult courseWeightResult = trBasicInfoService.findCourseWeightResultRmi(examId, courseCode);
             if (Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != courseWeightResult.getDimensionSign().longValue()) {
                 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;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.gson.reflect.TypeToken;
 import com.qmth.boot.api.constant.ApiConstant;
 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.TCUsualScoreDto;
 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.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.contant.SystemConstant;
 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.util.GsonUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -33,6 +37,7 @@ import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -141,6 +146,15 @@ public class TCUsualScoreController {
         if (bindingResult.hasErrors()) {
             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());
         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
 db.host=localhost
 db.port=3306
-db.name=teachcloud_db_dev
+db.name=teachcloud-v3.3.1
 db.username=root
-db.password=12345678
+db.password=123456789
 
 #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.db=4
 #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
 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.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.private.config=/Users/yin/Downloads/pdf-temp
+com.qmth.fss.private.config=/Users/king/Downloads/pdf-temp
 com.qmth.fss.private.server=/pdf-temp/
 
 #\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
 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.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.server=/static/
 #com.qmth.fss.private.config=../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.server=/file-temp/
 com.qmth.fss.private.config=/Users/king/Downloads/pdf-temp