Commit f29b7e7e authored by 麻笑宇's avatar 麻笑宇

检验检测八大类设备检验临期超期下钻接口提交

parent d6978261
......@@ -188,6 +188,39 @@ public class JYJCDPStatisticsController {
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "大屏-检验检测-八大类设备检验临期、超期统计下钻上部图例", notes = "大屏-检验检测-八大类设备检验临期、超期统计下钻上部图例")
@PostMapping(value = "/equipInspectTime/equipInspectTimeCountListDetail")
public ResponseModel<Map<String, Object>> equipInspectTimeCountListDetail(@Validated @RequestBody DPFilterParamForDetailDto dpFilterParamDto, BindingResult result) {
List<FieldError> fieldErrors = result.getFieldErrors();
if (!fieldErrors.isEmpty()) {
throw new BadRequest(fieldErrors.get(0).getDefaultMessage());
}
return ResponseHelper.buildResponse(statisticsService.equipInspectTimeCountListDetail(dpFilterParamDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "大屏-检验检测-八大类设备检验临期、超期统计下钻下部列表", notes = "大屏-检验检测-八大类设备检验临期、超期统计下钻下部列表")
@PostMapping(value = "/equipInspectTime/equipInspectTimeCountListDetailList")
public ResponseModel<Page<JSONObject>> equipInspectTimeCountListDetailList(@Validated @RequestBody DPFilterParamForDetailDto dpFilterParamDto, BindingResult result) {
List<FieldError> fieldErrors = result.getFieldErrors();
if (!fieldErrors.isEmpty()) {
throw new BadRequest(fieldErrors.get(0).getDefaultMessage());
}
return ResponseHelper.buildResponse(statisticsService.equipInspectTimeCountListDetailList(dpFilterParamDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "大屏-检验检测-八大类设备检验临期、超期统计下钻筛选条件", notes = "大屏-检验检测-八大类设备检验临期、超期统计下钻筛选条件")
@PostMapping(value = "/equipInspectTime/equipInspectTimeCountListDetailSearch")
public ResponseModel<List<Map<String,Object>>> equipInspectTimeCountListDetailSearch(@Validated @RequestBody DPFilterParamForDetailDto dpFilterParamDto, BindingResult result) {
List<FieldError> fieldErrors = result.getFieldErrors();
if (!fieldErrors.isEmpty()) {
throw new BadRequest(fieldErrors.get(0).getDefaultMessage());
}
return ResponseHelper.buildResponse(statisticsService.equipInspectTimeCountListDetailSearch(dpFilterParamDto));
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/inspectApplication/pageList")
@ApiOperation(httpMethod = "POST", value = "检验检测报检申请列表分页,按照区域过滤", notes = "检验检测报检申请列表分页,按照区域过滤")
public ResponseModel<Page<JyjcInspectionApplicationDto>> queryForPageList(@RequestParam(value = "current") int current,
......
package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -21,6 +22,7 @@ import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcInspectionResultMapper;
import com.yeejoin.amos.boot.module.jyjc.api.mapper.JyjcOpeningApplicationMapper;
import com.yeejoin.amos.boot.module.statistics.api.mapper.JYJCStatisticsMapper;
import com.yeejoin.amos.boot.module.ymt.api.dto.EquipmentCategoryDto;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquimentEnum;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import com.yeejoin.amos.boot.module.ymt.api.mapper.TzsUserInfoMapper;
import com.yeejoin.amos.feign.systemctl.model.RegionModel;
......@@ -35,12 +37,15 @@ 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.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.io.IOException;
......@@ -54,6 +59,8 @@ import java.time.temporal.TemporalAdjusters;
import java.util.*;
import java.util.stream.Collectors;
import static com.yeejoin.amos.boot.module.statistcs.biz.service.impl.ZLDPStatisticsServiceImpl.IS_INTO_MANAGEMENT;
/**
* 大屏统计实现类
*
......@@ -73,6 +80,14 @@ public class JYJCDPStatisticsServiceImpl {
*/
private final static String EQU_CATEGORY_CYLINDER = "2300";
private static final String EQU_STATE = "EQU_STATE";
//超期
private static final String OVERTIME = "OVERTIME";
//所有
private static final String ALL = "ALL";
//临期
private static final String TEMPORARY = "TEMPORARY";
private JyjcInspectionApplicationEquipMapper inspectionApplicationEquipMapper;
private JyjcInspectionApplicationMapper inspectionApplicationMapper;
......@@ -541,6 +556,133 @@ public class JYJCDPStatisticsServiceImpl {
return result;
}
public Map<String,Object> equipInspectTimeCountListDetail(DPFilterParamForDetailDto dpFilterParamForDetailDto) {
//查询子区域
List<RegionModel> regionModels = stCommonService.setRegionIfRootParent(dpFilterParamForDetailDto.getCityCode());
List<Map<String, Object>> result = regionModels.parallelStream().map(r -> {
DPFilterParamForDetailDto filterParamDto = new DPFilterParamForDetailDto();
filterParamDto.setCityCode(r.getRegionCode().toString());
filterParamDto.setTreeValue(dpFilterParamForDetailDto.getTreeValue());
filterParamDto.setEquCategoryCode(dpFilterParamForDetailDto.getEquCategoryCode());
Map<String, Object> itemResult = new HashMap<>();
itemResult.put("xdata", r.getRegionName());
Long timeTemporaryCount = staticsCenterMapCountDataForJyTimeTemporaryForDetail(filterParamDto);
Long timeOverdueCount = staticsCenterMapCountDataForJyTimeOverdueForDetail(filterParamDto);
itemResult.put("timeTemporaryCount",timeTemporaryCount);
itemResult.put("timeOverdueCount",timeOverdueCount);
return itemResult;
}).collect(Collectors.toList());
Map<String,Object> returnMap = new HashMap<>();
List<Map<String,Object>> legendData = new ArrayList<>();
for(int i = 0;i<2; i++){
Map<String,Object> map = new HashMap<>();
if(i == 0){
map.put("dataKey","timeTemporaryCount");
map.put("value","临期数量");
map.put("chartType","bar");
}else{
map.put("dataKey","timeOverdueCount");
map.put("value","超期数量");
map.put("chartType","bar");
}
legendData.add(map);
}
returnMap.put("legendData",legendData);
List xdata = new ArrayList();
List timeTemporaryCount = new ArrayList();
List timeOverdueCount = new ArrayList();
for(int i = 0;i<result.size();i++){
xdata.add(result.get(i).get("xdata"));
timeTemporaryCount.add(result.get(i).get("timeTemporaryCount"));
timeOverdueCount.add(result.get(i).get("timeOverdueCount"));
}
returnMap.put("xdata",xdata);
returnMap.put("timeTemporaryCount",timeTemporaryCount);
returnMap.put("timeOverdueCount",timeOverdueCount);
return returnMap;
}
private Long staticsCenterMapCountDataForJyTimeTemporaryForDetail(DPFilterParamForDetailDto dpFilterParamForDetailDto) {
Long value = 0L;
SearchRequest request = new SearchRequest();
request.indices("idx_biz_view_jg_all");
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
String orgCode = stCommonService.getAndSetOrgCode(dpFilterParamForDetailDto.getCityCode());
// 按照管辖机构区域信息模糊查询
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
// 只统计已纳管设备
boolMust.must(QueryBuilders.termQuery("IS_INTO_MANAGEMENT", Boolean.TRUE));
// 且下次检验日期大于等于当天 且查询 下次检验日期 <= 当前天+30天 即为临期
long currentDayTime = DateUtil.parse(DateUtil.today(), "yyy-MM-dd").getTime();
long currentDayAfter30DayTime = DateUtil.offsetDay(DateUtil.parse(DateUtil.today(), "yyy-MM-dd"), 30).getTime();
boolMust.must(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").gte(currentDayTime).lte(currentDayAfter30DayTime));
if(StrUtil.isNotEmpty(dpFilterParamForDetailDto.getTreeValue())) {
boolMust.must(QueryBuilders.termQuery("EQU_LIST_CODE", dpFilterParamForDetailDto.getTreeValue()));
}else{
// 且8大类,目的去掉脏数据
boolMust.must(QueryBuilders.termsQuery("EQU_LIST_CODE", StCommonServiceImpl.getEquipmentCategory().stream().map(EquipmentCategoryDto::getCode).collect(Collectors.toList())));
}
if(StrUtil.isNotEmpty(dpFilterParamForDetailDto.getEquCategoryCode())){
boolMust.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", dpFilterParamForDetailDto.getEquCategoryCode()));
}
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boolMust);
request.source(builder);
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
value = response.getHits().getTotalHits().value;
} catch (IOException e) {
throw new RuntimeException(e);
}
return value;
}
private Long staticsCenterMapCountDataForJyTimeOverdueForDetail(DPFilterParamForDetailDto dpFilterParamForDetailDto) {
Long value = 0L;
SearchRequest request = new SearchRequest();
request.indices("idx_biz_view_jg_all");
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 区域信息模糊查询
String orgCode = stCommonService.getAndSetOrgCode(dpFilterParamForDetailDto.getCityCode());
// 按照管辖机构区域信息模糊查询
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
// 只统计已纳管设备
boolMust.must(QueryBuilders.termQuery("IS_INTO_MANAGEMENT", Boolean.TRUE));
// 查询下次检验日期小于当前天的设备,即为超期检验超期设备
long currentDayTime = DateUtil.parse(DateUtil.now(), "yyy-MM-dd").getTime();
boolMust.must(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").lt(currentDayTime));
if(StrUtil.isNotEmpty(dpFilterParamForDetailDto.getTreeValue())) {
boolMust.must(QueryBuilders.termQuery("EQU_LIST_CODE", dpFilterParamForDetailDto.getTreeValue()));
}else{
// 且8大类,目的去掉脏数据
boolMust.must(QueryBuilders.termsQuery("EQU_LIST_CODE", StCommonServiceImpl.getEquipmentCategory().stream().map(EquipmentCategoryDto::getCode).collect(Collectors.toList())));
}
if(StrUtil.isNotEmpty(dpFilterParamForDetailDto.getEquCategoryCode())){
boolMust.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", dpFilterParamForDetailDto.getEquCategoryCode()));
}
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(boolMust);
request.source(builder);
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
value = response.getHits().getTotalHits().value;
} catch (IOException e) {
throw new RuntimeException(e);
}
return value;
}
private void buildYDataForJyTime(Map<String, Object> result, DPFilterParamDto dpFilterParamDto, List<EquipmentCategoryDto> equipmentCategoryDtos) {
// 1.检验检测临期设备数数量统计
result.put("approach", staticsCenterMapCountDataForJyTimeTemporary(dpFilterParamDto, equipmentCategoryDtos));
......@@ -828,4 +970,122 @@ public class JYJCDPStatisticsServiceImpl {
Page<Map<String, Object>> maps = inspectionApplicationMapper.getInspectDetailList(page, orgCode, filterParamDto, dpFilterParamForDetailDto.getBusinessType());
return maps;
}
public Page<JSONObject> equipInspectTimeCountListDetailList(DPFilterParamForDetailDto paramDto) {
Page<JSONObject> result = new Page<>(paramDto.getCurrent(), paramDto.getSize());
SearchRequest request = new SearchRequest();
request.indices("idx_biz_view_jg_all");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.trackTotalHits(true);
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
if (!ObjectUtils.isEmpty(paramDto.getCityCode())) {
String orgCode = stCommonService.getAndSetOrgCode(paramDto.getCityCode());
boolMust.must(QueryBuilders.wildcardQuery("ORG_BRANCH_CODE.keyword", QueryParser.escape(orgCode) + "*"));
}
if (!ObjectUtils.isEmpty(paramDto.getSuperviseUnitName())) {
BoolQueryBuilder query = QueryBuilders.boolQuery();
String test = QueryParser.escape(paramDto.getSuperviseUnitName());
query.must(QueryBuilders.matchPhraseQuery("ORG_BRANCH_NAME", "*" + test + "*"));
boolMust.must(query);
}
if (!ObjectUtils.isEmpty(paramDto.getCompanyName())) {
BoolQueryBuilder query = QueryBuilders.boolQuery();
String test = QueryParser.escape(paramDto.getCompanyName());
query.must(QueryBuilders.matchPhraseQuery("USE_UNIT_NAME", "*" + test + "*"));
boolMust.must(query);
}
if (!ObjectUtils.isEmpty(paramDto.getTreeValue())) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(paramDto.getTreeValue());
meBuilder.must(QueryBuilders.matchPhraseQuery("EQU_LIST_CODE", test));
boolMust.must(meBuilder);
}
if (!ObjectUtils.isEmpty(paramDto.getEquCategoryCode())) {
BoolQueryBuilder meBuilder = QueryBuilders.boolQuery();
String test = QueryParser.escape(paramDto.getEquCategoryCode());
meBuilder.must(QueryBuilders.matchPhraseQuery("EQU_CATEGORY_CODE", test));
boolMust.must(meBuilder);
}
long currentDayTime = DateUtil.parse(DateUtil.today(), "yyy-MM-dd").getTime();
long currentDayAfter30DayTime = DateUtil.offsetDay(DateUtil.parse(DateUtil.today(), "yyy-MM-dd"), 30).getTime();
if(OVERTIME.equals(paramDto.getBusinessType())){
// 查询下次检验日期小于当前天的设备,即为超期检验超期设备
boolMust.must(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").lt(currentDayTime));
}else if(TEMPORARY.equals(paramDto.getBusinessType())){
// 且下次检验日期大于等于当天 且查询 下次检验日期 <= 当前天+30天 即为临期
boolMust.must(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").gte(currentDayTime).lte(currentDayAfter30DayTime));
}else{
BoolQueryBuilder shouldBuilder = QueryBuilders.boolQuery();
// 且下次检验日期大于等于当天 且查询 下次检验日期 <= 当前天+30天 即为临期
shouldBuilder.should().add(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").gte(currentDayTime).lte(currentDayAfter30DayTime));
shouldBuilder.should().add(QueryBuilders.rangeQuery("NEXT_INSPECT_DATE").lt(currentDayTime));
boolMust.must(shouldBuilder);
}
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((paramDto.getCurrent() - 1) * paramDto.getSize());
builder.size(paramDto.getSize());
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);
}
// if(dto2.get("NEXT_INSPECT_DATE") != null){
// if(Long.valueOf(dto2.get("NEXT_INSPECT_DATE").toString()) < currentDayTime){
// dto2.put("PROBLEM_TYPE", "超期");
// }else{
// dto2.put("PROBLEM_TYPE","临期");
// }
// }
list.add(dto2);
}
totle = response.getInternalResponse().hits().getTotalHits().value;
result.setRecords(list);
result.setTotal(totle);
} catch (IOException e) {
throw new RuntimeException(e);
}
return result;
}
public List<Map<String,Object>> equipInspectTimeCountListDetailSearch(DPFilterParamForDetailDto dpFilterParamDto) {
List<Map<String,Object>> list = new ArrayList<>();
for(int i = 0; i < 3; i++){
Map<String,Object> map = new HashMap<>();
if(i == 0){
map.put("label","所有");
map.put("value",ALL);
}else if(i == 1){
map.put("label","临期");
map.put("value",TEMPORARY);
}else{
map.put("label","超期");
map.put("value",OVERTIME);
}
list.add(map);
}
return list;
}
}
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