Browse Source

【图层】可视化- 1.将左侧被管理对象的quantity查询改为多线程

master
wangxianzhang 3 years ago
parent
commit
1d51987a7e
  1. 2
      epmet-cloud-generator/src/main/resources/application.yml
  2. 13
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/CoverageController.java
  3. 16
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/govorg/IcCoverageCategoryStatsDao.java
  4. 64
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/entity/govorg/IcCoverageCategoryStatsEntity.java
  5. 2
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java
  6. 78
      epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/impl/CoverageServiceImpl.java
  7. 25
      epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/IcCoverageCategoryStatsDao.xml

2
epmet-cloud-generator/src/main/resources/application.yml

@ -9,7 +9,7 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
#MySQL配置 #MySQL配置
driverClassName: com.mysql.jdbc.Driver 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 username: root
password: root password: root
#oracle配置 #oracle配置

13
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.annotation.LoginUser;
import com.epmet.commons.tools.dto.result.ZhzlCategorySelectDTO; import com.epmet.commons.tools.dto.result.ZhzlCategorySelectDTO;
import com.epmet.commons.tools.enums.ZhzlResiCategoryEnum; 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.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.EpmetRequestHolder; 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.dto.govorg.result.CoverageHomeSearchResultDTO;
import com.epmet.dataaggre.service.CoverageService; import com.epmet.dataaggre.service.CoverageService;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; 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.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 5大图层controller * 5大图层controller
@ -92,11 +96,16 @@ public class CoverageController {
/** /**
* 被管理对象分类列表 * 被管理对象分类列表
* @param input:只有一个字段:agencyId
* @return * @return
*/ */
@PostMapping("analysis/governedTargetCategories") @PostMapping("analysis/governedTargetCategories")
public Result<List<AnalysisGovernedTargetsResult>> listGovernedTargetCategories() { public Result<List<AnalysisGovernedTargetsResult>> listGovernedTargetCategories(@RequestBody Map<String, String> input) {
List<AnalysisGovernedTargetsResult> r = coverageService.listGovernedTargetCategories(); String agencyId = input.get("agencyId");
if (StringUtils.isBlank(agencyId)) {
throw new EpmetException(EpmetErrorCode.SERVER_ERROR.getCode(), "请输入组织ID");
}
List<AnalysisGovernedTargetsResult> r = coverageService.listGovernedTargetCategories(agencyId);
return new Result<List<AnalysisGovernedTargetsResult>>().ok(r); return new Result<List<AnalysisGovernedTargetsResult>>().ok(r);
} }

16
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<IcCoverageCategoryStatsEntity> {
}

64
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;
}

2
epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/CoverageService.java

@ -42,7 +42,7 @@ public interface CoverageService {
*/ */
List<AnalysisResourceCategoriesResult> listAnalysisResourceCategories(); List<AnalysisResourceCategoriesResult> listAnalysisResourceCategories();
List<AnalysisGovernedTargetsResult> listGovernedTargetCategories(); List<AnalysisGovernedTargetsResult> listGovernedTargetCategories(String agencyId);
/** /**
* 五大图层左侧菜单点击事件查询人.事的分布 * 五大图层左侧菜单点击事件查询人.事的分布

78
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 org.springframework.stereotype.Service;
import java.util.*; 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.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -78,6 +82,9 @@ public class CoverageServiceImpl implements CoverageService {
@Autowired @Autowired
private IcResiCategoryWarnService icResiCategoryWarnService; private IcResiCategoryWarnService icResiCategoryWarnService;
@Autowired
private ExecutorService executorService;
// 1:出租 0:自住 2:闲置 3:未售出 // 1:出租 0:自住 2:闲置 3:未售出
public static final Integer HOUSE_RENT_FLAG_RENT = 1; public static final Integer HOUSE_RENT_FLAG_RENT = 1;
@ -746,7 +753,7 @@ public class CoverageServiceImpl implements CoverageService {
} }
@Override @Override
public List<AnalysisGovernedTargetsResult> listGovernedTargetCategories() { public List<AnalysisGovernedTargetsResult> listGovernedTargetCategories(String agencyId) {
// 获取所有菜单的url // 获取所有菜单的url
List<String> menuUrls = new ArrayList<>(128); List<String> menuUrls = new ArrayList<>(128);
@ -814,9 +821,78 @@ public class CoverageServiceImpl implements CoverageService {
}); });
} }
String customerId = EpmetRequestHolder.getLoginUserCustomerId();
String staffId = EpmetRequestHolder.getLoginUserId();
Map<String,String> agencyMap=getStaffPidsFromStaffInfo(customerId,staffId,agencyId,OrgConstant.AGENCY);
String agencyPath = agencyMap.get(OrgConstant.AGENC_PATH);
// 再最后,多线程setQuantity
fillQuantities4GovernedTarges(results, customerId, agencyId, agencyPath);
return results; return results;
} }
/**
* 填充数量接收参数为多个placeType(对应左侧菜单的所有一级)
* @param results
*/
private void fillQuantities4GovernedTarges(List<AnalysisGovernedTargetsResult> results, String customerId, String agencyId, String staffOrgIds) {
ArrayList<CompletableFuture<Void>> futures = new ArrayList<>();
results.stream().forEach(targetsOfOnePlaceType -> {
CompletableFuture<Void> 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<AnalysisGovernedTargetsResult> 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());
}
}
/** /**
* 五大图层左侧菜单点击事件查询人.事的分布 * 五大图层左侧菜单点击事件查询人.事的分布
* *

25
epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/govorg/IcCoverageCategoryStatsDao.xml

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.epmet.dataaggre.dao.govorg.IcCoverageCategoryStatsDao">
<resultMap type="com.epmet.dataaggre.entity.govorg.IcCoverageCategoryStatsEntity" id="icCoverageCategoryStatsMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="orgId" column="ORG_ID"/>
<result property="orgType" column="ORG_TYPE"/>
<result property="orgIdPath" column="ORG_ID_PATH"/>
<result property="categoryKey" column="CATEGORY_KEY"/>
<result property="placeType" column="PLACE_TYPE"/>
<result property="coverageType" column="COVERAGE_TYPE"/>
<result property="quantity" column="QUANTITY"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
</mapper>
Loading…
Cancel
Save