Commit 96673cc2 by java-李谡

航班执行监控更新最后执行时间定时任务更新

parent d49b0900
......@@ -104,7 +104,7 @@
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.foc.DspReleaseInfoTask</mainClass>
<mainClass>com.foc.StatisticalTask</mainClass>
</transformer>
</transformers>
</configuration>
......
......@@ -12,7 +12,8 @@ public class StatisticalTask {
public static void main(String[] args) {
DynamicFlightService.init();
DynamicFlightService.sta();
DynamicFlightService.backupDynamicsTomorrow();
// DynamicFlightService.sta();
}
}
package com.foc.dao;
import com.foc.entity.DspReleaseInfo;
import com.foc.entity.Dynamics;
import com.foc.entity.StatisticalEntity;
import org.apache.ibatis.annotations.Param;
......@@ -81,7 +82,40 @@ public interface StatisticalDao {
/**
* 批量新增或修改
*
* @param list
*/
void insertDspReleaseInfo(List<DspReleaseInfo> list);
/**
* 根据日期获取航班动态数据
*
* @param date
* @return
*/
List<Dynamics> getDynamicsList(String date);
/**
* 批量添加航班动态数据
*
* @param list
*/
void addDynamicsList(List<Dynamics> list);
/**
* 从备份表查询是否有该航班
*
* @param statisticalEntity
* @return
*/
String getFromBackUp(StatisticalEntity statisticalEntity);
/**
* 根据起飞地和目的地查询航班执行监控信息
*
* @param arrIata 到达地
* @param depIata 起飞地
* @return
*/
StatisticalEntity getAirlineStatic(@Param(value = "arrIata") String arrIata, @Param(value = "depIata") String depIata);
}
package com.foc.entity;
import lombok.Data;
/**
* @author LEGION
*/
@Data
public class Dynamics {
/**
* 航班日期
*/
private String datopChn;
/**
* 计划起飞时间(北京时间)
*/
private String stdChn;
/**
* 计划到达时间(北京时间)
*/
private String staChn;
/**
* 起飞机场三字码
*/
private String depStn;
/**
* 到达机场三字码
*/
private String arrStn;
/**
* 航班号
*/
private String flightNo;
/**
* 航班类型
*/
private String stc;
}
......@@ -17,5 +17,21 @@ public class StatisticalEntity {
private String updateTime;
private String airlineJson;
private Integer delFlag;
/**
* 航班日期
*/
private String datopChn;
/**
* 计划起飞时间(北京时间)
*/
private String stdChn;
/**
* 计划到达时间(北京时间)
*/
private String staChn;
/**
* 航班号
*/
private String flightNo;
}
......@@ -3,6 +3,7 @@ package com.foc.service;
import com.alibaba.fastjson.JSON;
import com.foc.dao.StatisticalDao;
import com.foc.entity.AcType;
import com.foc.entity.Dynamics;
import com.foc.entity.StatisticalEntity;
import com.foc.util.DateUtils;
import com.foc.util.PropertiesUtils;
......@@ -17,10 +18,7 @@ import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.*;
/**
* @author LEGION
......@@ -45,6 +43,16 @@ public class DynamicFlightService {
}
}
/**
* 备份明日航班动态数据 std-chn,sta-chn,航班号、起飞机场三字码、目的机场三字码字段
*/
public static void backupDynamicsTomorrow() {
StatisticalDao dao = session.getMapper(StatisticalDao.class);
List<Dynamics> dynamicsList = dao.getDynamicsList(DateUtils.getTomorrow());
dao.addDynamicsList(dynamicsList);
session.commit();
}
public static void sta() {
//从配置文件中获取需要统计的大机型
Properties properties = PropertiesUtils.getProperties();
......@@ -56,20 +64,39 @@ public class DynamicFlightService {
//总机型集合
List<String> verifyAcTypes = Arrays.asList(verifyAcType.split(","));
StatisticalDao dao = session.getMapper(StatisticalDao.class);
//获取航班动态表中所有航班性质为J,状态不为CNL,机型为319/A320,321,320neo,330的航线的最后一班时间
//获取航班动态表中所有航班性质为A,J,G,状态不为CNL,子机型为319/A320,321,320neo,330的航线的最后一班时间
String date = DateUtils.getLastDate();
List<StatisticalEntity> list = dao.getFlightList(date);
List<StatisticalEntity> slist = new ArrayList<>();
//根据论证机型获取机型下的子机型
List<String> acTypes = dao.getLacTypesByVerifyAcTypes(verifyAcTypes);
list.forEach(e -> {
//获取该航线所有论证机型(319/A320,321,320neo,330)的最后执行时间(实际起飞时间)
String lastDate = dao.getFlightByDepAndArr(e, acTypes, date);
StatisticalEntity entity = new StatisticalEntity();
//根据航线查询航班执行监控数据
StatisticalEntity entity = dao.getAirlineStatic(e.getArrIata(), e.getDepIata());
//将机型数据放入到map中,机型为key,机型最后飞行时间为value
Map<String, String> map = new HashMap<>();
boolean update = false;
if (Objects.isNull(entity)) {
entity = new StatisticalEntity();
} else {
String json = entity.getAirlineJson();
List<AcType> acTypeList = JSON.parseArray(json, AcType.class);
for (AcType acType : acTypeList) {
map.put(acType.getType(), acType.getLastTime());
}
}
entity.setArrIata(e.getArrIata());
entity.setArrIataName(e.getArrIataName());
entity.setDepIata(e.getDepIata());
entity.setDepIataName(e.getDepIataName());
entity.setLastAirlineTime(lastDate);
//从备份表中查询是否有该航班,如果有,更新最后执行时间
String backupDate = dao.getFromBackUp(entity);
if (!StringUtils.isEmpty(backupDate)) {
entity.setLastAirlineTime(lastDate);
update = true;
}
List<AcType> acTypeList = new ArrayList<>();
//遍历论证机型查询对应小机型
for (String str : verifyAcTypes) {
......@@ -82,25 +109,30 @@ public class DynamicFlightService {
}
/**获取该航线特定机型下的最后执行时间
1.如果有航班动态时间(实际起飞时间):
状态显示动态日期(status=1)
判断是否论证,没有(status=3),有(status=1)
2. 如果没有航班动态时间:
(1)有论证记录(查询开航指令集中的航班性质为正班,且申请单类型为:新开重开国内国际)
(1)有论证记录(查询开航指令集中的航班性质为正班包机加班,且申请单类型为:新开重开国内国际)
状态可用(status=2)
(2)没有论证,状态不可用(status=3)
*/
String acTypeLastTime = dao.getFlightByDepAndArr(e, lacTypes, date);
String verifyDate = dao.getSailingCommand(e, str);
if (StringUtils.isEmpty(acTypeLastTime)) {
//判断是否有论证
String verifyDate = dao.getSailingCommand(e, str);
//判断是否有论证,判断范围在verify_type为(01,02,03,04),flight_type为(01正班,02加班,03包机,对应前边航班动态中航班类型为J,G,A)
if (StringUtils.isEmpty(verifyDate)) {
acType.setStatus("3");
} else {
acType.setStatus("2");
}
} else {
//如果机型最后执行时间和航班最后执行时间相等,则说明该机型执行了最后航班,根据update标识决定是否要更新
if (acTypeLastTime.equals(lastDate) && update) {
acType.setLastTime(acTypeLastTime);
} else {
acType.setLastTime(map.get(str));
}
acType.setStatus("1");
acType.setLastTime(acTypeLastTime);
}
acTypeList.add(acType);
}
......@@ -111,5 +143,6 @@ public class DynamicFlightService {
});
dao.insertOrUpdateBatch(slist);
session.commit();
session.close();
}
}
......@@ -38,6 +38,32 @@ public class DateUtils {
return time;
}
public static String getTomorrow() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date d = cal.getTime();
SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd");
String time = sp.format(d);
return time;
}
public static String getTomorrowDate() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date d = cal.getTime();
String time = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(d);
return time;
}
public static String getAfterTomorrowDate() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 2);
Date d = cal.getTime();
String time = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(d);
return time;
}
public static boolean compareTime(String time1, String time2) {
SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = null;
......@@ -85,9 +111,7 @@ public class DateUtils {
}
public static void main(String[] args) {
LocalDate startDate = LocalDate.now();
LocalDate endDate = LocalDate.now().plusDays(2);
List<LocalDate> list = getDatesBetween(startDate, endDate);
System.out.println(list);
System.out.println(getTomorrow());
System.out.println(getAfterTomorrowDate());
}
}
......@@ -4,6 +4,10 @@
<select id="getFlightList" resultType="com.foc.entity.StatisticalEntity">
SELECT
d.datop_chn,
d.std_chn,
d.sta_chn,
d.flight_no,
d.dep_stn AS depIata,
a.city_name AS depIataName,
d.arr_stn AS arrIata,
......@@ -13,7 +17,7 @@
LEFT JOIN foc_airports a ON d.dep_stn = a.airport_iata
LEFT JOIN foc_airports fa ON d.arr_stn = fa.airport_iata
WHERE
d.`stc` = 'J'
(d.`stc` = 'J' or d.`stc` = 'A' or d.`stc` = 'G')
AND d.`status`!='CNL'
AND d.`atd_chn` &lt;= #{date}
GROUP BY
......@@ -23,10 +27,10 @@
<select id="getFlightByDepAndArr" resultType="string">
SELECT
DATE_FORMAT(atd_chn,'%Y/%m/%d') as lastAirlineTime
DATE_FORMAT(std_chn,'%Y/%m/%d') as lastAirlineTime
from foc_flight_dynamics
where dep_stn=#{entity.depIata} and arr_stn=#{entity.arrIata}
AND `stc` = 'J'
AND (`stc` = 'J' or `stc` = 'A' or `stc` = 'G')
AND `status`!='CNL'
AND `atd_chn` &lt;= #{date}
and ac_type in
......@@ -70,7 +74,8 @@
from foc_sailing_command sc
left join foc_airline_verify a on a.id = sc.verif_id
left join foc_aircraft_type b on a.aircraft_type = b.id
where a.verif_type in ('01','02','03','04') AND a.del_flag = 0 AND a.flight_type='01'
where a.verif_type in ('01','02','03','04') AND a.del_flag = 0 AND (a.flight_type='01' or a.flight_type='02' or
a.flight_type='03')
and a.depIata=#{entity.depIata} and a.arrIata=#{entity.arrIata} and b.del_flag=0
<choose>
<when test="verifyAcType=='A319/A320'">
......@@ -150,4 +155,49 @@
, update_date = values(update_date)
</insert>
<select id="getDynamicsList" resultType="com.foc.entity.Dynamics">
select datop_chn,dep_stn,arr_stn,std_chn,sta_chn,flight_no,stc
from foc_flight_dynamics
where datop_chn=#{date}
and (stc='A' or stc='J' or stc='G')
</select>
<insert id="addDynamicsList" parameterType="com.foc.entity.Dynamics">
insert into foc_flight_dynamics_backup
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.datopChn},
#{item.depStn},
#{item.arrStn},
#{item.stdChn},
#{item.staChn},
#{item.flightNo},
#{item.stc}
)
</foreach>
ON DUPLICATE KEY UPDATE
datop_chn = values(datop_chn)
, dep_stn = values(dep_stn)
, arr_stn = values(arr_stn)
, std_chn = values(std_chn)
, sta_chn = values(sta_chn)
, flight_no = values(flight_no)
, stc = values(stc)
</insert>
<select id="getFromBackUp" parameterType="com.foc.entity.StatisticalEntity" resultType="string">
select datop_chn
from foc_flight_dynamics_backup
where flight_no=#{flightNo}
and sta_chn=#{staChn}
and std_chn=#{stdChn}
and arr_stn=#{arrIata}
and dep_stn=#{depIata}
</select>
<select id="getAirlineStatic" resultType="com.foc.entity.StatisticalEntity">
select * from foc_airline_sta where dep_iata=#{depIata} and arr_iata=#{arrIata} and del_flag=0
</select>
</mapper>
\ No newline at end of file
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