wangliang 1 рік тому
батько
коміт
c61a59f484

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

@@ -30,15 +30,27 @@ public class FinalScoreOverviewDto implements Serializable {
     @ApiModelProperty(value = "平均分")
     private Double avgScore;
 
+    @ApiModelProperty(value = "总分")
+    private Double sumScore;
+
     public FinalScoreOverviewDto() {
 
     }
 
-    public FinalScoreOverviewDto(Long targetId, Double maxScore, Double minScore, Double avgScore) {
+    public FinalScoreOverviewDto(Long targetId, Double maxScore, Double minScore, Double avgScore,Double sumScore) {
         this.targetId = targetId;
         this.maxScore = maxScore;
         this.minScore = minScore;
         this.avgScore = avgScore;
+        this.sumScore = sumScore;
+    }
+
+    public Double getSumScore() {
+        return sumScore;
+    }
+
+    public void setSumScore(Double sumScore) {
+        this.sumScore = sumScore;
     }
 
     public Long getTargetId() {

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

@@ -34,6 +34,12 @@ public class ReportExamStudentDto implements Serializable {
 
     }
 
+    public ReportExamStudentDto(String name, String studentCode, Double score) {
+        this.name = name;
+        this.studentCode = studentCode;
+        this.score = score;
+    }
+
     public ReportExamStudentDto(FinalScoreResult finalScoreResult) {
         this.name = finalScoreResult.getName();
         this.studentCode = finalScoreResult.getStudentCode();

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

@@ -27,15 +27,27 @@ public class UsualScoreOverviewDto implements Serializable {
     @ApiModelProperty(value = "平均分")
     private Double avgScore;
 
+    @ApiModelProperty(value = "总分")
+    private Double sumScore;
+
     public UsualScoreOverviewDto() {
 
     }
 
-    public UsualScoreOverviewDto(String name, Double maxScore, Double minScore, Double avgScore) {
+    public UsualScoreOverviewDto(String name, Double maxScore, Double minScore, Double avgScore, Double sumScore) {
         this.name = name;
         this.maxScore = maxScore;
         this.minScore = minScore;
         this.avgScore = avgScore;
+        this.sumScore = sumScore;
+    }
+
+    public Double getSumScore() {
+        return sumScore;
+    }
+
+    public void setSumScore(Double sumScore) {
+        this.sumScore = sumScore;
     }
 
     public String getName() {

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

@@ -157,10 +157,11 @@ public class TRBasicInfoController {
         Map<Long, List<Double>> finalScoreTargetMap = new LinkedHashMap<>();//汇总各课程目标期末考试分数(用来算最高分,最低分,平均分)
 //        Map<Long, Map<Long, List<DimensionDto>>> finalScoreDimensionMap = new LinkedHashMap<>();//汇总知识点分数(用来算最高分,最低分,平均分)
         Map<String, Map<Long, Map<Long, DimensionDto>>> finalScoreExamStudentDimensionMap = new LinkedHashMap<>();//汇总考生课程目标-知识点
+        Map<Long, Map<Long, DimensionDto>> finalScoreExamStudentDimensionSumMap = new LinkedHashMap<>();//汇总考生课程目标-知识点总分
 
         Map<String, UsualScoreOverviewDto> usualScoreOverviewDtoMap = new LinkedHashMap<>();//整体平常成绩分数图
         Map<Long, FinalScoreOverviewDto> finalScoreOverviewDtoMap = new LinkedHashMap<>();//各课程目标期末考试分数图
-        Map<Long, FinalScoreDimensionOverviewDto> finalScoreDimensionOverviewDtoMap = new LinkedHashMap<>();//各课程目标期末考试知识点分数图
+//        Map<Long, FinalScoreDimensionOverviewDto> finalScoreDimensionOverviewDtoMap = new LinkedHashMap<>();//各课程目标期末考试知识点分数图
         List<ReportExamStudentDto> examStudentList = null;//考生集合
         Map<String, FinalScoreResult> finalScoreResultMap = null;//考生成绩map
         Map<String, PaperStructResult> paperStructResultMap = null;//试卷蓝图map
@@ -236,6 +237,23 @@ public class TRBasicInfoController {
                                     }
                                     finalScoreExamStudentDimensionMap.put(finalScoreResult.getStudentCode(), map);
                                 }
+
+                                //目标-考生知识点总分
+                                if (!finalScoreExamStudentDimensionSumMap.containsKey(courseTargetDto.getTargetId())) {
+                                    Map<Long, DimensionDto> dimensionMap = new LinkedHashMap<>();
+                                    dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
+                                    finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
+                                } else {
+                                    Map<Long, DimensionDto> dimensionMap = finalScoreExamStudentDimensionSumMap.get(courseTargetDto.getTargetId());
+                                    if (!dimensionMap.containsKey(dimensionDto.getDimensionId())) {
+                                        dimensionMap.put(dimensionDto.getDimensionId(), new DimensionDto(dimensionDto, score));
+                                    } else {
+                                        DimensionDto dimensionDtoTemp = dimensionMap.get(dimensionDto.getDimensionId());
+                                        dimensionDtoTemp.setDimensionScore(dimensionDtoTemp.getDimensionScore().doubleValue() + score.doubleValue());
+                                        dimensionMap.put(dimensionDto.getDimensionId(), dimensionDtoTemp);
+                                    }
+                                    finalScoreExamStudentDimensionSumMap.put(courseTargetDto.getTargetId(), dimensionMap);
+                                }
                             }
                         }
                     }
@@ -265,7 +283,8 @@ public class TRBasicInfoController {
             Double maxScore = v.stream().mapToDouble(Double::doubleValue).max().orElse(0d);
             Double minScore = v.stream().mapToDouble(Double::doubleValue).min().orElse(0d);
             Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-            usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore));
+            Double sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
+            usualScoreOverviewDtoMap.put(k, new UsualScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
         });
 
         //计算各课程目标期末考试最高分,最低分,平均分
@@ -273,8 +292,9 @@ public class TRBasicInfoController {
             Double maxScore = v.stream().mapToDouble(Double::doubleValue).max().orElse(0d);
             Double minScore = v.stream().mapToDouble(Double::doubleValue).min().orElse(0d);
 //            Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-            Double avgScore = new BigDecimal(v.stream().mapToDouble(Double::doubleValue).sum()).divide(new BigDecimal(finalScoreResultList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-            finalScoreOverviewDtoMap.put(k, new FinalScoreOverviewDto(k, maxScore, minScore, avgScore));
+            Double sumScore = v.stream().mapToDouble(Double::doubleValue).sum();
+            Double avgScore = new BigDecimal(sumScore).divide(new BigDecimal(finalScoreResultList.size()), 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            finalScoreOverviewDtoMap.put(k, new FinalScoreOverviewDto(k, maxScore, minScore, avgScore, sumScore));
         });
 
         //计算各课程目标下期末考试知识点最高分,最低分,平均分
@@ -338,6 +358,12 @@ public class TRBasicInfoController {
                 Map<Long, Map<Long, DimensionDto>> map = finalScoreExamStudentDimensionMap.get(reportExamStudentDto.getStudentCode());
                 FinalScoreResult finalScoreResult = finalScoreResultMap.get(reportExamStudentDto.getStudentCode());
                 JSONArray finalScoreDetailJsonArray = JSONArray.parseArray(finalScoreResult.getFinalScoreDetail());
+                Map<String, ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoMap = null;
+                if (Objects.nonNull(finalScoreResult.getUsualScore())) {
+                    //计算平时作业
+                    List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = JSONArray.parseArray(finalScoreResult.getUsualScore(), ReportExamStudentUsualScoreObjDto.class);
+                    reportExamStudentUsualScoreObjDtoMap = reportExamStudentUsualScoreObjDtoList.stream().collect(Collectors.toMap(ReportExamStudentUsualScoreObjDto::getName, Function.identity(), (dto1, dto2) -> dto1));
+                }
                 //计算期末考试知识点分数
                 for (int i = 0; i < finalScoreDetailJsonArray.size(); i++) {
                     JSONObject jsonObject = finalScoreDetailJsonArray.getJSONObject(i);
@@ -349,24 +375,74 @@ public class TRBasicInfoController {
                             List<DimensionDto> dimensionDtoList = new ArrayList<>(dimensionDtoMap.values());
                             if (CollectionUtils.isEmpty(reportExamStudentDto.getTargetList())) {
                                 List<ReportExamStudentTargetDto> targetList = new ArrayList<>();
+                                ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = null;
                                 ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(targetMap.get(courseTargetDto.getTargetId()).getFinalScoreWeight(), dimensionDtoList);
-                                targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), reportExamStudentFinalScoreDto));
+                                if (!CollectionUtils.isEmpty(reportExamStudentUsualScoreObjDtoMap) && reportExamStudentUsualScoreObjDtoMap.containsKey("作业" + courseTargetDto.getTargetId())) {
+                                    if (Objects.nonNull(targetMap.get(courseTargetDto.getTargetId())) && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight())
+                                            && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()))) {
+                                        ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoMap.get("作业" + courseTargetDto.getTargetId());
+                                        reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()), Arrays.asList(reportExamStudentUsualScoreObjDto));
+                                    }
+                                }
+                                targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto));
                                 reportExamStudentDto.setTargetList(targetList);
                             } else {
                                 List<ReportExamStudentTargetDto> targetList = reportExamStudentDto.getTargetList();
                                 Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap = targetList.stream().collect(Collectors.toMap(ReportExamStudentTargetDto::getTargetId, Function.identity(), (dto1, dto2) -> dto1));
                                 if (!reportExamStudentTargetDtoMap.containsKey(courseTargetDto.getTargetId())) {
-                                    targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), new ReportExamStudentFinalScoreDto(targetMap.get(courseTargetDto.getTargetId()).getFinalScoreWeight(), dimensionDtoList)));
+                                    ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = null;
+                                    if (!CollectionUtils.isEmpty(reportExamStudentUsualScoreObjDtoMap) && reportExamStudentUsualScoreObjDtoMap.containsKey("作业" + courseTargetDto.getTargetId())) {
+                                        if (Objects.nonNull(targetMap.get(courseTargetDto.getTargetId())) && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight())
+                                                && Objects.nonNull(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()))) {
+                                            ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoMap.get("作业" + courseTargetDto.getTargetId());
+                                            reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(targetMap.get(courseTargetDto.getTargetId()).getUsualScoreWeight().get("作业" + courseTargetDto.getTargetId()), Arrays.asList(reportExamStudentUsualScoreObjDto));
+                                        }
+                                    }
+                                    targetList.add(new ReportExamStudentTargetDto(courseTargetDto.getTargetId(), courseTargetDto.getTargetName(), new ReportExamStudentFinalScoreDto(targetMap.get(courseTargetDto.getTargetId()).getFinalScoreWeight(), dimensionDtoList), reportExamStudentUsualScoreDto));
                                 }
                             }
                         }
                     }
                 }
             }
+            //加入平均分
+            Double avgScore = new BigDecimal(examStudentList.stream().mapToDouble(ReportExamStudentDto::getScore).average().orElse(0d)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            ReportExamStudentDto reportExamStudentDto = new ReportExamStudentDto("平均分", "平均分", avgScore);
+            List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = new ArrayList<>();
+            reportExamStudentTargetDtoList.addAll(examStudentList.get(0).getTargetList());
+
+            BigDecimal size = new BigDecimal(examStudentList.size());
+            ReportExamStudentFinalScoreDto finalScoreAvgDto = reportExamStudentTargetDtoList.get(0).getFinalScore();
+            Map<Long, DimensionDto> dimensionFinalScoreDtoMap = finalScoreExamStudentDimensionSumMap.get(reportExamStudentTargetDtoList.get(0).getTargetId());
+            List<DimensionDto> dimensionFinalScoreDtoList = finalScoreAvgDto.getDimensionList();
+            for (DimensionDto dimensionFinalScoreDto : dimensionFinalScoreDtoList) {
+                if (dimensionFinalScoreDtoMap.containsKey(dimensionFinalScoreDto.getDimensionId())) {
+                    DimensionDto dimensionDto = dimensionFinalScoreDtoMap.get(dimensionFinalScoreDto.getDimensionId());
+                    Double avg = new BigDecimal(dimensionFinalScoreDto.getDimensionScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                    dimensionFinalScoreDto.setDimensionScore(avg);
+                } else {
+                    dimensionFinalScoreDto.setDimensionScore(0d);
+                }
+            }
+
+            ReportExamStudentUsualScoreDto usualScoreAvgDto = reportExamStudentTargetDtoList.get(0).getUsualScore();
+            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = usualScoreAvgDto.getScoreList();
+            for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
+                if (usualScoreOverviewDtoMap.containsKey(reportExamStudentUsualScoreObjDto.getName())) {
+                    UsualScoreOverviewDto usualScoreOverviewDto = usualScoreOverviewDtoMap.get(reportExamStudentUsualScoreObjDto.getName());
+                    Double avg = new BigDecimal(usualScoreOverviewDto.getSumScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                    reportExamStudentUsualScoreObjDto.setScore(avg);
+                } else {
+                    reportExamStudentUsualScoreObjDto.setScore(0d);
+                }
+            }
+            reportExamStudentDto.setTargetList(reportExamStudentTargetDtoList);
+            examStudentList.add(reportExamStudentDto);
             reportCourseEvaluationResultDetailDto = new ReportCourseEvaluationResultDetailDto(examStudentList);
             trBasicInfo.setCourseEvaluationResultDetail(JacksonUtil.parseJson(reportCourseEvaluationResultDetailDto));
         }
 
+        trBasicInfo.updateInfo(sysUser.getId());
         //课程目标达成评价明细结果-课程目标达成评价值图
         trBasicInfoService.saveOrUpdate(trBasicInfo);