Browse Source

Merge remote-tracking branch 'origin/dev_screen_data' into dev_temp

dev_shibei_match
zxc 5 years ago
parent
commit
950f03d7ea
  1. 4
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/screen/constant/ScreenConstant.java
  2. 6
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/screen/impl/AgencyServiceImpl.java
  3. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/indexcoll/FactIndexPartyAblityCpcMonthlyDao.java
  4. 4
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/screen/IndexDictEntity.java
  5. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/screen/IndexGroupDetailEntity.java
  6. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/screen/IndexGroupDetailTemplateEntity.java
  7. 15
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java
  8. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexModel.java
  9. 3
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/screen/impl/CpcIndexCalculateServiceImpl.java
  10. 5
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/screen/impl/IndexCalculateServiceImpl.java
  11. 80
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java
  12. 2
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/indexcoll/FactIndexPartyAblityCpcMonthlyDao.xml
  13. 26
      epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java

4
epmet-module/data-report/data-report-client/src/main/java/com/epmet/screen/constant/ScreenConstant.java

@ -12,4 +12,8 @@ public interface ScreenConstant {
String RATIO = "%";
String SQUARE_BRACKETS = "[]";
String COMMA = ",";
}

6
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/screen/impl/AgencyServiceImpl.java

@ -72,12 +72,12 @@ public class AgencyServiceImpl implements AgencyService {
* @date 2020/8/26 5:18 下午
*/
public List<Double> getCenterMark(String centerMark){
if (centerMark.length() == NumConstant.ZERO) {
if (centerMark.length() == NumConstant.ZERO || centerMark.equals(ScreenConstant.SQUARE_BRACKETS)) {
return new ArrayList<>();
}
List<Double> result = new ArrayList<>();
String substring = centerMark.substring(2, centerMark.length() - 2);
String[] split = substring.split(",");
String substring = centerMark.substring(NumConstant.TWO, centerMark.length() - NumConstant.TWO);
String[] split = substring.split(ScreenConstant.COMMA);
for (String s : split) {
result.add(Double.valueOf(s));
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/indexcoll/FactIndexPartyAblityCpcMonthlyDao.java

@ -70,7 +70,7 @@ public interface FactIndexPartyAblityCpcMonthlyDao extends BaseDao<FactIndexPart
void batchInsertFactIndexPartyAblityCpcMonthly(@Param("list") List<GridPartyMemberDataFormDTO> list,
@Param("customerId") String customerId);
List<FactIndexPartyAblityCpcMonthlyEntity> getCountByMonthId(@Param("customerId") String customerId, @Param("monthId") String monthId);
Map<String,BigDecimal> getCountByMonthId(@Param("customerId") String customerId, @Param("monthId") String monthId);
Map<String, BigDecimal> getExtremeValue(@Param("customerId") String customerId);
}

4
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/screen/IndexDictEntity.java

@ -50,4 +50,8 @@ public class IndexDictEntity extends BaseEpmetEntity {
*/
private String level;
/**
* 正相关positive负相关negative
*/
private String correlation;
}

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/screen/IndexGroupDetailEntity.java

@ -77,4 +77,9 @@ public class IndexGroupDetailEntity extends BaseEpmetEntity {
*/
private String allParentIndexCode;
/**
* 正相关positive负相关negative
*/
private String correlation;
}

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/entity/screen/IndexGroupDetailTemplateEntity.java

@ -72,4 +72,9 @@ public class IndexGroupDetailTemplateEntity extends BaseEpmetEntity {
*/
private String allParentIndexCode;
/**
* 正相关positive负相关negative
*/
private String correlation;
}

15
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexExcelDataListener.java

@ -29,6 +29,7 @@ import java.util.stream.Collectors;
*/
public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> {
private static final Logger LOGGER = LoggerFactory.getLogger(IndexExcelDataListener.class);
private String POSITIVE = "positive";
/**
* 每隔5条存储数据库实际使用中可以3000条然后清理list 方便内存回收
*/
@ -85,6 +86,8 @@ public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> {
data.setWeight(preWheight);
}
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));
//TODO 默认正相关
data.setCorrelation(POSITIVE);
IndexDictEntity entity = new IndexDictEntity();
IndexDictEntity entity2 = new IndexDictEntity();
@ -144,6 +147,7 @@ public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> {
templateEntity.setIndexId(indexDictEntity.getId());
templateEntity.setAllParentIndexCode(allIndexCodeSb.toString());
templateEntity.setId(UniqueIdGenerator.generate());
templateEntity.setCorrelation(index.getCorrelation());
buildIndexGroupDetail(templateEntity,indexDictEntity, index, group1, 2);
indexGroupDetailMap.put(index.getLevel1Index()+level4Index,templateEntity);
}
@ -156,10 +160,10 @@ public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> {
if (templateEntity == null) {
templateEntity = new IndexGroupDetailTemplateEntity();
templateEntity.setIndexGroupId(group2.getId());
System.out.println("=========="+group2.getId());
templateEntity.setIndexId(indexDictEntity.getId());
templateEntity.setAllParentIndexCode(allIndexCodeSb.toString());
templateEntity.setId(UniqueIdGenerator.generate());
templateEntity.setCorrelation(index.getCorrelation());
buildIndexGroupDetail(templateEntity,indexDictEntity, index, group2, 5);
indexGroupDetailMap.put(index.getLevel1Index()+index.getLevel5Index(),templateEntity);
}
@ -198,6 +202,7 @@ public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> {
templateEntity.setIndexId(indexDictEntity.getId());
templateEntity.setAllParentIndexCode(allIndexCodeSb.toString());
templateEntity.setId(UniqueIdGenerator.generate());
templateEntity.setCorrelation(index.getCorrelation());
buildIndexGroupDetail(templateEntity,indexDictEntity, index, group1, 2);
indexGroupDetailMap.put(level2Index,templateEntity);
}
@ -212,7 +217,7 @@ public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> {
templateEntity.setIndexId(indexDictEntity.getId());
templateEntity.setAllParentIndexCode(allIndexCodeSb.toString());
templateEntity.setId(UniqueIdGenerator.generate());
templateEntity.setCorrelation(index.getCorrelation());
buildIndexGroupDetail(templateEntity, indexDictEntity, index, group2, 5);
indexGroupDetailMap.put(index.getLevel1Index()+index.getLevel5Index(),templateEntity);
}
@ -240,33 +245,39 @@ public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> {
}
private void buildIndexDicEntity(IndexModel data, IndexDictEntity entity, IndexDictEntity entity2, IndexDictEntity entity3, IndexDictEntity entity4, IndexDictEntity entity5) {
if (!indexDicMap.containsKey(data.getLevel1Index())) {
entity.setId(UniqueIdGenerator.generate());
entity.setIndexName(data.getLevel1Index());
entity.setCorrelation(data.getCorrelation());
entity.setLevel("1");
indexDicMap.put(data.getLevel1Index(), entity);
}
if (!indexDicMap.containsKey(data.getLevel2Index())) {
entity2.setId(UniqueIdGenerator.generate());
entity2.setIndexName(data.getLevel2Index());
entity2.setCorrelation(data.getCorrelation());
entity2.setLevel("2");
indexDicMap.put(data.getLevel2Index(), entity2);
}
if (!indexDicMap.containsKey(data.getLevel3Index())) {
entity3.setId(UniqueIdGenerator.generate());
entity3.setIndexName(data.getLevel3Index());
entity3.setCorrelation(data.getCorrelation());
entity3.setLevel("3");
indexDicMap.put(data.getLevel3Index(), entity3);
}
if (!indexDicMap.containsKey(data.getLevel4Index())) {
entity4.setId(UniqueIdGenerator.generate());
entity4.setIndexName(data.getLevel4Index());
entity4.setCorrelation(data.getCorrelation());
entity4.setLevel("4");
indexDicMap.put(data.getLevel4Index(), entity4);
}
if (!indexDicMap.containsKey(data.getLevel5Index())) {
entity5.setId(UniqueIdGenerator.generate());
entity5.setIndexName(data.getLevel5Index());
entity5.setCorrelation(data.getCorrelation());
entity5.setLevel("5");
indexDicMap.put(data.getLevel5Index(), entity5);
}

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/model/IndexModel.java

@ -23,4 +23,9 @@ public class IndexModel {
private String level5Weight;
@ExcelProperty(value = "阈值")
private String threshold;
/**
* 正相关positive负相关negative
*/
@ExcelProperty(value = "相关性")
private String correlation;
}

3
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/screen/impl/CpcIndexCalculateServiceImpl.java

@ -5,7 +5,6 @@ import com.epmet.dao.indexcoll.FactIndexPartyAblityCpcMonthlyDao;
import com.epmet.dao.screen.IndexCodeFieldReDao;
import com.epmet.dao.screen.IndexGroupDetailDao;
import com.epmet.dto.indexcal.CalculateCommonFormDTO;
import com.epmet.entity.indexcoll.FactIndexPartyAblityCpcMonthlyEntity;
import com.epmet.entity.screen.IndexGroupDetailEntity;
import com.epmet.eum.IndexCodeEnum;
import com.epmet.service.screen.CpcIndexCalculateService;
@ -43,7 +42,7 @@ public class CpcIndexCalculateServiceImpl implements CpcIndexCalculateService {
}
log.info(JSON.toJSONString(minAndMaxList));
List<FactIndexPartyAblityCpcMonthlyEntity> list = factIndexPartyAblityCpcMonthlyDao.getCountByMonthId(formDTO.getCustomerId(), formDTO.getMonthId());
Map<String, BigDecimal> list = factIndexPartyAblityCpcMonthlyDao.getCountByMonthId(formDTO.getCustomerId(), formDTO.getMonthId());
return null;
}
}

5
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/screen/impl/IndexCalculateServiceImpl.java

@ -7,7 +7,6 @@ import com.epmet.dao.screen.IndexGroupDao;
import com.epmet.dao.screen.IndexGroupDetailDao;
import com.epmet.dto.indexcal.CalculateCommonFormDTO;
import com.epmet.dto.screen.form.IndexCalculateForm;
import com.epmet.entity.indexcoll.FactIndexPartyAblityCpcMonthlyEntity;
import com.epmet.feign.EpmetCommonServiceOpenFeignClient;
import com.epmet.service.indexcal.GridCorreLationService;
import com.epmet.service.screen.IndexCalculateService;
@ -18,8 +17,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author liujianjun
@ -57,7 +58,7 @@ public class IndexCalculateServiceImpl implements IndexCalculateService {
CalculateCommonFormDTO calculateCommonFormDTO=new CalculateCommonFormDTO(customerId, formDTO.getMonthId());
//计算党员
try {
List<FactIndexPartyAblityCpcMonthlyEntity> list = factIndexPartyAblityCpcMonthlyDao.getCountByMonthId(customerId, formDTO.getMonthId());
Map<String, BigDecimal> list = factIndexPartyAblityCpcMonthlyDao.getCountByMonthId(customerId, formDTO.getMonthId());
} catch (Exception e) {
}

80
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/BigDecimalScoreCalculator.java

@ -0,0 +1,80 @@
package com.epmet.support.normalizing;
import java.math.BigDecimal;
import java.util.List;
/**
* BigDecimal的分值计算
* 每一种数据类型的计算都要继承ScoreCalculator并且实现其抽象方法实现数据类型的转换
*/
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;
this.maxScore = maxScore;
this.correlation = correlation;
prepare4SourceArray();
System.out.println("最小值:"+minScore+";最大值:"+maxScore);
}
/**
* 初始化基于原数组的整数分值计算
* @param sourceList 源数据完整列表
* @param minScore 分值区间的左边界
* @param maxScore 分值区间的右边界
* @param correlation 相关性
*/
public BigDecimalScoreCalculator(List<BigDecimal> sourceList, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) {
this.sourceArrary = sourceList.toArray();
this.minScore = minScore;
this.maxScore = maxScore;
this.correlation = correlation;
prepare4SourceArray();
System.out.println("最小值:"+minScore+";最大值:"+maxScore);
}
/**
* 初始化基于边界值的整数分值计算
* @param minSourceValue 左边界值
* @param maxSourceValue 右边界值
* @param minScore 分值区间的左边界
* @param maxScore 分值区间的右边界
* @param correlation 相关性
*/
public BigDecimalScoreCalculator(BigDecimal minSourceValue, BigDecimal maxSourceValue, BigDecimal minScore, BigDecimal maxScore, Correlation correlation) {
this.minScore = minScore;
this.maxScore = maxScore;
this.minValue = minSourceValue;
this.maxValue = maxSourceValue;
this.correlation = correlation;
prepare4BoundaryValue();
System.out.println("最小值:"+minScore+";最大值:"+maxScore);
}
@Override
public BigDecimal getMaxFromSourceArray() {
BigDecimal[] intSourceArrary = (BigDecimal[]) this.sourceArrary;
return intSourceArrary[intSourceArrary.length - 1];
}
@Override
public BigDecimal getMinFromSourceArray() {
BigDecimal[] intSourceArrary = (BigDecimal[]) this.sourceArrary;
return intSourceArrary[0];
}
@Override
public BigDecimal convertValue2BigDecimal(Object sourceValue) {
return (BigDecimal) sourceValue;
}
}

2
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/indexcoll/FactIndexPartyAblityCpcMonthlyDao.xml

@ -94,7 +94,7 @@
</foreach>
</insert>
<select id="getCountByMonthId" resultMap="factIndexPartyAblityCpcMonthlyMap">
<select id="getCountByMonthId" resultType="java.util.Map">
SELECT
CREATE_TOPIC_COUNT,
JOIN_TOPIC_COUNT,

26
epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/DemoScoreCal.java

@ -91,5 +91,31 @@ public class DemoScoreCal {
System.err.println("--------------------------------");
}
@Test
public void testBigDecimalBatchCalculate() 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);
List<SampleValue> index1SampleValues = Arrays.asList(new SampleValue<>("id1", new BigDecimal(4)), new SampleValue<>("id2", new BigDecimal(1)), new SampleValue<>("id3", new BigDecimal(8)));
List<SampleValue> 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(1), sc1);
IndexInputVO index2VO = new IndexInputVO("bbb", index2SampleValues, new BigDecimal(1), sc2);
List<IndexInputVO> indexInputVOS = Arrays.asList(index1VO, index2VO);
BatchScoreCalculator batchScoreCalculator = new BatchScoreCalculator();
List<IndexOutputVO> result = batchScoreCalculator.exec(indexInputVOS);
System.err.println("--------------------------------");
result.stream().forEach(r -> System.out.println(r));
Thread.sleep(10);
System.err.println("--------------------------------");
}
}

Loading…
Cancel
Save