diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/indexcal/impl/CpcIndexCalculateServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/indexcal/impl/CpcIndexCalculateServiceImpl.java index c2d8a924cb..b7370217ed 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/indexcal/impl/CpcIndexCalculateServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/indexcal/impl/CpcIndexCalculateServiceImpl.java @@ -240,7 +240,7 @@ public class CpcIndexCalculateServiceImpl implements CpcIndexCalculateService { ScoreConstants.MAX_SCORE, Correlation.getCorrelation(index.getCorrelation()) ); - IndexInputVO indexInputVO = new IndexInputVO(index.getIndexCode(),new ArrayList<>(),index.getThreshold(),index.getWeight(),scoreCalculator); + IndexInputVO indexInputVO = new IndexInputVO(index.getIndexCode(), new ArrayList<>(), index.getThreshold(), index.getWeight(), scoreCalculator); map.put(index.getIndexCode(), indexInputVO); } return map; diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java index 1655c73a6d..fe0412ba3f 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java @@ -1,6 +1,9 @@ package com.epmet.support.normalizing; +import com.alibaba.fastjson.JSON; + import java.math.BigDecimal; +import java.util.Arrays; import java.util.List; /** @@ -9,14 +12,14 @@ import java.util.List; */ public class BigDecimalScoreCalculator extends ScoreCalculator { - /** + /* *//** * 初始化基于原数组的整数分值计算 * ☆☆☆ 务必在该构造方法最后调用父类的prepare()方法 ☆☆☆ * @param sourceArray 源数据完整数组 * @param minScore 分值区间的左边界 * @param maxScore 分值区间的右边界 * @param correlation 相关性 - */ + *//* public BigDecimalScoreCalculator(BigDecimal[] sourceArray, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) { this.sourceArrary = sourceArray.clone(); this.minScore = minScore; @@ -26,13 +29,13 @@ public class BigDecimalScoreCalculator extends ScoreCalculator { System.out.println("最小值:"+minScore+";最大值:"+maxScore); } - /** + *//** * 初始化基于原数组的整数分值计算 * @param sourceList 源数据完整列表 * @param minScore 分值区间的左边界 * @param maxScore 分值区间的右边界 * @param correlation 相关性 - */ + *//* public BigDecimalScoreCalculator(List sourceList, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) { this.sourceArrary = sourceList.toArray(); this.minScore = minScore; @@ -40,7 +43,7 @@ public class BigDecimalScoreCalculator extends ScoreCalculator { this.correlation = correlation; prepare4SourceArray(); System.out.println("最小值:"+minScore+";最大值:"+maxScore); - } + }*/ /** * 初始化基于边界值的整数分值计算 @@ -77,4 +80,13 @@ public class BigDecimalScoreCalculator extends ScoreCalculator { public BigDecimal convertValue2BigDecimal(Object sourceValue) { return (BigDecimal) sourceValue; } + + public static void main(String[] args) { + BigDecimal minScore = new BigDecimal(0); + BigDecimal maxScore = new BigDecimal(100); + ScoreCalculator sc = new BigDecimalScoreCalculator(new BigDecimal("0.1"),new BigDecimal("1"), minScore, maxScore, Correlation.POSITIVE); + List ts = Arrays.asList(new BigDecimal("0.1"),new BigDecimal("1")); + List normalize = sc.normalize(ts); + System.out.println(JSON.toJSONString(normalize)); + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/ScoreCalculator.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/ScoreCalculator.java index 0eab3dcf4b..07407d5032 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/ScoreCalculator.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/ScoreCalculator.java @@ -55,8 +55,8 @@ public abstract class ScoreCalculator { maxValue = getMaxFromSourceArray(); minValue = getMinFromSourceArray(); //计算系数 - System.out.println("最小值:"+minScore+";最大值:"+maxScore); coefficient = calcuteCoefficient(minValue, maxValue); + //System.out.println("最小分值:"+minScore+";最大分值:"+maxScore+";系数:"+coefficient); } /** @@ -176,7 +176,6 @@ public abstract class ScoreCalculator { if (fenmu.compareTo(BigDecimal.ZERO)==0)return new BigDecimal(0); BigDecimal fenzi = maxScore.subtract(minScore); BigDecimal divide = fenzi.divide(fenmu, MathContext.DECIMAL32); - System.out.println("分子:"+fenzi+"分母:"+fenmu+"系数:"+divide.toString()); return divide; } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/IndexInputVO.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/IndexInputVO.java index c67b1c494d..57c6fbc396 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/IndexInputVO.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/IndexInputVO.java @@ -3,15 +3,16 @@ package com.epmet.support.normalizing.batch; import com.epmet.support.normalizing.ScoreCalculator; import lombok.AllArgsConstructor; import lombok.Data; -import lombok.NoArgsConstructor; +import java.io.Serializable; import java.math.BigDecimal; import java.util.List; @Data @AllArgsConstructor -public class IndexInputVO { +public class IndexInputVO implements Serializable { + private static final long serialVersionUID = -4855313801481921595L; /** * 指标标记,由使用者传入,用以标记该条指标的独有特性,一般用id或者code * 非必填 diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/SampleValue.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/SampleValue.java index 0818cc8d97..5a42508e64 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/SampleValue.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/SampleValue.java @@ -3,13 +3,16 @@ package com.epmet.support.normalizing.batch; import lombok.AllArgsConstructor; import lombok.Data; +import java.io.Serializable; + /** * 样本值对象 */ @Data @AllArgsConstructor -public class SampleValue { +public class SampleValue implements Serializable { + private static final long serialVersionUID = 8661385412757324539L; private String sampleId; private T sampleValue; diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/indexcoll/FactIndexPartyAblityCpcMonthlyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/indexcoll/FactIndexPartyAblityCpcMonthlyDao.xml index c9f807d881..edd55c90ea 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/indexcoll/FactIndexPartyAblityCpcMonthlyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/indexcoll/FactIndexPartyAblityCpcMonthlyDao.xml @@ -73,7 +73,7 @@ SELECT MIN( CREATE_TOPIC_COUNT ) CREATE_TOPIC_COUNT_MIN, MAX( CREATE_TOPIC_COUNT ) CREATE_TOPIC_COUNT_MAX, - MAX( JOIN_TOPIC_COUNT ) JOIN_TOPIC_COUNT_MIN, + MIN( JOIN_TOPIC_COUNT ) JOIN_TOPIC_COUNT_MIN, MAX( JOIN_TOPIC_COUNT ) JOIN_TOPIC_COUNT_MAX, MIN( SHIFT_ISSUE_COUNT ) SHIFT_ISSUE_COUNT_MIN, MAX( SHIFT_ISSUE_COUNT ) SHIFT_ISSUE_COUNT_MAX, 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 6da70db9c8..443055b1f9 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 @@ -122,27 +122,63 @@ public class DemoScoreCal { public void testBigDecimalBatchCalculateGroupBySampleId() throws InterruptedException { //{4,8,1,3,2} - // 每个指标需要单独的分支计算器,因为每个指标的最大最小值是不同的 - ScoreCalculator sc1 = new BigDecimalScoreCalculator(new BigDecimal(1), new BigDecimal(8), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.NEGATIVE); - ScoreCalculator sc2 = new BigDecimalScoreCalculator(new BigDecimal(1), new BigDecimal(8), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.NEGATIVE); + //分值计算器 每个指标需要单独的分值计算器,因为每个指标的最大最小值是不同的 + ScoreCalculator sc1 = new BigDecimalScoreCalculator(new BigDecimal(50), new BigDecimal(100), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.POSITIVE); + ScoreCalculator sc2 = new BigDecimalScoreCalculator(new BigDecimal(20), new BigDecimal(100), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.POSITIVE); + ScoreCalculator sc3 = new BigDecimalScoreCalculator(new BigDecimal(20), new BigDecimal(40), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.POSITIVE); + ScoreCalculator sc4 = new BigDecimalScoreCalculator(new BigDecimal(10), new BigDecimal(100), ScoreConstants.MIN_SCORE, ScoreConstants.MAX_SCORE, Correlation.POSITIVE); + + //每个指标的数值 比如 a指标里有5条数据 + List index1SampleValues = Arrays.asList( + new SampleValue<>("id1", new BigDecimal(100)), + new SampleValue<>("id2", new BigDecimal(50)), + new SampleValue<>("id3", new BigDecimal(60)), + new SampleValue<>("id4", new BigDecimal(80)), + new SampleValue<>("id5", new BigDecimal(80)) + ); + + List index1SampleValues2 = Arrays.asList( + new SampleValue<>("id1", new BigDecimal(100)), + new SampleValue<>("id2", new BigDecimal(80)), + new SampleValue<>("id3", new BigDecimal(80)), + new SampleValue<>("id4", new BigDecimal(20)), + new SampleValue<>("id5", new BigDecimal(20)) + ); + + List index1SampleValues3 = Arrays.asList( + new SampleValue<>("id1", new BigDecimal(40)), + new SampleValue<>("id2", new BigDecimal(20)), + new SampleValue<>("id3", new BigDecimal(40)), + new SampleValue<>("id4", new BigDecimal(30)), + new SampleValue<>("id5", new BigDecimal(20)) + ); + + List index1SampleValues4 = Arrays.asList( + new SampleValue<>("id1", new BigDecimal(20)), + new SampleValue<>("id2", new BigDecimal(100)), + new SampleValue<>("id3", new BigDecimal(10)), + new SampleValue<>("id4", new BigDecimal(50)), + new SampleValue<>("id5", new BigDecimal(20)) + ); - List index1SampleValues = Arrays.asList(new SampleValue<>("id1", new BigDecimal(4)), new SampleValue<>("id2", new BigDecimal(1)), new SampleValue<>("id3", new BigDecimal(8))); - List index2SampleValues = Arrays.asList(new SampleValue<>("id1", new BigDecimal(1)), new SampleValue<>("id2", new BigDecimal(8)), new SampleValue<>("id3", new BigDecimal(3))); // 每个指标的信息,包括样本列表,权重,指标标记 - IndexInputVO index1VO = new IndexInputVO("aaa", index1SampleValues, new BigDecimal(6), new BigDecimal(1), sc1); - IndexInputVO index2VO = new IndexInputVO("bbb", index2SampleValues, new BigDecimal(6), new BigDecimal(1), sc2); + IndexInputVO index1VO = new IndexInputVO("aaa1", index1SampleValues, new BigDecimal(-1), new BigDecimal(0.2), sc1); + IndexInputVO index2VO = new IndexInputVO("aaa2", index1SampleValues2, new BigDecimal(-1), new BigDecimal(0.15), sc2); + IndexInputVO index3VO = new IndexInputVO("aaa3", index1SampleValues3, new BigDecimal(-1), new BigDecimal(0.15), sc3); + IndexInputVO index4VO = new IndexInputVO("aaa4", index1SampleValues4, new BigDecimal(-1), new BigDecimal(0.5), sc4); - List indexInputVOS = Arrays.asList(index1VO, index2VO); + + List indexInputVOS = Arrays.asList(index1VO, index2VO,index3VO,index4VO); BatchScoreCalculator batchScoreCalculator = new BatchScoreCalculator(); HashMap result = batchScoreCalculator.getScoreCountOfSampleId(indexInputVOS); - System.err.println("--------------------------------"); + System.err.println("----------------1----------------"); result.forEach((key, value) -> { System.out.println(key.concat("的得分为:").concat(value.toString())); }); - System.err.println("--------------------------------"); + System.err.println("-----------------2---------------"); }