123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510 |
- package cn.com.taiji.service.impl;
- import cn.com.taiji.domain.FusionData;
- import cn.com.taiji.domain.FusionQuery;
- import cn.com.taiji.domain.LeaveOutData;
- import cn.com.taiji.domain.StaticOrDynamicData;
- import cn.com.taiji.domain.dto.LeaceOutDto;
- import cn.com.taiji.service.FusionAnalysisService;
- import cn.com.taiji.utils.DateUtils;
- import com.alibaba.excel.EasyExcel;
- import com.alibaba.fastjson.JSONObject;
- import lombok.extern.slf4j.Slf4j;
- import org.elasticsearch.action.search.SearchRequest;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.client.RequestOptions;
- import org.elasticsearch.client.RestHighLevelClient;
- import org.elasticsearch.index.query.BoolQueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.search.SearchHit;
- import org.elasticsearch.search.SearchHits;
- import org.elasticsearch.search.aggregations.AggregationBuilders;
- import org.elasticsearch.search.aggregations.Aggregations;
- import org.elasticsearch.search.aggregations.bucket.terms.ParsedDoubleTerms;
- import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
- import org.elasticsearch.search.aggregations.bucket.terms.Terms;
- import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
- import org.elasticsearch.search.aggregations.metrics.ParsedTopHits;
- import org.elasticsearch.search.builder.SearchSourceBuilder;
- import org.elasticsearch.search.sort.SortBuilders;
- import org.elasticsearch.search.sort.SortOrder;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.net.URLEncoder;
- import java.text.ParseException;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.Map;
- import static cn.com.taiji.constants.EsIndexConstants.*;
- /**
- * @author xhl
- * @date 2023/2/6
- */
- @Service
- public class FusionAnalysisServiceImpl implements FusionAnalysisService {
- @Autowired
- private RestHighLevelClient client;
- @Override
- public void fusionAnalysisExcelOne(FusionQuery query, HttpServletResponse response) throws IOException, ParseException {
- List<FusionData> list = new ArrayList<>();
- Date startTime = DateUtils.parse(query.getStartTime(),"yyyy-MM-dd");
- String time = DateUtils.format(startTime,"yyyy-MM-dd");
- SearchRequest request = new SearchRequest(INDEX_SEAT_REALTIMETRAJECTORY+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- boolQueryBuilder.filter(QueryBuilders.rangeQuery("mergeTime").gte(query.getStartTime()).lte(query.getEndTime()));
- searchSourceBuilder.query(boolQueryBuilder);
- TermsAggregationBuilder aggBuilder = AggregationBuilders.terms("ship_field_agg")
- .field("mergeTarget")
- .size(1000000)
- .subAggregation(
- AggregationBuilders.topHits("ship_field_agg_top1")
- .size(100)
- .sort(
- SortBuilders.fieldSort("mergeTime").order(SortOrder.ASC)
- )
- );
- searchSourceBuilder
- .trackTotalHits(true)
- .aggregation(aggBuilder)
- .size(1000000);
- request.source(searchSourceBuilder);
- SearchResponse search = client.search(request, RequestOptions.DEFAULT);
- Aggregations aggregations = search.getAggregations();
- ParsedStringTerms aggregation = aggregations.get("ship_field_agg");
- for (Terms.Bucket bucket : aggregation.getBuckets()) {
- FusionData data = new FusionData();
- ParsedTopHits topHits = bucket.getAggregations().get("ship_field_agg_top1");
- SearchHits searchHits = topHits.getHits();
- Long value = searchHits.getTotalHits().value;
- SearchHit[] hits = searchHits.getHits();
- JSONObject sourceItem = JSONObject.parseObject(hits[0].getSourceAsString());
- JSONObject sourceItem2 = JSONObject.parseObject(hits[value.intValue()-1].getSourceAsString());
- data.setMergeTarget(sourceItem.getString("mergeTarget"));
- data.setTrackCount(value);
- data.setStartTime(sourceItem.getString("mergeTime"));
- data.setEndTime(sourceItem2.getString("mergeTime"));
- Integer num = 0;
- for (int i = 0; i < hits.length; i++) {
- if (i != hits.length-1){
- Map<String, Object> map = hits[i].getSourceAsMap();
- Map<String, Object> map2 = hits[i+1].getSourceAsMap();
- Date date = DateUtils.parse(map.get("mergeTime").toString(),"yyyy-MM-dd");
- Date date2 = DateUtils.parse(map2.get("mergeTime").toString(),"yyyy-MM-dd");
- Long interval = date2.getTime()-date.getTime();
- if (interval>6500L){
- num++;
- }
- }
- }
- data.setFluctuateNumber(num);
- list.add(data);
- }
- try {
- response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- response.setCharacterEncoding("utf-8");
- String fileName = URLEncoder.encode("识别融合数据率波动问题", "UTF-8");
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
- EasyExcel.write(response.getOutputStream(), FusionData.class).sheet("识别融合数据率波动问题")
- .doWrite(list);
- } catch (Exception e) {
- // 重置response
- System.out.println("导出识别融合数据率波动问题excel失败:{}" + e.getMessage() + e);
- }
- }
- @Override
- public void fusionAnalysisExcelTwo(FusionQuery query, HttpServletResponse response) throws IOException, ParseException {
- List<FusionData> list = new ArrayList<>();
- Date startTime = DateUtils.parse(query.getStartTime(),"yyyy-MM-dd");
- String time = DateUtils.format(startTime,"yyyy-MM-dd");
- SearchRequest request = new SearchRequest(INDEX_SEAT_REALTIMETRAJECTORY+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- boolQueryBuilder.filter(QueryBuilders.rangeQuery("mergeTime").gte(query.getStartTime()).lte(query.getEndTime()));
- searchSourceBuilder.query(boolQueryBuilder);
- TermsAggregationBuilder aggBuilder = AggregationBuilders.terms("ship_field_agg")
- .field("mergeTarget")
- .size(1000000)
- .subAggregation(
- AggregationBuilders.terms("ship_field_agg_one")
- .field("targetCourse")
- .size(1000000)
- .subAggregation(
- AggregationBuilders.terms("ship_field_agg_two")
- .field("targetSpeed")
- .size(1000000)
- .subAggregation(AggregationBuilders.topHits("ship_field_agg_top1")
- .size(100)
- .sort(
- SortBuilders.fieldSort("mergeTime").order(SortOrder.ASC)
- ))
- )
- );
- searchSourceBuilder
- .trackTotalHits(true)
- .aggregation(aggBuilder)
- .size(1000000);
- request.source(searchSourceBuilder);
- SearchResponse search = client.search(request, RequestOptions.DEFAULT);
- Aggregations aggregations = search.getAggregations();
- ParsedStringTerms aggregation = aggregations.get("ship_field_agg");
- for (Terms.Bucket bucket : aggregation.getBuckets()) {
- FusionData data = new FusionData();
- ParsedStringTerms terms = bucket.getAggregations().get("ship_field_agg_one");
- Integer num = 0;
- for (Terms.Bucket buc : terms.getBuckets()){
- ParsedDoubleTerms termsTwo = buc.getAggregations().get("ship_field_agg_two");
- for (Terms.Bucket ket : termsTwo.getBuckets()){
- ParsedTopHits topHit = ket.getAggregations().get("ship_field_agg_top1");
- SearchHits searchHit = topHit.getHits();
- SearchHit[] hit = searchHit.getHits();
- for (int i = 0; i < hit.length; i++) {
- if (num>2){
- data.setFluctuateNumber(data.getFluctuateNumber()+1);
- num =0;
- }
- if (i != hit.length-1){
- Map<String, Object> map = hit[i].getSourceAsMap();
- Map<String, Object> map2 = hit[i+1].getSourceAsMap();
- Date date = DateUtils.parse(map.get("mergeTime").toString(),"yyyy-MM-dd");
- Date date2 = DateUtils.parse(map2.get("mergeTime").toString(),"yyyy-MM-dd");
- Long interval = date2.getTime()-date.getTime();
- if (interval<6500L){
- num++;
- }
- }
- }
- }
- }
- data.setMergeTarget(bucket.getKeyAsString());
- data.setTrackCount(Long.valueOf(bucket.getDocCount()));
- data.setStartTime(query.getStartTime());
- data.setEndTime(query.getEndTime());
- list.add(data);
- }
- try {
- response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- response.setCharacterEncoding("utf-8");
- String fileName = URLEncoder.encode("虚假推送问题", "UTF-8");
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
- EasyExcel.write(response.getOutputStream(), FusionData.class).sheet("虚假推送问题")
- .doWrite(list);
- } catch (Exception e) {
- // 重置response
- System.out.println("导出虚假推送问题excel失败:{}" + e.getMessage() + e);
- }
- }
- @Override
- public void tianAoLeaveOutExcel(FusionQuery query, HttpServletResponse response) throws IOException, ParseException {
- List<LeaveOutData> list = new ArrayList<>();
- List<LeaceOutDto> dtos = new ArrayList<>();
- Date startTime = DateUtils.parse(query.getStartTime(),"yyyy-MM-dd");
- String time = DateUtils.format(startTime,"yyyy-MM-dd");
- SearchRequest request = new SearchRequest(INDEX_SEAT_TRACK_RADAR+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- boolQueryBuilder.filter(QueryBuilders.rangeQuery("receiveTime").gte(query.getStartTime()).lte(query.getEndTime()));
- searchSourceBuilder.query(boolQueryBuilder);
- TermsAggregationBuilder aggBuilder = AggregationBuilders.terms("ship_field_agg")
- .field("fusionBatchNum")
- .size(1000000);
- searchSourceBuilder
- .trackTotalHits(true)
- .aggregation(aggBuilder)
- .size(1000000);
- request.source(searchSourceBuilder);
- SearchResponse search = client.search(request, RequestOptions.DEFAULT);
- Aggregations aggregations = search.getAggregations();
- ParsedStringTerms aggregation = aggregations.get("ship_field_agg");
- for (Terms.Bucket bucket : aggregation.getBuckets()) {
- LeaceOutDto dto = new LeaceOutDto();
- dto.setBatchNumber(bucket.getKeyAsString());
- dto.setCount(Long.valueOf(bucket.getDocCount()));
- dtos.add(dto);
- }
- dtos.forEach(item->{
- LeaveOutData data = new LeaveOutData();
- SearchRequest request2 = new SearchRequest(INDEX_SEAT_REALTIMETRAJECTORY+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder2 = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder2 = new SearchSourceBuilder();
- boolQueryBuilder2.filter(QueryBuilders.wildcardQuery("trackDeviceNo", "*,"+ item.getBatchNumber() +",*"));
- boolQueryBuilder2.filter(QueryBuilders.rangeQuery("mergeTime").gte(query.getStartTime()).lte(query.getEndTime()));
- boolQueryBuilder2.filter(QueryBuilders.termsQuery("mergeType","RADAR","AIS_RADAR","BEIDOU_RADAR","AIS_BEIDOU_RADAR"));
- searchSourceBuilder2.query(boolQueryBuilder2)
- .trackTotalHits(true)
- .size(1000000);
- request2.source(searchSourceBuilder2);
- try {
- SearchResponse search2 = client.search(request, RequestOptions.DEFAULT);
- SearchHits searchHits = search2.getHits();
- Long totalHits = searchHits.getTotalHits().value;
- if (totalHits<5) {
- SearchHit[] hits = searchHits.getHits();
- if (hits.length > 0) {
- JSONObject sourceItem = JSONObject.parseObject(hits[0].getSourceAsString());
- data.setMergeTarget(sourceItem.getString("mergeTarget"));
- data.setStartTime(query.getStartTime());
- data.setEndTime(query.getEndTime());
- data.setBatchNumber(item.getBatchNumber());
- data.setOriginalCount(item.getCount());
- data.setTrackCount(totalHits);
- list.add(data);
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- });
- try {
- response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- response.setCharacterEncoding("utf-8");
- String fileName = URLEncoder.encode("天奥轨迹数据遗漏", "UTF-8");
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
- EasyExcel.write(response.getOutputStream(), LeaveOutData.class).sheet("天奥轨迹数据遗漏")
- .doWrite(list);
- } catch (Exception e) {
- // 重置response
- System.out.println("导出天奥轨迹数据遗漏excel失败:{}" + e.getMessage() + e);
- }
- }
- @Override
- public void beiDouLeaveOutExcel(FusionQuery query, HttpServletResponse response) throws IOException, ParseException {
- List<LeaveOutData> list = new ArrayList<>();
- List<LeaceOutDto> dtos = new ArrayList<>();
- Date startTime = DateUtils.parse(query.getStartTime(),"yyyy-MM-dd");
- String time = DateUtils.format(startTime,"yyyy-MM-dd");
- SearchRequest request = new SearchRequest(INDEX_SEAT_TRACK_BEIDOU+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- boolQueryBuilder.filter(QueryBuilders.rangeQuery("locationTime").gte(query.getStartTime()).lte(query.getEndTime()));
- searchSourceBuilder.query(boolQueryBuilder);
- TermsAggregationBuilder aggBuilder = AggregationBuilders.terms("ship_field_agg")
- .field("devideNo")
- .size(1000000);
- searchSourceBuilder
- .trackTotalHits(true)
- .aggregation(aggBuilder)
- .size(1000000);
- request.source(searchSourceBuilder);
- SearchResponse search = client.search(request, RequestOptions.DEFAULT);
- Aggregations aggregations = search.getAggregations();
- ParsedStringTerms aggregation = aggregations.get("ship_field_agg");
- for (Terms.Bucket bucket : aggregation.getBuckets()) {
- LeaceOutDto dto = new LeaceOutDto();
- dto.setBatchNumber(bucket.getKeyAsString());
- dto.setCount(Long.valueOf(bucket.getDocCount()));
- dtos.add(dto);
- }
- dtos.forEach(item->{
- LeaveOutData data = new LeaveOutData();
- SearchRequest request2 = new SearchRequest(INDEX_SEAT_REALTIMETRAJECTORY+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder2 = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder2 = new SearchSourceBuilder();
- boolQueryBuilder2.filter(QueryBuilders.wildcardQuery("trackDeviceNo", "*,"+ item.getBatchNumber() +",*"));
- boolQueryBuilder2.filter(QueryBuilders.rangeQuery("mergeTime").gte(query.getStartTime()).lte(query.getEndTime()));
- boolQueryBuilder2.filter(QueryBuilders.termsQuery("mergeType","BEIDOU","AIS_BEIDOU","BEIDOU_RADAR","AIS_BEIDOU_RADAR"));
- searchSourceBuilder2.query(boolQueryBuilder2)
- .trackTotalHits(true)
- .size(1000000);
- request2.source(searchSourceBuilder2);
- try {
- SearchResponse search2 = client.search(request, RequestOptions.DEFAULT);
- SearchHits searchHits = search2.getHits();
- Long totalHits = searchHits.getTotalHits().value;
- if (totalHits<5) {
- SearchHit[] hits = searchHits.getHits();
- if (hits.length > 0) {
- JSONObject sourceItem = JSONObject.parseObject(hits[0].getSourceAsString());
- data.setMergeTarget(sourceItem.getString("mergeTarget"));
- data.setStartTime(query.getStartTime());
- data.setEndTime(query.getEndTime());
- data.setBatchNumber(item.getBatchNumber());
- data.setOriginalCount(item.getCount());
- data.setTrackCount(totalHits);
- list.add(data);
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- });
- try {
- response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- response.setCharacterEncoding("utf-8");
- String fileName = URLEncoder.encode("北斗轨迹数据遗漏", "UTF-8");
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
- EasyExcel.write(response.getOutputStream(), LeaveOutData.class).sheet("北斗轨迹数据遗漏")
- .doWrite(list);
- } catch (Exception e) {
- // 重置response
- System.out.println("导出北斗轨迹数据遗漏excel失败:{}" + e.getMessage() + e);
- }
- }
- @Override
- public void hlxyjrhLeaveOutExcel(FusionQuery query, HttpServletResponse response) throws IOException, ParseException {
- List<LeaveOutData> list = new ArrayList<>();
- List<LeaceOutDto> dtos = new ArrayList<>();
- Date startTime = DateUtils.parse(query.getStartTime(),"yyyy-MM-dd");
- String time = DateUtils.format(startTime,"yyyy-MM-dd");
- SearchRequest request = new SearchRequest(INDEX_SEAT_HLX_FUSION_SHIP+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- boolQueryBuilder.filter(QueryBuilders.rangeQuery("time").gte(query.getStartTime()).lte(query.getEndTime()));
- searchSourceBuilder.query(boolQueryBuilder);
- TermsAggregationBuilder aggBuilder = AggregationBuilders.terms("ship_field_agg")
- .field("targetID")
- .size(1000000);
- searchSourceBuilder
- .trackTotalHits(true)
- .aggregation(aggBuilder)
- .size(1000000);
- request.source(searchSourceBuilder);
- SearchResponse search = client.search(request, RequestOptions.DEFAULT);
- Aggregations aggregations = search.getAggregations();
- ParsedStringTerms aggregation = aggregations.get("ship_field_agg");
- for (Terms.Bucket bucket : aggregation.getBuckets()) {
- LeaceOutDto dto = new LeaceOutDto();
- dto.setBatchNumber(bucket.getKeyAsString());
- dto.setCount(Long.valueOf(bucket.getDocCount()));
- dtos.add(dto);
- }
- dtos.forEach(item->{
- LeaveOutData data = new LeaveOutData();
- SearchRequest request2 = new SearchRequest(INDEX_SEAT_REALTIMETRAJECTORY+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder2 = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder2 = new SearchSourceBuilder();
- boolQueryBuilder2.filter(QueryBuilders.wildcardQuery("trackDeviceNo", "*,"+ item.getBatchNumber() +",*"));
- boolQueryBuilder2.filter(QueryBuilders.rangeQuery("mergeTime").gte(query.getStartTime()).lte(query.getEndTime()));
- boolQueryBuilder2.filter(QueryBuilders.termsQuery("mergeType","AIS","RADAR","AIS_BEIDOU","AIS_RADAR","BEIDOU_RADAR","AIS_BEIDOU_RADAR"));
- searchSourceBuilder2.query(boolQueryBuilder2)
- .trackTotalHits(true)
- .size(1000000);
- request2.source(searchSourceBuilder2);
- try {
- SearchResponse search2 = client.search(request, RequestOptions.DEFAULT);
- SearchHits searchHits = search2.getHits();
- Long totalHits = searchHits.getTotalHits().value;
- if (totalHits<5) {
- SearchHit[] hits = searchHits.getHits();
- if (hits.length > 0) {
- JSONObject sourceItem = JSONObject.parseObject(hits[0].getSourceAsString());
- data.setMergeTarget(sourceItem.getString("mergeTarget"));
- data.setStartTime(query.getStartTime());
- data.setEndTime(query.getEndTime());
- data.setBatchNumber(item.getBatchNumber());
- data.setOriginalCount(item.getCount());
- data.setTrackCount(totalHits);
- list.add(data);
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- });
- try {
- response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- response.setCharacterEncoding("utf-8");
- String fileName = URLEncoder.encode("海兰信1级融合轨迹数据遗漏", "UTF-8");
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
- EasyExcel.write(response.getOutputStream(), LeaveOutData.class).sheet("海兰信1级融合轨迹数据遗漏")
- .doWrite(list);
- } catch (Exception e) {
- // 重置response
- System.out.println("导出海兰信1级融合轨迹数据遗漏excel失败:{}" + e.getMessage() + e);
- }
- }
- @Override
- public void tianaoStaticOrDynamicLeaveOutExcel(FusionQuery query, HttpServletResponse response) throws IOException, ParseException {
- List<StaticOrDynamicData> list = new ArrayList<>();
- List<LeaceOutDto> dtos = new ArrayList<>();
- Date startTime = DateUtils.parse(query.getStartTime(),"yyyy-MM-dd");
- String time = DateUtils.format(startTime,"yyyy-MM-dd");
- SearchRequest request = new SearchRequest(INDEX_SEAT_TRACK_RADAR+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
- boolQueryBuilder.filter(QueryBuilders.rangeQuery("receiveTime").gte(query.getStartTime()).lte(query.getEndTime()));
- boolQueryBuilder.filter(QueryBuilders.termQuery("targetProper","1"));
- searchSourceBuilder.query(boolQueryBuilder);
- TermsAggregationBuilder aggBuilder = AggregationBuilders.terms("ship_field_agg")
- .field("fusionBatchNum")
- .size(1000000);
- searchSourceBuilder
- .trackTotalHits(true)
- .aggregation(aggBuilder)
- .size(1000000);
- request.source(searchSourceBuilder);
- SearchResponse search = client.search(request, RequestOptions.DEFAULT);
- Aggregations aggregations = search.getAggregations();
- ParsedStringTerms aggregation = aggregations.get("ship_field_agg");
- for (Terms.Bucket bucket : aggregation.getBuckets()) {
- LeaceOutDto dto = new LeaceOutDto();
- dto.setBatchNumber(bucket.getKeyAsString());
- dto.setCount(Long.valueOf(bucket.getDocCount()));
- dtos.add(dto);
- }
- dtos.forEach(item->{
- StaticOrDynamicData data = new StaticOrDynamicData();
- SearchRequest request2 = new SearchRequest(INDEX_SEAT_REALTIMETRAJECTORY+time);
- // 构建查询条件
- BoolQueryBuilder boolQueryBuilder2 = QueryBuilders.boolQuery();
- SearchSourceBuilder searchSourceBuilder2 = new SearchSourceBuilder();
- boolQueryBuilder2.filter(QueryBuilders.wildcardQuery("trackDeviceNo", "*,"+ item.getBatchNumber() +",*"));
- boolQueryBuilder2.filter(QueryBuilders.termQuery("targetType","0"));
- boolQueryBuilder2.filter(QueryBuilders.rangeQuery("mergeTime").gte(query.getStartTime()).lte(query.getEndTime()));
- boolQueryBuilder2.filter(QueryBuilders.termsQuery("mergeType","RADAR","AIS_RADAR","BEIDOU_RADAR","AIS_BEIDOU_RADAR"));
- searchSourceBuilder2.query(boolQueryBuilder2)
- .trackTotalHits(true)
- .size(1000000);
- request2.source(searchSourceBuilder2);
- try {
- SearchResponse search2 = client.search(request, RequestOptions.DEFAULT);
- SearchHits searchHits = search2.getHits();
- SearchHit[] hits = searchHits.getHits();
- if (hits.length > 0) {
- JSONObject sourceItem = JSONObject.parseObject(hits[0].getSourceAsString());
- data.setMergeTarget(sourceItem.getString("mergeTarget"));
- data.setBatchNumber(item.getBatchNumber());
- list.add(data);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- });
- try {
- response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
- response.setCharacterEncoding("utf-8");
- String fileName = URLEncoder.encode("天奥静态数据与动态轨迹融合", "UTF-8");
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
- EasyExcel.write(response.getOutputStream(), StaticOrDynamicData.class).sheet("天奥静态数据与动态轨迹融合")
- .doWrite(list);
- } catch (Exception e) {
- // 重置response
- System.out.println("导出天奥静态数据与动态轨迹融合excel失败:{}" + e.getMessage() + e);
- }
- }
- }
|