Browse Source

:construction: 优化起飞消息

Twelve615 1 year ago
parent
commit
ff8ca40597

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

@@ -1,19 +1,14 @@
 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;
 import org.jeecg.modules.admin_aircraft_position.entity.AdminAircraftPosition;
 import org.jeecg.modules.admin_dfdl_list.entity.AdminDfdlList;
-import org.jeecg.modules.admin_dfdl_mq.service.AdminDfdlMqService;
 import org.jeecg.modules.admin_order.entity.AdminOrder;
 import org.jeecg.modules.admin_order.service.IAdminOrderService;
 import org.jeecg.modules.admin_security_check.entity.AdminSecurityCheck;
 import org.jeecg.modules.admin_security_check.service.IAdminSecurityCheckService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
@@ -40,7 +35,6 @@ public class DepeImfMsg extends ImfMsgAbstract {
     }
 
     @Override
-    @Transactional
     public void handle() {
         // 根据起飞时间将机位置为空置,注意起飞时FLID是原进站的AFID
         String FLID = getStrVal("/MSG/DFLT/FLID");
@@ -49,21 +43,39 @@ public class DepeImfMsg extends ImfMsgAbstract {
         Date date = strToDate(FRTT);
         if (date != null) {
             // 已经起飞
-            depeHandle(FLID, date);
+            depeHandleD(FLID, date);
 
         }
     }
 
-    public void depeHandle(String FLID, Date date) {
+    /**
+     * 通过出站飞机查找进站计划删除对应的机位
+     * @param FLID 出站飞机的flid
+     * @param date
+     */
+    @Transactional
+    public void depeHandleD(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;
+            log.info("计划中没有此航班的起飞航班是始发站航班,afid/flid:{}", FLID);
+            depeHandle(Integer.valueOf(FLID),date);
+        } else {
+            log.info("有起飞航班,{}", one);
+            depeHandle(one.getFlid(),date);
         }
+    }
+
+    /**
+     * flid对应机位起飞处理
+     * @param FLID FLID
+     * @param date
+     */
+    @Transactional
+    public void depeHandle(Integer FLID, Date date) {
         LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getFlightSole, String.valueOf(one.getFlid()));
+        adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getFlightSole, String.valueOf(FLID));
         AdminAircraftPosition adminAircraftPosition = getAdminAircraftPositionService().getOne(adminAircraftPositionLambdaQueryWrapper);
         if (adminAircraftPosition != null) {
             log.info("航班已经起飞:{}", adminAircraftPosition);
@@ -71,7 +83,7 @@ public class DepeImfMsg extends ImfMsgAbstract {
             getAdminAircraftPositionService().dept(adminAircraftPosition.getId());
             // 设置计划已经起飞
             AdminDfdlList adminDfdlList = new AdminDfdlList();
-            adminDfdlList.setFfid(FLID);
+            adminDfdlList.setFlid(FLID);
             adminDfdlList.setArrival(1);
             updateAdminDfdl(adminDfdlList);
 

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

@@ -361,6 +361,9 @@ abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
 
     Map getStlsDateMap(ObjectMapper objectMapper, String nodeStr) {
         String gateStr = regStr(STND_REGEX, nodeStr);
+        if (Strings.isNullOrEmpty(gateStr)) {
+            return null;
+        }
         String gateJson = ConversionUtil.xmlToJson(gateStr);
         Map map = null;
         try {
@@ -384,6 +387,10 @@ abstract class ImfMsgAbstract<T extends ImfMsgType> implements ImfMsg {
         if (adminDfdlList == null || adminDfdlList.getFlid() == null) {
             return false;
         }
+        if (adminDfdlList.getRstr() != null) {
+            //有实际开始占用时间
+            adminDfdlList.setArrival(1);
+        }
         log.info("更新计划flid:{},内容{}", adminDfdlList.getFlid(), adminDfdlList);
         boolean b = getAdminDfdlListService().updateById(adminDfdlList);
         if (b) {

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

@@ -46,18 +46,15 @@ public class StlsImfMsg extends ImfMsgAbstract {
         Date now = new Date();
         // 先更新计划时间
         updateAdminDfdlTime(dfdlList);
+        // 机位
+        String CODE = getStrVal("/MSG/DFLT/STLS/STND/CODE");
         if ("A".equals(dfdlList.getFlio())) {
             log.info("进站飞机");
-            // 机位
-            String CODE = getStrVal("/MSG/DFLT/STLS/STND/CODE");
             if (Strings.isNullOrEmpty(CODE)) {
                 log.error("未获取到机位!(/MSG/DFLT/STLS/STND/CODE)");
                 return;
             }
-            LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getAircraftPositionNum, CODE);
-            // 通过机位查询到的数据
-            AdminAircraftPosition codeAircraftPosition = getAdminAircraftPositionService().getOne(adminAircraftPositionLambdaQueryWrapper);
+            AdminAircraftPosition codeAircraftPosition = getApByCode(CODE);
             if (codeAircraftPosition != null) {
                 log.info("查询到相应的机位:{}", CODE);
                 log.info("机位当前信息:{}", codeAircraftPosition);
@@ -76,7 +73,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                     if (stlsDfdlList.getRend() != null) {
                         // 已经出站
                         log.info("出站清空机位");
-                        getAdminAircraftPositionService().dept(FLID);
+                        getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
                         return;
                     } else {
                         log.info("没有出站");
@@ -86,7 +83,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                 //判断是否出站 防止arrival为0但是已经出战
                 if (stlsDfdlList.getRend() != null) {
                     // 已经出站
-                    getAdminAircraftPositionService().dept(FLID);
+                    getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
                     stlsDfdlList.setArrival(1);
                     updateAdminDfdl(stlsDfdlList);
                     log.info("计划中此航班【{}】,已经出站,{}", FLID, stlsDfdlList);
@@ -201,7 +198,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
                                         // 更新机位对应的航班
                                         AdminAircraftPosition adminAircraftPosition = new AdminAircraftPosition();
                                         adminAircraftPosition.setId(codeAircraftPosition.getId());
-                                        adminAircraftPosition.setFlightSole(codeAircraftPosition.getFlightSole());
+                                        adminAircraftPosition.setFlightSole(FLID);
                                         getAdminAircraftPositionService().updateById(adminAircraftPosition);
                                     }
                                     return;
@@ -238,6 +235,7 @@ public class StlsImfMsg extends ImfMsgAbstract {
         } else if ("D".equals(dfdlList.getFlio())) {
             // 出站飞机
             // 判断是否已经离开机位
+            log.info("是出站飞机");
             Map map = null;
             try {
                 map = getStlsDateMap(getXmlStr());
@@ -251,19 +249,69 @@ public class StlsImfMsg extends ImfMsgAbstract {
             }
             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);
-            }
+                log.info("没有实际结束占用时间,判断是否是始发站飞机");
+                // 没有实际结束占用时间
+                Object rstr = map.get("RSTR");
+                if (rstr == null) {
+                    // 没有实际开始占用时间,没占用
+                    log.info("没有实际开始占用时间,不做操作");
+                } else {
+                    log.info("有实际开始占用时间,判断是否有Afid");
+                    // 有实际开始占用时间证明占用了
+                    if (dfdlList.getAfid() == null) {
+                        log.info("没有Afid,是始发站飞机");
+                        // 没有进站的关联id,证明是始发站id
+                        AdminAircraftPosition codeAircraftPosition = getApByCode(CODE);
+                        if (codeAircraftPosition != null) {
+                            log.info("有对应机位,占用机位:{}",CODE);
+                            // 占用机位
+                            setUsePosition(codeAircraftPosition, dfdlList, false);
+                        } else {
+                            log.info("未找到机位:{}",CODE);
+                        }
+                    } else {
+                        log.info("有Afid:{}", dfdlList.getAfid());
+                    }
+                }
+            } else {
+                log.info("有实际结束占用时间");
+                // 有实际结束占用时间
+                if (dfdlList.getAfid() == null) {
+                    // 始发站飞机
+                    Date rendDate = strToDate(String.valueOf(rend).replace("null", ""));
+                    if (rendDate != null && rendDate.before(now)) {
+                        // 离站了
+                        DepeImfMsg depeImfMsg = new DepeImfMsg(getXmlStr());
+                        depeImfMsg.depeHandle(dfdlList.getFlid(), rendDate);
+                    }
+                } else {
+                    Date rendDate = strToDate(String.valueOf(rend).replace("null", ""));
+                    if (rendDate != null && rendDate.before(now)) {
+                        // 离站了
+                        DepeImfMsg depeImfMsg = new DepeImfMsg(getXmlStr());
+                        depeImfMsg.depeHandleD(String.valueOf(dfdlList.getFlid()).replace("null", ""), rendDate);
+                    }
+                }
 
+            }
         }
     }
 
     /**
+     * 通过机位编号获取机位信息
+     *
+     * @param CODE
+     * @return
+     */
+    private AdminAircraftPosition getApByCode(String CODE) {
+        LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getAircraftPositionNum, CODE);
+        // 通过机位查询到的数据
+        AdminAircraftPosition codeAircraftPosition = getAdminAircraftPositionService().getOne(adminAircraftPositionLambdaQueryWrapper);
+        return codeAircraftPosition;
+    }
+
+    /**
      * 占用机位
      *
      * @param codeAircraftPosition

+ 36 - 0
airport/jeecg-boot-module-system/src/test/java/org/jeecg/modules/admin_aircraft_position/service/impl/AdminAircraftPositionServiceImplTest.java

@@ -0,0 +1,36 @@
+package org.jeecg.modules.admin_aircraft_position.service.impl;
+
+import org.jeecg.JeecgSystemApplication;
+import org.jeecg.modules.admin_aircraft_position.service.IAdminAircraftPositionService;
+import org.junit.jupiter.api.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * @author 王葆权
+ * @Title:
+ * @Package org.jeecg.modules.admin_aircraft_position.service.impl
+ * @Description:
+ * @date 2023/7/22 9:42
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeecgSystemApplication.class)
+@SuppressWarnings({"FieldCanBeLocal", "SpringJavaAutowiredMembersInspection"})
+class AdminAircraftPositionServiceImplTest {
+
+    @Autowired
+    IAdminAircraftPositionService adminAircraftPositionService;
+
+    @Test
+    void dept() {
+        adminAircraftPositionService.dept("1677475604918702082");
+    }
+
+    @Test
+    void getAdminAircraftPositionR() {
+    }
+}