Преглед изворни кода

课程目标达成度统计支持多个课程目标

wangliang пре 8 месеци
родитељ
комит
b3b8f01ecc

+ 35 - 13
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/TRBasicInfoServiceImpl.java

@@ -172,7 +172,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         Map<String, PaperStructDimensionResult> paperStructResultMap = null;//试卷蓝图map
         Map<Long, CourseTargetWordDto> targetWordMap = null;//word目标集合
         Map<Long, CourseTargetWebDto> targetWebMap = null;//web目标集合
-        Map<String, ReportEvaluationDto> usualScoreMap = null;//平时作业集合
+        Map<String, List<ReportEvaluationDto>> usualScoreMap = null;//平时作业集合
         Long weightSettingSign = null, dimensionSign = null;//权重变化id,知识点变化id
         if (!CollectionUtils.isEmpty(finalScoreResultList)) {
             targetWordMap = new LinkedHashMap<>();
@@ -210,7 +210,13 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                             usualScoreTargetSumScore = usualScoreTargetSumScore.add(reportEvaluationDto.getTargetScore());
                             usualScoreDetailList.add(reportEvaluationDto);
                             reportEvaluationDtoList.add(reportEvaluationDto);
-                            usualScoreMap.put(courseWeightDetailDto.getEvaluationName(), reportEvaluationDto);
+                            if (!usualScoreMap.containsKey(courseWeightDetailDto.getEvaluationName())) {
+                                usualScoreMap.put(courseWeightDetailDto.getEvaluationName(), new ArrayList<>(Arrays.asList(reportEvaluationDto)));
+                            } else {
+                                List<ReportEvaluationDto> reportEvaluationDtos = usualScoreMap.get(courseWeightDetailDto.getEvaluationName());
+                                reportEvaluationDtos.add(reportEvaluationDto);
+                                usualScoreMap.put(courseWeightDetailDto.getEvaluationName(), reportEvaluationDtos);
+                            }
                         }
                     }
                     usualScoreWordDto.setUsualScoreTargetSumScore(usualScoreTargetSumScore);
@@ -1371,7 +1377,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
      * @return
      */
     protected ReportExamStudentUsualScoreDto calculateUsualScoreByExamStudent(FinalScoreResult finalScoreResult,
-                                                                              Map<String, ReportEvaluationDto> usualScoreMap,
+                                                                              Map<String, List<ReportEvaluationDto>> usualScoreMap,
                                                                               Map<Long, CourseTargetWordDto> targetWordMap) {
         List<TCUsualScoreDto> tcUsualScoreDtoList = GsonUtil.fromJson(finalScoreResult.getUsualScore(), new TypeToken<List<TCUsualScoreDto>>() {
         }.getType());
@@ -1379,16 +1385,32 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
         ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(scoreListMap);
         for (TCUsualScoreDto t : tcUsualScoreDtoList) {
             if (usualScoreMap.containsKey(t.getName())) {
-                ReportEvaluationDto reportEvaluationDto = usualScoreMap.get(t.getName());
-                List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = !scoreListMap.containsKey(reportEvaluationDto.getTargetId()) ? new ArrayList<>() : scoreListMap.get(reportEvaluationDto.getTargetId());
-                //计算平时作业转换
-                BigDecimal score = Objects.nonNull(t.getScore()) ? new BigDecimal(t.getScore()) : new BigDecimal(0);
-                CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
-                UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
-                //卷面分/目标卷面总分*权重
-                BigDecimal matrixScore = score.divide(reportEvaluationDto.getTargetScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumScore()));
-                scoreListMap.put(reportEvaluationDto.getTargetId(), reportExamStudentUsualScoreObjDtoList);
+                List<ReportEvaluationDto> reportEvaluationDtoList = usualScoreMap.get(t.getName());
+                if (!CollectionUtils.isEmpty(reportEvaluationDtoList)) {
+                    if (reportEvaluationDtoList.size() == 1) {
+                        ReportEvaluationDto reportEvaluationDto = reportEvaluationDtoList.get(0);
+                        List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = !scoreListMap.containsKey(reportEvaluationDto.getTargetId()) ? new ArrayList<>() : scoreListMap.get(reportEvaluationDto.getTargetId());
+                        //计算平时作业转换
+                        BigDecimal score = Objects.nonNull(t.getScore()) ? new BigDecimal(t.getScore()) : new BigDecimal(0);
+                        CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
+                        UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
+                        //卷面分/目标卷面总分*权重
+                        BigDecimal matrixScore = score.divide(reportEvaluationDto.getTargetScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetWeight()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                        reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumScore()));
+                        scoreListMap.put(reportEvaluationDto.getTargetId(), reportExamStudentUsualScoreObjDtoList);
+                    } else {
+                        BigDecimal score = Objects.nonNull(t.getScore()) ? new BigDecimal(t.getScore()) : new BigDecimal(0);
+                        Double targetWeightSum = reportEvaluationDtoList.stream().mapToDouble(s -> s.getTargetWeight().doubleValue()).sum();
+                        for (ReportEvaluationDto reportEvaluationDto : reportEvaluationDtoList) {
+                            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = !scoreListMap.containsKey(reportEvaluationDto.getTargetId()) ? new ArrayList<>() : scoreListMap.get(reportEvaluationDto.getTargetId());
+                            CourseTargetWordDto courseTargetWordDto = targetWordMap.get(reportEvaluationDto.getTargetId());
+                            UsualScoreWordDto usualScoreWordDto = courseTargetWordDto.getUsualScoreDto();
+                            BigDecimal matrixScore = score.multiply(reportEvaluationDto.getTargetWeight()).divide(new BigDecimal(targetWeightSum), 4, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            reportExamStudentUsualScoreObjDtoList.add(new ReportExamStudentUsualScoreObjDto(reportEvaluationDto.getTargetId(), reportEvaluationDto, score, matrixScore, usualScoreWordDto.getUsualScoreTargetSumScore()));
+                            scoreListMap.put(reportEvaluationDto.getTargetId(), reportExamStudentUsualScoreObjDtoList);
+                        }
+                    }
+                }
             }
         }
         scoreListMap.forEach((k, v) -> {

+ 14 - 2
teachcloud-obe/src/main/java/com/qmth/teachcloud/obe/service/impl/TRExamStudentServiceImpl.java

@@ -79,6 +79,7 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
         Map<String, FinalScoreResult> finalScoreResultMap = (Map<String, FinalScoreResult>) paramsMap.get("finalScoreResultMap");
         Map<String, Map<Long, BigDecimal>> finalScoreExamStudentTargetMap = (Map<String, Map<Long, BigDecimal>>) paramsMap.get("finalScoreExamStudentTargetMap");
         Map<Long, CourseTargetWordDto> targetWordMap = (Map<Long, CourseTargetWordDto>) paramsMap.get("targetWordMap");
+        Map<String, List<ReportEvaluationDto>> usualScoreMap = (Map<String, List<ReportEvaluationDto>>) paramsMap.get("usualScoreMap");
         if (!CollectionUtils.isEmpty(examStudentList)) {
             List<TRExamStudent> trExamStudentList = new ArrayList<>(examStudentList.size());
             Map<Long, ReportExamStudentTargetDto> reportExamStudentTargetDtoMap = new LinkedHashMap<>();
@@ -117,8 +118,19 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                             //平时作业总和+累加
                             if (!CollectionUtils.isEmpty(scoreObjDtoList)) {
                                 for (ReportExamStudentUsualScoreObjDto r : scoreObjDtoList) {
-                                    BigDecimal targetEvaluationValue = r.getScore().divide(r.getTargetScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(r.getTargetWeight().divide(courseTargetWordDto.getTargetSumWeight(), 4, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                    matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
+                                    if (usualScoreMap.containsKey(r.getEvaluation())) {
+                                        List<ReportEvaluationDto> reportEvaluationDtoList = usualScoreMap.get(r.getEvaluation());
+                                        BigDecimal targetEvaluationValue = new BigDecimal(0);
+                                        if (!CollectionUtils.isEmpty(reportEvaluationDtoList)) {
+                                            if (reportEvaluationDtoList.size() == 1) {
+                                                targetEvaluationValue = r.getScore().divide(r.getTargetScore(), 4, BigDecimal.ROUND_HALF_UP).multiply(r.getTargetWeight().divide(courseTargetWordDto.getTargetSumWeight(), 4, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            } else {
+                                                Double targetWeightSum = reportEvaluationDtoList.stream().mapToDouble(s -> s.getTargetWeight().doubleValue()).sum();
+                                                targetEvaluationValue = r.getMatrixScore().divide(r.getTargetScore().multiply(r.getTargetWeight()).divide(new BigDecimal(targetWeightSum), 4, BigDecimal.ROUND_HALF_UP), 4, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                            }
+                                        }
+                                        matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
+                                    }
                                 }
                                 Double usualMatrixSumScore = scoreObjDtoList.stream().mapToDouble(s -> s.getMatrixScore().doubleValue()).sum();
                                 reportExamStudentDto.setScore(reportExamStudentDto.getScore().add(new BigDecimal(usualMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP)));