Browse Source

:construction: 优化起飞消息,优化航班号变更消息,优化航班动态消息

Twelve615 1 year ago
parent
commit
e6393ffb69

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

@@ -1,6 +1,8 @@
 package org.jeecg.modules.api.imf.msg;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.SpringContextUtils;
@@ -40,53 +42,64 @@ public class DepeImfMsg extends ImfMsgAbstract {
     @Override
     @Transactional
     public void handle() {
-        // 根据起飞时间将机位置为空置,注意起飞时AFID是原FLID
+        // 根据起飞时间将机位置为空置,注意起飞时FLID是原进站的AFID
         String FLID = getStrVal("/MSG/DFLT/FLID");
         //起飞时间 20230619112000
         String FRTT = getStrVal("/MSG/DFLT/FRTT");
         Date date = strToDate(FRTT);
         if (date != null) {
             // 已经起飞
-            LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getFlightAfid, FLID);
-            AdminAircraftPosition adminAircraftPosition = getAdminAircraftPositionService().getOne(adminAircraftPositionLambdaQueryWrapper);
-            if (adminAircraftPosition != null) {
-                log.info("航班已经起飞:{}", adminAircraftPosition);
-                // 设置为空置
-                getAdminAircraftPositionService().dept(adminAircraftPosition.getId());
-                // 设置计划已经起飞
-                AdminDfdlList adminDfdlList = new AdminDfdlList();
-                adminDfdlList.setFfid(FLID);
-                adminDfdlList.setArrival(1);
-                updateAdminDfdl(adminDfdlList);
+            depeHandle(FLID, date);
 
-                //还有改订单状态 删除安检信息
-                LambdaQueryWrapper<AdminOrder> adminOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        }
+    }
 
-                adminOrderLambdaQueryWrapper.eq(AdminOrder::getFlightAfid, FLID);
-                adminOrderLambdaQueryWrapper.ne(AdminOrder::getType, "交接结束");
-                List<AdminOrder> list1 = adminOrderService.list(adminOrderLambdaQueryWrapper);
-                if (list1.size() != 0) {
-                    for (int i = 0; i < list1.size(); i++) {
-                        AdminOrder adminOrder = new AdminOrder();
-                        adminOrder.setId(list1.get(i).getId());
-                        adminOrder.setType("交接结束");
-                        adminOrder.setQifeiTime(date);
-                        adminOrderService.updateById(adminOrder);
-                    }
-                }
-                //删安检
-                LambdaQueryWrapper<AdminSecurityCheck> adminSecurityCheckLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                adminSecurityCheckLambdaQueryWrapper.eq(AdminSecurityCheck::getFlightAfid, FLID);
-                List<AdminSecurityCheck> list = adminSecurityCheckService.list(adminSecurityCheckLambdaQueryWrapper);
-                if (list.size() != 0) {
-                    List<String> ids = list.stream()
-                            .map(AdminSecurityCheck::getId)
-                            .collect(Collectors.toList());
-                    adminSecurityCheckService.removeByIds(ids);
+    public void depeHandle(String FLID, Date date) {
+        LambdaQueryWrapper<AdminDfdlList> adminDfkQueryWrapper = new LambdaQueryWrapper<>();
+        adminDfkQueryWrapper.eq(AdminDfdlList::getAfid, FLID);
+        AdminDfdlList one = getAdminDfdlListService().getOne(adminDfkQueryWrapper);
+        if (one == null) {
+            log.info("计划中没有此航班的起飞航班,afid/flid:{}", FLID);
+            return;
+        }
+        LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getFlightSole, String.valueOf(one.getFlid()));
+        AdminAircraftPosition adminAircraftPosition = getAdminAircraftPositionService().getOne(adminAircraftPositionLambdaQueryWrapper);
+        if (adminAircraftPosition != null) {
+            log.info("航班已经起飞:{}", adminAircraftPosition);
+            // 设置为空置
+            getAdminAircraftPositionService().dept(adminAircraftPosition.getId());
+            // 设置计划已经起飞
+            AdminDfdlList adminDfdlList = new AdminDfdlList();
+            adminDfdlList.setFfid(FLID);
+            adminDfdlList.setArrival(1);
+            updateAdminDfdl(adminDfdlList);
+
+            //还有改订单状态 删除安检信息
+            LambdaQueryWrapper<AdminOrder> adminOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+
+            adminOrderLambdaQueryWrapper.eq(AdminOrder::getFlightSole, adminAircraftPosition.getFlightSole());
+            adminOrderLambdaQueryWrapper.ne(AdminOrder::getType, "交接结束");
+            List<AdminOrder> list1 = adminOrderService.list(adminOrderLambdaQueryWrapper);
+            if (list1.size() != 0) {
+                for (int i = 0; i < list1.size(); i++) {
+                    AdminOrder adminOrder = new AdminOrder();
+                    adminOrder.setId(list1.get(i).getId());
+                    adminOrder.setType("交接结束");
+                    adminOrder.setQifeiTime(date);
+                    adminOrderService.updateById(adminOrder);
                 }
             }
-
+            //删安检
+            LambdaQueryWrapper<AdminSecurityCheck> adminSecurityCheckLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            adminSecurityCheckLambdaQueryWrapper.eq(AdminSecurityCheck::getFlightSole, adminAircraftPosition.getFlightSole());
+            List<AdminSecurityCheck> list = adminSecurityCheckService.list(adminSecurityCheckLambdaQueryWrapper);
+            if (list.size() != 0) {
+                List<String> ids = list.stream()
+                        .map(AdminSecurityCheck::getId)
+                        .collect(Collectors.toList());
+                adminSecurityCheckService.removeByIds(ids);
+            }
         }
     }
 }

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

@@ -52,7 +52,7 @@ public class HbttImfMsg extends ImfMsgAbstract {
                 LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapperWrapper = new LambdaQueryWrapper<>();
                 adminAircraftPositionLambdaQueryWrapperWrapper
                         .eq(AdminAircraftPosition::getFlightSole, oldPlan.getFlid())
-                        .eq(AdminAircraftPosition::getFlightAfid, oldPlan.getAfid())
+                        //.eq(AdminAircraftPosition::getFlightAfid, oldPlan.getAfid())
                         .eq(AdminAircraftPosition::getFlightNum, oldPlan.getAwcd() + "-" + oldPlan.getFlno())
                         .eq(AdminAircraftPosition::getAircraftNum, oldPlan.getCfno())
                 ;

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

@@ -43,6 +43,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
             // 没有的计划
             return;
         }
+        Date now = new Date();
         // 先更新计划时间
         updateAdminDfdlTime(dfdlList);
         if ("A".equals(dfdlList.getFlio())) {
@@ -53,7 +54,6 @@ public class StlsImfMsg extends ImfMsgAbstract {
                 log.error("未获取到机位!(/MSG/DFLT/STLS/STND/CODE)");
                 return;
             }
-            Date now = new Date();
             LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapper = new LambdaQueryWrapper<>();
             adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getAircraftPositionNum, CODE);
             // 通过机位查询到的数据
@@ -106,15 +106,15 @@ public class StlsImfMsg extends ImfMsgAbstract {
                         log.info("此航班【{}】与对应机位所属数据不匹配,进行交换机位数据操作", FLID);
                         //表中有但不是一个机位
                         //给新匹配到的机位上附上信息
-                        codeAircraftPosition.setAircraftNum(flidAircraftPosition.getAircraftNum());
-                        codeAircraftPosition.setType(flidAircraftPosition.getType());
-                        codeAircraftPosition.setDropTime(flidAircraftPosition.getDropTime());
-                        codeAircraftPosition.setFlightNum(flidAircraftPosition.getFlightNum());
-                        codeAircraftPosition.setFlightAfid(flidAircraftPosition.getFlightAfid());
-                        codeAircraftPosition.setFlightSole(FLID);
+                        //codeAircraftPosition.setAircraftNum(flidAircraftPosition.getAircraftNum());
+                        //codeAircraftPosition.setType(flidAircraftPosition.getType());
+                        //codeAircraftPosition.setDropTime(flidAircraftPosition.getDropTime());
+                        //codeAircraftPosition.setFlightNum(flidAircraftPosition.getFlightNum());
+                        //codeAircraftPosition.setFlightAfid(flidAircraftPosition.getFlightAfid());
+                        //codeAircraftPosition.setFlightSole(FLID);
                         //清空旧的机位
                         getAdminAircraftPositionService().dept(flidAircraftPosition.getId());
-                        isChangeFlag = true;
+                        //isChangeFlag = true;
                     } else {
                         // 是一个机位
                     }
@@ -175,7 +175,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                                 // 已经到站, 判断是否结束占用
                                 if (isArrival(CODE, now, codeDfdlList)) {
                                     // 需要占用
-                                    if ("空置".equals(codeAircraftPosition.getType())){
+                                    if ("空置".equals(codeAircraftPosition.getType())) {
                                         // 改为占用
                                         log.info("空置状态,改为占用");
                                         setUsePosition(codeAircraftPosition, codeDfdlList, isChangeFlag);
@@ -183,7 +183,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                                     return;
                                 } else {
                                     //不需要占用,先置空,走到此处表明上一条数据没到站,新来的数据也没到站(但是计划里面设置到站了数据异常!),暂时不反回先把新来的数据flid放到机位上
-                                    if ("使用中".equals(codeAircraftPosition.getType())){
+                                    if ("使用中".equals(codeAircraftPosition.getType())) {
                                         // 改为空置
                                         log.info("使用状态改为空置");
                                         getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
@@ -195,7 +195,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                                 // 机位上的航班不需要占用机位就返回
                                 if (!isArrival(CODE, now, codeDfdlList)) {
                                     log.info("不需要占用");
-                                    if ("使用中".equals(codeAircraftPosition.getType())){
+                                    if ("使用中".equals(codeAircraftPosition.getType())) {
                                         log.info("使用状态改为空置");
                                         getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
                                         // 更新机位对应的航班
@@ -207,7 +207,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                                     return;
                                 } else {
                                     log.info("需要占用");
-                                    if ("空置".equals(codeAircraftPosition.getType())){
+                                    if ("空置".equals(codeAircraftPosition.getType())) {
                                         log.info("空置状态,改为占用");
                                         // 改为占用
                                         setUsePosition(codeAircraftPosition, codeDfdlList, isChangeFlag);
@@ -235,16 +235,43 @@ public class StlsImfMsg extends ImfMsgAbstract {
             } else {
                 log.error("未找到对应机位【{}】", CODE);
             }
+        } else if ("D".equals(dfdlList.getFlio())) {
+            // 出站飞机
+            // 判断是否已经离开机位
+            Map map = null;
+            try {
+                map = getStlsDateMap(getXmlStr());
+            } catch (Exception e) {
+                log.error("此出站消息没有时间标签");
+                e.printStackTrace();
+                return;
+            }
+            if (map == null || map.isEmpty()) {
+                return;
+            }
+            Object rend = map.get("REND");
+            if (rend == null) {
+                return;
+            }
+            Date rendDate = strToDate(String.valueOf(rend).replace("null", ""));
+            if (rendDate != null && rendDate.before(now)) {
+                // 离站了
+                DepeImfMsg depeImfMsg = new DepeImfMsg(getXmlStr());
+                depeImfMsg.depeHandle(String.valueOf(dfdlList.getFlid()).replace("null", ""), rendDate);
+            }
+
         }
     }
 
     /**
      * 占用机位
+     *
      * @param codeAircraftPosition
      * @param dfdlList
      * @param isChangeFlag
      */
-    private void setUsePosition(AdminAircraftPosition codeAircraftPosition, AdminDfdlList dfdlList, boolean isChangeFlag) {
+    @Transactional
+    void setUsePosition(AdminAircraftPosition codeAircraftPosition, AdminDfdlList dfdlList, boolean isChangeFlag) {
         // 到站
         codeAircraftPosition.setType("使用中");
         dfdlList.setArrival(1);
@@ -255,6 +282,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
         }
         // 更新机位
         getAdminAircraftPositionService().updateById(codeAircraftPosition);
+        log.info("更新机位:{}", codeAircraftPosition);
         // 更新计划
         updateAdminDfdl(dfdlList);
         // 结束