From 1d51987a7e86b20d98e90de42066dabd5fc48216 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Fri, 29 Jul 2022 11:09:20 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E3=80=90=E5=9B=BE=E5=B1=82=E3=80=91?= =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96-=201.=E5=B0=86=E5=B7=A6=E4=BE=A7?= =?UTF-8?q?=E8=A2=AB=E7=AE=A1=E7=90=86=E5=AF=B9=E8=B1=A1=E7=9A=84quantity?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=94=B9=E4=B8=BA=E5=A4=9A=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 +- .../controller/CoverageController.java | 13 +++- .../govorg/IcCoverageCategoryStatsDao.java | 16 ++++ .../govorg/IcCoverageCategoryStatsEntity.java | 64 +++++++++++++++ .../dataaggre/service/CoverageService.java | 2 +- .../service/impl/CoverageServiceImpl.java | 78 ++++++++++++++++++- .../govorg/IcCoverageCategoryStatsDao.xml | 25 ++++++ 7 files changed, 195 insertions(+), 5 deletions(-) create mode 100755 epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/IcCoverageCategoryStatsDao.java create mode 100755 epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryStatsEntity.java create mode 100755 epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/IcCoverageCategoryStatsDao.xml diff --git a/epmet-cloud-generator/src/main/resources/application.yml b/epmet-cloud-generator/src/main/resources/application.yml index 973eb74fe0..86b39b69c8 100644 --- a/epmet-cloud-generator/src/main/resources/application.yml +++ b/epmet-cloud-generator/src/main/resources/application.yml @@ -9,7 +9,7 @@ spring: type: com.alibaba.druid.pool.DruidDataSource #MySQL配置 driverClassName: com.mysql.jdbc.Driver - url: jdbc:mysql://118.190.150.119:43306/epmet_user?useUnicode=true&characterEncoding=UTF-8&useSSL=false + url: jdbc:mysql://118.190.150.119:43306/epmet_gov_org?useUnicode=true&characterEncoding=UTF-8&useSSL=false username: root password: root #oracle配置 diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java index f300875b13..d64f0866a5 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java @@ -3,6 +3,8 @@ package com.epmet.dataaggre.controller; import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.dto.result.ZhzlCategorySelectDTO; import com.epmet.commons.tools.enums.ZhzlResiCategoryEnum; +import com.epmet.commons.tools.exception.EpmetErrorCode; +import com.epmet.commons.tools.exception.EpmetException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.EpmetRequestHolder; @@ -17,6 +19,7 @@ import com.epmet.dataaggre.dto.govorg.result.CoverageAnalisisDataListResultDTOV2 import com.epmet.dataaggre.dto.govorg.result.CoverageHomeSearchResultDTO; import com.epmet.dataaggre.service.CoverageService; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -25,6 +28,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 5大图层controller @@ -92,11 +96,16 @@ public class CoverageController { /** * 被管理对象分类列表 + * @param input:只有一个字段:agencyId * @return */ @PostMapping("analysis/governedTargetCategories") - public Result> listGovernedTargetCategories() { - List r = coverageService.listGovernedTargetCategories(); + public Result> listGovernedTargetCategories(@RequestBody Map input) { + String agencyId = input.get("agencyId"); + if (StringUtils.isBlank(agencyId)) { + throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "请输入组织ID"); + } + List r = coverageService.listGovernedTargetCategories(agencyId); return new Result>().ok(r); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/IcCoverageCategoryStatsDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/IcCoverageCategoryStatsDao.java new file mode 100755 index 0000000000..2d179ee974 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/IcCoverageCategoryStatsDao.java @@ -0,0 +1,16 @@ +package com.epmet.dataaggre.dao.govorg; + +import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dataaggre.entity.govorg.IcCoverageCategoryStatsEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-07-29 + */ +@Mapper +public interface IcCoverageCategoryStatsDao extends BaseDao { + +} \ No newline at end of file diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryStatsEntity.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryStatsEntity.java new file mode 100755 index 0000000000..7947b31564 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryStatsEntity.java @@ -0,0 +1,64 @@ +package com.epmet.dataaggre.entity.govorg; + +import com.baomidou.mybatisplus.annotation.TableName; + +import com.epmet.commons.mybatis.entity.BaseEpmetEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * + * + * @author generator generator@elink-cn.com + * @since v1.0.0 2022-07-29 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("ic_coverage_category_stats") +public class IcCoverageCategoryStatsEntity extends BaseEpmetEntity { + + private static final long serialVersionUID = 1L; + + /** + * default;或者customerId + */ + private String customerId; + + /** + * agency,grid的id + */ + private String orgId; + + /** + * agency,grid的id + */ + private String orgType; + + /** + * agency,grid ID路径path,包含自身 + */ + private String orgIdPath; + + /** + * 类别key + */ + private String categoryKey; + + /** + * 所属场所类型。社区自组织:community_org;优势资源:superior_resource;城市管理:city_management;重点危化企业:dangerous_chemicals;公共服务:public_service;特殊人群:special_resi;居民:resi;联建单位:party_unit;群租房:group_rent;事件(包括难点堵点):event;企事业单位巡查:enterprise_patrol; + */ + private String placeType; + + /** + * 所属五大图层:zhzl:综合治理图层;yjcl:应急处置图层;aqsc:安全生产图层;csgl:城市管理图层;ggfw:公共服务图层 + */ + private String coverageType; + + /** + * + */ + private Integer quantity; + +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java index 5c39087be8..1dcb2907a4 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java @@ -42,7 +42,7 @@ public interface CoverageService { */ List listAnalysisResourceCategories(); - List listGovernedTargetCategories(); + List listGovernedTargetCategories(String agencyId); /** * 五大图层,左侧菜单,点击事件,查询人.事的分布 diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java index 1b94a0f270..0bc9878dc4 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java @@ -47,6 +47,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -78,6 +82,9 @@ public class CoverageServiceImpl implements CoverageService { @Autowired private IcResiCategoryWarnService icResiCategoryWarnService; + @Autowired + private ExecutorService executorService; + // 1:出租 0:自住 2:闲置 3:未售出 public static final Integer HOUSE_RENT_FLAG_RENT = 1; @@ -746,7 +753,7 @@ public class CoverageServiceImpl implements CoverageService { } @Override - public List listGovernedTargetCategories() { + public List listGovernedTargetCategories(String agencyId) { // 获取所有菜单的url List menuUrls = new ArrayList<>(128); @@ -814,9 +821,78 @@ public class CoverageServiceImpl implements CoverageService { }); } + String customerId = EpmetRequestHolder.getLoginUserCustomerId(); + String staffId = EpmetRequestHolder.getLoginUserId(); + + Map agencyMap=getStaffPidsFromStaffInfo(customerId,staffId,agencyId,OrgConstant.AGENCY); + String agencyPath = agencyMap.get(OrgConstant.AGENC_PATH); + + // 再最后,多线程setQuantity + fillQuantities4GovernedTarges(results, customerId, agencyId, agencyPath); + return results; } + /** + * 填充数量,接收参数为多个placeType(对应左侧菜单的所有一级) + * @param results + */ + private void fillQuantities4GovernedTarges(List results, String customerId, String agencyId, String staffOrgIds) { + + ArrayList> futures = new ArrayList<>(); + + results.stream().forEach(targetsOfOnePlaceType -> { + CompletableFuture future = CompletableFuture.runAsync(() -> { + fillQuantities4GovernedTarges(targetsOfOnePlaceType, customerId, agencyId, staffOrgIds); + }, executorService); + + futures.add(future); + }); + + // 此处是为了等待计算完成 + futures.forEach(future -> { + try { + future.get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + }); + } + + /** + * 填充数量,接收参数为左侧单个placeType + * @param targetsOfOnePlaceType + * @param customerId + * @param agencyId + * @param staffOrgIds + */ + private void fillQuantities4GovernedTarges(AnalysisGovernedTargetsResult targetsOfOnePlaceType, String customerId, String agencyId, String staffOrgIds) { + List children = targetsOfOnePlaceType.getChildren(); + if (CollectionUtils.isEmpty(children)) { + // 城市管理时间 || 安全生产隐患等只有一层的 + Integer quantity = doDataListCount(customerId, agencyId, staffOrgIds, targetsOfOnePlaceType.getPlaceType(), + targetsOfOnePlaceType.getCategoryKey(), null); + targetsOfOnePlaceType.setQuantity(quantity); + } else { + // 综合治理人群 || 公共服务人群等有子级的 + + AtomicInteger totalOfPlaceType = new AtomicInteger(); + children.forEach(governedTarget -> { + Integer quantity = doDataListCount(customerId, agencyId, staffOrgIds, governedTarget.getPlaceType(), + governedTarget.getCategoryKey(), null); + governedTarget.setQuantity(quantity); + totalOfPlaceType.addAndGet(quantity); + }); + + // 设置这一组的总数 + targetsOfOnePlaceType.setQuantity(totalOfPlaceType.get()); + } + } + + + /** * 五大图层,左侧菜单,点击事件,查询人.事的分布 * diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/IcCoverageCategoryStatsDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/IcCoverageCategoryStatsDao.xml new file mode 100755 index 0000000000..2954d89db3 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/IcCoverageCategoryStatsDao.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b4a04e73d9779e45f9b992c962e442c11e17ab53 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Fri, 29 Jul 2022 12:53:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E3=80=90=E5=9B=BE=E5=B1=82=E3=80=91?= =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96-=201.=E5=B0=86=E5=8F=B3=E4=BE=A7?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E7=9A=84quantity=E6=9F=A5=E8=AF=A2=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=A4=9A=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AnalysisResourceCategoriesResult.java | 5 +- .../controller/CoverageController.java | 5 +- .../govorg/IcCoverageCategoryDictEntity.java | 5 - .../dataaggre/service/CoverageService.java | 2 +- .../service/impl/CoverageServiceImpl.java | 133 +++++++++++++----- .../entity/IcCoverageCategoryDictEntity.java | 4 - 6 files changed, 102 insertions(+), 52 deletions(-) diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/coverage/AnalysisResourceCategoriesResult.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/coverage/AnalysisResourceCategoriesResult.java index a6ab7996ab..4bfd7e83c1 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/coverage/AnalysisResourceCategoriesResult.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/coverage/AnalysisResourceCategoriesResult.java @@ -6,6 +6,7 @@ import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; /** * 五大图层-可视化-右侧分类树列表 @@ -26,7 +27,7 @@ public class AnalysisResourceCategoriesResult { /** * 个数 */ - private Integer quantity; + private AtomicInteger quantity = new AtomicInteger(0); /** * 没有placeTypeInAnalysis,直接属于图层的 @@ -61,7 +62,7 @@ public class AnalysisResourceCategoriesResult { public static class PlaceType { private String placeType; private String placeTypeName; - private Integer quantity = 0; + private AtomicInteger quantity = new AtomicInteger(0); private List categories; } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java index d64f0866a5..44be5f6dc9 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java @@ -89,8 +89,9 @@ public class CoverageController { * @return */ @PostMapping("analysis/resourceCategories") - public Result> listAnalysisResourceCategories() { - List r = coverageService.listAnalysisResourceCategories(); + public Result> listAnalysisResourceCategories(@RequestBody Map input) { + String agencyId = input.get("agencyId"); + List r = coverageService.listAnalysisResourceCategories(agencyId); return new Result>().ok(r); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryDictEntity.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryDictEntity.java index 1ea7222208..bc0ae5c9e2 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryDictEntity.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryDictEntity.java @@ -60,11 +60,6 @@ public class IcCoverageCategoryDictEntity extends BaseEpmetEntity { private String dataType; - /** - * 数量 - */ - private Integer quantity; - /** * 排序 */ diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java index 1dcb2907a4..8bd6fd9bd9 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java @@ -40,7 +40,7 @@ public interface CoverageService { * 五大图层-可视化-右侧分类树列表 * @return */ - List listAnalysisResourceCategories(); + List listAnalysisResourceCategories(String agencyId); List listGovernedTargetCategories(String agencyId); diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java index 0bc9878dc4..40595b8d39 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java @@ -7,6 +7,7 @@ import com.epmet.commons.tools.enums.CoverageEnums; import com.epmet.commons.tools.enums.CoveragePlaceTypeEnum; import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetException; +import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.redis.common.CustomerOrgRedis; import com.epmet.commons.tools.redis.common.CustomerStaffRedis; @@ -458,10 +459,11 @@ public class CoverageServiceImpl implements CoverageService { return heartService.countCommunityOrgEntities(customerId, agencyId, staffOrgIds, search, categoryKey); } else if (CoveragePlaceTypeEnum.PARTY_UNIT.getCode().equals(placeType)) { // 机关直属部门(联建单位) 楼宇党建 0;两新组织 1;区域单位党建 2;机关直属部门 3;社会团体 4;民办非企业单位 5;基金会 6;其他 7 - if (categoryKey.equals("pu_jgzsbm")) { - String partyUnitType = "3"; - return heartService.countPartyUnitEntities(customerId, agencyId, staffOrgIds, partyUnitType, search); - } +// if (categoryKey.equals("pu_jgzsbm")) { +// String partyUnitType = "3"; +// } + String[] parts = categoryKey.split("_"); + return heartService.countPartyUnitEntities(customerId, agencyId, staffOrgIds, parts[1], search); } else if (CoveragePlaceTypeEnum.DANGEROUS_CHEMICALS.getCode().equals(placeType)) { // 危化企业 return orgCoverageService.countDangerousChemicalEntities(customerId, staffOrgIds, search, categoryKey); @@ -568,17 +570,16 @@ public class CoverageServiceImpl implements CoverageService { } else if (CoveragePlaceTypeEnum.PARTY_UNIT.getCode().equals(placeType)) { // 机关直属部门(联建单位) 楼宇党建 0;两新组织 1;区域单位党建 2;机关直属部门 3;社会团体 4;民办非企业单位 5;基金会 6;其他 7 - if (categoryKey.equals("pu_jgzsbm")) { - String partyUnitType = "3"; - List l = heartService.searchPartyUnitEntities( - customerId, agencyId, staffOrgIds, partyUnitType, search, isPage, pageNo, pageSize); - - return l.stream() - .map(dc -> new CoverageAnalisisDataListResultDTO(dc.getId(), categoryKey, - isPage ? categoryDict.getCategoryName() : null, placeType, isPage ? dc.getUnitName() : null, dc.getLatitude(), dc.getLongitude())) - .collect(Collectors.toList()); - } - return new ArrayList<>(); +// if (categoryKey.equals("pu_jgzsbm")) { +// String partyUnitType = "3"; +// } + String[] parts = categoryKey.split("_"); + List l = heartService.searchPartyUnitEntities( + customerId, agencyId, staffOrgIds, parts[1], search, isPage, pageNo, pageSize); + return l.stream() + .map(dc -> new CoverageAnalisisDataListResultDTO(dc.getId(), categoryKey, + isPage ? categoryDict.getCategoryName() : null, placeType, isPage ? dc.getUnitName() : null, dc.getLatitude(), dc.getLongitude())) + .collect(Collectors.toList()); } else if (CoveragePlaceTypeEnum.DANGEROUS_CHEMICALS.getCode().equals(placeType)) { // 危化企业 List l = orgCoverageService.searchDangerousChemicalEntities( @@ -680,7 +681,7 @@ public class CoverageServiceImpl implements CoverageService { * @return */ @Override - public List listAnalysisResourceCategories() { + public List listAnalysisResourceCategories(String agencyId) { // 获取所有菜单的url List menuUrls = new ArrayList<>(128); @@ -700,7 +701,7 @@ public class CoverageServiceImpl implements CoverageService { continue; } - AnalysisResourceCategoriesResult categoriesOfThisCoverage = new AnalysisResourceCategoriesResult(); + AnalysisResourceCategoriesResult coverageResult = new AnalysisResourceCategoriesResult(); HashMap placeTypeMap = new HashMap<>(); List categoryDictEntities = govOrgCoverageService.listResourceCategoryEntities(coverage.getKey()); @@ -714,9 +715,9 @@ public class CoverageServiceImpl implements CoverageService { if (StringUtils.isBlank(category.getPlaceTypeInAnalysis())) { // 没有placetype的 if ("all".equals(category.getMenuUrl()) || menuUrls.contains(category.getMenuUrl())) { - categoriesOfThisCoverage.getCategories() + coverageResult.getCategories() .add(new AnalysisResourceCategoriesResult.Category(category.getCategoryKey(), category.getCategoryName(), - category.getCoverageType(), category.getPlaceType(), category.getQuantity())); + category.getCoverageType(), category.getPlaceType(), 0)); } } else { // 有placetype的 @@ -725,33 +726,94 @@ public class CoverageServiceImpl implements CoverageService { if (placeType == null) { placeType = new AnalysisResourceCategoriesResult.PlaceType( - category.getPlaceTypeInAnalysis(), CoveragePlaceTypeEnum.getEnum(category.getPlaceTypeInAnalysis()).getName(), category.getQuantity(), new ArrayList<>()); + category.getPlaceTypeInAnalysis(), CoveragePlaceTypeEnum.getEnum(category.getPlaceTypeInAnalysis()).getName(), new AtomicInteger(0), new ArrayList<>()); placeTypeMap.put(category.getPlaceTypeInAnalysis(), placeType); } placeType.getCategories().add(new AnalysisResourceCategoriesResult.Category(category.getCategoryKey(), - category.getCategoryName(), category.getCoverageType(), category.getPlaceType(), category.getQuantity())); - placeType.setQuantity(placeType.getQuantity() + category.getQuantity()); // todo 0改为category的count + category.getCategoryName(), category.getCoverageType(), category.getPlaceType(), 0)); } } }); - AtomicReference total = new AtomicReference<>(0); placeTypeMap.forEach((placeTypeKey, placeType) -> { - categoriesOfThisCoverage.getPlaceTypesInAnalysis().add(placeType); - total.updateAndGet(v -> v + placeType.getQuantity()); + coverageResult.getPlaceTypesInAnalysis().add(placeType); }); - categoriesOfThisCoverage.setCoverageType(coverage.getKey()); - categoriesOfThisCoverage.setCoverageName(CoverageEnums.getEnum(coverage.getKey()).getCoverageName()); - categoriesOfThisCoverage.setQuantity(total.get()); - results.add(categoriesOfThisCoverage); + coverageResult.setCoverageType(coverage.getKey()); + coverageResult.setCoverageName(CoverageEnums.getEnum(coverage.getKey()).getCoverageName()); + results.add(coverageResult); } + String customerId = EpmetRequestHolder.getLoginUserCustomerId(); + String userId = EpmetRequestHolder.getLoginUserId(); + + Map stafInfoMap=getStaffPidsFromStaffInfo(customerId, userId, agencyId,OrgConstant.AGENCY); + String staffOrgPath = stafInfoMap.get(OrgConstant.AGENC_PATH); + + // 填充数量quantity字段 + fillQuantities4ResourcesCoverages(results, customerId, agencyId, staffOrgPath); + return results; } + private void fillQuantities4ResourcesCoverages(ArrayList coverages, String customerId, String agencyId, String staffOrgIds) { + + ArrayList> futures = new ArrayList<>(); + + coverages.forEach(coverage -> { + List categoriesInCoverage = coverage.getCategories(); + List placeTypesInCoverage = coverage.getPlaceTypesInAnalysis(); + + if (CollectionUtils.isNotEmpty(categoriesInCoverage)) { + // 直属于图层的category。异步提交计算任务 + CompletableFuture future = CompletableFuture.runAsync(() -> fillQuantities4ResourcesCategories(coverage, null, categoriesInCoverage, customerId, agencyId, staffOrgIds)); + futures.add(future); + } + if (CollectionUtils.isNotEmpty(placeTypesInCoverage)) { + // placeType,需要拆开来算, 异步提交计算任务 + placeTypesInCoverage.forEach(placeType -> { + List categoriesInPlaceType = placeType.getCategories(); + CompletableFuture future = CompletableFuture.runAsync(() -> fillQuantities4ResourcesCategories(coverage, placeType, categoriesInPlaceType, customerId, agencyId, staffOrgIds)); + futures.add(future); + }); + } + }); + + // 等待异步任务计算完成 + futures.forEach(f -> { + try { + f.get(); + } catch (InterruptedException e) { + log.error("【五大图层】可视化-右侧资源列表异步计算数量quantity失败,计算被中止,错误信息:{}", ExceptionUtils.getErrorStackTrace(e)); + } catch (ExecutionException e) { + log.error("【五大图层】可视化-右侧资源列表异步计算数量quantity失败,错误信息:{}", ExceptionUtils.getErrorStackTrace(e)); + } + }); + } + + private void fillQuantities4ResourcesCategories(AnalysisResourceCategoriesResult coverage, + AnalysisResourceCategoriesResult.PlaceType placeType, + List categories, + String customerId, String agencyId, String staffOrgIds) { + + AtomicInteger total = new AtomicInteger(); + + categories.forEach(cat -> { + Integer quantity = doDataListCount(customerId, agencyId, staffOrgIds, cat.getPlaceType(), cat.getCategoryKey(), null); + cat.setQuantity(quantity); + total.getAndAdd(quantity); + }); + + // 分别给所属的coverage和placeType的quantity增加quantity + coverage.getQuantity().getAndAdd(total.get()); + + if (placeType != null) { + placeType.getQuantity().getAndAdd(total.get()); + } + } + @Override public List listGovernedTargetCategories(String agencyId) { @@ -776,7 +838,6 @@ public class CoverageServiceImpl implements CoverageService { List results = new ArrayList<>(); HashMap> placeTypeTargetMap = new HashMap<>(); - HashMap placeTypeQuantityMap = new HashMap<>(); targetCategories.forEach(rc -> { String placeTypeInAnalysis = rc.getPlaceTypeInAnalysis(); @@ -790,7 +851,7 @@ public class CoverageServiceImpl implements CoverageService { // 只有一层,没有子级 if (menuUrls.contains(rc.getMenuUrl()) || "all".equals(rc.getMenuUrl())) { results.add(new AnalysisGovernedTargetsResult(rc.getCategoryKey(), rc.getCategoryName(), rc.getCoverageType(), - rc.getPlaceType(), CoveragePlaceTypeEnum.getEnum(rc.getPlaceType()).getName(), rc.getQuantity(), new ArrayList<>())); + rc.getPlaceType(), CoveragePlaceTypeEnum.getEnum(rc.getPlaceType()).getName(), 0, new ArrayList<>())); } } else { // 有子级,需要使用placeTypeInAnalysis分组 @@ -799,12 +860,9 @@ public class CoverageServiceImpl implements CoverageService { if (CollectionUtils.isEmpty(targets)) { targets = new ArrayList<>(); placeTypeTargetMap.put(placeTypeInAnalysis, targets); - placeTypeQuantityMap.put(placeTypeInAnalysis, 0); } targets.add(new AnalysisGovernedTargetsResult(rc.getCategoryKey(), rc.getCategoryName(), rc.getCoverageType(), - rc.getPlaceType(), CoveragePlaceTypeEnum.getEnum(rc.getPlaceType()).getName(), rc.getQuantity(), new ArrayList<>())); - - placeTypeQuantityMap.put(placeTypeInAnalysis, placeTypeQuantityMap.get(placeTypeInAnalysis) + rc.getQuantity()); + rc.getPlaceType(), CoveragePlaceTypeEnum.getEnum(rc.getPlaceType()).getName(), 0, new ArrayList<>())); } } }); @@ -814,7 +872,6 @@ public class CoverageServiceImpl implements CoverageService { placeTypeTargetMap.forEach((placeTypeInAnalysis, targetObjects) -> { AnalysisGovernedTargetsResult tr = new AnalysisGovernedTargetsResult(); tr.setPlaceType(placeTypeInAnalysis); - tr.setQuantity(placeTypeQuantityMap.get(placeTypeInAnalysis)); tr.setPlaceTypeName(CoveragePlaceTypeEnum.getEnum(placeTypeInAnalysis).getName()); tr.setChildren(targetObjects); results.add(tr); @@ -854,9 +911,9 @@ public class CoverageServiceImpl implements CoverageService { try { future.get(); } catch (InterruptedException e) { - e.printStackTrace(); + log.error("【五大图层】可视化-左侧异步计算数量quantity失败,计算被中止,错误信息:{}", ExceptionUtils.getErrorStackTrace(e)); } catch (ExecutionException e) { - e.printStackTrace(); + log.error("【五大图层】可视化-左侧异步计算数量quantity失败,错误信息:{}", ExceptionUtils.getErrorStackTrace(e)); } }); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcCoverageCategoryDictEntity.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcCoverageCategoryDictEntity.java index 57fbe777e1..7fd612e013 100755 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcCoverageCategoryDictEntity.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/entity/IcCoverageCategoryDictEntity.java @@ -62,10 +62,6 @@ public class IcCoverageCategoryDictEntity extends BaseEpmetEntity { private String coverageType; private String dataType; - /** - * 数量 - */ - private Integer quantity; /** * 排序 */ From 1fbdc3df6530e33c62c9b90f9ce9f8a28852601a Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Fri, 29 Jul 2022 13:01:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E3=80=90=E5=9B=BE=E5=B1=82=E3=80=91?= =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96-=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/dataaggre/service/impl/CoverageServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java index 2a5ccfb5cb..523b1f1fbe 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java @@ -929,7 +929,7 @@ public class CoverageServiceImpl implements CoverageService { AtomicInteger total = new AtomicInteger(); categories.forEach(cat -> { - Integer quantity = doDataListCount(customerId, agencyId, staffOrgIds, cat.getPlaceType(), cat.getCategoryKey(), null); + Integer quantity = doDataListCount(customerId, agencyId, staffOrgIds, cat.getPlaceType(), cat.getCategoryKey(), null, null); cat.setQuantity(quantity); total.getAndAdd(quantity); }); @@ -1058,7 +1058,7 @@ public class CoverageServiceImpl implements CoverageService { if (CollectionUtils.isEmpty(children)) { // 城市管理时间 || 安全生产隐患等只有一层的 Integer quantity = doDataListCount(customerId, agencyId, staffOrgIds, targetsOfOnePlaceType.getPlaceType(), - targetsOfOnePlaceType.getCategoryKey(), null); + targetsOfOnePlaceType.getCategoryKey(), null, null); targetsOfOnePlaceType.setQuantity(quantity); } else { // 综合治理人群 || 公共服务人群等有子级的 @@ -1066,7 +1066,7 @@ public class CoverageServiceImpl implements CoverageService { AtomicInteger totalOfPlaceType = new AtomicInteger(); children.forEach(governedTarget -> { Integer quantity = doDataListCount(customerId, agencyId, staffOrgIds, governedTarget.getPlaceType(), - governedTarget.getCategoryKey(), null); + governedTarget.getCategoryKey(), null, null); governedTarget.setQuantity(quantity); totalOfPlaceType.addAndGet(quantity); });