Browse Source

指标计算返回明细分数值

dev_shibei_match
jianjun 5 years ago
parent
commit
7ff481c5b2
  1. 48
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/BatchScoreCalculator.java
  2. 25
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/CalculateResult.java
  3. 12
      epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java

48
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<IndexOutputVO> getScoreDetailOfIndexId(List<IndexInputVO> indexInputVOS) {
@ -26,7 +28,7 @@ public class BatchScoreCalculator {
// 循环同一个指标内的多个样本值的SampleValue列表
List<SampleScore> 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<String, CalculateResult> getScoreTotalOfSampleId(List<IndexInputVO> indexInputVOS) {
// 每个样本的总得分
HashMap<String, CalculateResult> scoreCountOfSamples = new HashMap<>();
//遍历指标
for (IndexInputVO idx : indexInputVOS) {
// 每个指标循环一次
List<SampleValue> 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;
}
}

25
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<SampleScore> details;
}

12
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<String, BigDecimal> result = batchScoreCalculator.getScoreCountOfSampleId(indexInputVOS);
HashMap<String, CalculateResult> 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---------------");
}

Loading…
Cancel
Save