Browse Source

:lock: 调整矫正逻辑

Twelve615 1 year ago
parent
commit
bf83893462

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

@@ -56,23 +56,24 @@ public class StlsImfMsg extends ImfMsgAbstract {
             Date now = new Date();
             LambdaQueryWrapper<AdminAircraftPosition> adminAircraftPositionLambdaQueryWrapper = new LambdaQueryWrapper<>();
             adminAircraftPositionLambdaQueryWrapper.eq(AdminAircraftPosition::getAircraftPositionNum, CODE);
-            AdminAircraftPosition aircraftPosition = getAdminAircraftPositionService().getOne(adminAircraftPositionLambdaQueryWrapper);
-            if (aircraftPosition != null) {
+            // 通过机位查询到的数据
+            AdminAircraftPosition codeAircraftPosition = getAdminAircraftPositionService().getOne(adminAircraftPositionLambdaQueryWrapper);
+            if (codeAircraftPosition != null) {
                 log.info("查询到相应的机位:{}", CODE);
-                log.info("机位当前信息:{}", aircraftPosition);
+                log.info("机位当前信息:{}", codeAircraftPosition);
                 // 有这个机位
-                AdminDfdlList adminDfdlList = getAdminDfdlListService().getById(FLID);
-                if (adminDfdlList == null) {
+                AdminDfdlList stlsDfdlList = getAdminDfdlListService().getById(FLID);
+                if (stlsDfdlList == null) {
                     // 没有计划
                     log.error("此航班【{}】,没有计划", FLID);
                     return;
                 }
-                log.info("查询到计划内容:{}", adminDfdlList);
-                if (adminDfdlList.getArrival() > 0) {
+                log.info("查询到计划内容:{}", stlsDfdlList);
+                if (stlsDfdlList.getArrival() > 0) {
                     //已经到站
                     log.info("此航班【{}】,已经到站,判断是否出站", FLID);
                     //判断是否出站
-                    if (adminDfdlList.getRend() != null) {
+                    if (stlsDfdlList.getRend() != null) {
                         // 已经出站
                         log.info("出站清空机位");
                         getAdminAircraftPositionService().dept(FLID);
@@ -83,12 +84,12 @@ public class StlsImfMsg extends ImfMsgAbstract {
                     }
                 }
                 //判断是否出站 防止arrival为0但是已经出战
-                if (adminDfdlList.getRend() != null) {
+                if (stlsDfdlList.getRend() != null) {
                     // 已经出站
                     getAdminAircraftPositionService().dept(FLID);
-                    adminDfdlList.setArrival(1);
-                    updateAdminDfdl(adminDfdlList);
-                    log.info("计划中此航班【{}】,已经出站,{}", FLID, adminDfdlList);
+                    stlsDfdlList.setArrival(1);
+                    updateAdminDfdl(stlsDfdlList);
+                    log.info("计划中此航班【{}】,已经出站,{}", FLID, stlsDfdlList);
                     return;
                 }
                 //标识是否交换过数据
@@ -96,21 +97,23 @@ public class StlsImfMsg extends ImfMsgAbstract {
                 //判断是否更换了机位
                 LambdaQueryWrapper<AdminAircraftPosition> aircraftPositionByFlidQueryWrapper = new LambdaQueryWrapper<>();
                 aircraftPositionByFlidQueryWrapper.eq(AdminAircraftPosition::getFlightSole, FLID);
-                AdminAircraftPosition adminAircraftPosition = getAdminAircraftPositionService().getOne(aircraftPositionByFlidQueryWrapper);
-                if (adminAircraftPosition != null) {
+                // 通过flid 查询到的机位
+                AdminAircraftPosition flidAircraftPosition = getAdminAircraftPositionService().getOne(aircraftPositionByFlidQueryWrapper);
+                if (flidAircraftPosition != null) {
                     log.info("此航班【{}】在机位表中被发现", FLID);
                     //FLID匹配到的机位号 和 进来的机位号  不是  一个   换机位  清空原机位信息
-                    if (!adminAircraftPosition.getAircraftPositionNum().equals(CODE)) {
+                    if (!flidAircraftPosition.getAircraftPositionNum().equals(CODE)) {
                         log.info("此航班【{}】与对应机位所属数据不匹配,进行交换机位数据操作", FLID);
                         //表中有但不是一个机位
                         //给新匹配到的机位上附上信息
-                        aircraftPosition.setAircraftNum(adminAircraftPosition.getAircraftNum());
-                        aircraftPosition.setType(adminAircraftPosition.getType());
-                        aircraftPosition.setDropTime(adminAircraftPosition.getDropTime());
-                        aircraftPosition.setFlightNum(adminAircraftPosition.getFlightNum());
-                        aircraftPosition.setFlightAfid(adminAircraftPosition.getFlightAfid());
+                        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(adminAircraftPosition.getId());
+                        getAdminAircraftPositionService().dept(flidAircraftPosition.getId());
                         isChangeFlag = true;
                     } else {
                         // 是一个机位
@@ -122,95 +125,113 @@ public class StlsImfMsg extends ImfMsgAbstract {
                 Object rstr = map.get("RSTR");
 
                 if (rstr != null) {
-                    log.info("判断flid:{}是否已经占用机位", adminDfdlList.getFlid());
+                    log.info("判断flid:{}是否已经占用机位", stlsDfdlList.getFlid());
                     // 有开始占用时间,证明到站了
                     Object rend = map.get("REND");
                     if (rend != null) {
-                        log.info("flid:{},有实际结束占用时间{}", adminDfdlList.getFlid(), String.valueOf(rend).replace("null", ""));
+                        log.info("flid:{},有实际结束占用时间{}", stlsDfdlList.getFlid(), String.valueOf(rend).replace("null", ""));
                         // 有结束占用机位的时间
                         Date rendDate = strToDate(String.valueOf(rend).replace("null", ""));
                         if (rendDate.before(now)) {
-                            log.info("flid:{},有实际结束占用时间{}, 且小于当前时间, 清空机位", adminDfdlList.getFlid(), String.valueOf(rend).replace("null", ""));
+                            log.info("flid:{},有实际结束占用时间{}, 且小于当前时间, 清空机位", stlsDfdlList.getFlid(), String.valueOf(rend).replace("null", ""));
                             //不在占用时间范围内,结束占用机位,清空机位后续不做处理
-                            getAdminAircraftPositionService().dept(aircraftPosition.getId());
-                            adminDfdlList.setArrival(1);
-                            updateAdminDfdl(adminDfdlList);
+                            getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
+                            stlsDfdlList.setArrival(1);
+                            updateAdminDfdl(stlsDfdlList);
                             //结束
                             return;
                         } else {
                             // 在占用时间范围内,到站
-                            log.info("flid:{},有实际结束占用时间{},且大于当前时间", adminDfdlList.getFlid(), rendDate);
+                            log.info("flid:{},有实际结束占用时间{},且大于当前时间", stlsDfdlList.getFlid(), rendDate);
                         }
                     } else {
                         // 没有结束占用时间,到站
-                        log.info("flid:{},没有实际结束占用时间,判断是否有实际开始占用时间", adminDfdlList.getFlid());
+                        log.info("flid:{},没有实际结束占用时间,判断是否有实际开始占用时间", stlsDfdlList.getFlid());
                         // 判断到站时间是否在当前时间之前,避免脏数据
                         Date rstrDate = strToDate(String.valueOf(rstr).replace("null", ""));
                         if (rstrDate != null) {
-                            log.info("flid:{},有实际开始占用时间{},应占用机位", rstrDate, adminDfdlList.getFlid());
-                            // 到站
-                            aircraftPosition.setType("使用中");
-                            adminDfdlList.setArrival(1);
-                            setStlsDate(adminDfdlList);
-                            if (!isChangeFlag) {
-                                log.info("flid:{},copy", adminDfdlList.getFlid());
-                                adminDfdlCopyToAirPosition(adminDfdlList, aircraftPosition);
-                            }
-                            // 更新机位
-                            getAdminAircraftPositionService().updateById(aircraftPosition);
-                            // 更新计划
-                            updateAdminDfdl(adminDfdlList);
-                            // 结束
+                            log.info("flid:{},有实际开始占用时间{},应占用机位", rstrDate, stlsDfdlList.getFlid());
+                            setUsePosition(codeAircraftPosition, stlsDfdlList, isChangeFlag);
                             return;
                         }
                     }
                 } else {
-                    // 没有实际占用时间,设置预计时间
-                    log.info("flid:{},没有实际占用时间", adminDfdlList.getFlid());
+                    // 没有实际占用时间
+                    log.info("flid:{},没有实际占用时间", stlsDfdlList.getFlid());
                 }
 
-                if (adminAircraftPosition == null) {
-                    log.info("此航班【{}】未在机位表中被发现,判断是否有结束时间,有直接占用,没有判断机位上航班【{}】是否结束占用没结束就不占用", FLID, aircraftPosition.getFlightSole());
+                // 走到此处表名stls中的航班没有实际占用,矫正机位上的航班是否占用
+                if (flidAircraftPosition == null) {
+                    log.info("此航班【{}】未在机位表中被发现,判断机位上航班【{}】是否结束占用没结束就不占用", FLID, codeAircraftPosition.getFlightSole());
                     // 在机位表中没有找到航班对应的机位, 判断机位上航班是否结束占用
-                    if (aircraftPosition.getFlightSole() != null && !FLID.equals(aircraftPosition.getFlightSole())) {
+                    if (codeAircraftPosition.getFlightSole() != null && !FLID.equals(codeAircraftPosition.getFlightSole())) {
                         // 不是一个航班,判断谁应该在这段时间占用
-                        //查询机位上航班所在计划中的信息
-                        AdminDfdlList byId = getAdminDfdlListService().getById(aircraftPosition.getFlightSole());
-                        if (byId != null) {
-                            log.info("机位【{}】上的航班flid:{}在计划中", CODE, byId.getFlid());
-                            if (byId.getArrival() > 0) {
-                                log.info("当前机位【{}】的航班到站FLID:{}", CODE, byId.getFlid());
+                        //机位上航班计划
+                        AdminDfdlList codeDfdlList = getAdminDfdlListService().getById(codeAircraftPosition.getFlightSole());
+                        if (codeDfdlList != null) {
+                            log.info("机位【{}】上的航班flid:{}在计划中", CODE, codeDfdlList.getFlid());
+                            if (codeDfdlList.getArrival() > 0) {
+                                log.info("当前机位【{}】的航班到站FLID:{}", CODE, codeDfdlList.getFlid());
                                 // 已经到站, 判断是否结束占用
-                                if (isArrival(CODE, now, byId)) return;
+                                if (isArrival(CODE, now, codeDfdlList)) {
+                                    // 需要占用
+                                    if ("空置".equals(codeAircraftPosition.getType())){
+                                        // 改为占用
+                                        log.info("空置状态,改为占用");
+                                        setUsePosition(codeAircraftPosition, codeDfdlList, isChangeFlag);
+                                    }
+                                    return;
+                                } else {
+                                    //不需要占用,先置空,走到此处表明上一条数据没到站,新来的数据也没到站(但是计划里面设置到站了数据异常!),暂时不反回先把新来的数据flid放到机位上
+                                    if ("使用中".equals(codeAircraftPosition.getType())){
+                                        // 改为空置
+                                        log.info("使用状态改为空置");
+                                        getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
+                                    }
+                                }
                             } else {
-                                log.info("当前机位【{}】的航班未到站FLID:{}", CODE, byId.getFlid());
+                                log.info("当前机位【{}】的航班未到站FLID:{},状态:{}", CODE, codeDfdlList.getFlid(), codeAircraftPosition.getType());
                                 // 机位上的数据未到站
-                                // 不需要占用机位就返回
-                                if (!isArrival(CODE, now, adminDfdlList)) {
+                                // 机位上的航班不需要占用机位就返回
+                                if (!isArrival(CODE, now, codeDfdlList)) {
                                     log.info("不需要占用");
+                                    if ("使用中".equals(codeAircraftPosition.getType())){
+                                        log.info("使用状态改为空置");
+                                        getAdminAircraftPositionService().dept(codeAircraftPosition.getId());
+                                        // 更新机位对应的航班
+                                        AdminAircraftPosition adminAircraftPosition = new AdminAircraftPosition();
+                                        adminAircraftPosition.setId(codeAircraftPosition.getId());
+                                        adminAircraftPosition.setFlightSole(codeAircraftPosition.getFlightSole());
+                                        getAdminAircraftPositionService().updateById(adminAircraftPosition);
+                                    }
                                     return;
                                 } else {
-                                    log.info("需要占用,设置到站值为1");
-                                    adminDfdlList.setArrival(1);
+                                    log.info("需要占用");
+                                    if ("空置".equals(codeAircraftPosition.getType())){
+                                        log.info("空置状态,改为占用");
+                                        // 改为占用
+                                        setUsePosition(codeAircraftPosition, codeDfdlList, isChangeFlag);
+                                    }
+                                    return;
                                 }
                             }
 
                         } else {
-                            log.info("机位【{}】上的航班flid:{}不在计划中", CODE, aircraftPosition.getFlightSole());
+                            log.info("机位【{}】上的航班flid:{}不在计划中", CODE, codeAircraftPosition.getFlightSole());
                             // 没有此计划
-                            log.error("判断机位冲突时发现此航班【{}】,没有计划", adminAircraftPosition.getFlightSole());
+                            log.error("判断机位冲突时发现此航班【{}】,没有计划", flidAircraftPosition.getFlightSole());
                         }
                     }
                 }
 
                 // 更新数据
                 // 更新机位对应的航班
-                aircraftPosition.setFlightSole(FLID);
-                getAdminAircraftPositionService().updateById(aircraftPosition);
+                codeAircraftPosition.setFlightSole(FLID);
+                getAdminAircraftPositionService().updateById(codeAircraftPosition);
                 // 更新计划
-                updateAdminDfdl(adminDfdlList);
-                log.info("最终更新计划数据:{}", adminDfdlList);
-                log.info("最终更新机位数据:{}", aircraftPosition);
+                updateAdminDfdl(stlsDfdlList);
+                log.info("最终更新计划数据:{}", stlsDfdlList);
+                log.info("最终更新机位数据:{}", codeAircraftPosition);
             } else {
                 log.error("未找到对应机位【{}】", CODE);
             }
@@ -218,6 +239,28 @@ public class StlsImfMsg extends ImfMsgAbstract {
     }
 
     /**
+     * 占用机位
+     * @param codeAircraftPosition
+     * @param dfdlList
+     * @param isChangeFlag
+     */
+    private void setUsePosition(AdminAircraftPosition codeAircraftPosition, AdminDfdlList dfdlList, boolean isChangeFlag) {
+        // 到站
+        codeAircraftPosition.setType("使用中");
+        dfdlList.setArrival(1);
+        setStlsDate(dfdlList);
+        if (!isChangeFlag) {
+            log.info("flid:{},copy", dfdlList.getFlid());
+            adminDfdlCopyToAirPosition(dfdlList, codeAircraftPosition);
+        }
+        // 更新机位
+        getAdminAircraftPositionService().updateById(codeAircraftPosition);
+        // 更新计划
+        updateAdminDfdl(dfdlList);
+        // 结束
+    }
+
+    /**
      * 判断已经到站的飞机是否需要占用机位
      * 需要返回 true
      * 不需要返回 false