浏览代码

课程目标达成度修改NEW

wangliang 1 年之前
父节点
当前提交
01f0a2d2b6

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

@@ -380,15 +380,17 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                         }
 
                         //平时作业换算
-                        List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
-                        for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
-                            reportEvaluationDto = reportEvaluationDtoMap.get(reportExamStudentUsualScoreObjDto.getEvaluationId());
-                            reportEvaluationDto.setTargetAvgScore(reportExamStudentUsualScoreObjDto.getMatrixAvgScore());
-                            targetAvgSumScore = targetAvgSumScore + reportEvaluationDto.getTargetAvgScore();
-                            targetSumScore = targetSumScore.add(reportEvaluationDto.getTargetScore());
+                        if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
+                            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                            for (ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto : reportExamStudentUsualScoreObjDtoList) {
+                                reportEvaluationDto = reportEvaluationDtoMap.get(reportExamStudentUsualScoreObjDto.getEvaluationId());
+                                reportEvaluationDto.setTargetAvgScore(reportExamStudentUsualScoreObjDto.getMatrixAvgScore());
+                                targetAvgSumScore = targetAvgSumScore + reportEvaluationDto.getTargetAvgScore();
+                                targetSumScore = targetSumScore.add(reportEvaluationDto.getTargetScore());
 //                            BigDecimal bigDecimal = new BigDecimal(reportExamStudentUsualScoreObjDto.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP);
 //                            BigDecimal targetEvaluationValueTemp = bigDecimal.divide(reportEvaluationDto.getTargetScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(reportEvaluationDto.getTargetWeight().divide(courseTargetWebDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
 //                            targetEvaluationValue = targetEvaluationValue.add(targetEvaluationValueTemp);
+                            }
                         }
 
                         //计算目标达成度
@@ -785,7 +787,7 @@ public class TRBasicInfoServiceImpl extends ServiceImpl<TRBasicInfoMapper, TRBas
                 List<ReportExamStudentTargetDto> reportExamStudentTargetDtoList = JSONArray.parseArray(trExamStudentTemp.getResultDetail(), ReportExamStudentTargetDto.class);
                 for (ReportExamStudentTargetDto reportExamStudentTargetDto : reportExamStudentTargetDtoList) {
                     int finalScoreSize = Objects.nonNull(reportExamStudentTargetDto.getFinalScore()) ? 1 : 0;
-                    int size = finalScoreSize + reportExamStudentTargetDto.getUsualScore().getScoreList().size();
+                    int size = finalScoreSize + (Objects.nonNull(reportExamStudentTargetDto.getUsualScore()) && !CollectionUtils.isEmpty(reportExamStudentTargetDto.getUsualScore().getScoreList()) ? reportExamStudentTargetDto.getUsualScore().getScoreList().size() : 1);
                     examStudent_cells_1.add(Cells.of(reportExamStudentTargetDto.getTargetName()).center().create());
                     ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = reportExamStudentTargetDto.getUsualScore();
                     //平常作业

+ 62 - 50
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TRExamStudentServiceImpl.java

@@ -77,31 +77,36 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                     List<ReportExamStudentTargetDto> targetList = CollectionUtils.isEmpty(reportExamStudentDto.getTargetList()) ? new ArrayList<>() : reportExamStudentDto.getTargetList();
                     if (targetWordMap.containsKey(k)) {
                         List<ReportExamStudentUsualScoreObjDto> scoreObjDtoList = reportExamStudentUsualScoreSumDto.getScoreMap().get(k);
-                        if (!CollectionUtils.isEmpty(scoreObjDtoList)) {
-                            CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
+                        CourseTargetWordDto courseTargetWordDto = targetWordMap.get(k);
 //                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k));
 //                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(courseTargetWordDto.getUsualScoreDto().getUsualScoreTargetSumWeight(), scoreObjDtoList);
 
-                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = Objects.nonNull(courseTargetWordDto.getFinalScoreDto()) ? new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k)) : null;
-                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(scoreObjDtoList);
+                        ReportExamStudentFinalScoreDto reportExamStudentFinalScoreDto = Objects.nonNull(courseTargetWordDto.getFinalScoreDto()) ? new ReportExamStudentFinalScoreDto(courseTargetWordDto.getFinalScoreDto(), finalScoreResult.getFinalScoreTarget().get(k)) : null;
+                        ReportExamStudentUsualScoreDto reportExamStudentUsualScoreDto = new ReportExamStudentUsualScoreDto(scoreObjDtoList);
 
-                            BigDecimal targetMatrixSumScore = new BigDecimal(0);
-                            AtomicReference<BigDecimal> matrixDegree = new AtomicReference<>(new BigDecimal(0));
-                            if (!reportExamStudentTargetDtoMap.containsKey(k)) {
-                                Double targetMatrixScore = 0.0d;
-                                if (Objects.nonNull(courseTargetWordDto.getFinalScoreDto())) {
-                                    //old卷面分*权重/100
-                                    //new卷面分/目标分
+                        BigDecimal targetMatrixSumScore = new BigDecimal(0);
+                        AtomicReference<BigDecimal> matrixDegree = new AtomicReference<>(new BigDecimal(0));
+                        if (!reportExamStudentTargetDtoMap.containsKey(k)) {
+                            Double targetMatrixScore = 0.0d;
+                            if (Objects.nonNull(courseTargetWordDto.getFinalScoreDto())) {
+                                //old卷面分*权重/100
+                                //new卷面分/目标分
 //                                    targetMatrixScore = new BigDecimal(v).divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                                    //卷面分*权重/100
-                                    targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
-                                    BigDecimal bigDecimal = new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                    BigDecimal targetEvaluationValue = bigDecimal.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                    matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
-                                }
-                                targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
-                                //平时作业总和+累加
+                                //卷面分*权重/100
+                                targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                BigDecimal bigDecimal = new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal targetEvaluationValue = bigDecimal.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
+                            }
+                            targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
+
+                            if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
+                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
+                            }
+                            ReportExamStudentTargetDto reportExamStudentTargetDto = null;
+                            //平时作业总和+累加
+                            if (!CollectionUtils.isEmpty(scoreObjDtoList)) {
                                 for (ReportExamStudentUsualScoreObjDto r : scoreObjDtoList) {
                                     BigDecimal bigDecimal = new BigDecimal(r.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP);
                                     BigDecimal targetEvaluationValue = bigDecimal.divide(r.getTargetScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(r.getTargetWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
@@ -111,36 +116,39 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                                 reportExamStudentDto.setScore(reportExamStudentDto.getScore() + usualMatrixSumScore);
                                 ReportExamStudentFinalScoreDto reportExamStudentFinalScoreTempDto = null;
                                 if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
-                                    reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
                                     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(scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())), matrixDegree.get());
-                                reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
+                                reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreTempDto, new ReportExamStudentUsualScoreDto(scoreObjDtoList.stream().map(ReportExamStudentUsualScoreObjDto::new).collect(Collectors.toList())), matrixDegree.get());
                             } else {
-                                ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
-                                ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = null;
-                                Double targetMatrixScore = 0.0d;
-                                if (Objects.nonNull(reportExamStudentTargetDto.getFinalScore())) {
-                                    reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
-                                    targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+                                reportExamStudentTargetDto = new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, null, matrixDegree.get());
+                            }
+                            reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
+                        } else {
+                            ReportExamStudentTargetDto reportExamStudentTargetDto = reportExamStudentTargetDtoMap.get(k);
+                            ReportExamStudentFinalScoreDto reportExamStudentFinalScoreAvgDto = null;
+                            Double targetMatrixScore = 0.0d;
+                            if (Objects.nonNull(reportExamStudentTargetDto.getFinalScore())) {
+                                reportExamStudentFinalScoreAvgDto = reportExamStudentTargetDto.getFinalScore();
+                                targetMatrixScore = new BigDecimal(v).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight()).divide(SystemConstant.PERCENT, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
 
-                                    BigDecimal bigDecimal = new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                    BigDecimal targetEvaluationValue = bigDecimal.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                    matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
-                                    reportExamStudentTargetDto.setMatrixDegree(matrixDegree.get());
-                                }
-                                targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
+                                BigDecimal bigDecimal = new BigDecimal(v).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                BigDecimal targetEvaluationValue = bigDecimal.divide(courseTargetWordDto.getFinalScoreDto().getFinalScoreTargetSumScore(), 2, BigDecimal.ROUND_HALF_UP).multiply(courseTargetWordDto.getFinalScoreDto().getFinalScoreSumWeight().divide(courseTargetWordDto.getTargetSumWeight(), 2, BigDecimal.ROUND_HALF_UP)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
+                                reportExamStudentTargetDto.setMatrixDegree(matrixDegree.get());
+                            }
+                            targetMatrixSumScore = targetMatrixSumScore.add(new BigDecimal(targetMatrixScore)).setScale(2, BigDecimal.ROUND_HALF_UP);
+                            reportExamStudentDto.setScore(reportExamStudentDto.getScore() + targetMatrixScore);
 
-                                if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
-                                    reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
-                                    reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(targetMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
-                                }
-                                ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
+                            if (Objects.nonNull(reportExamStudentFinalScoreDto)) {
+                                reportExamStudentFinalScoreDto.setTargetMatrixSumScore(targetMatrixSumScore.doubleValue());
+                                reportExamStudentFinalScoreAvgDto.setTargetMatrixSumScore(new BigDecimal(reportExamStudentFinalScoreAvgDto.getTargetMatrixSumScore()).add(targetMatrixSumScore).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                            }
+                            ReportExamStudentUsualScoreDto reportExamStudentUsualScoreAvgDto = reportExamStudentTargetDto.getUsualScore();
 
-                                //平时作业总和+累加
-                                List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                            //平时作业总和+累加
+                            List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                            if (Objects.nonNull(reportExamStudentUsualScoreAvgDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreObjDtoList)) {
                                 List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjAvgDtoList = reportExamStudentUsualScoreAvgDto.getScoreList();
                                 for (int i = 0; i < reportExamStudentUsualScoreObjDtoList.size(); i++) {
                                     ReportExamStudentUsualScoreObjDto reportExamStudentUsualScoreObjDto = reportExamStudentUsualScoreObjDtoList.get(i);
@@ -150,10 +158,10 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                                     matrixDegree.set(matrixDegree.get().add(targetEvaluationValue));
                                     reportExamStudentUsualScoreObjAvgDtoList.get(i).setMatrixScore(new BigDecimal(reportExamStudentUsualScoreObjAvgDtoList.get(i).getMatrixScore()).add(new BigDecimal(reportExamStudentUsualScoreObjDto.getMatrixScore())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
                                 }
-                                reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
                             }
-                            targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto, matrixDegree.get()));
+                            reportExamStudentTargetDtoMap.put(k, reportExamStudentTargetDto);
                         }
+                        targetList.add(new ReportExamStudentTargetDto(courseTargetWordDto, reportExamStudentFinalScoreDto, reportExamStudentUsualScoreDto, matrixDegree.get()));
                     }
                     reportExamStudentDto.setTargetList(targetList);
                 });
@@ -168,7 +176,9 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
             AtomicReference<Double> usualScoreSum = new AtomicReference<>(0.0d);
             targetDtoList.stream().peek(e -> {
                 targetScoreSum.set(targetScoreSum.get() + (Objects.nonNull(e.getFinalScore()) ? e.getFinalScore().getMatrixAvgScore() : 0.0d));
-                usualScoreSum.set(usualScoreSum.get() + e.getUsualScore().getScoreList().stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixAvgScore).sum());
+                if (Objects.nonNull(e.getUsualScore()) && !CollectionUtils.isEmpty(e.getUsualScore().getScoreList())) {
+                    usualScoreSum.set(usualScoreSum.get() + e.getUsualScore().getScoreList().stream().mapToDouble(ReportExamStudentUsualScoreObjDto::getMatrixAvgScore).sum());
+                }
             }).collect(Collectors.toList());
 
             Double score = new BigDecimal(targetScoreSum.get()).add(new BigDecimal(usualScoreSum.get())).setScale(1, BigDecimal.ROUND_DOWN).doubleValue();
@@ -418,10 +428,12 @@ public class TRExamStudentServiceImpl extends ServiceImpl<TRExamStudentMapper, T
                 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(Objects.nonNull(v.getTargetMatrixAvgScore()) ? v.getTargetMatrixAvgScore() : 0.0d + r.getMatrixAvgScore());
+            if (Objects.nonNull(reportExamStudentUsualScoreDto) && !CollectionUtils.isEmpty(reportExamStudentUsualScoreDto.getScoreList())) {
+                List<ReportExamStudentUsualScoreObjDto> reportExamStudentUsualScoreObjDtoList = reportExamStudentUsualScoreDto.getScoreList();
+                for (ReportExamStudentUsualScoreObjDto r : reportExamStudentUsualScoreObjDtoList) {
+                    r.setMatrixAvgScore(new BigDecimal(r.getMatrixScore()).divide(size, 2, BigDecimal.ROUND_HALF_UP).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
+                    v.setTargetMatrixAvgScore(Objects.nonNull(v.getTargetMatrixAvgScore()) ? v.getTargetMatrixAvgScore() : 0.0d + r.getMatrixAvgScore());
+                }
             }
             v.setTargetMatrixAvgScore(new BigDecimal(v.getTargetMatrixAvgScore()).setScale(1, BigDecimal.ROUND_DOWN).doubleValue());
             targetDtoList.add(v);