Browse Source

添加阈值

dev_shibei_match
yinzuomei 5 years ago
parent
commit
358ced173b
  1. 98
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/indexcal/impl/GridCorreLationServiceImpl.java

98
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/indexcal/impl/GridCorreLationServiceImpl.java

@ -2,6 +2,7 @@ package com.epmet.service.indexcal.impl;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.constant.StrConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.constant.IndexCalConstant;
import com.epmet.dao.indexcoll.FactIndexGovrnAblityGridMonthlyDao;
@ -70,33 +71,45 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
@Override
public Boolean calculateGridCorreLation(CalculateCommonFormDTO formDTO) {
boolean resultFlag = false;
//1、计算网格相关-党建能力
List<IndexGroupDetailEntity> dangJianNengLiList = indexGroupDetailService.getDetailListByParentCode(formDTO.getCustomerId(),
IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode(),
IndexCodeEnum.DANG_JIAN_NENG_LI.getCode());
if (!CollectionUtils.isEmpty(dangJianNengLiList)) {
//1、计算网格相关-党建能力
calculateGridDangJian(formDTO, dangJianNengLiList);
if (CollectionUtils.isEmpty(dangJianNengLiList)) {
logger.warn("calculateGridDangJian customerId:{} have not any indexGroupDetail", formDTO.getCustomerId());
throw new RenException("客户【网格相关:党建能力】指标权重信息不存在");
}
calculateGridDangJian(formDTO, dangJianNengLiList);
//2、计算网格相关-治理能力
List<IndexGroupDetailEntity> zhiLiNengLiList = indexGroupDetailService.getDetailListByParentCode(formDTO.getCustomerId(),
IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode(),
IndexCodeEnum.ZHI_LI_NENG_LI.getCode());
if (!CollectionUtils.isEmpty(zhiLiNengLiList)) {
//2、计算网格相关-治理能力
calculateGridZhiLi(formDTO, zhiLiNengLiList);
if (CollectionUtils.isEmpty(zhiLiNengLiList)) {
logger.warn("calculateGridZhiLi customerId:{} have not any indexGroupDetail", formDTO.getCustomerId());
throw new RenException("客户【网格相关:治理能力】指标权重信息不存在");
}
calculateGridZhiLi(formDTO, zhiLiNengLiList);
//3、计算网格相关-服务能力
List<IndexGroupDetailEntity> fuWuNengLiList = indexGroupDetailService.getDetailListByParentCode(formDTO.getCustomerId(),
IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode(),
IndexCodeEnum.FU_WU_NENG_LI.getCode());
if (!CollectionUtils.isEmpty(fuWuNengLiList)) {
//3、计算网格相关-服务能力
calculateGridFuWu(formDTO, fuWuNengLiList);
if (CollectionUtils.isEmpty(fuWuNengLiList)) {
logger.warn("calculateGridFuWu customerId:{} have not any indexGroupDetail", formDTO.getCustomerId());
throw new RenException("客户【网格相关:服务能力】指标权重信息不存在");
}
//计算网格相关总分
calculateGridFuWu(formDTO, fuWuNengLiList);
//4、计算网格相关总分
List<IndexGroupDetailEntity> wgxgList = indexGroupDetailService.getDetailListByParentCode(formDTO.getCustomerId(),
IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode());
if (!CollectionUtils.isEmpty(wgxgList)) {
calculateGridTotal(formDTO, wgxgList,IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode());
if (CollectionUtils.isEmpty(wgxgList)) {
logger.warn("calculateGridTotal customerId:{} have not any indexGroupDetail", formDTO.getCustomerId());
throw new RenException("客户【网格相关】指标权重信息不存在");
}
calculateGridTotal(formDTO, wgxgList, IndexCodeEnum.WANG_GE_XIANG_GUAN.getCode());
resultFlag = true;
return resultFlag;
}
@ -122,8 +135,12 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
logger.info(String.format("共%s条数据,分%s次计算", total, totalPage));
//每一组指标的最大值,key:code_MIN/MAX
Map<String, Object> minAndMaxMap = queryPartyAblityGridMinAndMax(formDTO.getCustomerId(), formDTO.getMonthId());
if (CollectionUtils.isEmpty(minAndMaxMap)) {
logger.error("calculateGridDangJian queryPartyAblityGridMinAndMax customerId:{} monthId:{} have not any fact record", formDTO.getCustomerId(),formDTO.getMonthId());
return;
}
//指标集合
Map<String, IndexInputVO<BigDecimal>> indexMap = getGridCorrelationIndexInputVO(formDTO, indexList, minAndMaxMap);
Map<String, IndexInputVO<BigDecimal>> indexMap = buildGridCorrelationIndexInputVO(formDTO, indexList, minAndMaxMap);
List<HashMap<String, BigDecimal>> resultMapList = new ArrayList<>();
//分页查询采集记录
for (int pageNo = 1; pageNo <= totalPage; pageNo++) {
@ -160,12 +177,12 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
resultMapList.add(resultMap);
}
// 保存中间表
saveGridCorreLationDangJian(formDTO, resultMapList,IndexCodeEnum.DANG_JIAN_NENG_LI.getCode(),NumConstant.ZERO_STR);
saveGridCorreLationResult(formDTO, resultMapList, IndexCodeEnum.DANG_JIAN_NENG_LI.getCode(), NumConstant.ZERO_STR);
}
/**
* @return java.util.Map<java.lang.String,java.math.BigDecimal>
* @param calculateCommonFormDTO
* @return java.util.Map<java.lang.String, java.math.BigDecimal>
* @author yinzuomei
* @description 获取网格内党员的联系群众能力考评分平均值的最大值最小值
* @Date 2020/8/31 9:51
@ -186,9 +203,9 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
}
/**
* @return java.math.BigDecimal
* @param calculateCommonFormDTO
* @param gridId 网格id
* @return java.math.BigDecimal
* @author yinzuomei
* @description 获取网格组织内党员的联系群众能力考评分平均值
* @Date 2020/8/31 9:50
@ -202,9 +219,9 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
}
/**
* @return java.math.BigDecimal
* @param formDTO
* @param gridId
* @return java.math.BigDecimal
* @author yinzuomei
* @description 组织内党员的参与议事能力考评分平均值
* @Date 2020/8/31 15:51
@ -218,8 +235,8 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
}
/**
* @return java.util.Map<java.lang.String,java.math.BigDecimal>
* @param calculateCommonFormDTO
* @return java.util.Map<java.lang.String, java.math.BigDecimal>
* @author yinzuomei
* @description 网格内党员的参与议事能力考评分平均值 最大值最小值
* @Date 2020/8/31 14:41
@ -242,14 +259,14 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
/**
* @param formDTO 客户id 月份id: yyyyMM
* @param resultMapList
* @param indexCode 指标编码
* @param indexCode 指标编码: 党建能力dangjiannengli治理能力zhilinengli服务能力fuwunengli
* @param isTotal 1总分0不是
* @return void
* @author yinzuomei
* @description 保存网格相关三大能力值
* @Date 2020/8/30 22:50
**/
private void saveGridCorreLationDangJian(CalculateCommonFormDTO formDTO,
private void saveGridCorreLationResult(CalculateCommonFormDTO formDTO,
List<HashMap<String, BigDecimal>> resultMapList,
String indexCode,
String isTotal) {
@ -286,21 +303,24 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
* @param indexMap
* @return java.util.List<com.epmet.support.normalizing.batch.IndexOutputVO>
* @author yinzuomei
* @description
* @description 调用计算器计算每个指标下各个网格的总分
* @Date 2020/8/30 21:40
**/
private HashMap<String, BigDecimal> calculate(Map<String, IndexInputVO<BigDecimal>> indexMap) {
//构造入参
List<IndexInputVO> indexInputVOS = this.getIndexInputVOList(indexMap);
logger.info("计算的参数:{}", indexInputVOS);
BatchScoreCalculator batchScoreCalculator = new BatchScoreCalculator();
return batchScoreCalculator.getScoreCountOfSampleId(indexInputVOS);
HashMap<String, BigDecimal> resultMap = batchScoreCalculator.getScoreCountOfSampleId(indexInputVOS);
logger.info("计算的结果:{}", resultMap);
return resultMap;
}
/**
* @param indexMap
* @return java.util.List<com.epmet.support.normalizing.batch.IndexInputVO>
* @author yinzuomei
* @description
* @description map遍历转为List
* @Date 2020/8/30 18:34
**/
private List<IndexInputVO> getIndexInputVOList(Map<String, IndexInputVO<BigDecimal>> indexMap) {
@ -321,13 +341,14 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
* @description 构造网格相关 指标计算参数
* @Date 2020/8/30 15:56
**/
private Map<String, IndexInputVO<BigDecimal>> getGridCorrelationIndexInputVO(CalculateCommonFormDTO formDTO, List<IndexGroupDetailEntity> indexList, Map<String, Object> minAndMaxMap) {
private Map<String, IndexInputVO<BigDecimal>> buildGridCorrelationIndexInputVO(CalculateCommonFormDTO formDTO, List<IndexGroupDetailEntity> indexList, Map<String, Object> minAndMaxMap) {
Map<String, IndexInputVO<BigDecimal>> map = new HashMap<>();
for (int indexNum = 0; indexNum < indexList.size(); indexNum++) {
IndexGroupDetailEntity index = indexList.get(indexNum);
for (IndexGroupDetailEntity index : indexList) {
IndexInputVO indexInputVO = new IndexInputVO();
// 指标code
indexInputVO.setIndexId(index.getIndexCode());
//阈值
indexInputVO.setThreshold(index.getThreshold());
//权重
indexInputVO.setWeight(index.getWeight());
BigDecimal minValue = null;
@ -347,10 +368,10 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
//获取指标对应的列名
String fieldName = indexCodeFieldReService.getFieldNameByIndexCode(index.getIndexCode());
if (StringUtils.isBlank(fieldName)) {
logger.error("index_code:"+index.getIndexCode()+" not find field_name");
logger.error("index_code:{} ",index.getIndexCode(),"not find field_name");
continue;
}
logger.info("INDEX_CODE=" + index.getIndexCode()+";FIELD_ID=" + fieldName );
logger.info("index_code:{} ",index.getIndexCode(),"field_id :{} ",fieldName);
String minValueKey = fieldName.concat(StrConstant.UNDER_LINE).concat(StrConstant.MIN);
String maxValueKey = fieldName.concat(StrConstant.UNDER_LINE).concat(StrConstant.MAX);
minValue = new BigDecimal(String.valueOf(minAndMaxMap.get(minValueKey)));
@ -392,8 +413,12 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
logger.info(String.format("共%s条数据,分%s次计算", total, totalPage));
//每一组指标的最大值,key:code_MIN/MAX
Map<String, Object> minAndMaxMap = queryGovrnAblityGridMinAndMax(formDTO.getCustomerId(), formDTO.getMonthId());
if (CollectionUtils.isEmpty(minAndMaxMap)) {
logger.error("calculateGridZhiLi queryGovrnAblityGridMinAndMax customerId:{} monthId:{} have not any fact record", formDTO.getCustomerId(),formDTO.getMonthId());
return;
}
//指标集合
Map<String, IndexInputVO<BigDecimal>> indexMap = getGridCorrelationIndexInputVO(formDTO, indexList, minAndMaxMap);
Map<String, IndexInputVO<BigDecimal>> indexMap = buildGridCorrelationIndexInputVO(formDTO, indexList, minAndMaxMap);
List<HashMap<String, BigDecimal>> resultMapList = new ArrayList<>();
//分页查询采集记录
for (int pageNo = 1; pageNo <= totalPage; pageNo++) {
@ -428,7 +453,7 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
resultMapList.add(resultMap);
}
// 保存中间表
saveGridCorreLationDangJian(formDTO, resultMapList,IndexCodeEnum.ZHI_LI_NENG_LI.getCode(),NumConstant.ZERO_STR);
saveGridCorreLationResult(formDTO, resultMapList, IndexCodeEnum.ZHI_LI_NENG_LI.getCode(), NumConstant.ZERO_STR);
}
@ -452,8 +477,12 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
logger.info(String.format("共%s条数据,分%s次计算", total, totalPage));
//每一组指标的最大值,key:code_MIN/MAX
Map<String, Object> minAndMaxMap = queryServiceAblityGridMinAndMax(formDTO.getCustomerId(), formDTO.getMonthId());
if (CollectionUtils.isEmpty(minAndMaxMap)) {
logger.error("calculateGridFuWu queryServiceAblityGridMinAndMax customerId:{} monthId:{} have not any fact record", formDTO.getCustomerId(),formDTO.getMonthId());
return;
}
//指标集合
Map<String, IndexInputVO<BigDecimal>> indexMap = getGridCorrelationIndexInputVO(formDTO, indexList, minAndMaxMap);
Map<String, IndexInputVO<BigDecimal>> indexMap = buildGridCorrelationIndexInputVO(formDTO, indexList, minAndMaxMap);
List<HashMap<String, BigDecimal>> resultMapList = new ArrayList<>();
//分页查询采集记录
for (int pageNo = 1; pageNo <= totalPage; pageNo++) {
@ -484,7 +513,7 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
resultMapList.add(resultMap);
}
// 保存中间表
saveGridCorreLationDangJian(formDTO, resultMapList,IndexCodeEnum.FU_WU_NENG_LI.getCode(),NumConstant.ZERO_STR);
saveGridCorreLationResult(formDTO, resultMapList, IndexCodeEnum.FU_WU_NENG_LI.getCode(), NumConstant.ZERO_STR);
}
/**
@ -498,6 +527,10 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
private void calculateGridTotal(CalculateCommonFormDTO formDTO, List<IndexGroupDetailEntity> indexList, String indexCode) {
//查询总记录数
List<GridScoreDTO> gridScoreDTOList = gridScoreDao.selectList(formDTO);
if(CollectionUtils.isEmpty(gridScoreDTOList)){
logger.error("calculateGridTotal gridScoreDao.selectList return empty,customerId:{},monthId:{}", formDTO.getCustomerId(), formDTO.getMonthId());
throw new RenException("客户一级指标分值记录不存在");
}
Map<String, IndexGroupDetailEntity> indexMap = indexList.stream().collect(Collectors.toMap(IndexGroupDetailEntity::getIndexCode, Function.identity()));
List<GridScoreEntity> gridScoreEntityList = new ArrayList<>();
for (GridScoreDTO gridScoreDTO : gridScoreDTOList) {
@ -535,6 +568,7 @@ public class GridCorreLationServiceImpl implements GridCorreLationService {
}
System.out.println(totalScore);
}
/**
* @param customerId
* @return com.epmet.dto.indexcal.CustomerGridInfoDTO

Loading…
Cancel
Save