Commit f00bc308 authored by 刘林's avatar 刘林

fix(Statistics):设备认领率统计

parent 9b6f6b85
......@@ -16,7 +16,6 @@ import java.util.Map;
@Mapper
public interface ZLStatisticsMapper {
List<Map<String, Object>> getCompanyInfo(@Param("screenDto") DPFilterParamDto screenDto);
List<Map<String, Object>> testOrg(@Param("screenDto") DPFilterParamDto screenDto);
......@@ -34,4 +33,6 @@ public interface ZLStatisticsMapper {
Long countCompanyForCertDateTemporary(@Param("dto")DPFilterParamDto dpFilterParamDto, @Param("orgCode") String orgCode, @Param("limitDate") String limitDate);
Long getEquipTotal(@Param("cityCode") String cityCode);
Long getEquListTotal(@Param("field") String field, @Param("cityCode") String cityCode);
}
......@@ -101,6 +101,10 @@
<select id="getEquipTotal" resultType="java.lang.Long">
select equip_num from tzs_equip_claim_statistics where city_code = #{cityCode}
</select>
<select id="getEquListTotal" resultType="java.lang.Long">
select ${field} from tzs_equip_claim_statistics where city_code = #{cityCode}
</select>
</mapper>
package com.yeejoin.amos.boot.module.statistcs.biz.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamForDetailDto;
import com.yeejoin.amos.boot.module.statistcs.biz.service.impl.ZLDPStatisticsServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
......@@ -100,7 +100,15 @@ public class ZLDPStatisticsController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/getEquipManagementRateStatistics")
@ApiOperation(httpMethod = "POST", value = "大屏-总览-左屏-设备纳管率", notes = "大屏-总览-左屏-设备纳管率")
public ResponseModel<Map<String, Object>> getEquipManagementRateStatistics(@RequestBody DPFilterParamDto screenDto){
return ResponseHelper.buildResponse(statisticsService.getEquipManagementRateStatistics(screenDto));
public ResponseModel<Map<String, Object>> getEquipManagementRateStatistics(@RequestBody DPFilterParamForDetailDto paramDto){
return ResponseHelper.buildResponse(statisticsService.getEquipManagementRateStatistics(paramDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/viewJgAll")
@ApiOperation(httpMethod = "GET", value = "viewJgAll", notes = "viewJgAll")
public ResponseModel<Page<JSONObject>> viewJgAll(@RequestParam Map<String, Object> map) {
JSONObject jsonObject = new JSONObject(map);
return ResponseHelper.buildResponse(statisticsService.queryByKeys(jsonObject));
}
}
......@@ -2,17 +2,22 @@ package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.dto.CountDto;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamDto;
import com.yeejoin.amos.boot.module.common.api.dto.DPFilterParamForDetailDto;
import com.yeejoin.amos.boot.module.common.api.entity.AlertStatistics;
import com.yeejoin.amos.boot.module.common.api.enums.UnitTypeEnum;
import com.yeejoin.amos.boot.module.common.api.enums.UserPostEnum;
import com.yeejoin.amos.boot.module.statistics.api.mapper.AlertStatisticsMapper;
import com.yeejoin.amos.boot.module.statistics.api.mapper.ZLStatisticsMapper;
import com.yeejoin.amos.boot.module.ymt.api.dto.EquipmentCategoryDto;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
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.SearchResponse;
......@@ -22,10 +27,12 @@ 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.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
......@@ -42,9 +49,11 @@ import java.util.stream.Collectors;
@Service
public class ZLDPStatisticsServiceImpl {
private static final String EQU_STATE = "EQU_STATE";
private ZLStatisticsMapper screenMapper;
private static final String LEVEL = "company";
private ZLStatisticsMapper screenMapper;
private DataDictionaryServiceImpl iDataDictionaryService;
......@@ -54,12 +63,18 @@ public class ZLDPStatisticsServiceImpl {
private StCommonServiceImpl stCommonService;
public ZLDPStatisticsServiceImpl(ZLStatisticsMapper screenMapper, DataDictionaryServiceImpl iDataDictionaryService, AlertStatisticsMapper alertStatisticsMapper, RestHighLevelClient restHighLevelClient, StCommonServiceImpl stCommonService) {
private RedisUtils redisUtils;
// 设备纳管 纳管:true 未纳管:false
public static final String IS_INTO_MANAGEMENT = "IS_INTO_MANAGEMENT";
public ZLDPStatisticsServiceImpl(ZLStatisticsMapper screenMapper, DataDictionaryServiceImpl iDataDictionaryService, AlertStatisticsMapper alertStatisticsMapper, RestHighLevelClient restHighLevelClient, StCommonServiceImpl stCommonService, RedisUtils redisUtils) {
this.screenMapper = screenMapper;
this.iDataDictionaryService = iDataDictionaryService;
this.alertStatisticsMapper = alertStatisticsMapper;
this.restHighLevelClient = restHighLevelClient;
this.stCommonService = stCommonService;
this.redisUtils = redisUtils;
}
......@@ -664,7 +679,7 @@ public class ZLDPStatisticsServiceImpl {
return alertStatisticsMapper.countProblemByTypeDateAndOrgCode(problemType, params, orgCode);
}
public Map<String, Object> getEquipManagementRateStatistics(DPFilterParamDto screenDto) {
public Map<String, Object> getEquipManagementRateStatistics(DPFilterParamForDetailDto paramDto) {
Map<String, Object> result = new HashMap<>();
List<Map<String, Object>> legendData = new ArrayList<>();
legendData.add(createLegend("设备认领总数", "equipTotal"));
......@@ -677,32 +692,57 @@ public class ZLDPStatisticsServiceImpl {
.filter(regionName -> !"西咸新区".equals(regionName))
.collect(Collectors.toList());
// 过滤掉 "西咸新区" 并获取 yData
List<CountDto> yData = getYDataForQZ(regionList);
List<CountDto> yData = getYDataForQZ(regionList, paramDto);
result.put("legendData", legendData);
result.put("xData", xData);
result.put("xdata", xData);
result.put("equipTotal", yData.stream().map(CountDto::getLongValue).collect(Collectors.toList()));
result.put("claimRate", yData.stream().map(CountDto::getStrValue).collect(Collectors.toList()));
return result;
}
private List<CountDto> getYDataForQZ(List<RegionModel> regionList) {
private List<CountDto> getYDataForQZ(List<RegionModel> regionList, DPFilterParamForDetailDto paramDto) {
DecimalFormat decimalFormat = new DecimalFormat("0.00");
return regionList.parallelStream()
.filter(region -> !"西咸新区".equals(region.getRegionName()))
.map(region -> {
CountDto dto = new CountDto();
Long equipTotal = screenMapper.getEquipTotal(region.getRegionCode().toString());
String orgCode = stCommonService.getAndSetOrgCode(region.getRegionCode().toString());
Long equipIsManageNum = staticsCenterMapCountDataForEquipIsManage(orgCode);
// 设置设备总数
Long equipIsManageNum = staticsCenterMapCountDataForEquipIsManage(orgCode, paramDto);
Long equipTotal = getEquipTotalForCode(paramDto.getEquListCode(), region.getRegionCode().toString());
CountDto dto = new CountDto();
dto.setLongValue(equipTotal);
// 计算并设置管理率
String claimRate = calculateClaimRate(equipTotal, equipIsManageNum, decimalFormat);
dto.setStrValue(claimRate);
dto.setStrValue(calculateClaimRate(equipTotal, equipIsManageNum, decimalFormat));
return dto;
}).collect(Collectors.toList());
}
private Long getEquipTotalForCode(String equListCode, String regionCode) {
if (equListCode == null) {
return screenMapper.getEquipTotal(regionCode);
}
switch (equListCode) {
case "1000":
return screenMapper.getEquListTotal("boiler", regionCode); // 锅炉
case "2000":
return screenMapper.getEquListTotal("vessel", regionCode); // 压力容器
case "3000":
return screenMapper.getEquListTotal("elevator", regionCode); // 电梯
case "4000":
return screenMapper.getEquListTotal("lifting", regionCode); // 起重机械
case "5000":
return screenMapper.getEquListTotal("vehicle", regionCode); // 厂车
case "6000":
return screenMapper.getEquListTotal("rides", regionCode); // 游乐设施
case "8000":
return screenMapper.getEquListTotal("pipeline", regionCode); // 压力管道
case "9000":
return screenMapper.getEquListTotal("ropeway", regionCode); // 客运索道
case "2300":
return screenMapper.getEquListTotal("cylinder", regionCode); // 气瓶
default:
return screenMapper.getEquipTotal(regionCode);
}
}
private Map<String, Object> createLegend(String value, String dataKey) {
return new HashMap<String, Object>() {{
put("value", value);
......@@ -722,7 +762,7 @@ public class ZLDPStatisticsServiceImpl {
return decimalFormat.format(claimRate) + "%";
}
private Long staticsCenterMapCountDataForEquipIsManage(String orgCode) {
private Long staticsCenterMapCountDataForEquipIsManage(String orgCode, DPFilterParamForDetailDto paramDto) {
long num = 0;
CountRequest request = new CountRequest();
request.indices("idx_biz_view_jg_all");
......@@ -731,6 +771,14 @@ public class ZLDPStatisticsServiceImpl {
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
// 设备类别精确查询气瓶
boolMust.must(QueryBuilders.termQuery("IS_INTO_MANAGEMENT", true));
if (StringUtils.isNotEmpty(paramDto.getEquListCode())) {
if ("2300".equals(paramDto.getEquListCode())){
boolMust.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", QueryParser.escape(paramDto.getEquListCode().toLowerCase())));
}else {
boolMust.must(QueryBuilders.termQuery("EQU_LIST_CODE", QueryParser.escape(paramDto.getEquListCode().toLowerCase())));
}
}
// 且8大类,目的去掉脏数据
boolMust.must(QueryBuilders.termsQuery("EQU_LIST_CODE", StCommonServiceImpl.getEquipmentCategory().stream().map(EquipmentCategoryDto::getCode).collect(Collectors.toList())));
request.query(boolMust);
......@@ -742,4 +790,130 @@ public class ZLDPStatisticsServiceImpl {
}
return num;
}
public Page<JSONObject> queryByKeys(JSONObject map) {
if (!ValidationUtil.isEmpty(map.get(EQU_STATE))) {
map.put(EQU_STATE, EquimentEnum.getCode.get(map.get(EQU_STATE).toString()).toString());
}
Page<JSONObject> result = new Page<>(map.getInteger("number"), map.getInteger("size"));
SearchRequest request = new SearchRequest();
request.indices("idx_biz_view_jg_all");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.trackTotalHits(true);
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// SEQUENCE_NBR
if (!ObjectUtils.isEmpty(map.getString("SEQUENCE_NBR"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("SEQUENCE_NBR"));
meBuilder.must(QueryBuilders.matchPhraseQuery("SEQUENCE_NBR", "*" + test + "*"));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("cityCode"))) {
String orgCode = stCommonService.getAndSetOrgCode((String) map.get("cityCode"));
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
}
if (!ObjectUtils.isEmpty(map.getString("USE_UNIT_NAME"))) {
BoolQueryBuilder query = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("USE_UNIT_NAME"));
query.must(QueryBuilders.matchPhraseQuery("USE_UNIT_NAME", "*" + test + "*"));
boolMust.must(query);
}
if (!ObjectUtils.isEmpty(map.getString("USE_UNIT_CREDIT_CODE"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("USE_UNIT_CREDIT_CODE"));
meBuilder.must(QueryBuilders.matchPhraseQuery("USE_UNIT_CREDIT_CODE", test));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("EQU_LIST_CODE"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("EQU_LIST_CODE"));
meBuilder.must(QueryBuilders.matchPhraseQuery("EQU_LIST_CODE", test));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("EQU_LIST"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("EQU_LIST"));
meBuilder.must(QueryBuilders.matchPhraseQuery("EQU_LIST", "*" + test + "*"));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("EQU_CATEGORY"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("EQU_CATEGORY"));
meBuilder.must(QueryBuilders.matchPhraseQuery("EQU_CATEGORY", "*" + test + "*"));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("USE_ORG_CODE"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("USE_ORG_CODE"));
meBuilder.must(QueryBuilders.wildcardQuery("USE_ORG_CODE", "*" + test + "*"));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("EQU_CODE"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("EQU_CODE"));
meBuilder.must(QueryBuilders.matchPhraseQuery("EQU_CODE", "*" + test + "*"));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(map.getString("ADDRESS"))) {
BoolQueryBuilder query = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getString("ADDRESS"));
query.must(QueryBuilders.matchPhraseQuery("ADDRESS", "*" + test + "*"));
boolMust.must(query);
}
if (!ObjectUtils.isEmpty(map.getString("EQU_STATE"))) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(map.getLong("EQU_STATE").toString());
meBuilder.must(QueryBuilders.matchQuery("EQU_STATE", test));
boolMust.must(meBuilder);
}
//默认查询已纳管
if (!ObjectUtils.isEmpty(map.getString(IS_INTO_MANAGEMENT))) {
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
String param = QueryParser.escape(map.getString(IS_INTO_MANAGEMENT));
pBuilder.must(QueryBuilders.matchQuery(IS_INTO_MANAGEMENT, param));
boolMust.must(pBuilder);
}else{
BoolQueryBuilder pBuilder = QueryBuilders.boolQuery();
String param = QueryParser.escape("true");
pBuilder.must(QueryBuilders.matchQuery(IS_INTO_MANAGEMENT, param));
boolMust.must(pBuilder);
}
builder.query(boolMust);
builder.sort("REC_DATE", SortOrder.DESC);
builder.from((map.getInteger("number") - 1) * map.getInteger("size"));
builder.size(map.getInteger("size"));
request.source(builder);
List<JSONObject> list = new LinkedList<>();
long totle = 0;
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
System.out.println(hit);
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
JSONObject dto2 = jsonObject.getJSONObject("sourceAsMap");
if (!ValidationUtil.isEmpty(dto2.get(EQU_STATE))) {
Integer integer = Integer.valueOf(dto2.get(EQU_STATE).toString());
String status = EquimentEnum.getName.get(integer);
dto2.put(EQU_STATE, status);
}
list.add(dto2);
}
totle = response.getInternalResponse().hits().getTotalHits().value;
result.setRecords(list);
result.setTotal(totle);
} catch (IOException e) {
throw new RuntimeException(e);
}
return result;
}
}
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