From b4a04e73d9779e45f9b992c962e442c11e17ab53 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Fri, 29 Jul 2022 12:53:50 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=9B=BE=E5=B1=82=E3=80=91=E5=8F=AF?= =?UTF-8?q?=E8=A7=86=E5=8C=96-=201.=E5=B0=86=E5=8F=B3=E4=BE=A7=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E7=9A=84quantity=E6=9F=A5=E8=AF=A2=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=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; /** * 排序 */