jianjun 4 years ago
parent
commit
1b1bd40dc4
  1. 10
      epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/form/ScreenCentralZoneDataFormDTO.java
  2. 7
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectMainDailyDao.java
  3. 2
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectMainDailyServiceImpl.java
  4. 205
      epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java
  5. 11
      epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml

10
epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/form/ScreenCentralZoneDataFormDTO.java

@ -29,4 +29,14 @@ public class ScreenCentralZoneDataFormDTO implements Serializable {
private String endDate; private String endDate;
private String projectId; private String projectId;
/**
* 首次的话 全量拉取
*/
private Boolean isFirst;
/**
* 时间间隔天数 14 就是查询14天内的数据
*/
private String internalDay;
} }

7
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectMainDailyDao.java

@ -26,6 +26,7 @@ import com.epmet.dto.indexcollect.result.CpcIndexCommonDTO;
import com.epmet.dto.pingyin.result.*; import com.epmet.dto.pingyin.result.*;
import com.epmet.dto.screen.ScreenProjectDataDTO; import com.epmet.dto.screen.ScreenProjectDataDTO;
import com.epmet.dto.screen.form.ProjectSourceMapFormDTO; import com.epmet.dto.screen.form.ProjectSourceMapFormDTO;
import com.epmet.dto.screen.form.ScreenCentralZoneDataFormDTO;
import com.epmet.entity.evaluationindex.extract.*; import com.epmet.entity.evaluationindex.extract.*;
import com.epmet.entity.evaluationindex.screen.ScreenDifficultyDataEntity; import com.epmet.entity.evaluationindex.screen.ScreenDifficultyDataEntity;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -400,13 +401,13 @@ public interface FactOriginProjectMainDailyDao extends BaseDao<FactOriginProject
/** /**
* desc: 获取难点堵点项目数据 * desc: 获取难点堵点项目数据
* *
* @param customerId * @param param
* @param dateId * @param param
* @return java.util.List<com.epmet.entity.evaluationindex.extract.FactOriginProjectMainAndPeriodDTO> * @return java.util.List<com.epmet.entity.evaluationindex.extract.FactOriginProjectMainAndPeriodDTO>
* @author LiuJanJun * @author LiuJanJun
* @date 2021/4/12 1:35 下午 * @date 2021/4/12 1:35 下午
*/ */
List<FactOriginProjectMainAndPeriodDTO> getProjectForDiff(@Param("customerId") String customerId, @Param("offset") int offset, @Param("pageSize") int pageSize); List<FactOriginProjectMainAndPeriodDTO> getProjectForDiff(@Param("param") ScreenCentralZoneDataFormDTO param, @Param("offset") int offset, @Param("pageSize") int pageSize);
/** /**
* desc: 获取难点堵点项目数据耗时 * desc: 获取难点堵点项目数据耗时

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

@ -525,7 +525,7 @@ public class FactOriginProjectMainDailyServiceImpl extends BaseServiceImpl<FactO
@Override @Override
public List<FactOriginProjectMainAndPeriodDTO> getProjectAndPeriodForDiff(ScreenCentralZoneDataFormDTO param, int offset, int pageSize) { public List<FactOriginProjectMainAndPeriodDTO> getProjectAndPeriodForDiff(ScreenCentralZoneDataFormDTO param, int offset, int pageSize) {
return baseDao.getProjectForDiff(param.getCustomerId(),offset,pageSize); return baseDao.getProjectForDiff(param,offset,pageSize);
} }
@Override @Override

205
epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java

@ -155,115 +155,120 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr
@Override @Override
public boolean difficultyDataExtract(ScreenCentralZoneDataFormDTO param) { public boolean difficultyDataExtract(ScreenCentralZoneDataFormDTO param) {
//获取agency维度 try {
List<DimAgencyEntity> agencyList = dimAgencyService.getAgencyListByCustomerId(param.getCustomerId()); //默认查询10天内的数据
Map<String, DimAgencyEntity> agencyMap = agencyList.stream().collect(Collectors.toMap(DimAgencyEntity::getId, o -> o, (o1, o2) -> o1)); param.setInternalDay(DateUtils.getBeforeNDay(NumConstant.TEN));
//获取grid维度 //获取agency维度
List<GridInfoDTO> gridList = customerGridService.queryGridInfoList(param.getCustomerId()); List<DimAgencyEntity> agencyList = dimAgencyService.getAgencyListByCustomerId(param.getCustomerId());
Map<String, GridInfoDTO> gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO::getGridId, o -> o, (o1, o2) -> o1)); Map<String, DimAgencyEntity> agencyMap = agencyList.stream().collect(Collectors.toMap(DimAgencyEntity::getId, o -> o, (o1, o2) -> o1));
//获取grid维度
//获取客户下所有项目分类 List<GridInfoDTO> gridList = customerGridService.queryGridInfoList(param.getCustomerId());
List<IssueProjectCategoryDictEntity> categoryList = issueProjectCategoryDictService.getAllByCId(param.getCustomerId()); Map<String, GridInfoDTO> gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO::getGridId, o -> o, (o1, o2) -> o1));
//项目分类数据 todo 暂时查询所有 //获取客户下所有项目分类
List<ProjectCategoryDTO> projectCategoryData = projectService.getProjectCategoryData(param.getCustomerId(), null); List<IssueProjectCategoryDictEntity> categoryList = issueProjectCategoryDictService.getAllByCId(param.getCustomerId());
//key projectId:categoryCode Set
Map<String, Set<String>> projectCategoryMap = projectCategoryData.stream() //项目分类数据 todo 暂时查询所有
.collect(Collectors.groupingBy(ProjectCategoryDTO::getProjectId, Collectors.mapping(ProjectCategoryDTO::getCategoryCode, Collectors.toSet()))); List<ProjectCategoryDTO> projectCategoryData = projectService.getProjectCategoryData(param.getCustomerId(), null);
//key projectId:categoryCode Set
//获取业务库项目标题 Map<String, Set<String>> projectCategoryMap = projectCategoryData.stream()
List<ProjectDTO> bizProjectInfoList = projectService.getProjectInfo(param.getCustomerId(), null, null); .collect(Collectors.groupingBy(ProjectCategoryDTO::getProjectId, Collectors.mapping(ProjectCategoryDTO::getCategoryCode, Collectors.toSet())));
if (CollectionUtils.isEmpty(bizProjectInfoList)) {
log.warn("difficultyDataExtract customerId:{} have any project", param.getCustomerId()); //获取业务库项目标题
return false; List<ProjectDTO> bizProjectInfoList = projectService.getProjectInfo(param.getCustomerId(), null, null);
} if (CollectionUtils.isEmpty(bizProjectInfoList)) {
Map<String, ProjectDTO> bizProjectInfoMap = bizProjectInfoList.stream().collect(Collectors.toMap(ProjectDTO::getId, o -> o, (o1, o2) -> o1));
int pageNo = NumConstant.ONE;
int pageSize = NumConstant.FIVE_HUNDRED;
List<FactOriginProjectMainAndPeriodDTO> difficultyBaseList;
do {
//1.根据客户Id 获取所有项目数据
int offset = (pageNo++ - NumConstant.ONE) * pageSize;
difficultyBaseList = factOriginProjectMainDailyService.getProjectAndPeriodForDiff(param, offset,pageSize);
if (CollectionUtils.isEmpty(difficultyBaseList)) {
log.warn("difficultyDataExtract customerId:{} have any project", param.getCustomerId()); log.warn("difficultyDataExtract customerId:{} have any project", param.getCustomerId());
return false; return false;
} }
Map<String, ProjectDTO> bizProjectInfoMap = bizProjectInfoList.stream().collect(Collectors.toMap(ProjectDTO::getId, o -> o, (o1, o2) -> o1));
//2.获取项目的所有节点耗时数据
List<FactOriginProjectOrgPeriodDailyEntity> projectPeriodList = difficultyBaseList.stream() int pageNo = NumConstant.ONE;
.filter(o->o.getPeriodList() != null) int pageSize = NumConstant.ONE_THOUSAND;
.flatMap(o->o.getPeriodList().stream()) List<FactOriginProjectMainAndPeriodDTO> difficultyBaseList;
.collect(Collectors.toList()); do {
//处理部门数去重(只要流转到就算) //1.根据客户Id 获取所有项目数据
Map<String, Set<String>> orgCountMap = new HashMap<>(); int offset = (pageNo++ - NumConstant.ONE) * pageSize;
//被处理次数 difficultyBaseList = factOriginProjectMainDailyService.getProjectAndPeriodForDiff(param, offset,pageSize);
Map<String, Integer> handleCountMap = new HashMap<>(); if (CollectionUtils.isEmpty(difficultyBaseList)) {
Set<String> valideProjectIdSet = fillAnyCountAndValidProject(param, projectPeriodList, orgCountMap, handleCountMap); log.warn("difficultyDataExtract customerId:{} have any project", param.getCustomerId());
return false;
List<ScreenDifficultyDataEntity> diffList = new ArrayList<>();
List<ScreenDifficultyImgDataEntity> imgDataEntities = new ArrayList<>();
for (FactOriginProjectMainAndPeriodDTO project : difficultyBaseList) {
if (agencyMap.get(project.getAgencyId()) == null || bizProjectInfoMap.get(project.getId()) == null) {
log.warn("未获取到相关的项目信息或者项目的所属组织信息,agencyId:{},projectId:{}",project.getAgencyId(),project.getId());
continue;
}
//判断是否符合难点堵点条件
if (!valideProjectIdSet.contains(project.getId())) {
continue;
}
ScreenDifficultyDataEntity diffEntity = buildBaseDiffEntity(project, agencyMap, gridMap, bizProjectInfoMap);
Set<String> regCount = orgCountMap.get(project.getId());
if (regCount != null) {
diffEntity.setEventReOrg(regCount.size());
} else {
diffEntity.setEventReOrg(0);
}
Integer handleOrgCount = handleCountMap.get(project.getId());
if (handleOrgCount != null) {
diffEntity.setEventHandledCount(handleOrgCount);
} else {
diffEntity.setEventHandledCount(0);
} }
diffEntity.setDataEndTime(StringUtils.isBlank(param.getDateId())?DateUtils.getBeforeNDay(NumConstant.ONE):param.getDateId()); //2.获取项目的所有节点耗时数据
setCategoryInfo(diffEntity, project.getId(), categoryList, projectCategoryMap); List<FactOriginProjectOrgPeriodDailyEntity> projectPeriodList = difficultyBaseList.stream()
.filter(o->o.getPeriodList() != null)
.flatMap(o->o.getPeriodList().stream())
if (StringUtils.isNotBlank(project.getTopicId())) { .collect(Collectors.toList());
//获取图片及话题内容 //处理部门数去重(只要流转到就算)
ResiTopicAndImgResultDTO topicInfo = topicService.getTopicAndImgs(project.getTopicId(), "image"); Map<String, Set<String>> orgCountMap = new HashMap<>();
if (topicInfo != null) { //被处理次数
List<TopicAttachmentDTO> topicImgList = topicInfo.getTopicImgList(); Map<String, Integer> handleCountMap = new HashMap<>();
if (!CollectionUtils.isEmpty(topicImgList)){ Set<String> valideProjectIdSet = fillAnyCountAndValidProject(param, projectPeriodList, orgCountMap, handleCountMap);
diffEntity.setEventImgUrl(topicImgList.get(NumConstant.ZERO).getAttachmentUrl());
topicImgList.forEach(img -> { List<ScreenDifficultyDataEntity> diffList = new ArrayList<>();
ScreenDifficultyImgDataEntity imgData = new ScreenDifficultyImgDataEntity(); List<ScreenDifficultyImgDataEntity> imgDataEntities = new ArrayList<>();
imgData.setEventId(project.getId()); for (FactOriginProjectMainAndPeriodDTO project : difficultyBaseList) {
imgData.setEventImgUrl(img.getAttachmentUrl()); if (agencyMap.get(project.getAgencyId()) == null || bizProjectInfoMap.get(project.getId()) == null) {
imgData.setSort(img.getSort()); log.warn("未获取到相关的项目信息或者项目的所属组织信息,agencyId:{},projectId:{}",project.getAgencyId(),project.getId());
imgDataEntities.add(imgData); continue;
imgData.setCustomerId(param.getCustomerId()); }
}); //判断是否符合难点堵点条件
if (!valideProjectIdSet.contains(project.getId())) {
continue;
}
ScreenDifficultyDataEntity diffEntity = buildBaseDiffEntity(project, agencyMap, gridMap, bizProjectInfoMap);
Set<String> regCount = orgCountMap.get(project.getId());
if (regCount != null) {
diffEntity.setEventReOrg(regCount.size());
} else {
diffEntity.setEventReOrg(0);
}
Integer handleOrgCount = handleCountMap.get(project.getId());
if (handleOrgCount != null) {
diffEntity.setEventHandledCount(handleOrgCount);
} else {
diffEntity.setEventHandledCount(0);
}
diffEntity.setDataEndTime(StringUtils.isBlank(param.getDateId())?DateUtils.getBeforeNDay(NumConstant.ONE):param.getDateId());
setCategoryInfo(diffEntity, project.getId(), categoryList, projectCategoryMap);
if (StringUtils.isNotBlank(project.getTopicId())) {
//获取图片及话题内容
ResiTopicAndImgResultDTO topicInfo = topicService.getTopicAndImgs(project.getTopicId(), "image");
if (topicInfo != null) {
List<TopicAttachmentDTO> topicImgList = topicInfo.getTopicImgList();
if (!CollectionUtils.isEmpty(topicImgList)){
diffEntity.setEventImgUrl(topicImgList.get(NumConstant.ZERO).getAttachmentUrl());
topicImgList.forEach(img -> {
ScreenDifficultyImgDataEntity imgData = new ScreenDifficultyImgDataEntity();
imgData.setEventId(project.getId());
imgData.setEventImgUrl(img.getAttachmentUrl());
imgData.setSort(img.getSort());
imgDataEntities.add(imgData);
imgData.setCustomerId(param.getCustomerId());
});
}
diffEntity.setEventContent(topicInfo.getTopicContent());
log.info("projectId:{} imgs:{}", project.getId(), imgDataEntities.stream().filter(o -> o.getEventId().equals(project.getId())).count());
} }
diffEntity.setEventContent(topicInfo.getTopicContent());
log.info("projectId:{} imgs:{}", project.getId(), imgDataEntities.stream().filter(o -> o.getEventId().equals(project.getId())).count());
} }
diffList.add(diffEntity);
} }
diffList.add(diffEntity); log.info("========:" + JSON.toJSONString(diffList));
} log.info("========:" + JSON.toJSONString(imgDataEntities));
log.info("========:" + JSON.toJSONString(diffList)); screenDifficultyDataService.dataClean(param.getCustomerId(),diffList,imgDataEntities);
log.info("========:" + JSON.toJSONString(imgDataEntities)); log.info("difficultyDataExtract excute pageNo:{}",pageNo);
} while (!CollectionUtils.isEmpty(difficultyBaseList)&&difficultyBaseList.size()==pageSize);
screenDifficultyDataService.dataClean(param.getCustomerId(),diffList,imgDataEntities);
} while (!CollectionUtils.isEmpty(difficultyBaseList)&&difficultyBaseList.size()==pageSize); //3.获取项目的最后操作记录
return true;
//log.info("【大屏数据抽取-难点赌点执行完毕】 客户Id{} 难点赌点数据{}", param.getCustomerId(), JSON.toJSONString(diffList)); } finally {
//3.获取项目的最后操作记录 log.info("【大屏数据抽取-难点赌点执行完毕】 客户Id{}", param.getCustomerId());
return true; }
} }
/** /**

11
epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml

@ -668,10 +668,19 @@
m.id, m.date_id dateId, m.customer_id, m.issue_id, m.topic_id, m.grid_id, m.id, m.date_id dateId, m.customer_id, m.issue_id, m.topic_id, m.grid_id,
m.pid, m.pids, m.agency_id, m.project_status, m.is_resolved, m.pid, m.pids, m.agency_id, m.project_status, m.is_resolved,
m.topic_creator_id, m.is_party, m.is_overdue, m.finish_org_ids m.topic_creator_id, m.is_party, m.is_overdue, m.finish_org_ids
<if test="param.isFirst == null or !param.isFirst">
, IFNULL(b.DATE_ID, DATE_FORMAT( now(), '%Y%m%d' )) as updateDate
</if>
FROM fact_origin_project_main_daily m FROM fact_origin_project_main_daily m
<if test="param.isFirst == null or !param.isFirst">
LEFT JOIN fact_origin_project_log_daily b ON m.ID = b.PROJECT_ID AND b.ACTION_CODE = 'close'
</if>
WHERE WHERE
m.CUSTOMER_ID = #{customerId} m.CUSTOMER_ID = #{param.customerId}
AND m.DEL_FLAG = '0' AND m.DEL_FLAG = '0'
<if test="param.isFirst == null or !param.isFirst">
HAVING updateDate>= #{param.internalDay}
</if>
LIMIT #{offset} ,#{pageSize} LIMIT #{offset} ,#{pageSize}
</select> </select>
<select id="getProjectPeriodForDiff" resultType="com.epmet.entity.evaluationindex.extract.FactOriginProjectOrgPeriodDailyEntity"> <select id="getProjectPeriodForDiff" resultType="com.epmet.entity.evaluationindex.extract.FactOriginProjectOrgPeriodDailyEntity">

Loading…
Cancel
Save