diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/BatchScoreCalculator.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/BatchScoreCalculator.java index 1ede9a4aae..d13eb8337a 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/BatchScoreCalculator.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/BatchScoreCalculator.java @@ -4,6 +4,7 @@ import com.epmet.support.normalizing.ScoreCalculator; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; @@ -12,6 +13,7 @@ public class BatchScoreCalculator { /** * 执行计算,每个指标中每个样本的得分明细 + * * @return 每一条都是一个指标的,所有样本对应的,得分值 */ public List getScoreDetailOfIndexId(List indexInputVOS) { @@ -26,7 +28,7 @@ public class BatchScoreCalculator { // 循环同一个指标内的多个样本值的SampleValue列表 List scores4OneIndex = indexValueVOs.stream().map(vo -> { - BigDecimal score = scoreCalculator.normalize(getFinalSampleValue(vo.getSampleValue(), threshold), weight).setScale(6, RoundingMode.HALF_UP);; + BigDecimal score = scoreCalculator.normalize(getFinalSampleValue(vo.getSampleValue(), threshold), weight).setScale(6, RoundingMode.HALF_UP); return new SampleScore(vo.getSampleId(), score); }).collect(Collectors.toList()); @@ -34,8 +36,49 @@ public class BatchScoreCalculator { }).collect(Collectors.toList()); } + /** + * 执行计算,以样本的所有指标总得分及明细分数值 + * + * @param indexInputVOS + * @return + */ + public HashMap getScoreTotalOfSampleId(List indexInputVOS) { + + // 每个样本的总得分 + HashMap scoreCountOfSamples = new HashMap<>(); + //遍历指标 + for (IndexInputVO idx : indexInputVOS) { + // 每个指标循环一次 + List indexValueVOs = idx.getIndexValueVOs(); + BigDecimal weight = idx.getWeight(); + ScoreCalculator scoreCalculator = idx.getScoreCalculator(); + BigDecimal threshold = idx.getThreshold(); + //遍历该指标下的每个数据 + for (SampleValue vo : indexValueVOs) { + String sampleId = vo.getSampleId(); + BigDecimal score = scoreCalculator.normalize(getFinalSampleValue(vo.getSampleValue(), threshold), weight).setScale(6, RoundingMode.HALF_UP); + CalculateResult result = scoreCountOfSamples.get(sampleId); + + if (result == null) { + score.setScale(6, RoundingMode.HALF_UP); + result = new CalculateResult(); + result.setSampleId(sampleId); + result.setTotalScore(new BigDecimal(0)); + result.setDetails(new ArrayList<>()); + scoreCountOfSamples.put(sampleId, result); + } + SampleScore sampleScore = new SampleScore(idx.getIndexId(), score); + result.getDetails().add(sampleScore); + result.setTotalScore(result.getTotalScore().add(score).setScale(6, RoundingMode.HALF_UP)); + } + } + + return scoreCountOfSamples; + } + /** * 执行计算,以样本的所有指标总得分 + * * @param indexInputVOS * @return */ @@ -69,6 +112,7 @@ public class BatchScoreCalculator { /** * 获取最终样本值 + * * @param realValue * @param threshold * @return @@ -81,6 +125,6 @@ public class BatchScoreCalculator { } return (bdRealValue.compareTo(threshold) < 0) || (bdRealValue.equals(threshold)) ? bdRealValue - : threshold ; + : threshold; } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/CalculateResult.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/CalculateResult.java new file mode 100644 index 0000000000..8430149681 --- /dev/null +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/CalculateResult.java @@ -0,0 +1,25 @@ +package com.epmet.support.normalizing.batch; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class CalculateResult implements Serializable { + private static final long serialVersionUID = -7966247924916816940L; + + /** + * 样本Id 对应inputVO中的sampleId + */ + private String sampleId; + /** + * 总得分 + */ + private BigDecimal totalScore; + /** + * 每项具体的分支 + */ + private List details; +} diff --git a/epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java b/epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java index d573765b6b..3b41f1ff2f 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java +++ b/epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java @@ -1,10 +1,7 @@ package com.epmet.stats.test.normalizing; import com.epmet.support.normalizing.*; -import com.epmet.support.normalizing.batch.BatchScoreCalculator; -import com.epmet.support.normalizing.batch.IndexInputVO; -import com.epmet.support.normalizing.batch.IndexOutputVO; -import com.epmet.support.normalizing.batch.SampleValue; +import com.epmet.support.normalizing.batch.*; import org.junit.Test; import java.math.BigDecimal; @@ -237,12 +234,19 @@ public class DemoScoreCal { BatchScoreCalculator batchScoreCalculator = new BatchScoreCalculator(); HashMap result = batchScoreCalculator.getScoreCountOfSampleId(indexInputVOS); + HashMap result2 = batchScoreCalculator.getScoreTotalOfSampleId(indexInputVOS); System.err.println("----------------1----------------"); result.forEach((key, value) -> { System.out.println(key.concat("的得分为:").concat(value.toString())); }); System.err.println("-----------------2---------------"); + + System.err.println("----------------11111111----------------"); + result2.forEach((key, value) -> { + System.out.println(key.concat("的得分为:").concat(value.toString())); + }); + System.err.println("-----------------2222222222---------------"); }