diff --git a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/constant/IssueConstant.java b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/constant/IssueConstant.java index c611d4b97e..891f6ef091 100644 --- a/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/constant/IssueConstant.java +++ b/epmet-module/data-statistical/data-statistical-client/src/main/java/com/epmet/constant/IssueConstant.java @@ -26,4 +26,7 @@ public interface IssueConstant { *未解决 */ String UNRESOLVED = "unresolved"; + + String CLOSED_RESOLVED = "closed_resolved"; + String CLOSED_UNRESOLVED = "closed_unresolved"; } diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectLogDailyDao.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectLogDailyDao.java index 3d7371fb56..3bdbc200bd 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectLogDailyDao.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/dao/evaluationindex/extract/FactOriginProjectLogDailyDao.java @@ -299,6 +299,16 @@ public interface FactOriginProjectLogDailyDao extends BaseDao selectGridSelfDaily(@Param("customerId") String customerId, @Param("dateId") String dateId); + /** + * 组织网格自治率统计--按天 + * @author zhaoqifeng + * @date 2021/5/24 17:53 + * @param customerId + * @param dateId + * @return java.util.List + */ + List selectAgencyGridSelfDaily(@Param("customerId") String customerId, @Param("dateId") String dateId); + /** * @return java.util.List * @param projectId diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectLogDailyService.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectLogDailyService.java index 141a8dc7b8..b925cc31e4 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectLogDailyService.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/FactOriginProjectLogDailyService.java @@ -320,4 +320,14 @@ public interface FactOriginProjectLogDailyService extends BaseService */ List getGridSelfDaily(String customerId, String dateId); + + /** + * 组织网格自制率统计-按天 + * @author zhaoqifeng + * @date 2021/5/24 17:52 + * @param customerId + * @param dateId + * @return java.util.List + */ + Map getAgencyGridSelfDaily(String customerId, String dateId); } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java index ba1ee9853d..82e599ff4b 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactAgencyGovernDailyServiceImpl.java @@ -19,22 +19,23 @@ package com.epmet.service.evaluationindex.extract.todata.impl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.tools.constant.NumConstant; +import com.epmet.constant.*; import com.epmet.dao.evaluationindex.extract.FactAgencyGovernDailyDao; import com.epmet.dto.extract.result.OrgStatisticsResultDTO; import com.epmet.dto.stats.DimAgencyDTO; import com.epmet.entity.evaluationindex.extract.FactAgencyGovernDailyEntity; -import com.epmet.service.evaluationindex.extract.todata.FactAgencyGovernDailyService; -import com.epmet.service.evaluationindex.extract.todata.FactOriginIssueMainDailyService; -import com.epmet.service.evaluationindex.extract.todata.FactOriginProjectMainDailyService; -import com.epmet.service.evaluationindex.extract.todata.FactOriginTopicMainDailyService; +import com.epmet.service.evaluationindex.extract.todata.*; import com.epmet.service.stats.DimAgencyService; import com.epmet.util.DimIdGenerator; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; import java.util.Map; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -54,6 +55,8 @@ public class FactAgencyGovernDailyServiceImpl extends BaseServiceImpl agencyList = dimAgencyService.getAgencyInfoByCustomerId(customerId); - List agencyGovernDailyList = agencyList.stream().map(agency -> { - FactAgencyGovernDailyEntity entity = initEntity(agency, dateId); - return entity; - }).collect(Collectors.toList()); - // 问题解决总数:当前组织下,话题关闭(已解决+无需解决)总数、议题关闭(已解决+无需解决)总数和项目结案(议题转为项目的结案数+项目立项结案数)总数之和 + List agencyGovernDailyList = agencyList.stream().map(agency -> initEntity(agency, dateId)).collect(Collectors.toList()); + // 1.问题解决总数:当前组织下,话题关闭(已解决+无需解决)总数、议题关闭(已解决+无需解决)总数和项目结案(议题转为项目的结案数+项目立项结案数)总数之和 + // 话题总数 Map topicTotal = factOriginTopicMainDailyService.getAgencyClosedTopicCount(customerId, dateId, null, null); - // 党群自治占比:当前组织下,所有小组内关闭(已解决+无需解决)的话题数与问题解决总数之比(未出小组:未转议题的) - // 网格自治占比:当前组织下,所有网格内结案项目数与问题解决总数之比(未出网格) - // 参考:fact_index_govrn_ablity_grid_monthly的SELF_SOLVE_PROJECT_COUNT计算 - // 社区解决占比:当前组织下,由社区结案的项目数与问题解决总数之比 - // 区直部门解决占比:当前组织下,由区级部门结案的项目数与问题解决总数之比 - // 街道解决占比:当前组织下,由街道结案的项目数与问题解决总数之比 - // 自下而上的项目解决:结案时操作人所代表的的处理部门(可以是网格、街道、组织) - // 自上而下的项目解决:向下吹哨,谁立项谁解决(后期在讨论哪样更合理) - // - // 究竟是谁解决!!: - // A社区→A街道→B社区(结案)——A街道解决(自下而上吹(饱含立项往上吹/从话题来的项目),看往上吹的最高层级) - // A社区→B社区→C社区(结案)——C社区解决(平级协助解决,看最后结案) - // A街道→A社区→B社区(结案)——A街道解决(自上而下吹,谁立项谁解决) - // 注:A社区→A街道→(退回)A社区→B社区(结案),A街道不算处理项目,仍是平级协助解决,看最后谁结案 + if (!topicTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = topicTotal.get(item.getAgencyId()); + if (null != dto) { + item.setProblemResolvedCount(dto.getSum()); + } + }); + //当前组织内,话题关闭已解决数 + Map topicResolvedCount = factOriginTopicMainDailyService.getAgencyClosedTopicCount(customerId, dateId, + ProjectConstant.RESOLVED, + null); + if (!topicResolvedCount.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = topicResolvedCount.get(item.getAgencyId()); + if (null != dto) { + item.setTopicResolvedCount(dto.getSum()); + } + }); + } + //当前组织内,话题关闭未解决数 + Map topicUnResolvedCount = factOriginTopicMainDailyService.getAgencyClosedTopicCount(customerId, dateId, + ProjectConstant.UNRESOLVED, + null); + if (!topicUnResolvedCount.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = topicUnResolvedCount.get(item.getAgencyId()); + if (null != dto) { + item.setTopicUnResolvedCount(dto.getSum()); + } + }); + } + //当前组织内,话题关闭已解决数 + Map topicSelfResolvedCount = factOriginTopicMainDailyService.getAgencyClosedTopicCount(customerId, dateId, + ProjectConstant.RESOLVED, + NumConstant.ZERO); + if (!topicSelfResolvedCount.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = topicSelfResolvedCount.get(item.getAgencyId()); + if (null != dto) { + item.setInGroupTopicResolvedCount(dto.getSum()); + } + }); + } + //当前组织内,话题关闭未解决数 + Map topicSelfUnResolvedCount = factOriginTopicMainDailyService.getAgencyClosedTopicCount(customerId, + dateId, + ProjectConstant.UNRESOLVED, + NumConstant.ZERO); + if (!topicSelfUnResolvedCount.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = topicSelfUnResolvedCount.get(item.getAgencyId()); + if (null != dto) { + item.setInGroupTopicUnResolvedCount(dto.getSum()); + } + }); + } + } + //议题总数 + Map issueTotal = factOriginIssueMainDailyService.getAgencyClosedIssueCount(customerId, dateId, null); + if (!issueTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = issueTotal.get(item.getAgencyId()); + if (null != dto) { + item.setProblemResolvedCount(item.getProblemResolvedCount() + dto.getSum()); + } + }); + // 当前组织内,议题关闭已解决数 + Map issueResolvedTotal = factOriginIssueMainDailyService.getAgencyClosedIssueCount(customerId, dateId, + IssueConstant.CLOSED_RESOLVED); + if (!issueResolvedTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = issueResolvedTotal.get(item.getAgencyId()); + if (null != dto) { + item.setIssueResolvedCount(dto.getSum()); + } + }); + } + // 当前组织内,议题关闭未解决数 + Map issueUnResolvedTotal = factOriginIssueMainDailyService.getAgencyClosedIssueCount(customerId, dateId, + IssueConstant.CLOSED_UNRESOLVED); + if (!issueUnResolvedTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = issueUnResolvedTotal.get(item.getAgencyId()); + if (null != dto) { + item.setIssueUnResolvedCount(dto.getSum()); + } + }); + } + } + //项目总数 + Map projectTotal = factOriginProjectMainDailyService.getAgencyClosedProjectCount(customerId, dateId, null, + null); + if (!projectTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = projectTotal.get(item.getAgencyId()); + if (null != dto) { + item.setProblemResolvedCount(item.getProblemResolvedCount() + dto.getSum()); + } + }); + // 当前组织内:来源于议题的项目:结案已解决数 + Map issueProjectResolvedTotal = factOriginProjectMainDailyService.getAgencyClosedProjectCount(customerId, + dateId, ProjectConstant.RESOLVED, + "issue"); + if (!issueProjectResolvedTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = issueProjectResolvedTotal.get(item.getAgencyId()); + if (null != dto) { + item.setIssueProjectResolvedCount(dto.getSum()); + } + }); + } + // 当前组织内:来源于议题的项目:结案无需解决数 + Map issueProjectUnResolvedTotal = factOriginProjectMainDailyService.getAgencyClosedProjectCount(customerId, + dateId, ProjectConstant.UNRESOLVED, + "issue"); + if (!issueProjectUnResolvedTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = issueProjectUnResolvedTotal.get(item.getAgencyId()); + if (null != dto) { + item.setIssueProjectUnResolvedCount(dto.getSum()); + } + }); + } + + // 当前组织内:来源于议题的项目:结案已解决数 + Map projectResolvedTotal = factOriginProjectMainDailyService.getAgencyClosedProjectCount(customerId, + dateId, ProjectConstant.RESOLVED, + OrgTypeConstant.AGENCY); + if (!projectResolvedTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = projectResolvedTotal.get(item.getAgencyId()); + if (null != dto) { + item.setApprovalProjectResolvedCount(dto.getSum()); + } + }); + } + // 当前组织内:来源于议题的项目:结案无需解决数 + Map projectUnResolvedTotal = factOriginProjectMainDailyService.getAgencyClosedProjectCount(customerId, + dateId, ProjectConstant.UNRESOLVED, + OrgTypeConstant.AGENCY); + if (!projectUnResolvedTotal.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = projectUnResolvedTotal.get(item.getAgencyId()); + if (null != dto) { + item.setApprovalProjectUnResolvedCount(dto.getSum()); + } + }); + } + } + // 2.党群自治占比:当前组织下,所有小组内关闭(已解决+无需解决)的话题数与问题解决总数之比(未出小组:未转议题的) + agencyGovernDailyList.forEach(item -> { + int count = item.getInGroupTopicResolvedCount() + item.getInGroupTopicUnResolvedCount(); + int sum = item.getProblemResolvedCount(); + if (sum != NumConstant.ZERO) { + BigDecimal resolveCount = new BigDecimal(sum); + BigDecimal selfCount = new BigDecimal(count); + item.setGroupSelfGovernRatio(selfCount.divide(resolveCount, NumConstant.SIX, RoundingMode.HALF_UP)); + } + }); + // 3.网格自治占比:当前组织下,所有网格内结案项目数与问题解决总数之比(未出网格) + Map gridSelfCount = factOriginProjectLogDailyService.getAgencyGridSelfDaily(customerId, dateId); + if (!gridSelfCount.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + OrgStatisticsResultDTO dto = gridSelfCount.get(item.getAgencyId()); + if (null != dto) { + int count = dto.getCount(); + int sum = item.getProblemResolvedCount(); + if (sum != NumConstant.ZERO) { + BigDecimal resolveCount = new BigDecimal(sum); + BigDecimal selfCount = new BigDecimal(count); + item.setGridSelfGovernRatio(selfCount.divide(resolveCount, NumConstant.SIX, RoundingMode.HALF_UP)); + } + } + }); + } + // 4.社区解决占比:当前组织下,由社区结案的项目数与问题解决总数之比 + // 5.区直部门解决占比:当前组织下,由区级部门结案的项目数与问题解决总数之比 + // 6.街道解决占比:当前组织下,由街道结案的项目数与问题解决总数之比 + Map> projectCount = factOriginProjectMainDailyService.getAgencyClosedProjectStatic(customerId, dateId); + if (!gridSelfCount.isEmpty()) { + agencyGovernDailyList.forEach(item -> { + List list = projectCount.get(item.getAgencyId()); + if (CollectionUtils.isNotEmpty(list)) { + Map map = list.stream().collect(Collectors.toMap(OrgStatisticsResultDTO::getLevel, + Function.identity())); + int sum = item.getProblemResolvedCount(); + BigDecimal resolveCount = new BigDecimal(sum); + if (sum != NumConstant.ZERO) { + // 社区解决占比 + OrgStatisticsResultDTO community = map.get(ScreenConstant.COMMUNITY); + if (null != community) { + int count = community.getCount(); + BigDecimal selfCount = new BigDecimal(count); + item.setCommunityClosedRatio(selfCount.divide(resolveCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setCommunityClosedCount(count); + } + // 街道解决占比 + OrgStatisticsResultDTO street = map.get(ScreenConstant.STREET); + if (null != street) { + int count = street.getCount(); + BigDecimal selfCount = new BigDecimal(count); + item.setStreetClosedRatio(selfCount.divide(resolveCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setStreetClosedCount(count); + } + // 区直部门解决占比 + OrgStatisticsResultDTO districtDept = map.get(ScreenConstant.DISTRICT); + if (null != districtDept) { + int count = districtDept.getCount(); + BigDecimal selfCount = new BigDecimal(count); + item.setDistrictDeptClosedRatio(selfCount.divide(resolveCount, NumConstant.SIX, RoundingMode.HALF_UP)); + item.setDistrictDeptClosedCount(count); + } + } + } + }); + } } private FactAgencyGovernDailyEntity initEntity(DimAgencyDTO agency, String dateId) { diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectLogDailyServiceImpl.java b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectLogDailyServiceImpl.java index 3dde0b0032..73de4eb905 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectLogDailyServiceImpl.java +++ b/epmet-module/data-statistical/data-statistical-server/src/main/java/com/epmet/service/evaluationindex/extract/todata/impl/FactOriginProjectLogDailyServiceImpl.java @@ -41,6 +41,7 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -414,5 +415,23 @@ public class FactOriginProjectLogDailyServiceImpl extends BaseServiceImpl + * @author zhaoqifeng + * @date 2021/5/24 17:52 + */ + @Override + public Map getAgencyGridSelfDaily(String customerId, String dateId) { + List list = baseDao.selectAgencyGridSelfDaily(customerId, dateId); + if (CollectionUtils.isEmpty(list)) { + return Collections.emptyMap(); + } + return list.stream().collect(Collectors.toMap(OrgStatisticsResultDTO::getAgencyId, Function.identity())); + } + } \ No newline at end of file diff --git a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectLogDailyDao.xml b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectLogDailyDao.xml index c1b12a7da5..a281843411 100644 --- a/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectLogDailyDao.xml +++ b/epmet-module/data-statistical/data-statistical-server/src/main/resources/mapper/evaluationindex/extract/FactOriginProjectLogDailyDao.xml @@ -687,4 +687,44 @@ and m.ACTION_CODE='close' AND m.PROJECT_ID = #{projectId} + \ No newline at end of file