Commit 0dba56c9 authored by suhuiguang's avatar suhuiguang

1.气瓶-大屏2个接口 区县报错接口新开发,中间地图性能问题接口新开发

parent 89ee3da5
package com.yeejoin.amos.boot.module.statistics.api.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* Mapper 接口
*
* @author system_generator
* @date 2023-12-13
*/
@Mapper
public interface CylinderStatisticsMapper {
Long countEnterpriseNumForCylinder(@Param("orgCode") String orgCode);
}
...@@ -5,5 +5,4 @@ ...@@ -5,5 +5,4 @@
<select id="getOrgCodeByCompanyCode" resultType="java.lang.String"> <select id="getOrgCodeByCompanyCode" resultType="java.lang.String">
select org_code from privilege_company where company_code = #{companyCode} limit 1 select org_code from privilege_company where company_code = #{companyCode} limit 1
</select> </select>
</mapper> </mapper>
<?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.yeejoin.amos.boot.module.statistics.api.mapper.CylinderStatisticsMapper">
<select id="countEnterpriseNumForCylinder" resultType="java.lang.Long">
SELECT
count(1)
FROM "tz_base_enterprise_info"
where
unit_type LIKE'%充装单位%'
and supervise_org_code like concat(#{orgCode},'%')
</select>
</mapper>
...@@ -2,13 +2,17 @@ package com.yeejoin.amos.boot.module.statistcs.biz.controller; ...@@ -2,13 +2,17 @@ package com.yeejoin.amos.boot.module.statistcs.biz.controller;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto; import com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.CylinderDPStatisticsServiceImpl; import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.CylinderDPStatisticsServiceImpl;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.util.ObjectUtils; import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper; import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
...@@ -35,7 +39,7 @@ public class CylinderDPStatisticsController extends BaseController { ...@@ -35,7 +39,7 @@ public class CylinderDPStatisticsController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/getCylinderStatisticsData") @GetMapping(value = "/getCylinderStatisticsData")
@ApiOperation(httpMethod = "GET", value = "获取气瓶统计数据-按照企业名称统计", notes = "获取气瓶统计数据-按照企业名称统计") @ApiOperation(httpMethod = "GET", value = "大屏-气瓶-企业气瓶数量排名", notes = "大屏-气瓶-企业气瓶数量排名")
public ResponseModel<List<Map<String, Object>>> getCylinderStatisticsData(@RequestParam(value = "regionCode") String regionCode) throws IOException { public ResponseModel<List<Map<String, Object>>> getCylinderStatisticsData(@RequestParam(value = "regionCode") String regionCode) throws IOException {
List<Map<String, Object>> result = dpStatisticsService.getCylinderStatisticsData(regionCode); List<Map<String, Object>> result = dpStatisticsService.getCylinderStatisticsData(regionCode);
return ResponseHelper.buildResponse(result); return ResponseHelper.buildResponse(result);
...@@ -43,44 +47,40 @@ public class CylinderDPStatisticsController extends BaseController { ...@@ -43,44 +47,40 @@ public class CylinderDPStatisticsController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/getCylinderStatisticsDataByCity") @PostMapping(value = "/getCylinderStatisticsDataByCity")
@ApiOperation(httpMethod = "POST", value = "获取气瓶统计数据-按照城市统计", notes = "获取气瓶统计数据-按照城市统计") @ApiOperation(httpMethod = "POST", value = "大屏-气瓶-区域统计", notes = "大屏-气瓶-区域统计")
public ResponseModel<Map<String, Object>> getCylinderStatisticsDataByCity(@RequestBody Map<String, Object> map) throws Exception { public ResponseModel<Map<String, Object>> getCylinderStatisticsDataByCity(@Validated @RequestBody DPFilterParamDto dpFilterParamDto, BindingResult bindingResult) throws Exception {
Object regionCode = map.get("cityCode"); List<FieldError> fieldErrors = bindingResult.getFieldErrors();
if (ObjectUtils.isEmpty(regionCode)) { if (!fieldErrors.isEmpty()) {
regionCode = "610000"; throw new BadRequest(fieldErrors.get(0).getDefaultMessage());
} }
Map<String, Object> result = dpStatisticsService.getCylinderStatisticsDataByCity(dpFilterParamDto);
Map<String, Object> result = dpStatisticsService.getCylinderStatisticsDataByCity(regionCode.toString());
return ResponseHelper.buildResponse(result); return ResponseHelper.buildResponse(result);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/getCylinderStatisticsDataByCityForTotal") @PostMapping(value = "/getCylinderStatisticsDataByCityForTotal")
@ApiOperation(httpMethod = "POST", value = "获取气瓶统计数据-按照城市统计", notes = "获取气瓶统计数据-按照城市统计-地图统计") @ApiOperation(httpMethod = "POST", value = "大屏-气瓶-地图统计图列", notes = "大屏-气瓶-地图统计图列")
public ResponseModel<Map<String, Object>> getCylinderStatisticsDataByCityForTotal(@RequestBody Map<String, Object> map) throws Exception { public ResponseModel<Map<String, Object>> getCylinderStatisticsDataByCityForTotal(@Validated @RequestBody DPFilterParamDto dpFilterParamDto, BindingResult bindingResult) throws Exception {
Object regionCode = map.get("cityCode"); List<FieldError> fieldErrors = bindingResult.getFieldErrors();
if (ObjectUtils.isEmpty(regionCode)) { if (!fieldErrors.isEmpty()) {
regionCode = "610000"; throw new BadRequest(fieldErrors.get(0).getDefaultMessage());
} }
Map<String, Object> result = dpStatisticsService.getCylinderStatisticsDataByCityForTotal(dpFilterParamDto);
Map<String, Object> result = dpStatisticsService.getCylinderStatisticsDataByCityForTotal(regionCode.toString());
return ResponseHelper.buildResponse(result); return ResponseHelper.buildResponse(result);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/getCylinderStatisticsDataByCityForMap") @PostMapping(value = "/getCylinderStatisticsDataByCityForMap")
@ApiOperation(httpMethod = "POST", value = "获取气瓶统计数据-按照城市统计", notes = "获取气瓶统计数据-按照城市统计-地图") @ApiOperation(httpMethod = "POST", value = "大屏-气瓶-中间地图", notes = "大屏-气瓶-中间地图")
public ResponseModel<List<Map<String, Object>>> getCylinderStatisticsDataByCityForMap(@RequestBody Map<String, Object> map) throws Exception { public ResponseModel<List<Map<String, Object>>> getCylinderStatisticsDataByCityForMap(@Validated @RequestBody DPFilterParamDto dpFilterParamDto, BindingResult bindingResult) throws Exception {
Object regionCode = map.get("cityCode"); List<FieldError> fieldErrors = bindingResult.getFieldErrors();
if (ObjectUtils.isEmpty(regionCode)) { if (!fieldErrors.isEmpty()) {
regionCode = "610000"; throw new BadRequest(fieldErrors.get(0).getDefaultMessage());
} }
List<Map<String, Object>> result = dpStatisticsService.getCylinderStatisticsDataByCityForMap(dpFilterParamDto);
List<Map<String, Object>> result = dpStatisticsService.getCylinderStatisticsDataByCityForMap(regionCode.toString());
return ResponseHelper.buildResponse(result); return ResponseHelper.buildResponse(result);
} }
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "30天的充装量、卸液量数据") @ApiOperation(httpMethod = "GET", value = "30天的充装量、卸液量数据")
@GetMapping(value = "/fillingTimesAndQuantity") @GetMapping(value = "/fillingTimesAndQuantity")
...@@ -88,5 +88,4 @@ public class CylinderDPStatisticsController extends BaseController { ...@@ -88,5 +88,4 @@ public class CylinderDPStatisticsController extends BaseController {
return ResponseHelper.buildResponse(dpStatisticsService.fillingTimesAndQuantity(reginCode)); return ResponseHelper.buildResponse(dpStatisticsService.fillingTimesAndQuantity(reginCode));
} }
} }
package com.yeejoin.amos.boot.module.statistcs.biz.service.impl; package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import com.yeejoin.amos.boot.module.common.api.constant.TZSCommonConstant; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.dto.CountDto;
import com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto; import com.yeejoin.amos.boot.module.common.api.dto.CylinderFillingRecordStatisticsDto;
import com.yeejoin.amos.boot.module.common.api.enums.ReginStepEnum; import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.ymt.api.dto.TzBaseEnterpriseInfoDto; import com.yeejoin.amos.boot.module.statistics.api.mapper.CylinderStatisticsMapper;
import com.yeejoin.amos.boot.module.ymt.api.entity.TzBaseEnterpriseInfo;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper; import com.yeejoin.amos.boot.module.ymt.api.mapper.TzBaseEnterpriseInfoMapper;
import com.yeejoin.amos.boot.module.ymt.flc.api.mapper.CylinderAreaDataMapper; import com.yeejoin.amos.boot.module.ymt.flc.api.mapper.CylinderAreaDataMapper;
import com.yeejoin.amos.boot.module.ymt.flc.api.mapper.CylinderInfoMapper; import com.yeejoin.amos.boot.module.ymt.flc.api.mapper.CylinderInfoMapper;
import com.yeejoin.amos.feign.privilege.Privilege; import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.CompanyModel; import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.RegionModel; import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -41,46 +44,50 @@ import java.util.stream.Collectors; ...@@ -41,46 +44,50 @@ import java.util.stream.Collectors;
@Service @Service
public class CylinderDPStatisticsServiceImpl { public class CylinderDPStatisticsServiceImpl {
private StCommonServiceImpl stCommonService;
private RestHighLevelClient restHighLevelClient; private RestHighLevelClient restHighLevelClient;
private TzBaseEnterpriseInfoMapper baseEnterpriseInfoMapper; private TzBaseEnterpriseInfoMapper baseEnterpriseInfoMapper;
private CylinderAreaDataMapper cylinderAreaDataMapper; private CylinderAreaDataMapper cylinderAreaDataMapper;
;
private CylinderStatisticsMapper cylinderStatisticsMapper;
private CylinderInfoMapper cylinderInfoMapper; private CylinderInfoMapper cylinderInfoMapper;
public CylinderDPStatisticsServiceImpl(RestHighLevelClient restHighLevelClient, TzBaseEnterpriseInfoMapper baseEnterpriseInfoMapper, CylinderAreaDataMapper cylinderAreaDataMapper, CylinderInfoMapper cylinderInfoMapper) { public CylinderDPStatisticsServiceImpl(StCommonServiceImpl stCommonService, RestHighLevelClient restHighLevelClient, TzBaseEnterpriseInfoMapper baseEnterpriseInfoMapper, CylinderAreaDataMapper cylinderAreaDataMapper, CylinderStatisticsMapper cylinderStatisticsMapper, CylinderInfoMapper cylinderInfoMapper) {
this.stCommonService = stCommonService;
this.restHighLevelClient = restHighLevelClient; this.restHighLevelClient = restHighLevelClient;
this.baseEnterpriseInfoMapper = baseEnterpriseInfoMapper; this.baseEnterpriseInfoMapper = baseEnterpriseInfoMapper;
this.cylinderAreaDataMapper = cylinderAreaDataMapper; this.cylinderAreaDataMapper = cylinderAreaDataMapper;
this.cylinderStatisticsMapper = cylinderStatisticsMapper;
this.cylinderInfoMapper = cylinderInfoMapper; this.cylinderInfoMapper = cylinderInfoMapper;
} }
public List<Map<String, Object>> getCylinderStatisticsData(String regionCode) throws IOException { public List<Map<String, Object>> getCylinderStatisticsData(String regionCode) throws IOException {
// 构建搜索请求 // 构建搜索请求
CompanyModel result = Privilege.companyClient.queryByCompanyCode(regionCode).getResult(); String orgCode = stCommonService.getAndSetOrgCode(regionCode);
String orgCode = result.getOrgCode(); if (StringUtils.isEmpty(orgCode)) {
return new ArrayList<>();
}
SearchRequest searchRequest = new SearchRequest("idx_biz_view_jg_all"); SearchRequest searchRequest = new SearchRequest("idx_biz_view_jg_all");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 构建查询条件 // 构建查询条件
searchSourceBuilder.query( searchSourceBuilder.query(
QueryBuilders.boolQuery() QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", "2300")) .must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", "2300"))
.must(QueryBuilders.matchPhraseQuery("ORG_BRANCH_CODE", orgCode)) .must(QueryBuilders.termQuery("EQU_STATE", EquimentEnum.ZAIYONG.getCode()))
// 按照管辖机构区域信息模糊查询
.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"))
); );
TermsAggregationBuilder aggregation = AggregationBuilders.terms("USE_UNIT_CREDIT_CODE").field("USE_UNIT_CREDIT_CODE.keyword").size(10); TermsAggregationBuilder aggregation = AggregationBuilders.terms("USE_UNIT_CREDIT_CODE").field("USE_UNIT_CREDIT_CODE.keyword").size(10);
searchSourceBuilder.aggregation(aggregation); searchSourceBuilder.aggregation(aggregation);
searchRequest.source(searchSourceBuilder); searchRequest.source(searchSourceBuilder);
// 执行搜索并获取响应 // 执行搜索并获取响应
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
// 处理聚合结果 // 处理聚合结果
// 这里只是打印出聚合的名称和桶的数量,你需要根据自己的需求来处理这些数据 // 这里只是打印出聚合的名称和桶的数量,你需要根据自己的需求来处理这些数据
Terms terms = searchResponse.getAggregations().get("USE_UNIT_CREDIT_CODE"); Terms terms = searchResponse.getAggregations().get("USE_UNIT_CREDIT_CODE");
...@@ -93,102 +100,39 @@ public class CylinderDPStatisticsServiceImpl { ...@@ -93,102 +100,39 @@ public class CylinderDPStatisticsServiceImpl {
dataList.add(item); dataList.add(item);
keys.add(bucket.getKeyAsString()); keys.add(bucket.getKeyAsString());
} }
Map<String, TzBaseEnterpriseInfo> useCodeEntryMap = getStringTzBaseEnterpriseInfoDtoMap(keys);
List<TzBaseEnterpriseInfoDto> tzBaseEnterpriseInfoDtos = baseEnterpriseInfoMapper.queryByUseCode(keys);
Map<String, TzBaseEnterpriseInfoDto> collect = tzBaseEnterpriseInfoDtos.stream().collect(Collectors.toMap(TzBaseEnterpriseInfoDto::getUseCode, f -> f));
for (Map<String, Object> item : dataList) { for (Map<String, Object> item : dataList) {
Object key = item.get("key"); Object key = item.get("key");
if (collect.containsKey(key)) { if (useCodeEntryMap.containsKey(key)) {
item.put("name", collect.get(key).getUseUnit()); item.put("name", useCodeEntryMap.get(key).getUseUnit());
item.put("city", collect.get(key).getCity()); item.put("city", useCodeEntryMap.get(key).getCity());
item.put("province", collect.get(key).getProvince()); item.put("province", useCodeEntryMap.get(key).getProvince());
item.put("district", collect.get(key).getDistrict()); item.put("district", useCodeEntryMap.get(key).getDistrict());
} }
} }
return dataList; return dataList;
} }
private Map<String, TzBaseEnterpriseInfo> getStringTzBaseEnterpriseInfoDtoMap(List<String> keys) {
LambdaQueryWrapper<TzBaseEnterpriseInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(TzBaseEnterpriseInfo::getUseUnitCode, keys);
queryWrapper.select(TzBaseEnterpriseInfo::getUseUnitCode, TzBaseEnterpriseInfo::getProvince, TzBaseEnterpriseInfo::getCity, TzBaseEnterpriseInfo::getDistrict, TzBaseEnterpriseInfo::getUseUnit);
List<TzBaseEnterpriseInfo> baseEnterpriseInfos = baseEnterpriseInfoMapper.selectList(queryWrapper);
return baseEnterpriseInfos.stream().collect(Collectors.toMap(TzBaseEnterpriseInfo::getUseUnitCode, f -> f));
}
public Map<String, Object> getCylinderStatisticsDataByCity(String regionCode) throws Exception {
// 构建搜索请求
List<RegionModel> regionList = this.setRegionIfRootParent(regionCode);
List<String> companyCode = regionList.stream().map(r -> r.getRegionCode().toString()).collect(Collectors.toList());
List<CompanyModel> companyList = Privilege.companyClient.queryListByCompanyCode(String.join(",", companyCode)).getResult();
Map<String, RegionModel> regionMap = regionList.stream().collect(Collectors.toMap(r -> r.getRegionCode().toString(), r -> r));
List<Map<String, Object>> legendData = new ArrayList<>();
List<String> xdata = new ArrayList<>();
List<String> qiping = new ArrayList<>();
List<String> qizhan = new ArrayList<>();
long maxValue = 0;
for (CompanyModel comapany : companyList) {
String orgCode = comapany.getOrgCode();
xdata.add(regionMap.get(comapany.getCompanyCode()).getRegionName());
SearchRequest searchRequest = new SearchRequest("idx_biz_view_jg_all");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 构建查询条件
searchSourceBuilder.query(
QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", "2300"))
.must(QueryBuilders.matchPhraseQuery("ORG_BRANCH_CODE", orgCode))
);
TermsAggregationBuilder aggregation = AggregationBuilders.terms("ORG_BRANCH_CODE").field("ORG_BRANCH_CODE.keyword").size(10);
searchSourceBuilder.aggregation(aggregation);
searchRequest.source(searchSourceBuilder);
// 执行搜索并获取响应
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
// 处理聚合结果
// 这里只是打印出聚合的名称和桶的数量,你需要根据自己的需求来处理这些数据
Terms terms = searchResponse.getAggregations().get("ORG_BRANCH_CODE");
if (!ObjectUtils.isEmpty(terms.getBuckets())) {
if (terms.getBuckets().get(0).getDocCount() > maxValue) {
maxValue = terms.getBuckets().get(0).getDocCount();
}
qiping.add(terms.getBuckets().get(0).getDocCount() + "");
} else {
qiping.add("0");
}
}
if (maxValue > 100000) {
for (int i = 0; i < qiping.size(); i++) {
qiping.set(i, String.format("%.4f", Long.parseLong(qiping.get(i)) / 10000.0000) + "");
}
}
List<String> orgCodes = companyList.stream().map(c -> c.getOrgCode()).collect(Collectors.toList());
List<Map<String, Object>> qizhanMap = cylinderAreaDataMapper.getQiZhanStatisticsDataByCity(orgCodes);
Map<Object, Object> collect = qizhanMap.stream().collect(Collectors.toMap(m -> ((Map) m).get("orgCode"), m -> ((Map) m).get("unitCount")));
for (CompanyModel comapany : companyList) {
String orgCode = comapany.getOrgCode();
if (collect.containsKey(orgCode)) {
qizhan.add(collect.get(orgCode).toString());
} else {
qizhan.add("0");
}
}
Map<String, Object> qiLegend = new HashMap<>();
if (maxValue > 100000) {
qiLegend.put("value", "气瓶数量(万)");
qiLegend.put("dataKey", "qiping");
} else {
qiLegend.put("value", "气瓶数量");
qiLegend.put("dataKey", "qiping");
}
Map<String, Object> zhanLegend = new HashMap<>();
zhanLegend.put("value", "气站数量");
zhanLegend.put("dataKey", "qizhan");
public Map<String, Object> getCylinderStatisticsDataByCity(DPFilterParamDto dpFilterParamDto) throws Exception {
String regionCode = dpFilterParamDto.getCityCode();
List<RegionModel> regionList = stCommonService.setRegionIfRootParent(regionCode);
List<Map<String, Object>> legendData = new ArrayList<>();
List<String> xdata = this.buildXData(regionList);
List<Long> qiping = getYDataForQP(regionCode, regionList);
List<Long> qizhan = getYDataForQZ(regionCode, regionList);
Map<String, Object> qiLegend = getQZLegend("气瓶数量", "qiping");
Map<String, Object> zhanLegend = getQZLegend("气站数量", "qizhan");
legendData.add(qiLegend); legendData.add(qiLegend);
legendData.add(zhanLegend); legendData.add(zhanLegend);
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
result.put("qizhan", qizhan); result.put("qizhan", qizhan);
result.put("qiping", qiping); result.put("qiping", qiping);
...@@ -197,123 +141,103 @@ public class CylinderDPStatisticsServiceImpl { ...@@ -197,123 +141,103 @@ public class CylinderDPStatisticsServiceImpl {
return result; return result;
} }
private List<RegionModel> setRegionIfRootParent(String regionCode) throws Exception { private Map<String, Object> getQZLegend(String label, String key) {
List<RegionModel> regionList = Systemctl.regionClient.queryByParentRegionCode(Integer.parseInt(regionCode)).getResult(); Map<String, Object> qiLegend = new HashMap<>();
// 陕西省时需要在地图返回独立的地级市:韩城、杨凌、西咸 qiLegend.put("value", label);
if (regionCode.equals(TZSCommonConstant.SHAN_XI_REGION_CODE)) { qiLegend.put("dataKey", key);
List<RegionModel> independentRegions = ReginStepEnum.enum2RegionList("map"); return qiLegend;
regionList.addAll(independentRegions);
}
return regionList;
} }
public Map<String, Object> getCylinderStatisticsDataByCityForTotal(String regionCode) throws IOException { private List<Long> getYDataForQZ(String regionCode, List<RegionModel> regionList) {
// 构建搜索请求 List<CountDto> enterpriseCountList = regionList.parallelStream().map(e -> {
CompanyModel comapany = Privilege.companyClient.queryByCompanyCode(regionCode).getResult(); CountDto dto = new CountDto();
String orgCode = comapany.getOrgCode(); dto.setKeyStr(e.getRegionCode() + "");
SearchRequest searchRequest = new SearchRequest("idx_biz_view_jg_all"); String orgCode = stCommonService.getAndSetOrgCode(regionCode);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); if (StringUtils.isNotEmpty(orgCode)) {
long qiping = 0; Long enterpriseNum = cylinderStatisticsMapper.countEnterpriseNumForCylinder(orgCode);
// 构建查询条件 dto.setLongValue(enterpriseNum);
searchSourceBuilder.query( } else {
QueryBuilders.boolQuery() dto.setLongValue(0L);
.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", "2300")) }
.must(QueryBuilders.matchPhraseQuery("ORG_BRANCH_CODE", orgCode)) return dto;
); }).collect(Collectors.toList());
return regionList.stream().map(r -> enterpriseCountList.stream().filter(e -> e.getKeyStr().equals(r.getRegionCode() + "")).mapToLong(CountDto::getLongValue).sum()).collect(Collectors.toList());
TermsAggregationBuilder aggregation = AggregationBuilders.terms("ORG_BRANCH_CODE").field("ORG_BRANCH_CODE.keyword").size(10); // 注意:.keyword后缀可能根据你的字段映射而有所不同 }
searchSourceBuilder.aggregation(aggregation); private List<Long> getYDataForQP(String regionCode, List<RegionModel> regionList) {
searchRequest.source(searchSourceBuilder); List<Long> qiping = new ArrayList<>();
regionList.forEach(r -> {
String orgCode = stCommonService.getAndSetOrgCode(regionCode);
if (StringUtils.isNotEmpty(orgCode)) {
Long num = this.countForCylinderNum(orgCode);
qiping.add(num);
} else {
qiping.add(0L);
}
});
return qiping;
}
// 执行搜索并获取响应 private Long countForCylinderNum(String orgCode) {
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); long num = 0;
// 处理聚合结果 CountRequest request = new CountRequest();
// 这里只是打印出聚合的名称和桶的数量,你需要根据自己的需求来处理这些数据 request.indices("idx_biz_view_jg_all");
Terms terms = searchResponse.getAggregations().get("ORG_BRANCH_CODE"); BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
if (!ObjectUtils.isEmpty(terms.getBuckets())) { // 按照管辖机构区域信息模糊查询
qiping = terms.getBuckets().get(0).getDocCount(); boolMust.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", "2300"));
} else { boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
qiping = 0; // 且在用状态设备
boolMust.must(QueryBuilders.termQuery("EQU_STATE", EquimentEnum.ZAIYONG.getCode()));
request.query(boolMust);
try {
CountResponse response = restHighLevelClient.count(request, RequestOptions.DEFAULT);
num = response.getCount();
} catch (IOException e) {
throw new RuntimeException(e);
} }
return num;
}
List<String> orgCodes = new ArrayList<>(); private List<String> buildXData(List<RegionModel> regionList) {
orgCodes.add(orgCode); return regionList.stream().map(RegionModel::getRegionName).collect(Collectors.toList());
List<Map<String, Object>> qizhanMap = cylinderAreaDataMapper.getQiZhanStatisticsDataByCity(orgCodes); }
String unitNumber = "0";
if (!ObjectUtils.isEmpty(qizhanMap)) {
unitNumber = qizhanMap.get(0).get("unitCount").toString();
}
public Map<String, Object> getCylinderStatisticsDataByCityForTotal(DPFilterParamDto dpFilterParamDto) {
String regionCode = dpFilterParamDto.getCityCode();
String orgCode = stCommonService.getAndSetOrgCode(regionCode);
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
result.put("cylindersCount", qiping); if (StringUtils.isNotEmpty(orgCode)) {
result.put("stationCount", unitNumber); result.put("cylindersCount", this.countForCylinderNum(orgCode));
result.put("operatorCount", cylinderAreaDataMapper.getOpertorStatisticsDataByCity(orgCodes)); result.put("stationCount", cylinderStatisticsMapper.countEnterpriseNumForCylinder(orgCode));
result.put("operatorCount", cylinderAreaDataMapper.getOpertorStatisticsDataByCity(Collections.singletonList(orgCode)));
} else {
this.setDefaultValueIfNoData(result, "stationCount", "cylindersCount", "operatorCount");
}
return result; return result;
} }
public List<Map<String, Object>> getCylinderStatisticsDataByCityForMap(String regionCode) throws Exception { public List<Map<String, Object>> getCylinderStatisticsDataByCityForMap(DPFilterParamDto dpFilterParamDto) throws Exception {
// 构建搜索请求 List<RegionModel> regionList = stCommonService.setRegionIfRootParent(dpFilterParamDto.getCityCode());
List<RegionModel> regionList = this.setRegionIfRootParent(regionCode); return regionList.parallelStream().map(r -> {
List<String> companyCode = regionList.stream().map(r -> r.getRegionCode().toString()).collect(Collectors.toList()); String orgCode = stCommonService.getAndSetOrgCode(r.getRegionCode() + "");
List<CompanyModel> companyList = Privilege.companyClient.queryListByCompanyCode(String.join(",", companyCode)).getResult(); Map<String, Object> item = new HashMap<>();
Map<String, RegionModel> regionMap = regionList.stream().collect(Collectors.toMap(r -> r.getRegionCode().toString(), r -> r)); item.put("regionCode", r.getRegionCode());
List<Map<String, Object>> list = new ArrayList<>(); item.put("regionName", r.getRegionName());
if (ObjectUtils.isEmpty(companyList)) { if (StringUtils.isNotEmpty(orgCode)) {
return new ArrayList<>(); item.put("stationCount", cylinderStatisticsMapper.countEnterpriseNumForCylinder(orgCode));
} item.put("cylindersCount", this.countForCylinderNum(orgCode));
List<String> orgCodes = companyList.stream().map(CompanyModel::getOrgCode).collect(Collectors.toList()); item.put("operatorCount", cylinderAreaDataMapper.getOpertorStatisticsDataByCity(Collections.singletonList(orgCode)));
List<Map<String, Object>> qizhanMap = cylinderAreaDataMapper.getQiZhanStatisticsDataByCity(orgCodes);
Map<Object, Object> collect = qizhanMap.stream().collect(Collectors.toMap(m -> ((Map) m).get("orgCode"), m -> ((Map) m).get("unitCount")));
for (CompanyModel company : companyList) {
String orgCode = company.getOrgCode();
SearchRequest searchRequest = new SearchRequest("idx_biz_view_jg_all");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
long qiping = 0;
// 构建查询条件
searchSourceBuilder.query(
QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", "2300"))
.must(QueryBuilders.matchPhraseQuery("ORG_BRANCH_CODE", orgCode))
);
TermsAggregationBuilder aggregation = AggregationBuilders.terms("ORG_BRANCH_CODE").field("ORG_BRANCH_CODE.keyword").size(10);
searchSourceBuilder.aggregation(aggregation);
searchRequest.source(searchSourceBuilder);
// 执行搜索并获取响应
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
// 处理聚合结果
// 这里只是打印出聚合的名称和桶的数量,你需要根据自己的需求来处理这些数据
Terms terms = searchResponse.getAggregations().get("ORG_BRANCH_CODE");
if (!ObjectUtils.isEmpty(terms.getBuckets())) {
qiping = terms.getBuckets().get(0).getDocCount();
} else { } else {
qiping = 0; this.setDefaultValueIfNoData(item, "stationCount", "cylindersCount", "operatorCount");
} }
return item;
}).collect(Collectors.toList());
}
String unitNumber = "0"; private void setDefaultValueIfNoData(Map<String, Object> item, String... fields) {
if (!ObjectUtils.isEmpty(collect) && collect.containsKey("orgCode")) { for (String field : fields) {
unitNumber = collect.get("orgCode").toString(); item.put(field, 0L);
}
Map<String, Object> result = new HashMap<>();
RegionModel region = regionMap.get(company.getCompanyCode());
result.put("regionAddress", company.getAddress());
result.put("regionCode", company.getCompanyCode());
result.put("regionName", region.getRegionName());
result.put("longitude", company.getLongitude());
result.put("latitude", company.getLatitude());
result.put("stationCount", unitNumber);
result.put("cylindersCount", qiping);
result.put("operatorCount", 0);
list.add(result);
} }
return list;
} }
public List<CylinderFillingRecordStatisticsDto> fillingTimesAndQuantity(String reginCode) { public List<CylinderFillingRecordStatisticsDto> fillingTimesAndQuantity(String reginCode) {
......
package com.yeejoin.amos.boot.module.statistcs.biz.service.impl; package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.module.common.api.constant.TZSCommonConstant;
import com.yeejoin.amos.boot.module.common.api.enums.ReginStepEnum;
import com.yeejoin.amos.boot.module.statistics.api.mapper.CommonBaseMapper;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.RegionModel; import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/** /**
* @author Administrator * @author Administrator
...@@ -13,9 +17,16 @@ import java.util.*; ...@@ -13,9 +17,16 @@ import java.util.*;
@Service @Service
public class StCommonServiceImpl { public class StCommonServiceImpl {
private CommonBaseMapper commonMapper;
private static Map<String, String> regionCodeOrgCodeMap = new ConcurrentHashMap<>();
private static List<RegionModel> regionModels = new ArrayList<>(); private static List<RegionModel> regionModels = new ArrayList<>();
public StCommonServiceImpl(CommonBaseMapper commonMapper) {
this.commonMapper = commonMapper;
}
public void init() { public void init() {
initReginCode(); initReginCode();
} }
...@@ -37,6 +48,17 @@ public class StCommonServiceImpl { ...@@ -37,6 +48,17 @@ public class StCommonServiceImpl {
} }
} }
public String getAndSetOrgCode(String cityCode) {
String orgCode = regionCodeOrgCodeMap.get(cityCode);
if (orgCode == null) {
orgCode = commonMapper.getOrgCodeByCompanyCode(cityCode);
if (orgCode != null) {
regionCodeOrgCodeMap.put(cityCode, orgCode);
}
}
return orgCode;
}
public List<RegionModel> getUserRegionCode(ReginParams selectedOrgInfo) { public List<RegionModel> getUserRegionCode(ReginParams selectedOrgInfo) {
String regionCode = selectedOrgInfo.getCompany().getCompanyCode(); String regionCode = selectedOrgInfo.getCompany().getCompanyCode();
Optional<RegionModel> op = regionModels.stream().filter(e->e.getRegionCode().toString().equals(regionCode)).findFirst(); Optional<RegionModel> op = regionModels.stream().filter(e->e.getRegionCode().toString().equals(regionCode)).findFirst();
...@@ -46,4 +68,14 @@ public class StCommonServiceImpl { ...@@ -46,4 +68,14 @@ public class StCommonServiceImpl {
result.setRegionCode(Integer.parseInt(regionCode)); result.setRegionCode(Integer.parseInt(regionCode));
return Collections.singletonList(result); return Collections.singletonList(result);
} }
public List<RegionModel> setRegionIfRootParent(String regionCode) throws Exception {
List<RegionModel> regionList = Systemctl.regionClient.queryByParentRegionCode(Integer.parseInt(regionCode)).getResult();
// 陕西省时需要在地图返回独立的地级市:韩城、杨凌、西咸
if (regionCode.equals(TZSCommonConstant.SHAN_XI_REGION_CODE)) {
List<RegionModel> independentRegions = ReginStepEnum.enum2RegionList("map");
regionList.addAll(independentRegions);
}
return regionList;
}
} }
...@@ -151,7 +151,7 @@ ...@@ -151,7 +151,7 @@
WHERE WHERE
u.data_sources = '陕西省内企业' u.data_sources = '陕西省内企业'
AND u.unit_type LIKE'%充装单位%' AND u.unit_type LIKE'%充装单位%'
AND ui.post like '%"6552"%' AND ui.post like '%6552%'
<if test="orgCodes != null and orgCodes.size > 0"> <if test="orgCodes != null and orgCodes.size > 0">
AND AND
<foreach collection="orgCodes" open="(" item="orgCode" close=")" separator=" or "> <foreach collection="orgCodes" open="(" item="orgCode" close=")" separator=" or ">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment