Browse Source

:construction: 机场机位消息定时器解决方案第一版

Twelve615 1 year ago
parent
commit
d88156710d
17 changed files with 294 additions and 33 deletions
  1. 10 3
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_aircraft_position/entity/AdminAircraftPosition.java
  2. 20 0
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/entity/AdminDfdlList.java
  3. 3 0
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/mapper/AdminDfdlListMapper.java
  4. 35 0
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/mapper/xml/AdminDfdlListMapper.xml
  5. 16 0
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/service/IAdminDfdlListService.java
  6. 22 0
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/service/impl/AdminDfdlListServiceImpl.java
  7. 137 0
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/AirportJob.java
  8. 1 1
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/ImfMqListener.java
  9. 6 2
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/ArreImfMsg.java
  10. 3 2
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/CfceImfMsg.java
  11. 14 2
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/DepeImfMsg.java
  12. 7 4
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/DfdeImfMsg.java
  13. 1 1
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/DfdlImfMsg.java
  14. 2 2
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/HbttImfMsg.java
  15. 8 5
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/ImfMsgAbstract.java
  16. 2 1
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/ImfMsgType.java
  17. 7 10
      airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/StlsImfMsg.java

+ 10 - 3
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_aircraft_position/entity/AdminAircraftPosition.java

@@ -4,9 +4,8 @@ import java.io.Serializable;
 import java.io.UnsupportedEncodingException;
 import java.util.Date;
 import java.math.BigDecimal;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -51,6 +50,7 @@ public class AdminAircraftPosition implements Serializable {
 	/**停留飞机号*/
 	@Excel(name = "停留飞机号", width = 15)
     @ApiModelProperty(value = "停留飞机号")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String aircraftNum;
 
     @Excel(name = "落地时间", width = 15)
@@ -61,9 +61,11 @@ public class AdminAircraftPosition implements Serializable {
 	/**航班号*/
 	@Excel(name = "航班号", width = 15)
     @ApiModelProperty(value = "航班号")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String flightNum;
     @Excel(name = "航班唯一编号", width = 15)
     @ApiModelProperty(value = "航班唯一编号")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String flightSole;
 
     @Excel(name = "排序", width = 15)
@@ -91,6 +93,7 @@ public class AdminAircraftPosition implements Serializable {
     private Date updateTime;
 
     @ApiModelProperty(value = "关联航班ID(起飞用)")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String flightAfid;
 
     @ApiModelProperty(value = "预计落地时间")
@@ -108,24 +111,28 @@ public class AdminAircraftPosition implements Serializable {
     @ApiModelProperty(value = "预计开始占用时间")
     @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Date estr;
 
     @Excel(name = "预计结束占用时间", width = 15)
     @ApiModelProperty(value = "预计结束占用时间")
     @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Date eend;
 
     @Excel(name = "实际开始占用时间", width = 15)
     @ApiModelProperty(value = "预计结束占用时间")
     @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Date rstr;
 
     @Excel(name = "实际结束占用时间", width = 15)
     @ApiModelProperty(value = "预计结束占用时间")
     @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private Date rend;
 
 }

+ 20 - 0
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/entity/AdminDfdlList.java

@@ -98,6 +98,26 @@ public class AdminDfdlList {
 	@Excel(name = "是否到达(业务自定义);0:未到达,1:到达", width = 15)
     @ApiModelProperty(value = "是否到达(业务自定义);0:未到达,1:到达")
 	private java.lang.Integer arrival;
+	/**实际到达时间*/
+	@Excel(name = "实际到达时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "实际到达时间")
+	private java.util.Date frlt;
+	/**是否本站起飞;0:未起飞,1:起飞*/
+	@Excel(name = "是否本站起飞;0:未起飞,1:起飞", width = 15)
+	@ApiModelProperty(value = "是否本站起飞;0:未起飞,1:起飞")
+	private java.lang.Integer depe;
+	/**实际到达时间*/
+	@Excel(name = "实际起飞时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "实际起飞时间")
+	private java.util.Date frtt;
+	/**对应机位表admin_aircraft_position.aircraft_position_num*/
+	@Excel(name = "对应机位", width = 15)
+	@ApiModelProperty(value = "对应机位")
+	private java.lang.String positionCode;
 	/**updateTime*/
 	@Excel(name = "updateTime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")

+ 3 - 0
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/mapper/AdminDfdlListMapper.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.admin_dfdl_list.mapper;
 
+import java.util.Date;
 import java.util.List;
 
 import org.apache.ibatis.annotations.Param;
@@ -14,4 +15,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface AdminDfdlListMapper extends BaseMapper<AdminDfdlList> {
 
+    List<AdminDfdlList> queryPermitAirplaneByDate(Date now);
+    List<AdminDfdlList> queryTakeoffAirplaneByDate(Date now);
 }

+ 35 - 0
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/mapper/xml/AdminDfdlListMapper.xml

@@ -2,4 +2,39 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.admin_dfdl_list.mapper.AdminDfdlListMapper">
 
+    <select id="queryPermitAirplaneByDate" parameterType="date" resultType="org.jeecg.modules.admin_dfdl_list.entity.AdminDfdlList">
+        <![CDATA[
+        SELECT *
+        FROM admin_dfdl_list
+        WHERE position_code IS NOT NULL
+        AND position_code != ''
+        AND flio = 'A'
+        AND IFNULL(IFNULL(rstr, estr), DATE_ADD(CURDATE(), INTERVAL 1 DAY)) <= date_format(#{date,jdbcType=TIMESTAMP}, '%Y-%m-%d %H:%i:%s.%f')
+        AND IFNULL(IFNULL(rend, eend), DATE_ADD(CURDATE(), INTERVAL 1 DAY)) >= date_format(#{date,jdbcType=TIMESTAMP}, '%Y-%m-%d %H:%i:%s.%f')
+        GROUP BY cfno, position_code
+        HAVING max(estr)
+        UNION ALL
+        SELECT *
+        FROM admin_dfdl_list
+        WHERE position_code IS NOT NULL
+        AND position_code != ''
+        AND flio = 'D'
+        AND IFNULL(IFNULL(rstr, estr), DATE_ADD(CURDATE(), INTERVAL 1 DAY)) <= date_format(#{date,jdbcType=TIMESTAMP}, '%Y-%m-%d %H:%i:%s.%f')
+        AND IFNULL(IFNULL(rend, eend), DATE_ADD(CURDATE(), INTERVAL 1 DAY)) >= date_format(#{date,jdbcType=TIMESTAMP}, '%Y-%m-%d %H:%i:%s.%f')
+        AND (depe != 1 OR depe IS NULL)
+        AND afid IS NULL
+        GROUP BY cfno, position_code
+        HAVING max(estr)
+            ]]>
+    </select>
+
+    <select id="queryTakeoffAirplaneByDate" parameterType="date" resultType="org.jeecg.modules.admin_dfdl_list.entity.AdminDfdlList">
+        SELECT *
+        FROM admin_dfdl_list
+        WHERE position_code IS NOT NULL
+          AND position_code != ''
+        AND flio = 'D'
+        AND #{date,jdbcType=DATE} date_format(IFNULL(IFNULL(IFNULL(rend, eend),frtt), DATE_ADD(CURDATE(), INTERVAL 1 DAY)), '%Y-%m-%d')
+            AND depe = 1
+    </select>
 </mapper>

+ 16 - 0
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/service/IAdminDfdlListService.java

@@ -3,6 +3,9 @@ package org.jeecg.modules.admin_dfdl_list.service;
 import org.jeecg.modules.admin_dfdl_list.entity.AdminDfdlList;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * @Description: 计划列表
  * @Author: jeecg-boot
@@ -11,4 +14,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IAdminDfdlListService extends IService<AdminDfdlList> {
 
+    /**
+     * 按照时间查询当前停在机位上的飞机
+     * @param now 时间
+     * @return 飞机列表
+     */
+    List<AdminDfdlList> queryPermitAirplaneByDate(Date now);
+
+    /**
+     * 按照日期查询今天应该起飞的飞机
+     * @param now
+     * @return
+     */
+    List<AdminDfdlList> queryTakeoffAirplaneByDate(Date now);
 }

+ 22 - 0
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/admin_dfdl_list/service/impl/AdminDfdlListServiceImpl.java

@@ -3,10 +3,14 @@ package org.jeecg.modules.admin_dfdl_list.service.impl;
 import org.jeecg.modules.admin_dfdl_list.entity.AdminDfdlList;
 import org.jeecg.modules.admin_dfdl_list.mapper.AdminDfdlListMapper;
 import org.jeecg.modules.admin_dfdl_list.service.IAdminDfdlListService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * @Description: 计划列表
  * @Author: jeecg-boot
@@ -16,4 +20,22 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 @Service
 public class AdminDfdlListServiceImpl extends ServiceImpl<AdminDfdlListMapper, AdminDfdlList> implements IAdminDfdlListService {
 
+    @Autowired
+    AdminDfdlListMapper adminDfdlListMapper;
+
+    @Override
+    public List<AdminDfdlList> queryPermitAirplaneByDate(Date now) {
+        if (now == null) {
+            now = new Date();
+        }
+        return adminDfdlListMapper.queryPermitAirplaneByDate(now);
+    }
+
+    @Override
+    public List<AdminDfdlList> queryTakeoffAirplaneByDate(Date now) {
+        if (now == null) {
+            now = new Date();
+        }
+        return adminDfdlListMapper.queryTakeoffAirplaneByDate(now);
+    }
 }

+ 137 - 0
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/AirportJob.java

@@ -0,0 +1,137 @@
+package org.jeecg.modules.api.imf;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.admin_aircraft_position.entity.AdminAircraftPosition;
+import org.jeecg.modules.admin_dfdl_list.entity.AdminDfdlList;
+import org.jeecg.modules.api.imf.msg.ImfMsgAbstract;
+import org.jeecg.modules.api.imf.msg.ImfMsgType;
+import org.jetbrains.annotations.NotNull;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Vector;
+import java.util.stream.Collectors;
+
+/**
+ * @author 王葆权
+ * @Title: 机场定时任务类
+ * @Package org.jeecg.modules.api.imf
+ * @Description: 主要解决消息中实际占用时间预计占用时间提前或者延后或者没有的问题
+ * @date 2023/7/26 10:26
+ */
+@Slf4j
+public class AirportJob extends ImfMsgAbstract implements Job {
+
+    /**
+     * 空的xml消息,禁用来占位排除一些错误
+     */
+    private static String nullMsgXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><MSG><META><SNDR></SNDR><RCVR/><REFE></REFE><SEQN></SEQN><DDTM></DDTM><TYPE></TYPE><STYP></STYP></META><DFLT><FLID></FLID><FFID></FFID><FLTK></FLTK><FATT></FATT><STLS><STND><STNO></STNO><CODE></CODE><ESTR></ESTR><EEND></EEND><RSTR></RSTR><REND/><CSSI/><BTSC/></STND></STLS></DFLT></MSG>";
+
+    public AirportJob() {
+        super(nullMsgXml, ImfMsgType.NONE);
+    }
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+        log.debug(">>>>>>>>>>>>>>>>>>>>场机位动态更新定时任务开始>>>>>>>>>>>>>>>>>>>>");
+        handle();
+        log.debug("<<<<<<<<<<<<<<<<<<<<场机位动态更新定时任务结束<<<<<<<<<<<<<<<<<<<<");
+    }
+
+    /**
+     * 处理机位数据
+     * 1.查询当前时间应该占用机位的飞机
+     * 2.缓存三分钟应该起飞的飞机
+     * 3.查询当前机位表的所有飞机对应的任务,移除应该起飞的飞机
+     */
+    @Override
+    protected synchronized void handle() {
+        // 当前时间
+        Date now = new Date();
+        // 机位上所有的数据
+        List<AdminAircraftPosition> positionList = getAdminAircraftPositionService().list();
+        List<AdminAircraftPosition> adminAircraftPositions = Collections.synchronizedList(positionList);
+        if (positionList == null || positionList.isEmpty()) {
+            return;
+        }
+        // 应该占用机位的计划(既有出站又有进站)
+        List<AdminDfdlList> dfdlList = getAdminDfdlListService().queryPermitAirplaneByDate(now);
+        try {
+            log.debug("当前应占用机位航班{}", getObjectMapper().writeValueAsString(dfdlList));
+        } catch (JsonProcessingException e) {
+            log.debug("当前应占用机位航班{}", dfdlList);
+        }
+        List<AdminDfdlList> dfdlPlan = Collections.synchronizedList(dfdlList);
+        // 清空机位
+        for (AdminAircraftPosition position : adminAircraftPositions) {
+            setNullPosition(position);
+            for (AdminDfdlList adminDfdlList : dfdlPlan) {
+                if (position.getAircraftPositionNum().equals(adminDfdlList.getPositionCode())) {
+                    // 机位号相等
+                    adminDfdlCopyToAirPosition(adminDfdlList,position);
+                    position.setType("使用中");
+                }
+            }
+        }
+        boolean b = getAdminAircraftPositionService().updateBatchById(adminAircraftPositions);
+        if (b) {
+            log.info("更新机位成功!");
+        }
+    }
+
+    private void setNullPosition(AdminAircraftPosition adminAircraftPosition) {
+        adminAircraftPosition.setFlightSole(null);
+        adminAircraftPosition.setFlightAfid(null);
+        adminAircraftPosition.setFlightNum(null);
+        adminAircraftPosition.setAircraftNum(null);
+        adminAircraftPosition.setEstr(null);
+        adminAircraftPosition.setEend(null);
+        adminAircraftPosition.setRstr(null);
+        adminAircraftPosition.setRend(null);
+        adminAircraftPosition.setType("空置");
+
+    }
+
+    /**
+     * 获取机位上最终应该展示的飞机列表
+     * @param dfdlList  想要展示的计划列表
+     * @param dfdlDList 需要排除的计划列表
+     * @return
+     */
+    @NotNull
+    private Vector<AdminDfdlList> getPositionDfdlList(List<AdminDfdlList> dfdlList, List<AdminDfdlList> dfdlDList) {
+        Vector<AdminDfdlList> dfdlListVector = new Vector<>();
+        if (dfdlList != null && !dfdlList.isEmpty()) {
+            // 列表是空的直接返回空
+            return dfdlListVector;
+        }
+
+        if (dfdlDList !=null && !dfdlDList.isEmpty()) {
+            // 排除的计划是空的直接返回全部计划
+            dfdlListVector.addAll(dfdlList);
+            return dfdlListVector;
+        }
+        for (AdminDfdlList dFlid : dfdlDList) {
+            for (AdminDfdlList aFdlList : dfdlList) {
+                if ("A".equals(aFdlList.getFlio())) {
+                    // 进站的对比flid
+                    if (dFlid.getFlid().equals(aFdlList.getAfid())) {
+                        dfdlListVector.add(aFdlList);
+                    }
+                } else if ("D".equals(aFdlList.getFlid())) {
+                    // 出站的对比flid
+                    if (dFlid.getFlid().equals(aFdlList.getFlid())) {
+                        dfdlListVector.add(aFdlList);
+                    }
+                }
+
+            }
+        }
+        return dfdlListVector;
+    }
+}

+ 1 - 1
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/ImfMqListener.java

@@ -45,7 +45,7 @@ import java.util.Date;
  * @Description:
  * @date 2023/7/17 11:57
  */
-@Profile("prod")
+@Profile("dev")
 @Slf4j
 @RabbitComponent(value = "ImfMqListener")
 public class ImfMqListener extends BaseRabbiMqHandler<Object> {

+ 6 - 2
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/ArreImfMsg.java

@@ -29,7 +29,11 @@ public class ArreImfMsg extends ImfMsgAbstract {
         // 实际到达时间 20230619112000
         String FRLT = getStrVal("/MSG/DFLT/FRLT");
         Date date = strToDate(FRLT);
-        LambdaQueryWrapper<AdminAircraftPosition> queryWrapper = new LambdaQueryWrapper<>();
+        AdminDfdlList adminDfdlList = getAdminDfdlListService().getById(FLID);
+        adminDfdlList.setArrival(1);
+        adminDfdlList.setFrlt(date);
+        getAdminDfdlListService().updateById(adminDfdlList);
+/*        LambdaQueryWrapper<AdminAircraftPosition> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AdminAircraftPosition::getFlightSole, FLID);
         AdminAircraftPosition adminAircraftPosition = getAdminAircraftPositionService().getOne(queryWrapper);
         if (adminAircraftPosition != null) {
@@ -43,6 +47,6 @@ public class ArreImfMsg extends ImfMsgAbstract {
             adminDfdlList.setArrival(1);
             updateAdminDfdl(adminDfdlList);
             log.info("航班flid:{},到达本站:{}", adminDfdlList.getFlid(), adminDfdlList);
-        }
+        }*/
     }
 }

+ 3 - 2
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/CfceImfMsg.java

@@ -55,11 +55,12 @@ public class CfceImfMsg extends ImfMsgAbstract {
         log.info("航班更换后:{}", entity);
 
         // 查询机位表中是否有此航班 有就更新
-        QueryWrapper<AdminAircraftPosition> aircraftPositionQueryWrapper = new QueryWrapper<>();
+/*        QueryWrapper<AdminAircraftPosition> aircraftPositionQueryWrapper = new QueryWrapper<>();
         aircraftPositionQueryWrapper.eq("flight_sole", flid);
         AdminAircraftPosition one = getAdminAircraftPositionService().getOne(aircraftPositionQueryWrapper);
         if (one != null) {
             adminDfdlCopyToAirPosition(entity, one);
-        }
+            getAdminAircraftPositionService().updateById(one);
+        }*/
     }
 }

+ 14 - 2
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/DepeImfMsg.java

@@ -43,8 +43,20 @@ public class DepeImfMsg extends ImfMsgAbstract {
         Date date = strToDate(FRTT);
         if (date != null) {
             // 已经起飞
-            depeHandleD(FLID, date);
-
+            //depeHandleD(FLID, date);
+            AdminDfdlList byId = getAdminDfdlListService().getById(FLID);
+            if (byId != null) {
+                byId.setFrtt(date);
+                byId.setDepe(1);
+                getAdminDfdlListService().updateById(byId);
+                //判断起飞航班
+                if ("D".equals(byId.getFlio()) && byId.getAfid() != null) {
+                    AdminDfdlList adminDfdlList = new AdminDfdlList();
+                    adminDfdlList.setFlid(byId.getFlid());
+                    adminDfdlList.setDepe(1);
+                    getAdminDfdlListService().updateById(adminDfdlList);
+                }
+            }
         }
     }
 

+ 7 - 4
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/DfdeImfMsg.java

@@ -30,18 +30,21 @@ public class DfdeImfMsg extends ImfMsgAbstract {
             // 信息缺失
             return;
         }
-        log.info("航班已被删除:{}", getAdminDfdlListService().getById(FLID));
-        getAdminDfdlListService().removeById(FLID);
+        AdminDfdlList byId = getAdminDfdlListService().getById(FLID);
+        byId.setDel(1);
+        getAdminDfdlListService().updateById(byId);
+        log.info("航班已被软删除:{}", byId);
+        //getAdminDfdlListService().removeById(FLID);
         // 删除缓存
         if (getRedisUtil().hasKey(ImfMsgType.DFDL.getRedisKey() + FLID)) {
             getRedisUtil().del(ImfMsgType.DFDL.getRedisKey() + FLID);
         }
         // 删除机位
-        LambdaQueryWrapper<AdminAircraftPosition> queryWrapper = new LambdaQueryWrapper<>();
+/*        LambdaQueryWrapper<AdminAircraftPosition> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AdminAircraftPosition::getFlightSole, FLID);
         AdminAircraftPosition one = getAdminAircraftPositionService().getOne(queryWrapper);
         if (one != null) {
             getAdminAircraftPositionService().dept(one.getId());
-        }
+        }*/
     }
 }

+ 1 - 1
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/DfdlImfMsg.java

@@ -83,7 +83,7 @@ public class DfdlImfMsg extends ImfMsgAbstract {
             boolean b = getAdminDfdlListService().saveOrUpdateBatch(dfdlList);
             log.info("添加计划{}", b ? "成功" : "失败");
             //处理机位信息
-            updateAircraftPosition(dfdlList);
+            //updateAircraftPosition(dfdlList);
         }
 
     }

+ 2 - 2
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/HbttImfMsg.java

@@ -49,7 +49,7 @@ public class HbttImfMsg extends ImfMsgAbstract {
                 log.info("航班号变更后:{}", byId);
 
                 // 更新机位表
-                LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapperWrapper = new LambdaQueryWrapper<>();
+/*                LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapperWrapper = new LambdaQueryWrapper<>();
                 adminAircraftPositionLambdaQueryWrapperWrapper
                         .eq(AdminAircraftPosition::getFlightSole, oldPlan.getFlid())
                         //.eq(AdminAircraftPosition::getFlightAfid, oldPlan.getAfid())
@@ -60,7 +60,7 @@ public class HbttImfMsg extends ImfMsgAbstract {
                 if (one != null) {
                     one.setFlightNum(byId.getAwcd() + "-" + byId.getFlno());
                     getAdminAircraftPositionService().updateById(one);
-                }
+                }*/
             }
         }
 

+ 8 - 5
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/ImfMsgAbstract.java

@@ -45,7 +45,7 @@ import java.util.regex.Pattern;
  * @date 2023/7/18 10:07
  */
 @Slf4j
-abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
+public abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
 
     /**
      * 存储mq中发送的dfdl原消息
@@ -95,7 +95,9 @@ abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
 
     public ImfMsgAbstract(String xmlStr, T msgType) {
         setXmlStr(xmlStr);
-        setXmlDocument(xmlStrToDoc(xmlStr));
+        if (!ImfMsgType.NONE.equals(msgType)) {
+            setXmlDocument(xmlStrToDoc(xmlStr));
+        }
         setMsgType(msgType);
         adminDfdlMqService = SpringContextUtils.getBean(AdminDfdlMqService.class);
         adminAircraftPositionService = SpringContextUtils.getBean(IAdminAircraftPositionService.class);
@@ -313,7 +315,7 @@ abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
      * @param adminDfdlList 计划
      * @param airPosition   机位
      */
-    void adminDfdlCopyToAirPosition(AdminDfdlList adminDfdlList, AdminAircraftPosition airPosition) {
+    protected void adminDfdlCopyToAirPosition(AdminDfdlList adminDfdlList, AdminAircraftPosition airPosition) {
         airPosition.setFlightSole(String.valueOf(adminDfdlList.getFlid()).replace("null", ""));
         airPosition.setFlightAfid(String.valueOf(adminDfdlList.getAfid()).replace("null", ""));
         airPosition.setFlightNum(adminDfdlList.getAwcd() + "-" + adminDfdlList.getFlno());
@@ -387,10 +389,11 @@ abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
         if (adminDfdlList == null || adminDfdlList.getFlid() == null) {
             return false;
         }
-        if (adminDfdlList.getRstr() != null) {
+        // 现在由到站消息处理
+/*        if (adminDfdlList.getRstr() != null) {
             //有实际开始占用时间
             adminDfdlList.setArrival(1);
-        }
+        }*/
         log.info("更新计划flid:{},内容{}", adminDfdlList.getFlid(), adminDfdlList);
         boolean b = getAdminDfdlListService().updateById(adminDfdlList);
         if (b) {

+ 2 - 1
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/ImfMsgType.java

@@ -20,7 +20,8 @@ public enum ImfMsgType {
     CFCE("CFCE", "航班更换飞机消息", "CFCE_"),
     DFIE("DFIE", "航班动态增加信息", "DFIE_"),
     DFDE("DFDE", "动态航班删除", "DFDE_"),
-    HBTT("HBTT", "航班号变更消息", "HBTT_");
+    HBTT("HBTT", "航班号变更消息", "HBTT_"),
+    NONE("NONE", "空的消息", "NONE_");
     private final String name;
     private final String description;
     private final String redisKey;

+ 7 - 10
airport/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/imf/msg/StlsImfMsg.java

@@ -27,11 +27,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
     }
 
     /**
-     * 根据动态数据更新机位表中入站和出站的飞机
-     * 需要特殊处理情况:
-     * 1.有实际占用时间且当前时间在预计占用时间范围内直接更新
-     * 2.同一航班不同机位号(机位更换)
-     * 3.同机位不同航班不同占用时间
+     * 暂时只更新计划中的信息其余交给定时器处理
      */
     @Override
     @Transactional
@@ -43,12 +39,13 @@ public class StlsImfMsg extends ImfMsgAbstract {
             // 没有的计划
             return;
         }
-        Date now = new Date();
-        // 先更新计划时间
-        updateAdminDfdlTime(dfdlList);
+        // 计划时间
+        setStlsDate(dfdlList);
         // 机位
         String CODE = getStrVal("/MSG/DFLT/STLS/STND/CODE");
-        if ("A".equals(dfdlList.getFlio())) {
+        dfdlList.setPositionCode(CODE);
+        updateAdminDfdl(dfdlList);
+        /*if ("A".equals(dfdlList.getFlio())) {
             log.info("进站飞机");
             if (Strings.isNullOrEmpty(CODE)) {
                 log.error("未获取到机位!(/MSG/DFLT/STLS/STND/CODE)");
@@ -294,7 +291,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                 }
 
             }
-        }
+        }*/
     }
 
     /**