重构提取转历史航班的代码
This commit is contained in:
+215
@@ -0,0 +1,215 @@
|
||||
package com.gzzn.omms.msgexchangeapi.service.flightInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import com.gzzn.omms.msgexchangeapi.entity.msg.DIVERSIONDATA;
|
||||
import com.gzzn.omms.msgexchangeapi.entity.msg.MOVEMENTINDICATOR;
|
||||
import com.gzzn.omms.msgexchangeapi.entity.msg.SCHD.FLTR;
|
||||
import com.gzzn.omms.msgexchangeapi.utils.DateTimeUtil;
|
||||
|
||||
/**
|
||||
* 航班历史服务
|
||||
* @author zhouxiunai
|
||||
*
|
||||
*/
|
||||
@Service
|
||||
public class FlightHisServiceImpl {
|
||||
|
||||
/**
|
||||
* 航班到达超过多久则成为历史航班数据(单位:秒)
|
||||
*/
|
||||
@Value("${hstCondition.ARRIVE_HST_TIME}")
|
||||
private Integer ARRIVE_HST_TIME ;
|
||||
/**
|
||||
* 航班取消超过多久则成为历史航班数据(单位:秒)
|
||||
*/
|
||||
@Value("${hstCondition.CANCEL_HST_TIME}")
|
||||
private Integer CANCEL_HST_TIME ;
|
||||
|
||||
/**
|
||||
* 备降超过多久则成为历史航班数据 FROM CTU 本应降落到成都备降到其他地方(单位:秒)
|
||||
*/
|
||||
@Value("${hstCondition.FDIV_HST_TIME}")
|
||||
private Integer FDIV_HST_TIME ;
|
||||
|
||||
/**
|
||||
* 计划时间超过多久则成为历史航班数据(单位:秒)
|
||||
*/
|
||||
@Value("${hstCondition.SODT_HST_TIME}")
|
||||
private Integer SODT_HST_TIME ;
|
||||
|
||||
/**
|
||||
* 获取可以进行转历史操作的航班
|
||||
* 遍历 查找出已经 可以作为历史数据的动态消息
|
||||
* 条件为 :完成运营的航班是指已经落地超过2小时或已经起飞的
|
||||
* @param fltrs
|
||||
* @return
|
||||
*/
|
||||
public List<FLTR> getHisToBeTran(List<FLTR> fltrs)
|
||||
{
|
||||
List<FLTR> fltrsHistory = new ArrayList<FLTR>();
|
||||
|
||||
if(CollectionUtils.isEmpty(fltrs)){
|
||||
return fltrsHistory;
|
||||
} //end if
|
||||
|
||||
|
||||
for(FLTR fltr : fltrs){
|
||||
if(isSODTMatch(fltr))
|
||||
{
|
||||
fltrsHistory.add(fltr);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(isCNCLMatch(fltr))
|
||||
{
|
||||
fltrsHistory.add(fltr);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(isFDIVMatch(fltr))
|
||||
{
|
||||
fltrsHistory.add(fltr);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(isDMatch(fltr))
|
||||
{
|
||||
fltrsHistory.add(fltr);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(isAMatch(fltr))
|
||||
{
|
||||
fltrsHistory.add(fltr);
|
||||
continue;
|
||||
}
|
||||
} //end for
|
||||
|
||||
return fltrsHistory;
|
||||
} //end function
|
||||
|
||||
|
||||
/**
|
||||
* 计划时间是否满足转历史要求
|
||||
* @param fltr 动态航班信息
|
||||
* @return
|
||||
*/
|
||||
private boolean isSODTMatch(FLTR fltr)
|
||||
{
|
||||
String SODT = fltr.getSODT(); //航班计划时间 ddMMMyyHHmm
|
||||
Long SODT_long = DateTimeUtil.toDate(SODT, "ddMMMyyHHmm",Locale.ENGLISH).getTime();
|
||||
|
||||
/**===================1.计划时间超时的===================**/
|
||||
if((System.currentTimeMillis()-SODT_long)>SODT_HST_TIME){
|
||||
//转为历史数据
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 已取消的航班是否满足转历史要求
|
||||
* @param fltr
|
||||
* @return
|
||||
*/
|
||||
private boolean isCNCLMatch(FLTR fltr)
|
||||
{
|
||||
/**===================2.航班取消===================**/
|
||||
String CNCL = fltr.getCNCL(); //航班取消时间 ddMMMyyHHmm
|
||||
if(!StringUtils.isEmpty(CNCL)){ //航班被取消
|
||||
Long CNCL_longTime = DateTimeUtil.toDate(CNCL, "ddMMMyyHHmm",Locale.ENGLISH).getTime();
|
||||
if((System.currentTimeMillis()-CNCL_longTime)>CANCEL_HST_TIME){
|
||||
//转为历史数据
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 备降航班是否满足转历史要求
|
||||
* @param fltr
|
||||
* @return
|
||||
*/
|
||||
private boolean isFDIVMatch(FLTR fltr)
|
||||
{
|
||||
String SODT = fltr.getSODT(); //航班计划时间 ddMMMyyHHmm
|
||||
Long SODT_long = DateTimeUtil.toDate(SODT, "ddMMMyyHHmm",Locale.ENGLISH).getTime();
|
||||
|
||||
/**===================3.备降===================**/
|
||||
DIVERSIONDATA FDIV = fltr.getFDIV(); //备降信息
|
||||
|
||||
if(null!=FDIV && FDIV.getDDES().equals("CTU") && FDIV.getDDIR().equals("FROM")){ //本应降落到成都机场 备降到其他机场
|
||||
if((System.currentTimeMillis() - SODT_long)>FDIV_HST_TIME){
|
||||
//转为历史数据
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 离港航班是否满足转历史要求
|
||||
* @param fltr
|
||||
* @return
|
||||
*/
|
||||
private boolean isDMatch(FLTR fltr)
|
||||
{
|
||||
String SODT = fltr.getSODT(); //航班计划时间 ddMMMyyHHmm
|
||||
Long SODT_long = DateTimeUtil.toDate(SODT, "ddMMMyyHHmm",Locale.ENGLISH).getTime();
|
||||
|
||||
Long todayMixTime = DateTimeUtil.getTodayStartTime();
|
||||
String ACTT = fltr.getACTT(); //航班实际时间 ddMMMyyHHmm
|
||||
if(!StringUtils.isEmpty(ACTT) && SODT_long<todayMixTime){ //计划时间是今天之前 且 实际时间存在
|
||||
Long ACTT_longTime = DateTimeUtil.toDate(ACTT, "ddMMMyyHHmm",Locale.ENGLISH).getTime();
|
||||
/**===================4.离港航班===================**/
|
||||
if(fltr.getMVIN().equals(MOVEMENTINDICATOR.D)){
|
||||
//实际时间且小于当前时间则为已离港
|
||||
if(ACTT_longTime<=System.currentTimeMillis()){
|
||||
//转为历史数据
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 到港航班是否满足转历史要求
|
||||
* @param fltr
|
||||
* @return
|
||||
*/
|
||||
private boolean isAMatch(FLTR fltr)
|
||||
{
|
||||
String SODT = fltr.getSODT(); //航班计划时间 ddMMMyyHHmm
|
||||
Long SODT_long = DateTimeUtil.toDate(SODT, "ddMMMyyHHmm",Locale.ENGLISH).getTime();
|
||||
|
||||
Long todayMixTime = DateTimeUtil.getTodayStartTime();
|
||||
String ACTT = fltr.getACTT(); //航班实际时间 ddMMMyyHHmm
|
||||
if(!StringUtils.isEmpty(ACTT) && SODT_long<todayMixTime){ //计划时间是今天之前 且 实际时间存在
|
||||
Long ACTT_longTime = DateTimeUtil.toDate(ACTT, "ddMMMyyHHmm",Locale.ENGLISH).getTime();
|
||||
|
||||
/**===================5.到达航班===================**/
|
||||
if(fltr.getMVIN().equals(MOVEMENTINDICATOR.A)){
|
||||
//到达实际时间超过规定时间的 则视为历史数据
|
||||
if((System.currentTimeMillis()-ACTT_longTime)>ARRIVE_HST_TIME){
|
||||
//转为历史数据
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
} //end class
|
||||
Reference in New Issue
Block a user