完善动态航班转历史功能,完善插入es的异常捕获及日志打印.修复FDIV结构和ES结构不符导致的插入异常问题。

This commit is contained in:
zhouxiunai
2019-01-25 05:08:43 +08:00
parent c715a135de
commit 5d96d4f2b6
5 changed files with 113 additions and 68 deletions
@@ -3,6 +3,7 @@ package com.gzzn.omms.msgexchangeapi.scheduled;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
@@ -36,14 +37,7 @@ public class FlightHisScheduled {
@Autowired
private FlightHisServiceImpl flightHisServiceImpl;
/**
* 历史航班数据索引
*/
private final String INDEX_NAME = "flight_hts";
/**
* 历史航班数据类型
*/
private final String ES_TYPE = "_doc";
private final Logger logger = LoggerFactory.getLogger(FlightHisScheduled.class);
/**
@@ -53,56 +47,33 @@ public class FlightHisScheduled {
public void scheduled(){
logger.info("开始采集历史数据...");
List<FLTR> fltrs = flightInfoService.findAll();
if( CollectionUtils.isEmpty(fltrs) ){
return ;
try {
List<FLTR> fltrs = flightInfoService.findAll();
if( CollectionUtils.isEmpty(fltrs) ){
return ;
}
List<FLTR> fltrsHistory = new ArrayList<FLTR>();
fltrsHistory = flightHisServiceImpl.getHisToBeTran(fltrs);
if(CollectionUtils.isEmpty(fltrsHistory)){
logger.info("没有航班历史需要转换");
return ; //没有要转的航班历史
}
logger.info("获取到历史动态航班数据:{}条,准备转历史",fltrsHistory.size());
//航班历史写入ELK
flightHisServiceImpl.save(fltrsHistory);
//从redis中删除历史航班
List<String> fltrIdForHistory = fltrsHistory.stream().map(node->{
return node.getFLID().toString();
}).collect(Collectors.toList());
flightInfoService.batchDeleteFltr(fltrIdForHistory);
} catch (Exception e) {
logger.error("动态航班转历史错误:{}",e.getMessage());
}
List<FLTR> fltrsHistory = new ArrayList<FLTR>();
fltrsHistory = flightHisServiceImpl.getHisToBeTran(fltrs);
if(CollectionUtils.isEmpty(fltrsHistory)){
logger.info("没有航班历史需要转换");
return ; //没有要转的航班历史
}
logger.info("获取到历史动态航班数据:{}条,准备转历史",fltrsHistory.size());
//往 elasticsearch中放入历史数据 通过FLID + SODT 判断唯一 (航班ID+计划时间)
if(!ElasticsearchUtil.isIndexExist(INDEX_NAME)){
ElasticsearchUtil.createIndex(INDEX_NAME);
}
//航班历史写入ELK
List<String> fltrIdForHistory = new ArrayList<String>();
for(FLTR fltr:fltrsHistory){
JSONObject jsondata = JSONObject.parseObject(JsonUtil.getString(fltr));
//判断是否已经拥有该历史数据 因es类型原因请注意类型转换
String SODT = fltr.getSODT();
Long FLID = fltr.getFLID().longValue();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("SODT",SODT))
.must(QueryBuilders.termQuery("FLID",FLID));
List<Map<String, Object>> listInEs = ElasticsearchUtil.searchListData(INDEX_NAME, ES_TYPE, boolQuery, null, "FLID", null, null, null);
if(!CollectionUtils.isEmpty(listInEs)){
//获取es中的id 并更新当前历史数据
//唯一 获取第一个
Map<String, Object> map = listInEs.get(0);
String id = (String) map.get("id");
ElasticsearchUtil.updateDataById(jsondata, INDEX_NAME, ES_TYPE, id);
fltrIdForHistory.add(fltr.getFLID().toString());
}else{
//新增历史数据
ElasticsearchUtil.addData(jsondata, INDEX_NAME, ES_TYPE);
fltrIdForHistory.add(fltr.getFLID().toString());
}
}
//删除redis中已成为历史数据的动态消息
if(!CollectionUtils.isEmpty(fltrIdForHistory)){
flightInfoService.batchDeleteFltr(fltrIdForHistory);
logger.info("本次删除转历史动态航班数据:{}条",fltrIdForHistory.size());
}
logger.info("结束采集历史数据。");
}