diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/ScreenProjectCategoryGridDailyDTO.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/ScreenProjectCategoryGridDailyDTO.java index 0406fb26f2..b80df7b7ff 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/ScreenProjectCategoryGridDailyDTO.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/dto/screen/ScreenProjectCategoryGridDailyDTO.java @@ -108,4 +108,11 @@ public class ScreenProjectCategoryGridDailyDTO implements Serializable { */ private Date updatedTime; + private String orgId; + + /** + * 用在 项目分类 org 统计中,记录本记录是否被计数 + */ + private Boolean status = false; + } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectCategoryDailyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectCategoryDailyDao.java index 010004d7ba..911b73b479 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectCategoryDailyDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectCategoryDailyDao.java @@ -43,4 +43,12 @@ public interface FactOriginProjectCategoryDailyDao extends BaseDao selectListProjectCategoryGridDailyDTO(@Param("customerId") String customerId); + + /** + * @Description 查询客户下,组织直接立项的,各项目分类下的项目数量【筛选组织创建的项目,fact_origin_project_main_daily表gridId为空】 + * @Param orgIds + * @author zxc + * @date 2021/4/13 下午4:36 + */ + List selectListProjectCategoryByOrg(@Param("orgIds")List orgIds,@Param("customerId") String customerId); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectCategoryDailyService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectCategoryDailyService.java index 1a0a27eda9..2da14685eb 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectCategoryDailyService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectCategoryDailyService.java @@ -47,4 +47,12 @@ public interface FactOriginProjectCategoryDailyService extends BaseService selectListProjectCategoryGridDailyDTO(String customerId); + + /** + * @Description 查询客户下,组织直接立项的,各项目分类下的项目数量【筛选组织创建的项目,fact_origin_project_main_daily表gridId为空】 + * @Param orgIds + * @author zxc + * @date 2021/4/13 下午4:36 + */ + List selectListProjectCategoryByOrg(List orgIds,String customerId); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectCategoryDailyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectCategoryDailyServiceImpl.java index c97322b4b4..6e3f7abb90 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectCategoryDailyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectCategoryDailyServiceImpl.java @@ -32,6 +32,7 @@ import com.epmet.service.Issue.IssueProjectCategoryDictService; import com.epmet.service.evaluationindex.extract.todata.FactOriginProjectCategoryDailyService; import com.epmet.service.project.ProjectService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -119,4 +120,18 @@ public class FactOriginProjectCategoryDailyServiceImpl extends BaseServiceImpl list=baseDao.selectListProjectCategoryGridDailyDTO(customerId); return list; } + + /** + * @Description 查询客户下,组织直接立项的,各项目分类下的项目数量【筛选组织创建的项目,fact_origin_project_main_daily表gridId为空】 + * @Param orgIds + * @author zxc + * @date 2021/4/13 下午4:36 + */ + @Override + public List selectListProjectCategoryByOrg(List orgIds,String customerId) { + if (!CollectionUtils.isEmpty(orgIds)){ + return new ArrayList<>(); + } + return baseDao.selectListProjectCategoryByOrg(orgIds,customerId); + } } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java index 23442bedbd..192305e6ad 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenExtractServiceImpl.java @@ -182,10 +182,11 @@ public class ScreenExtractServiceImpl implements ScreenExtractService { //基层治理- 难点赌点 screen_difficulty_data | screen_difficulty_img_data try { log.info("【难点赌点数据上报开始------】 当前客户Id{}",param.getCustomerId()); - screenGrassrootsGovernDataAbsorptionService.difficultyDataHub(param); + //screenGrassrootsGovernDataAbsorptionService.difficultyDataHub(param); - //todo 初始化全量 param.setDateId(null); - //screenGrassrootsGovernDataAbsorptionService.difficultyDataExtract(param); + //todo 初始化全量 + param.setDateId(null); + screenGrassrootsGovernDataAbsorptionService.difficultyDataExtract(param); log.info("【难点赌点数据上报结束------】 当前客户Id{}",param.getCustomerId()); }catch (Exception e){ log.error("基层治理-难点赌点抽取到大屏失败,customerId为:"+customerId+"dateId为:"+dateId, e); diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java index 9f42fe0a00..40a55d329f 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/toscreen/impl/ScreenGrassrootsGovernDataAbsorptionServiceImpl.java @@ -78,10 +78,11 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr private ProjectService projectService; @Autowired private IssueProjectCategoryDictService issueProjectCategoryDictService; + /** - * @Description 用户积分、党员分值数据中转站 * @param param * @return + * @Description 用户积分、党员分值数据中转站 * @author wangc * @date 2020.09.25 09:53 **/ @@ -93,16 +94,16 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr //2.查询出客户下网格的相关信息 List gridList = customerGridService.queryGridInfoList(param.getCustomerId()); // list 转 map,以gridId为key,a = gridList,作为value,(o,n)->o 是遇到相同的gridId舍弃,(o,n)->n 是覆盖原来的gridId - Map gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO :: getGridId,a -> a,(o, n) -> o)); + Map gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO::getGridId, a -> a, (o, n) -> o)); //3.查询出客户下用户的累计积分(累计值,没有时间概念,否则需要查询积分明细计算出评价周期末的得分) - Map pointMap = userPointService.getUserPointMap(param.getCustomerId()); + Map pointMap = userPointService.getUserPointMap(param.getCustomerId()); //4.查询出客户下党员的分值 String dateId = param.getDateId(); - if(StringUtils.isEmpty(dateId)){ + if (StringUtils.isEmpty(dateId)) { //如果没有传月份,则使用当前时间的上一个月 dateId = DateUtils.getBeforeNMonth(NumConstant.ONE); - }else{ + } else { String dateType = DateUtils.identifyTimeDimension(dateId); if (StringUtils.isEmpty(dateType) || !StringUtils.equalsAny(dateType, "date", "month")) { dateId = DateUtils.getBeforeNMonth(NumConstant.ONE); @@ -112,21 +113,21 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr } final String finalDateId = dateId; // 查询党员积分 - Map scoreMap = cpcIndexCalculateService.getCpcScore(param.getCustomerId(),dateId); + Map scoreMap = cpcIndexCalculateService.getCpcScore(param.getCustomerId(), dateId); //剔除垃圾数据 registeredUsers.removeIf(user -> null == gridMap.get(user.getGridId())); //5.整合数据 - if(!CollectionUtils.isEmpty(registeredUsers)){ + if (!CollectionUtils.isEmpty(registeredUsers)) { registeredUsers.forEach(user -> { GridInfoDTO gridInfo = gridMap.get(user.getGridId()); - if(null != gridInfo){ + if (null != gridInfo) { user.setGridName(gridInfo.getGridName()); user.setOrgId(gridInfo.getAgencyId()); user.setOrgName(gridInfo.getOrgName()); //原始数据Pid使用英文:隔开,大屏数据要求按照英文,隔开 - user.setAllParentIds(gridInfo.getPids().replaceAll(StrConstant.COLON,StrConstant.COMMA)); + user.setAllParentIds(gridInfo.getPids().replaceAll(StrConstant.COLON, StrConstant.COMMA)); } Integer point = pointMap.get(user.getUserId()); BigDecimal score = scoreMap.get(user.getUserId()); @@ -141,23 +142,23 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr } /** - * @Description 难点赌点数据中转站 * @param param * @return + * @Description 难点赌点数据中转站 * @author wangc * @date 2020.09.25 10:00 **/ @Override public void difficultyDataHub(ScreenCentralZoneDataFormDTO param) { //查询数据 - List difficulties = factOriginProjectMainDailyService.getDifficultyBaseInfo(param.getCustomerId(),projectService.getOvertimeProjectByParameter(param.getCustomerId())); - if(CollectionUtils.isEmpty(difficulties)) { + List difficulties = factOriginProjectMainDailyService.getDifficultyBaseInfo(param.getCustomerId(), projectService.getOvertimeProjectByParameter(param.getCustomerId())); + if (CollectionUtils.isEmpty(difficulties)) { return; } //2.查询出客户下网格的相关信息 List gridList = customerGridService.queryGridInfoList(param.getCustomerId()); - Map gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO :: getGridId,a -> a,(o, n) -> o)); + Map gridMap = gridList.stream().collect(Collectors.toMap(GridInfoDTO::getGridId, a -> a, (o, n) -> o)); //剔除垃圾数据(本次需要更新的数据集) //for(Iterator iter = difficulties.iterator(); iter.hasNext();){ @@ -166,13 +167,13 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr // iter.remove(); // } //} - difficulties.removeIf( diff -> null == gridMap.get(diff.getOrgId())); + difficulties.removeIf(diff -> null == gridMap.get(diff.getOrgId())); - List projectIds = difficulties.stream().map(ScreenDifficultyDataEntity :: getEventId).distinct().collect(Collectors.toList()); + List projectIds = difficulties.stream().map(ScreenDifficultyDataEntity::getEventId).distinct().collect(Collectors.toList()); //最近一次操作 - Map latestOperationMap = projectProcessService.getLatestOperation(projectIds,param.getCustomerId()); + Map latestOperationMap = projectProcessService.getLatestOperation(projectIds, param.getCustomerId()); //图片 - List projectSourceMap = difficulties.stream().map(diff->{ + List projectSourceMap = difficulties.stream().map(diff -> { ProjectSourceMapFormDTO map = new ProjectSourceMapFormDTO(); map.setProjectId(diff.getEventId()); map.setSourceId(diff.getEventImgUrl()); @@ -180,22 +181,22 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr }).collect(Collectors.toList()); //factOriginProjectMainDailyService.getNewProject(param.getCustomerId(),projectIds); - Map> imgMap = topicService.getTopicImgs(projectSourceMap); + Map> imgMap = topicService.getTopicImgs(projectSourceMap); - Map contentMap = topicService.getTopicContent(projectSourceMap); + Map contentMap = topicService.getTopicContent(projectSourceMap); - difficulties.forEach( diff -> { + difficulties.forEach(diff -> { - List figureList = CollectionUtils.isEmpty(imgMap) ? null : imgMap.get(diff.getEventId()); - diff.setEventImgUrl(CollectionUtils.isEmpty(figureList) ? "" : figureList.get(NumConstant.ZERO).getEventImgUrl()); + List figureList = CollectionUtils.isEmpty(imgMap) ? null : imgMap.get(diff.getEventId()); + diff.setEventImgUrl(CollectionUtils.isEmpty(figureList) ? "" : figureList.get(NumConstant.ZERO).getEventImgUrl()); - if(!CollectionUtils.isEmpty(contentMap)) { + if (!CollectionUtils.isEmpty(contentMap)) { diff.setEventContent(contentMap.get(diff.getEventId())); } - if(! CollectionUtils.isEmpty(latestOperationMap)){ + if (!CollectionUtils.isEmpty(latestOperationMap)) { ProjectLatestOperationResultDTO oper = latestOperationMap.get(diff.getEventId()); - if(null != oper){ + if (null != oper) { diff.setLatestOperateDesc(oper.getOperationName()); diff.setEventTitle(oper.getTitle()); diff.setEventCostTime(oper.getCostTime()); @@ -208,6 +209,10 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr imgMap.values().forEach(imgList::addAll); //立案后会有 一个process 如果没有则说明是垃圾数据 如果有其他方式立项的项目则需要考虑下兼容 + difficulties.removeIf(diff -> StringUtils.isBlank(diff.getLatestOperateDesc())); + + screenDifficultyDataService.dataClean(param.getCustomerId(), difficulties, imgList); + log.info("【大屏数据抽取-难点赌点执行完毕】 客户Id{} 难点赌点数据{}", param.getCustomerId(), JSON.toJSONString(difficulties)); difficulties.removeIf( diff -> StringUtils.isBlank(diff.getLatestOperateDesc())); imgList.forEach(item -> { item.setCustomerId(param.getCustomerId()); @@ -218,17 +223,16 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr @Override public boolean difficultyDataExtract(ScreenCentralZoneDataFormDTO param) { - //TODO //1.根据客户Id 获取所有项目数据 List difficultyBaseList = factOriginProjectMainDailyService.getProjectForDiff(param); - if (CollectionUtils.isEmpty(difficultyBaseList)){ - log.warn("difficultyDataExtract customerId:{} have any project",param.getCustomerId()); + if (CollectionUtils.isEmpty(difficultyBaseList)) { + log.warn("difficultyDataExtract customerId:{} have any project", param.getCustomerId()); return false; } //获取业务库项目标题 List bizProjectInfoList = projectService.getProjectInfo(param.getCustomerId(), null); - if (CollectionUtils.isEmpty(bizProjectInfoList)){ - log.warn("difficultyDataExtract customerId:{} have any project",param.getCustomerId()); + if (CollectionUtils.isEmpty(bizProjectInfoList)) { + log.warn("difficultyDataExtract customerId:{} have any project", param.getCustomerId()); return false; } Map bizProjectInfoMap = bizProjectInfoList.stream().collect(Collectors.toMap(ProjectDTO::getId, o -> o, (o1, o2) -> o1)); @@ -245,108 +249,185 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr //项目分类数据 todo 暂时查询所有 List projectCategoryData = projectService.getProjectCategoryData(param.getCustomerId(), null); //key projectId:categoryCode Set - Map> projectCategoryMap = projectCategoryData.stream() - .collect(Collectors.groupingBy(ProjectCategoryDTO::getProjectId, Collectors.mapping(ProjectCategoryDTO::getCategoryCode, Collectors.toSet()))); + Map> projectCategoryMap = projectCategoryData.stream() + .collect(Collectors.groupingBy(ProjectCategoryDTO::getProjectId, Collectors.mapping(ProjectCategoryDTO::getCategoryCode, Collectors.toList()))); //2.获取项目的所有节点耗时数据 List projectPeriodList = factOriginProjectMainDailyService.getProjectPeriod(param); - Map orgCountMap = new HashMap<>(); - Map handleCountMap = new HashMap<>(); - projectPeriodList.forEach(period->{ - Integer orgCount = orgCountMap.get(period.getProjectId()); - if (orgCount == null){ - orgCount = 0; - }else{ - ++orgCount; - } - orgCountMap.put(period.getProjectId(),orgCount); - Integer handleCount = handleCountMap.get(period.getProjectId()); - if (handleCount == null){ - handleCount = 0; - }else{ - ++handleCount; - } - handleCountMap.put(period.getProjectId(),handleCount); - }); + //处理部门数去重(只要流转到就算) + Map> orgCountMap = new HashMap<>(); + //被处理次数 + Map handleCountMap = new HashMap<>(); + Set valideProjectIdSet = fillAnyCountAndValidProject(param, projectPeriodList, orgCountMap, handleCountMap); + List diffList = new ArrayList<>(); + List imgDataEntities = new ArrayList<>(); for (FactOriginProjectMainDailyEntity project : difficultyBaseList) { if (agencyMap.get(project.getAgencyId()) == null || bizProjectInfoMap.get(project.getId()) == null) { - log.error("未获取到相关的项目信息或者项目的所属组织信息"); + log.warn("未获取到相关的项目信息或者项目的所属组织信息,agencyId:{},projectId:{}",project.getAgencyId(),project.getId()); + continue; + } + //判断是否符合难点堵点条件 + if (!valideProjectIdSet.contains(project.getId())) { continue; } - ScreenDifficultyDataEntity diffEntity = buildBaseDiffEntity(project, agencyMap, gridMap, bizProjectInfoMap); - Integer regCount = orgCountMap.get(project.getId()); - if (regCount != null){ - diffEntity.setEventReOrg(regCount); + Set 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){ + 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); - diffEntity.setDataEndTime(param.getDateId()); - setCategoryInfo(diffEntity, project.getId(),categoryList,projectCategoryMap); - - if (StringUtils.isNotBlank(project.getTopicId())){ + if (StringUtils.isNotBlank(project.getTopicId())) { //获取图片及话题内容 - ResiTopicAndImgResultDTO topicInfo = topicService.getTopicAndImgs(project.getTopicId(),"image"); - if (topicInfo != null){ + ResiTopicAndImgResultDTO topicInfo = topicService.getTopicAndImgs(project.getTopicId(), "image"); + if (topicInfo != null) { diffEntity.setEventImgUrl(topicInfo.getTopicImgList().get(NumConstant.ZERO).getAttachmentUrl()); diffEntity.setEventContent(topicInfo.getTopicContent()); + topicInfo.getTopicImgList().forEach(img -> { + ScreenDifficultyImgDataEntity imgData = new ScreenDifficultyImgDataEntity(); + imgData.setEventId(project.getId()); + imgData.setEventImgUrl(img.getAttachmentUrl()); + imgData.setSort(img.getSort()); + imgDataEntities.add(imgData); + }); + log.info("projectId:{} imgs:{}", project.getId(), imgDataEntities.stream().filter(o -> o.getEventId().equals(project.getId())).count()); } + } diffList.add(diffEntity); - log.info("========:"+JSON.toJSONString(diffList)); } + List collect = diffList.stream().filter(o -> o.getEventCostTime() < 5 * 24 * 60).collect(Collectors.toList()); + log.info("========:" + JSON.toJSONString(collect)); + log.info("========:" + JSON.toJSONString(diffList)); + log.info("========:" + JSON.toJSONString(imgDataEntities)); + screenDifficultyDataService.dataClean(param.getCustomerId(),diffList,imgDataEntities); + log.info("【大屏数据抽取-难点赌点执行完毕】 客户Id{} 难点赌点数据{}", param.getCustomerId(), JSON.toJSONString(diffList)); + //3.获取项目的最后操作记录 + return true; + } + + /** + * desc:筛选出符合条件的的项目(超过超期时间的为超期项目)和处理的部门数及处理次数 + * @param param + * @param projectPeriodList + * @param orgCountMap + * @param handleCountMap + * @return + */ + private Set fillAnyCountAndValidProject(ScreenCentralZoneDataFormDTO param, List projectPeriodList, Map> orgCountMap, Map handleCountMap) { + //已经结案的项目的结案时间 + Set valideProjectIdSet = new HashSet<>(); + Map closeProjectDateMap = projectPeriodList.stream().filter(o -> ProjectConstant.CLOSE.equals(o.getOperation())) + .collect(Collectors.toMap(FactOriginProjectOrgPeriodDailyEntity::getProjectId, FactOriginProjectOrgPeriodDailyEntity::getHandledDate, (o1, o2) -> o1)); + //超期项目阈值 + Integer overtimeConfig = projectService.getOvertimeProjectByParameter(param.getCustomerId()); + projectPeriodList.forEach(period -> { + Set orgCount = orgCountMap.get(period.getProjectId()); + if (orgCount == null) { + orgCount = new HashSet<>(); + } + orgCount.add(period.getOrgId()); + orgCountMap.put(period.getProjectId(), orgCount); + if (ProjectConstant.RESOLVED.equals(period.getIsResolved())) { + Integer handleCount = handleCountMap.getOrDefault(period.getProjectId(), 0); + handleCountMap.put(period.getProjectId(), ++handleCount); + } + //筛选出 项目的结案时间 未结案的为当前时间(结案只有一条记录) + if (period.getHandledDate() != null) { + if (period.getHandledDate().getTime() - period.getInformedDate().getTime() > overtimeConfig * 1000 * 60 * 60 * 24) { + valideProjectIdSet.add(period.getProjectId()); + } + } else { + Date finishDate = closeProjectDateMap.getOrDefault(period.getProjectId(), new Date()); + if (finishDate.getTime() - period.getInformedDate().getTime() > overtimeConfig * 1000 * 60 * 60 * 24) { + valideProjectIdSet.add(period.getProjectId()); + } + } - //3.获取项目的最后操作记录 - return false; + }); + return valideProjectIdSet; } - private void setCategoryInfo(ScreenDifficultyDataEntity diffEntity, String projectId, List categoryList, Map> projectCategoryMap) { - Set categorySet = projectCategoryMap.get(projectId); - if (CollectionUtils.isEmpty(categorySet)){ + /** + * desc:设置项目类别 + * @param diffEntity + * @param projectId + * @param categoryList + * @param projectCategoryMap + */ + private void setCategoryInfo(ScreenDifficultyDataEntity diffEntity, String projectId, List categoryList, Map> projectCategoryMap) { + List categorySet = projectCategoryMap.get(projectId); + if (CollectionUtils.isEmpty(categorySet)) { return; } - projectCategoryMap.forEach((k,v) ->{ - List childCategory = new ArrayList<>(); - v.forEach(categoryCode-> getParentNode(childCategory,categoryList,categoryCode)); - String categoryCodes = childCategory.stream().map(IssueProjectCategoryDictEntity::getCategoryCode).sorted(Comparator.reverseOrder()).collect(Collectors.joining(StrConstant.COMMA)); - String categoryNames = childCategory.stream().map(IssueProjectCategoryDictEntity::getCategoryName).sorted(Comparator.reverseOrder()).collect(Collectors.joining(StrConstant.COMMA)); - diffEntity.setEventCategoryCode(categoryCodes); - diffEntity.setEventCategoryName(categoryNames); + projectCategoryMap.forEach((k, v) -> { + StringBuilder code = new StringBuilder(); + StringBuilder name = new StringBuilder(); + v.forEach(categoryCode -> { + List childCategory = new ArrayList<>(); + getParentNode(childCategory, categoryList, categoryCode); + String categoryCodes = childCategory.stream().map(IssueProjectCategoryDictEntity::getCategoryCode).collect(Collectors.joining(StrConstant.HYPHEN)); + String categoryNames = childCategory.stream().map(IssueProjectCategoryDictEntity::getCategoryName).collect(Collectors.joining(StrConstant.HYPHEN)); + + code.append(categoryCodes).append(StrConstant.COMMA_ZH); + name.append(categoryNames).append(StrConstant.COMMA_ZH); + }); + code.deleteCharAt(code.length() - NumConstant.ONE); + name.deleteCharAt(name.length() - NumConstant.ONE); + diffEntity.setEventCategoryCode(code.toString()); + diffEntity.setEventCategoryName(name.toString()); + log.info("code:{}",code.toString()); + log.info("name:{}",name.toString()); }); } + /** + * desc:构建难点堵点基础数据 + * @param project + * @param agencyMap + * @param gridMap + * @param bizProjectInfoMap + * @return + */ private ScreenDifficultyDataEntity buildBaseDiffEntity(FactOriginProjectMainDailyEntity project, Map agencyMap, Map gridMap, Map bizProjectInfoMap) { ProjectDTO projectDTO = bizProjectInfoMap.get(project.getId()); ScreenDifficultyDataEntity diff = new ScreenDifficultyDataEntity(); diff.setCustomerId(project.getCustomerId()); //大屏的是逗号隔开的 - String allPIds = project.getPids().replaceAll(StrConstant.COLON,StrConstant.COMMA); + String allPIds = project.getPids().replaceAll(StrConstant.COLON, StrConstant.COMMA); DimAgencyEntity agencyInfoDTO = agencyMap.get(project.getAgencyId()); - if (StringUtils.isBlank(project.getGridId())){ + diff.setEventTitle(projectDTO.getTitle()); + if (StringUtils.isBlank(project.getGridId())) { diff.setOrgType("agency"); diff.setOrgId(project.getAgencyId()); diff.setParentId(project.getPid()); - diff.setAllParentIds(allPIds.replace(StrConstant.COMMA+project.getAgencyId(),StrConstant.EPMETY_STR)); + diff.setAllParentIds(allPIds.replace(StrConstant.COMMA + project.getAgencyId(), StrConstant.EPMETY_STR)); diff.setOrgName(agencyInfoDTO.getAgencyName()); - if (StringUtils.isNotBlank(agencyInfoDTO.getAllParentName())){ + if (StringUtils.isNotBlank(agencyInfoDTO.getAllParentName())) { diff.setEventSource(agencyInfoDTO.getAllParentName().concat(StrConstant.HYPHEN.concat(diff.getOrgName()))); - }else{ + } else { diff.setEventSource(agencyInfoDTO.getAgencyName()); } //如果是组织的则 设置背景为内容 diff.setEventContent(projectDTO.getBackGround()); - }else{ + } else { diff.setOrgType("grid"); diff.setOrgId(project.getGridId()); diff.setParentId(project.getAgencyId()); @@ -355,11 +436,9 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr GridInfoDTO gridInfoDTO = gridMap.get(project.getGridId()); diff.setOrgName(gridInfoDTO.getGridName()); String agencyAndGridName = agencyInfoDTO.getAgencyName().concat(StrConstant.HYPHEN.concat(diff.getOrgName())); - //todo 市北区的 allParentname 为什么为空 - //if (!project.getPid().equals(NumConstant.ZERO_STR)){ - if (StringUtils.isNotBlank(agencyInfoDTO.getAllParentName())){ + if (StringUtils.isNotBlank(agencyInfoDTO.getAllParentName())) { diff.setEventSource(agencyInfoDTO.getAllParentName().concat(StrConstant.HYPHEN).concat(agencyAndGridName)); - }else{ + } else { diff.setEventSource(agencyAndGridName); } } @@ -367,23 +446,24 @@ public class ScreenGrassrootsGovernDataAbsorptionServiceImpl implements ScreenGr diff.setEventId(project.getId()); String projectStatus = project.getProjectStatus(); diff.setEventStatusCode(projectStatus); - if (ProjectConstant.PENDING.equals(projectStatus)){ + + if (ProjectConstant.PENDING.equals(projectStatus)) { diff.setEventStatusDesc("处理中"); //项目耗时 当前时间-项目创建时间 - diff.setEventCostTime((int) ((System.currentTimeMillis()-projectDTO.getCreatedTime().getTime())/1000/60)); - }else{ + diff.setEventCostTime((int) ((System.currentTimeMillis() - projectDTO.getCreatedTime().getTime()) / 1000 / 60)); + } else { diff.setEventStatusDesc("已结案"); //项目耗时 更新时间-项目创建时间 - diff.setEventCostTime((int) ((projectDTO.getUpdatedTime().getTime() - projectDTO.getCreatedTime().getTime())/1000/60)); + diff.setEventCostTime((int) ((projectDTO.getUpdatedTime().getTime() - projectDTO.getCreatedTime().getTime()) / 1000 / 60)); } //暂时不放内容 用不到 diff.setLatestOperateDesc(""); - return diff; } /** * 递归查询父节点 + * * @param childCategory * @param categoryList * @param categoryCode diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryOrgDailyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryOrgDailyServiceImpl.java index 8dbbe72d73..e46b85f91d 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryOrgDailyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/screen/impl/ScreenProjectCategoryOrgDailyServiceImpl.java @@ -31,12 +31,14 @@ import com.epmet.dao.evaluationindex.screen.ScreenProjectCategoryGridDailyDao; import com.epmet.dao.evaluationindex.screen.ScreenProjectCategoryOrgDailyDao; import com.epmet.dto.ScreenCustomerGridDTO; import com.epmet.dto.extract.result.CustomerAgencyInfoResultDTO; +import com.epmet.dto.screen.ScreenProjectCategoryGridDailyDTO; import com.epmet.dto.screen.ScreenProjectCategoryOrgDailyDTO; import com.epmet.dto.screen.result.CategoryProjectResultDTO; import com.epmet.dto.screencoll.ScreenCollFormDTO; import com.epmet.entity.crm.CustomerRelationEntity; import com.epmet.entity.evaluationindex.screen.ScreenProjectCategoryOrgDailyEntity; import com.epmet.service.crm.CustomerRelationService; +import com.epmet.service.evaluationindex.extract.todata.FactOriginProjectCategoryDailyService; import com.epmet.service.evaluationindex.screen.ScreenCustomerAgencyService; import com.epmet.service.evaluationindex.screen.ScreenCustomerGridService; import com.epmet.service.evaluationindex.screen.ScreenProjectCategoryOrgDailyService; @@ -74,6 +76,8 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl page(Map params) { @@ -194,23 +198,23 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl> groupByLevel = agencyIdList.stream().collect(Collectors.groupingBy(CustomerAgencyInfoResultDTO::getLevel)); if (groupByLevel.containsKey(ScreenConstant.COMMUNITY)){ // 社区级别 - disposeOneCustomerSub(ScreenConstant.COMMUNITY,true,customerId,dateId); + disposeOneCustomerSub(ScreenConstant.COMMUNITY,true,customerId,dateId,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.STREET)){ // 街道级别 - disposeOneCustomerSub(ScreenConstant.STREET,false,customerId,dateId); + disposeOneCustomerSub(ScreenConstant.STREET,false,customerId,dateId,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.DISTRICT)){ // 区级 - disposeOneCustomerSub(ScreenConstant.DISTRICT,false,customerId,dateId); + disposeOneCustomerSub(ScreenConstant.DISTRICT,false,customerId,dateId,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.CITY)){ // 市级 - disposeOneCustomerSub(ScreenConstant.CITY,false,customerId,dateId); + disposeOneCustomerSub(ScreenConstant.CITY,false,customerId,dateId,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.PROVINCE)){ // 省级 - disposeOneCustomerSub(ScreenConstant.PROVINCE,false,customerId,dateId); + disposeOneCustomerSub(ScreenConstant.PROVINCE,false,customerId,dateId,agencyIdList); } } } @@ -224,7 +228,7 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl agencyIdList){ List result = new ArrayList<>(); if (isGrid){ // 是社区级别 @@ -255,6 +259,38 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl> groupByLevel = agencyIdList.stream().collect(Collectors.groupingBy(CustomerAgencyInfoResultDTO::getLevel)); + List levelAgencyInfo = groupByLevel.get(level); + if (!CollectionUtils.isEmpty(levelAgencyInfo)){ + List orgIds = levelAgencyInfo.stream().map(m -> m.getAgencyId()).collect(Collectors.toList()); + List screenProjectCategory = factOriginProjectCategoryDailyService.selectListProjectCategoryByOrg(orgIds,customerId); + if (!CollectionUtils.isEmpty(result)){ + if (!CollectionUtils.isEmpty(screenProjectCategory)){ + result.forEach(r -> { + screenProjectCategory.forEach(pc -> { + if (r.getOrgId().equals(pc.getOrgId()) && r.getCategoryCode().equals(pc.getCategoryCode())){ + pc.setStatus(true); + r.setProjectTotal(r.getProjectTotal() + pc.getProjectTotal()); + } + }); + }); + Map> groupByStatus = screenProjectCategory.stream().collect(Collectors.groupingBy(ScreenProjectCategoryGridDailyDTO::getStatus)); + List screenProjectCategoryNoCal = groupByStatus.get(false); + if (!CollectionUtils.isEmpty(screenProjectCategoryNoCal)){ + List noCalCategory = ConvertUtils.sourceToTarget(screenProjectCategoryNoCal, ScreenProjectCategoryOrgDailyEntity.class); + result.addAll(noCalCategory); + } + } + }else { + if (!CollectionUtils.isEmpty(screenProjectCategory)){ + result = ConvertUtils.sourceToTarget(screenProjectCategory, ScreenProjectCategoryOrgDailyEntity.class); + } + } + if (!CollectionUtils.isEmpty(result)){ + result.forEach(r -> {r.setOrgType(level);r.setDateId(dateId);}); + } + } deleteAndInsert(customerId,dateId,result); } @@ -273,23 +309,23 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl> groupByLevel = agencyIdList.stream().collect(Collectors.groupingBy(CustomerAgencyInfoResultDTO::getLevel)); if (groupByLevel.containsKey(ScreenConstant.COMMUNITY)){ // 社区级别 - disposeMoreCustomerSub(ScreenConstant.COMMUNITY,true,customerId,dateId,relationInfo); + disposeMoreCustomerSub(ScreenConstant.COMMUNITY,true,customerId,dateId,relationInfo,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.STREET)){ // 街道级别 - disposeMoreCustomerSub(ScreenConstant.STREET,false,customerId,dateId,relationInfo); + disposeMoreCustomerSub(ScreenConstant.STREET,false,customerId,dateId,relationInfo,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.DISTRICT)){ // 区级 - disposeMoreCustomerSub(ScreenConstant.DISTRICT,false,customerId,dateId,relationInfo); + disposeMoreCustomerSub(ScreenConstant.DISTRICT,false,customerId,dateId,relationInfo,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.CITY)){ // 市级 - disposeMoreCustomerSub(ScreenConstant.CITY,false,customerId,dateId,relationInfo); + disposeMoreCustomerSub(ScreenConstant.CITY,false,customerId,dateId,relationInfo,agencyIdList); } if (groupByLevel.containsKey(ScreenConstant.PROVINCE)){ // 省级 - disposeMoreCustomerSub(ScreenConstant.PROVINCE,false,customerId,dateId,relationInfo); + disposeMoreCustomerSub(ScreenConstant.PROVINCE,false,customerId,dateId,relationInfo,agencyIdList); } } } @@ -304,7 +340,7 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl relationInfo){ + private void disposeMoreCustomerSub(String level,Boolean isGrid,String customerId, String dateId, List relationInfo,List agencyIdList){ List result = new ArrayList<>(); if (isGrid){ // community级别走这 @@ -363,6 +399,41 @@ public class ScreenProjectCategoryOrgDailyServiceImpl extends BaseServiceImpl> groupByLevel = agencyIdList.stream().collect(Collectors.groupingBy(CustomerAgencyInfoResultDTO::getLevel)); + List levelAgencyInfo = groupByLevel.get(level); + if (!CollectionUtils.isEmpty(levelAgencyInfo)) { + List orgIds = levelAgencyInfo.stream().map(m -> m.getAgencyId()).collect(Collectors.toList()); + List screenProjectCategory = factOriginProjectCategoryDailyService.selectListProjectCategoryByOrg(orgIds, customerId); + if (!CollectionUtils.isEmpty(result)) { + if (!CollectionUtils.isEmpty(screenProjectCategory)) { + result.forEach(r -> { + screenProjectCategory.forEach(pc -> { + if (r.getOrgId().equals(pc.getOrgId()) && r.getCategoryCode().equals(pc.getCategoryCode())) { + pc.setStatus(true); + r.setProjectTotal(r.getProjectTotal() + pc.getProjectTotal()); + } + }); + }); + Map> groupByStatus = screenProjectCategory.stream().collect(Collectors.groupingBy(ScreenProjectCategoryGridDailyDTO::getStatus)); + List screenProjectCategoryNoCal = groupByStatus.get(false); + if (!CollectionUtils.isEmpty(screenProjectCategoryNoCal)) { + List noCalCategory = ConvertUtils.sourceToTarget(screenProjectCategoryNoCal, ScreenProjectCategoryOrgDailyEntity.class); + result.addAll(noCalCategory); + } + } + } else { + if (!CollectionUtils.isEmpty(screenProjectCategory)) { + result = ConvertUtils.sourceToTarget(screenProjectCategory, ScreenProjectCategoryOrgDailyEntity.class); + } + } + if (!CollectionUtils.isEmpty(result)) { + result.forEach(r -> { + r.setOrgType(level); + r.setDateId(dateId); + }); + } + } deleteAndInsert(customerId,dateId,result); } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectCategoryDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectCategoryDailyDao.xml index 03ea9ab75c..a2aa82a555 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectCategoryDailyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectCategoryDailyDao.xml @@ -63,4 +63,46 @@ p.AGENCY_ID, P.PIDS + + + diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml index 9935094e55..18635a23df 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectMainDailyDao.xml @@ -602,7 +602,7 @@ diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml index fe274542a0..0d7434ba98 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/screen/ScreenCustomerAgencyDao.xml @@ -410,10 +410,13 @@ ( select m.PARENT_AREA_CODE from screen_customer_agency m where m.AGENCY_ID=#{agencyId} + and m.DEL_FLAG = '0' ) + and sca.DEL_FLAG = '0' diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml index f0df043bf5..6881886600 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/stats/DimAgencyDao.xml @@ -129,7 +129,8 @@ CUSTOMER_ID, PID, AGENCY_NAME, - LEVEL + LEVEL, + ALL_PARENT_NAME FROM dim_agency WHERE @@ -332,4 +333,4 @@ AND LEVEL = #{level} - \ No newline at end of file + diff --git a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectApprovalFormDTO.java b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectApprovalFormDTO.java index 4553ab6654..d86d4873c1 100644 --- a/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectApprovalFormDTO.java +++ b/epmet-module/gov-project/gov-project-client/src/main/java/com/epmet/dto/form/ProjectApprovalFormDTO.java @@ -15,18 +15,20 @@ import java.util.List; @Data public class ProjectApprovalFormDTO implements Serializable { private static final long serialVersionUID = 4859779755214502427L; + public interface ApprovalCategory{} - @NotBlank(message = "项目标题不能为空") + @NotBlank(message = "项目标题不能为空",groups = {ApprovalCategory.class}) private String title; - @NotBlank(message = "项目背景不能为空") + @NotBlank(message = "项目背景不能为空",groups = {ApprovalCategory.class}) @Length(max=1000,message = "项目背景不能超过1000位") private String backGround; - @NotBlank(message = "项目方案不能为空") + @NotBlank(message = "项目方案不能为空",groups = {ApprovalCategory.class}) @Length(max=1000,message = "项目方案不能超过1000位") private String publicReply; + @NotBlank(message = "内部备注不能为空",groups = {ApprovalCategory.class}) @Length(max=1000,message = "内部备注不能超过1000位") private String internalRemark; diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java index 82fe6a5984..199d762a85 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/controller/ProjectTraceController.java @@ -352,6 +352,7 @@ public class ProjectTraceController { **/ @PostMapping("projectapproval") public Result projectApproval(@LoginUser TokenDto tokenDTO, @RequestBody ProjectApprovalFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO,ProjectApprovalFormDTO.ApprovalCategory.class); formDTO.setCustomerId(tokenDTO.getCustomerId()); formDTO.setApp(tokenDTO.getApp()); formDTO.setClient(tokenDTO.getClient()); diff --git a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java index fedafc7ac0..c42c1e6933 100644 --- a/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java +++ b/epmet-module/gov-project/gov-project-server/src/main/java/com/epmet/service/impl/ProjectTraceServiceImpl.java @@ -289,7 +289,7 @@ public class ProjectTraceServiceImpl implements ProjectTraceS List staffList = formDTO.getStaffList(); //1.文字内容安全校验 List list = new ArrayList<>(); - list.add(formDTO.getTitle());list.add(formDTO.getBackGround());list.add(formDTO.getPublicReply()); + list.add(formDTO.getTitle());list.add(formDTO.getBackGround());list.add(formDTO.getPublicReply());list.add(formDTO.getInternalRemark()); safetyCheck(list); //2.数据准备,查询需要用到的数据