Browse Source

Merge remote-tracking branch 'origin/dev_screen_data_2.0' into dev_temp

master
wangchao 5 years ago
parent
commit
eae98b5a3b
  1. 2
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/result/ProjectParticipatedAgencyResultDTO.java
  2. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/IndexDictController.java
  3. 29
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectLogDailyDao.java
  4. 10
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollCommunityServiceImpl.java
  5. 11
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollDistrictServiceImpl.java
  6. 11
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollStreetServiceImpl.java
  7. 8
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectLogDailyService.java
  8. 156
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginExtractServiceImpl.java
  9. 84
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectLogDailyServiceImpl.java
  10. 8
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/FactIndexCollectServiceImpl.java
  11. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/BatchScoreCalculator.java
  12. 77
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectLogDailyDao.xml
  13. 2
      epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/MathUtilTest.java

2
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/extract/result/ProjectParticipatedAgencyResultDTO.java

@ -17,4 +17,6 @@ public class ProjectParticipatedAgencyResultDTO implements Serializable {
private String agencyId;
private int count;
private String projectId;
}

2
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/controller/IndexDictController.java

@ -44,7 +44,7 @@ public class IndexDictController {
* @return
*/
@PostMapping("initFromExcel")
public Result<String> testTx(@RequestPart("file") MultipartFile file,@RequestParam("customerId") String customerId) {
public Result<String> testTx(@RequestPart("file") MultipartFile file, @RequestParam(value = "customerId", required = false) String customerId) {
ExcelReader excelReader = null;
try {
InputStream inputStream = null;

29
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectLogDailyDao.java

@ -23,6 +23,7 @@ import com.epmet.entity.evaluationindex.extract.FactOriginProjectLogDailyEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
@ -125,7 +126,16 @@ public interface FactOriginProjectLogDailyDao extends BaseDao<FactOriginProjectL
* @date 2020.10.15 11:20
*/
List<ProjectParticipatedAgencyResultDTO> selectAgencyWhistledCount(@Param("agencies") List<String> agencies, @Param("customerId") String customerId,@Param("dimId") String dimId);
/***
* @Description 评价周期内被吹哨且被办结(无论是哪一级办结)的项目数
* @param agencies
* @param customerId
* @param dimId
* @return java.util.List<com.epmet.dto.extract.result.ProjectParticipatedAgencyResultDTO>
* @author wangc
* @date 2020.10.16 10:43
*/
List<ProjectParticipatedAgencyResultDTO> selectWhistledAgencyClosedProjectCount(@Param("agencies") List<String> agencies, @Param("customerId") String customerId,@Param("dimId") String dimId);
/***
* @Description 查询机关办结次数
* @param agencies
@ -134,7 +144,24 @@ public interface FactOriginProjectLogDailyDao extends BaseDao<FactOriginProjectL
* @date 2020.10.14 10:27
*/
List<ProjectParticipatedAgencyResultDTO> selectAgencyHandledProjectCount(@Param("agencies") List<String> agencies,@Param("customerId") String customerId,@Param("dimId") String dimId);
/**
* @Description 查询评价周期内各级别机关办结的项目Id
* @param customerId
* @param dimId
* @return java.util.List<com.epmet.dto.extract.result.ProjectParticipatedAgencyResultDTO>
* @author wangc
* @date 2020.10.15 17:29
*/
List<ProjectParticipatedAgencyResultDTO> selectProjectIdHandledByAgency(@Param("customerId") String customerId,@Param("dimId") String dimId);
/**
* @Description 计算每个办结项目的总耗时
* @param projectIds
* @return java.util.List<com.epmet.dto.extract.result.ProjectParticipatedAgencyResultDTO>
* @author wangc
* @date 2020.10.15 17:32
*/
List<ProjectParticipatedAgencyResultDTO> selectProjectCostTime(@Param("projectIds") List<String> projectIds);
/**
* 网格项目响应度
* @author zhaoqifeng

10
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollCommunityServiceImpl.java

@ -134,13 +134,17 @@ public class IndexCollCommunityServiceImpl implements IndexCollCommunityService
}));
}
//办结数
List<String> agencies = agencyList.stream().map(DimAgencyDTO :: getId).distinct().collect(Collectors.toList());
//办结数
Map<String, Integer> agencyHandleCount = factOriginProjectLogDailyService.getProjectHandledAgency(agencies,customerId,dimId.getMonthId(),"month");
Map<String,BigDecimal> efficiencyMap = factOriginProjectLogDailyService.getAgencyWorkPieceRatio(agencies,customerId,dimId.getMonthId(),"month");
////评价周期内被吹哨且被办结(无论是哪一级办结)的项目数
Map<String, Integer> whistledAgencyClosedProject = factOriginProjectLogDailyService.getWhistledAgencyClosedProjectCount(agencies,customerId,dimId.getMonthId(),"month");
//处理效率
Map<String,BigDecimal> efficiencyMap = factOriginProjectLogDailyService.getAgencyWorkPieceRatio(customerId,dimId.getMonthId(),"month");
list.forEach(entity ->{
entity.setClosedProjectCount(agencyHandleCount.get(entity.getAgencyId()) == null? NumConstant.ZERO : agencyHandleCount.get(entity.getAgencyId()));
BigDecimal element = new BigDecimal(entity.getClosedProjectCount());
BigDecimal element = new BigDecimal(Optional.ofNullable(whistledAgencyClosedProject.get(entity.getAgencyId())).orElse(NumConstant.ZERO));
//分母,即机关参与过的项目数(去重)
//“评价周期内被吹哨且办结的项目数”/“评价周期内被吹哨的所有项目数”
Integer denominator = entity.getTransferedCount();

11
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollDistrictServiceImpl.java

@ -127,14 +127,17 @@ public class IndexCollDistrictServiceImpl implements IndexCollDistrictService {
}
}));
}
//办结数
List<String> agencies = agencyList.stream().map(DimAgencyDTO :: getId).distinct().collect(Collectors.toList());
//办结数
Map<String, Integer> agencyHandleCount = factOriginProjectLogDailyService.getProjectHandledAgency(agencies,customerId,dimId.getMonthId(),"month");
Map<String,BigDecimal> efficiencyMap = factOriginProjectLogDailyService.getAgencyWorkPieceRatio(agencies,customerId,dimId.getMonthId(),"month");
//评价周期内被吹哨且被办结(无论是哪一级办结)的项目数
Map<String, Integer> whistledAgencyClosedProject = factOriginProjectLogDailyService.getWhistledAgencyClosedProjectCount(agencies,customerId,dimId.getMonthId(),"month");
//处理效率
Map<String,BigDecimal> efficiencyMap = factOriginProjectLogDailyService.getAgencyWorkPieceRatio(customerId,dimId.getMonthId(),"month");
list.forEach(entity ->{
entity.setClosedProjectCount(agencyHandleCount.get(entity.getAgencyId()) == null? NumConstant.ZERO : agencyHandleCount.get(entity.getAgencyId()));
BigDecimal element = new BigDecimal(entity.getClosedProjectCount());
BigDecimal element = new BigDecimal(Optional.ofNullable(whistledAgencyClosedProject.get(entity.getAgencyId())).orElse(NumConstant.ZERO));
//分母,即机关参与过的项目数(去重)
//“评价周期内被吹哨且办结的项目数”/“评价周期内被吹哨的所有项目数”
Integer denominator = entity.getTransferedCount();

11
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/dataToIndex/impl/IndexCollStreetServiceImpl.java

@ -125,14 +125,17 @@ public class IndexCollStreetServiceImpl implements IndexCollStreetService {
}
}));
}
//办结数
List<String> agencies = agencyList.stream().map(DimAgencyDTO :: getId).distinct().collect(Collectors.toList());
//办结数
Map<String, Integer> agencyHandleCount = factOriginProjectLogDailyService.getProjectHandledAgency(agencies,customerId,dimId.getMonthId(),"month");
Map<String,BigDecimal> efficiencyMap = factOriginProjectLogDailyService.getAgencyWorkPieceRatio(agencies,customerId,dimId.getMonthId(),"month");
////评价周期内被吹哨且被办结(无论是哪一级办结)的项目数
Map<String, Integer> whistledAgencyClosedProject = factOriginProjectLogDailyService.getWhistledAgencyClosedProjectCount(agencies,customerId,dimId.getMonthId(),"month");
//处理效率
Map<String,BigDecimal> efficiencyMap = factOriginProjectLogDailyService.getAgencyWorkPieceRatio(customerId,dimId.getMonthId(),"month");
list.forEach(entity ->{
entity.setClosedProjectCount(agencyHandleCount.get(entity.getAgencyId()) == null? NumConstant.ZERO : agencyHandleCount.get(entity.getAgencyId()));
BigDecimal element = new BigDecimal(entity.getClosedProjectCount());
BigDecimal element = new BigDecimal(Optional.ofNullable(whistledAgencyClosedProject.get(entity.getAgencyId())).orElse(NumConstant.ZERO));
//分母,吹哨次数
Integer denominator = entity.getTransferedCount();
if (null != denominator && denominator != NumConstant.ZERO) {

8
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectLogDailyService.java

@ -178,7 +178,7 @@ public interface FactOriginProjectLogDailyService extends BaseService<FactOrigin
Map<String,Integer> getProjectHandledAgency(List<String> agencies, String customerId, String dimId,String dateType);
/**
* @Description 查询机关单位经手的项目数去重
* @Description 评价周期内被吹哨且被办结(无论是哪一级办结)的项目数
* @param agencies
* @param dimId
* @param dateType - 日期维度类型 month date week quarter year
@ -186,16 +186,16 @@ public interface FactOriginProjectLogDailyService extends BaseService<FactOrigin
* @author wangc
* @date 2020.09.23 10:06
**/
Map<String,Integer> getCountOfDealingAgency(List<String> agencies, String customerId,String dimId,String dateType);
Map<String,Integer> getWhistledAgencyClosedProjectCount(List<String> agencies, String customerId,String dimId,String dateType);
/**
* @Description 计算机关办结项目效率
* @param agencies
* @param customerId
* @return
* @author wangc
* @date 2020.09.21 02:16
**/
Map<String, BigDecimal> getAgencyWorkPieceRatio(List<String> agencies, String customerId,String dimId,String dateType);
Map<String, BigDecimal> getAgencyWorkPieceRatio( String customerId,String dimId,String dateType);
/**
* 网格项目响应度

156
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginExtractServiceImpl.java

@ -2,9 +2,12 @@ package com.epmet.service.evaluationindex.extract.todata.impl;
import com.alibaba.fastjson.JSON;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dto.extract.form.ExtractOriginFormDTO;
import com.epmet.dto.stats.form.CustomerIdAndDateIdFormDTO;
import com.epmet.service.evaluationindex.extract.todata.*;
import com.epmet.service.stats.DimCustomerPartymemberService;
import com.epmet.service.stats.DimCustomerService;
import com.epmet.util.DimIdGenerator;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
@ -27,7 +30,7 @@ import java.util.concurrent.*;
public class FactOriginExtractServiceImpl implements FactOriginExtractService {
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("factOriginExtract-pool-%d").build();
ExecutorService threadPool = new ThreadPoolExecutor(1, 1,
ExecutorService threadPool = new ThreadPoolExecutor(3, 6,
10L, TimeUnit.MINUTES,
new LinkedBlockingQueue<>(500), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy());
@ -41,12 +44,14 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
private DimCustomerService dimCustomerService;
@Autowired
private GroupExtractService groupExtractService;
@Autowired
private DimCustomerPartymemberService dimCustomerPartymemberService;
@Override
public void extractAll(ExtractOriginFormDTO extractOriginFormDTO) {
String customerId = extractOriginFormDTO.getCustomerId();
if (StringUtils.isBlank(extractOriginFormDTO.getStartDate())||StringUtils.isBlank(extractOriginFormDTO.getEndDate())) {
if (StringUtils.isBlank(extractOriginFormDTO.getDateId()) && (StringUtils.isBlank(extractOriginFormDTO.getStartDate()) && StringUtils.isBlank(extractOriginFormDTO.getEndDate()))) {
//如果没有设置开始日期、结束日期,默认查询昨天
extractOriginFormDTO.setDateId(DimIdGenerator.getDateDimId(DateUtils.addDateDays(new Date(), -1)));
}
@ -70,120 +75,149 @@ public class FactOriginExtractServiceImpl implements FactOriginExtractService {
param.setDateId(extractOriginFormDTO.getDateId());
param.setStartDate(extractOriginFormDTO.getStartDate());
param.setEndDate(extractOriginFormDTO.getEndDate());
log.debug("extractAll param:{}", JSON.toJSONString(param));
log.info("extractAll param:{}", JSON.toJSONString(param));
submitJob(param);
});
}
private void submitJob(ExtractOriginFormDTO param) {
boolean isRange = StringUtils.isBlank(param.getDateId()) ? true : false;
List<String> daysBetween = null;
if (isRange) {
daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
}
List<String> finalDaysBetween = daysBetween;
threadPool.submit(() -> {
CustomerIdAndDateIdFormDTO formDTO = new CustomerIdAndDateIdFormDTO();
formDTO.setCustomerId(param.getCustomerId());
if (!isRange) {
try {
formDTO.setDateId(param.getDateId());
dimCustomerPartymemberService.statsPartyMember(formDTO);
} catch (Exception e) {
log.error("抽取【党员数据】发生异常,参数:" + JSON.toJSONString(formDTO), e);
}
} else {
try {
for (int i = 0; i < finalDaysBetween.size(); i++) {
String dateDimId = finalDaysBetween.get(i);
formDTO.setDateId(dateDimId);
dimCustomerPartymemberService.statsPartyMember(formDTO);
}
} catch (Exception e) {
log.error("抽取【党员数据】发生异常,参数:" + JSON.toJSONString(param), e);
}
}
});
threadPool.submit(() -> {
if(StringUtils.isNotBlank(param.getDateId())){
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (!isRange) {
try {
groupExtractService.extractGroupData(param);
groupExtractService.extractGroupData(paramNew);
} catch (Exception e) {
log.error("抽取【小组数据】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【小组数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}else if(StringUtils.isNotBlank(param.getStartDate()) && StringUtils.isNotBlank(param.getEndDate())){
try{
List<String> daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
for (int i = 0; i < daysBetween.size(); i++) {
String dateDimId = daysBetween.get(i);
param.setDateId(dateDimId);
groupExtractService.extractGroupData(param);
} else {
try {
for (int i = 0; i < finalDaysBetween.size(); i++) {
String dateDimId = finalDaysBetween.get(i);
paramNew.setDateId(dateDimId);
groupExtractService.extractGroupData(paramNew);
}
}catch(Exception e){
log.error("抽取【小组数据】发生异常,参数:" + JSON.toJSONString(param), e);
} catch (Exception e) {
log.error("抽取【小组数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}
});
threadPool.submit(() -> {
if(StringUtils.isNotBlank(param.getDateId())){
log.debug("extractAll start param:{}", JSON.toJSONString(param));
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (!isRange) {
try {
factOriginTopicMainDailyService.topicCleaning(param);
factOriginTopicMainDailyService.topicCleaning(paramNew);
} catch (Exception e) {
log.error("抽取【话题数据】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【话题数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}else if(StringUtils.isNotBlank(param.getStartDate()) && StringUtils.isNotBlank(param.getEndDate())){
} else {
try {
List<String> daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
for (int i = 0; i < daysBetween.size(); i++) {
String dateDimId = daysBetween.get(i);
param.setDateId(dateDimId);
factOriginTopicMainDailyService.topicCleaning(param);
for (int i = 0; i < finalDaysBetween.size(); i++) {
String dateDimId = finalDaysBetween.get(i);
paramNew.setDateId(dateDimId);
log.info("extractAll cal param:{}", JSON.toJSONString(paramNew));
factOriginTopicMainDailyService.topicCleaning(paramNew);
}
} catch (Exception e) {
log.error("抽取【话题数据】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【话题数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}
log.info("extractAll end param:{}", JSON.toJSONString(paramNew));
});
threadPool.submit(() -> {
if(StringUtils.isNotBlank(param.getDateId())){
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (!isRange) {
try {
issueExtractService.issueExtractMain(param);
issueExtractService.issueExtractMain(paramNew);
} catch (Exception e) {
log.error("抽取【议题数据主表】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【议题数据主表】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
try {
issueExtractService.issueExtractLog(param);
issueExtractService.issueExtractLog(paramNew);
} catch (Exception e) {
log.error("抽取【议题数据附表】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【议题数据附表】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}else if(StringUtils.isNotBlank(param.getStartDate()) && StringUtils.isNotBlank(param.getEndDate())){
} else {
try {
List<String> daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
for (int i = 0; i < daysBetween.size(); i++) {
String dateDimId = daysBetween.get(i);
param.setDateId(dateDimId);
issueExtractService.issueExtractMain(param);
for (int i = 0; i < finalDaysBetween.size(); i++) {
String dateDimId = finalDaysBetween.get(i);
paramNew.setDateId(dateDimId);
issueExtractService.issueExtractMain(paramNew);
}
} catch (Exception e) {
log.error("抽取【议题数据主表】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【议题数据主表】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
try {
List<String> daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
for (int i = 0; i < daysBetween.size(); i++) {
String dateDimId = daysBetween.get(i);
param.setDateId(dateDimId);
issueExtractService.issueExtractLog(param);
for (int i = 0; i < finalDaysBetween.size(); i++) {
String dateDimId = finalDaysBetween.get(i);
paramNew.setDateId(dateDimId);
issueExtractService.issueExtractLog(paramNew);
}
} catch (Exception e) {
log.error("抽取【议题数据附表】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【议题数据附表】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}
});
threadPool.submit(() -> {
if(StringUtils.isNotBlank(param.getDateId())){
ExtractOriginFormDTO paramNew = ConvertUtils.sourceToTarget(param, ExtractOriginFormDTO.class);
if (!isRange) {
try {
projectExtractService.saveOriginProjectDaily(param);
projectExtractService.saveOriginProjectDaily(paramNew);
} catch (Exception e) {
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
try {
projectExtractService.extractProjectPeriodData(param);
projectExtractService.extractProjectPeriodData(paramNew);
} catch (Exception e) {
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}else if(StringUtils.isNotBlank(param.getStartDate()) && StringUtils.isNotBlank(param.getEndDate())){
} else {
try {
List<String> daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
for (int i = 0; i < daysBetween.size(); i++) {
String dateDimId = daysBetween.get(i);
param.setDateId(dateDimId);
projectExtractService.saveOriginProjectDaily(param);
for (int i = 0; i < finalDaysBetween.size(); i++) {
String dateDimId = finalDaysBetween.get(i);
paramNew.setDateId(dateDimId);
projectExtractService.saveOriginProjectDaily(paramNew);
}
} catch (Exception e) {
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
try {
List<String> daysBetween = DateUtils.getDaysBetween(param.getStartDate(), param.getEndDate());
for (int i = 0; i < daysBetween.size(); i++) {
String dateDimId = daysBetween.get(i);
param.setDateId(dateDimId);
projectExtractService.extractProjectPeriodData(param);
for (int i = 0; i < finalDaysBetween.size(); i++) {
String dateDimId = finalDaysBetween.get(i);
paramNew.setDateId(dateDimId);
projectExtractService.extractProjectPeriodData(paramNew);
}
} catch (Exception e) {
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(param), e);
log.error("抽取【项目数据】发生异常,参数:" + JSON.toJSONString(paramNew), e);
}
}
});

84
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectLogDailyServiceImpl.java

@ -38,6 +38,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.naming.LinkLoopException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
@ -183,7 +184,7 @@ public class FactOriginProjectLogDailyServiceImpl extends BaseServiceImpl<FactOr
/**
* @Description 查询机关单位经手的项目数去重
* @Description 评价周期内被吹哨且被办结(无论是哪一级办结)的项目数
* @param agencies
* @param dimId
* @param dateType - 日期维度类型 month date week quarter year
@ -192,9 +193,9 @@ public class FactOriginProjectLogDailyServiceImpl extends BaseServiceImpl<FactOr
* @date 2020.09.23 10:06
**/
@Override
public Map<String, Integer> getCountOfDealingAgency(List<String> agencies, String customerId,String dimId, String dateType) {
public Map<String, Integer> getWhistledAgencyClosedProjectCount(List<String> agencies, String customerId,String dimId, String dateType) {
Map<String,Integer> result = new HashMap<>();
List<ProjectParticipatedAgencyResultDTO> projectAgencyCount = baseDao.selectProjectParticipatedAgency(agencies,customerId,dimId);
List<ProjectParticipatedAgencyResultDTO> projectAgencyCount = baseDao.selectWhistledAgencyClosedProjectCount(agencies,customerId,dimId);
if(!CollectionUtils.isEmpty(projectAgencyCount)){
result = projectAgencyCount.stream().collect(Collectors.toMap(ProjectParticipatedAgencyResultDTO::getAgencyId,ProjectParticipatedAgencyResultDTO::getCount));
}
@ -203,48 +204,63 @@ public class FactOriginProjectLogDailyServiceImpl extends BaseServiceImpl<FactOr
/**
* @Description 计算机关办结项目效率
* @param agencies
* @param
* @return
* @author wangc
* @date 2020.09.21 02:16
**/
@Override
public Map<String, BigDecimal> getAgencyWorkPieceRatio(List<String> agencies, String customerId,String dimId, String dateType) {
//网格、部门的办结系数
List<OrgResponseTimeResultDTO> gridDeptResponse = projectOrgPeriodDailyDao.selectSubOrgResponseCoefficient(customerId, dimId, dateType);
//机关的办结系数
List<OrgResponseTimeResultDTO> agencyResponse = projectOrgPeriodDailyDao.selectAgencyResponseCoefficient(customerId, dimId, dateType);
Map<String,BigDecimal> consumingMap = new HashMap<>();
Map<String,BigDecimal> timeMap = new HashMap<>();
if(!CollectionUtils.isEmpty(agencyResponse)){
agencyResponse.forEach(response -> {
consumingMap.put(response.getAgencyId(),response.getResponseTime());
//注意,这里取的是去重后的项目次数,例如一个部门被项目流转了多次,项目数只算一次
//如果需要改成不去重,只需response.getProjectTotal()
timeMap.put(response.getAgencyId(),response.getDistinctProjectTotal());
});
}
if(!CollectionUtils.isEmpty(gridDeptResponse)){
gridDeptResponse.forEach(response -> {
if(null != consumingMap.get(response.getAgencyId())){
consumingMap.put(response.getAgencyId(),consumingMap.get(response.getAgencyId()).add(response.getResponseTime()));
timeMap.put(response.getAgencyId(),timeMap.get(response.getAgencyId()).add(response.getDistinctProjectTotal()));
}else{
consumingMap.put(response.getAgencyId(),response.getResponseTime());
timeMap.put(response.getAgencyId(),response.getDistinctProjectTotal());
}
});
}
//效率map
public Map<String, BigDecimal> getAgencyWorkPieceRatio(String customerId,String dimId, String dateType) {
//计算方法 : 评价周期内办结项目的平均处理时长的倒数
//1.评价周期内结案了的项目
List<ProjectParticipatedAgencyResultDTO> projectsHandledByAgency = baseDao.selectProjectIdHandledByAgency(customerId,dimId);
Map<String,BigDecimal> efficiencyMap = new HashMap<>();
if(!CollectionUtils.isEmpty(consumingMap)) {
consumingMap.keySet().forEach(agencyId -> {
efficiencyMap.put(agencyId, consumingMap.get(agencyId).divide(timeMap.get(agencyId), NumConstant.SIX, RoundingMode.HALF_UP));
if(!CollectionUtils.isEmpty(projectsHandledByAgency)){
Map<String,List<String>> agencyProjectsMap = new HashMap<>();
projectsHandledByAgency.forEach(o -> {
String agencyId = o.getAgencyId();
String projectId = o.getProjectId();
if(CollectionUtils.isEmpty(agencyProjectsMap.get(agencyId))){
List<String> projectUnit = new LinkedList<>();
projectUnit.add(projectId);
agencyProjectsMap.put(agencyId,projectUnit);
}else{
agencyProjectsMap.get(agencyId).add(projectId);
}
});
List<String> projects = new LinkedList<>();
agencyProjectsMap.forEach((key,value) -> {projects.addAll(value);});
//2.结案项目的总耗时
List<ProjectParticipatedAgencyResultDTO> costTimes = baseDao.selectProjectCostTime(projects);
Map<String,Integer> projectCostTime = costTimes.stream().collect(Collectors.toMap(ProjectParticipatedAgencyResultDTO::getProjectId,ProjectParticipatedAgencyResultDTO::getCount));
agencyProjectsMap.forEach((k,v) -> {
//k -> agencyId v -> projects
int total = NumConstant.ZERO;
if(!CollectionUtils.isEmpty(v)){
for(String p : v){
Integer cost = projectCostTime.get(p);
total = total + (null == cost ? NumConstant.ZERO : cost);
}
//每个机关的项目平均耗时
BigDecimal avgCost = new BigDecimal(total).divide(new BigDecimal(v.size()),4, BigDecimal.ROUND_HALF_UP);
efficiencyMap.put(k,BigDecimal.ONE.divide(avgCost,4, BigDecimal.ROUND_HALF_UP));
}else{
efficiencyMap.put(k,BigDecimal.ZERO);
}
});
}
return efficiencyMap;
}
@Override
public List<OrgStatisticsResultDTO> getGridResponse(String customerId, String monthId) {
return baseDao.selectGridResponse(customerId, monthId);

8
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/indexcoll/impl/FactIndexCollectServiceImpl.java

@ -348,7 +348,8 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService {
}
}
if ("".equals(parentAgencyId)){
throw new RuntimeException("在screen_customer_grid表中未查询到该客户下的网格信息:customerId =" + customerId + ", gridId = " + gridScore.getKey());
log.error("在screen_customer_grid表中未查询到该客户下的网格信息:customerId =" + customerId + ", gridId = " + gridScore.getKey());
continue;
}
// 补充表中其他字段
monthlyFormDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.GRID, gridScore.getKey(),
@ -480,8 +481,9 @@ public class FactIndexCollectServiceImpl implements FactIndexCollectService {
agencyName = agencyScoreDTO.getAgencyName();
}
}
if ("".equals(agencyName)){
throw new RuntimeException("在screen_customer_agency表中未查询到该客户下的组织名称:customerId =" + customerId + ", agencyId = " + communityScore.getKey());
if ("".equals(agencyName)) {
log.error("在screen_customer_agency表中未查询到该客户下的组织名称:customerId =" + customerId + ", agencyId = " + communityScore.getKey());
continue;
}
// 补充表中其他字段
monthlyFormDTO = this.supplementIndexDataMonthlyTable(monthId, OrgTypeConstant.AGENCY, communityScore.getKey(),

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/support/normalizing/batch/BatchScoreCalculator.java

@ -1,5 +1,6 @@
package com.epmet.support.normalizing.batch;
import com.epmet.support.normalizing.Correlation;
import com.epmet.support.normalizing.ScoreCalculator;
import java.math.BigDecimal;
@ -70,9 +71,13 @@ public class BatchScoreCalculator {
if (maxValue.compareTo(minValue) == 0) {
//*((max-min)/ (Math.PI/2))+min
//Math.atan(new Double(vo.getSampleValue().toString()))*
normalizeValue = new BigDecimal(Math.atan(new Double(vo.getSampleValue().toString())))
normalizeValue = new BigDecimal(Math.atan(new Double(getFinalSampleValue(vo.getSampleValue(), threshold).toString())))
.multiply(
(maxValue.subtract(minValue).divide(new BigDecimal(Math.PI / 2), 10, RoundingMode.UNNECESSARY))).add(minValue).setScale(6, RoundingMode.HALF_UP);
//
if (scoreCalculator.getCorrelation().getCode().equals(Correlation.NEGATIVE)) {
normalizeValue = maxValue.subtract(normalizeValue);
}
}

77
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectLogDailyDao.xml

@ -180,6 +180,29 @@
</if>
GROUP BY AGENCY_ID
</select>
<!-- 评价周期内被吹哨且被办结(无论是哪一级办结)的项目数 -->
<select id="selectWhistledAgencyClosedProjectCount" resultType="com.epmet.dto.extract.result.ProjectParticipatedAgencyResultDTO">
SELECT
log.AGENCY_ID,
COUNT(DISTINCT log.PROJECT_ID) AS count
FROM
fact_origin_project_log_daily log
LEFT JOIN fact_origin_project_main_daily project ON log.PROJECT_ID = project.ID AND project.DEL_FLAG = '0' AND project.CUSTOMER_ID = #{customerId}
WHERE log.DEL_FLAG = '0'
AND project.PROJECT_STATUS LIKE 'close%'
AND log.CUSTOMER_ID = #{customerId}
AND log.IS_ACTIVE = '0'
<if test='null != dimId and "" != dimId.trim()'>
AND log.MONTH_ID = #{dimId}
</if>
<if test="agencies != null and agencies.size() > 0">
<foreach collection="agencies" item="agencyId" open="AND (" close=" )" separator=" OR ">
log.AGENCY_ID = #{agencyId}
</foreach>
</if>
GROUP BY log.AGENCY_ID
</select>
<!-- 查询机关办结次数 -->
<select id="selectAgencyHandledProjectCount" resultType="com.epmet.dto.extract.result.ProjectParticipatedAgencyResultDTO">
SELECT
@ -201,6 +224,60 @@
</if>
GROUP BY SUBSTRING_INDEX(main.FINISH_ORG_IDS,':',1)
</select>
<!-- 查询评价周期内各级别机关办结的项目Id -->
<select id="selectProjectIdHandledByAgency" resultType="com.epmet.dto.extract.result.ProjectParticipatedAgencyResultDTO">
SELECT
ID AS projectId,
SUBSTRING_INDEX(FINISH_ORG_IDS,':',1) AS agencyId
FROM
fact_origin_project_main_daily
WHERE
DEL_FLAG = '0'
AND ID IN (
SELECT DISTINCT PROJECT_ID FROM fact_origin_project_log_daily
WHERE DEL_FLAG = '0' AND CUSTOMER_ID = #{customerId}
AND ACTION_CODE = 'close'
<if test='null != dimId and "" != dimId'>
AND MONTH_ID = #{dimId}
</if>
)
ORDER BY agencyId
</select>
<!-- 计算每个办结项目的总耗时 -->
<select id="selectProjectCostTime" resultType="com.epmet.dto.extract.result.ProjectParticipatedAgencyResultDTO">
SELECT
DISTINCT
log1.PROJECT_ID,
IF(
TIMESTAMPDIFF( DAY, log2.createdDate, DATE_FORMAT( log1.DATE_ID, '%Y-%m-%d' ) ) = 0,
1,
TIMESTAMPDIFF( DAY, log2.createdDate, DATE_FORMAT( log1.DATE_ID, '%Y-%m-%d' ) )
) * 8 * 60 AS count
FROM
fact_origin_project_log_daily log1
LEFT JOIN (
SELECT
ID ,
DATE_FORMAT( DATE_ID, '%Y-%m-%d' ) AS createdDate
FROM
fact_origin_project_main_daily
WHERE
DEL_FLAG = '0'
<foreach collection="projectIds" item="projectId" open="AND ( " separator=" OR " close=" ) ">
ID = #{projectId}
</foreach>
AND PROJECT_STATUS = 'closed'
) log2 ON log1.PROJECT_ID = log2.ID
WHERE
log1.DEL_FLAG = '0'
<foreach collection="projectIds" item="projectId" open="AND ( " separator=" OR " close=" ) ">
log1.PROJECT_ID = #{projectId}
</foreach>
AND log1.IS_ACTIVE = '1'
AND log1.ACTION_CODE = 'close'
</select>
<select id="selectGridResponse" resultType="com.epmet.dto.extract.result.OrgStatisticsResultDTO">
SELECT a.ORG_ID,

2
epmet-module/data-statistical/data-statistical-server/src/test/java/com/epmet/stats/test/normalizing/MathUtilTest.java

@ -20,7 +20,7 @@ public class MathUtilTest {
BigDecimal maxValue = new BigDecimal(100);
BigDecimal minValue = new BigDecimal(60);
BigDecimal normalizeValue = new BigDecimal(Math.atan(new Double("4")))
BigDecimal normalizeValue = new BigDecimal(Math.atan(new Double("0")))
.multiply(
(maxValue.subtract(minValue).divide(new BigDecimal(Math.PI / 2), 10, RoundingMode.HALF_UP))).add(minValue).setScale(6, RoundingMode.HALF_UP);
System.out.println(normalizeValue);

Loading…
Cancel
Save