diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/PSDTHandler.java b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/PSDTHandler.java
index 7a0358f3..4ea8bf7c 100644
--- a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/PSDTHandler.java
+++ b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/PSDTHandler.java
@@ -1,11 +1,13 @@
package com.gzzn.omms.msgexchangeapi.msghandler.flop;
+import java.math.BigInteger;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
import com.gzzn.omms.msgexchangeapi.basicdata.entity.OrmsStand;
import com.gzzn.omms.msgexchangeapi.basicdata.manager.OrmsStandAirbridgeManager;
@@ -34,6 +36,7 @@ public class PSDTHandler extends FlopBaseHandler {
return fltr;
}
+
//先保存当前航班机位数据
if(!CollectionUtils.isEmpty(fltr.getPSDT()))
{
@@ -43,37 +46,74 @@ public class PSDTHandler extends FlopBaseHandler {
//更新计划机位
fltr.getPSDT().clear(); //清空旧数据
- for(OPTSTANDDATA optStandata : flop.getPSDT() )
+
+ //
+ if(!isClearPsdtMsg(flop.getPSDT()) )
{
- STANDDATA standata = new STANDDATA();
- BeanUtils.copyProperties(optStandata, standata);
-
- fltr.getPSDT().add(standata);
- }
+ for(OPTSTANDDATA optStandata : flop.getPSDT() )
+ {
+ STANDDATA standata = new STANDDATA();
+ BeanUtils.copyProperties(optStandata, standata);
+
+ fltr.getPSDT().add(standata);
+ }
+ } //end if
+
//更新登机桥信息
return updateAbg(fltr,flop.getPSDT());
}
+
+ /**
+ * 判断是否清空计划机位事件,内容为空的情况,
+ * @param flop 航班事件
+ * @return true 清空计划航班事件 ,false 非清空计划航班事件
+ */
+ private Boolean isClearPsdtMsg(List lsOptstanddata)
+ {
+ return (
+ lsOptstanddata.size() == 1
+ && lsOptstanddata.get(0).getPSNO().equals(new BigInteger("0"))
+ && StringUtils.isEmpty(lsOptstanddata.get(0).getPSST())
+ );
+ }
+
+
/**
* 判断计划机位是否相等
* @param psdt 原机位信息
* @param optPsdt 新机位信息
- * @return
+ * @return true 相同,false 不相同
*/
private Boolean isTheSamePSDT(List psdt ,List optPsdt)
{
+ //特殊处理清空航班事件
+ if(
+ isClearPsdtMsg(optPsdt)
+ &&
+ CollectionUtils.isEmpty(psdt)
+ )
+ {
+ return true;//当前为清除机位信息,同时当前机位信息为空
+ }
+
+ //不相等,必然不同
+ if (psdt.size() != optPsdt.size()) {
+ return false;
+ }
+
psdt.sort((node1,node2)-> node1.getPSST().compareTo(node2.getPSST()));
optPsdt.sort((node1,node2)-> node1.getPSST().compareTo(node2.getPSST()));
//生成序列比较是否相等
- StringBuffer strPsdt = new StringBuffer();
+ StringBuilder strPsdt = new StringBuilder();
psdt.forEach(node->{
strPsdt.append(node.getPSST());
strPsdt.append(",");
});
- StringBuffer strOptPsdt = new StringBuffer();
+ StringBuilder strOptPsdt = new StringBuilder();
optPsdt.forEach(node->{
strOptPsdt.append(node.getPSST());
strOptPsdt.append(",");
@@ -88,19 +128,25 @@ public class PSDTHandler extends FlopBaseHandler {
*/
private String getPsdtAsStr(List lsStanddata)
{
- //先保存当前航班机位数据
- String lpsdt="";
- for(STANDDATA node : lsStanddata)
+ if(CollectionUtils.isEmpty(lsStanddata))
{
- lpsdt += node.getPSST();
- lpsdt += ",";
- }
- if(lpsdt.endsWith(","))
- {
- lpsdt = lpsdt.substring(0, lpsdt.length() - 1);
+ return "";
}
- return lpsdt;
+
+ //先保存当前航班机位数据
+ StringBuilder lpsdt= new StringBuilder();
+ for(STANDDATA node : lsStanddata)
+ {
+ lpsdt.append(node.getPSST());
+ lpsdt.append(",");
+ }
+ if(lpsdt.toString().endsWith(","))
+ {
+ lpsdt.deleteCharAt(lpsdt.length()-1);
+ }
+
+ return lpsdt.toString();
}//end function
/**
@@ -110,51 +156,66 @@ public class PSDTHandler extends FlopBaseHandler {
*/
private SCHD.FLTR updateAbg(SCHD.FLTR fltr,List lsOptstanddata)
{
- for(OPTSTANDDATA optStandata : lsOptstanddata ) {
- STANDDATA standata = new STANDDATA();
- BeanUtils.copyProperties(optStandata, standata);
-
- try {
- //获取机位
- OrmsStand ormsStand = OrmsStandManager
- .getInstance()
- .getOrmsStandByStandCode(standata.getPSST());
- if(null == ormsStand)
- {
- logger.error("机位:{},基础数据获取失败",standata.getPSST());
- continue;
- }
-
- //获取机位对应的登机桥
- if("near".equalsIgnoreCase(ormsStand.getStandType()) == false)
- {
- //远机位,清空登机桥信息
- fltr.setAbdg("");
- }
-
- //近机位处理
- String standCode = standata.getPSST();//登机桥
-
-
- List lsBridge = OrmsStandAirbridgeManager
- .getInstance()
- .getAirbridgeCodeByStandCodeCode(standCode);
- //
- StringBuffer abdgBuffer = new StringBuffer();
- lsBridge.forEach(node->{
- abdgBuffer.append(node);
- abdgBuffer.append(",");
- });
- if(abdgBuffer.toString().endsWith(","))
- {
- abdgBuffer.deleteCharAt(abdgBuffer.length() - 1);
- }
-
- fltr.setAbdg(abdgBuffer.toString());//登机桥叠加
- } catch (Exception e) {
- logger.error("获取登机桥信息失败,msg:{},trace:{}",e.getMessage(),e);
+ //清空计划机位事件,同时清除登机桥信息
+ if (isClearPsdtMsg(lsOptstanddata)) {
+ fltr.setAbdg("");
+ return fltr;
+ }
+
+
+ //多个机位信息,取最后一个机位的登机桥信息
+ if (CollectionUtils.isEmpty(lsOptstanddata)) {
+ return fltr;
+ }//end if
+
+
+
+ OPTSTANDDATA optStandata = lsOptstanddata.get(lsOptstanddata.size() - 1);
+ STANDDATA standata = new STANDDATA();
+ BeanUtils.copyProperties(optStandata, standata);
+
+
+ //获取机位
+ OrmsStand ormsStand = OrmsStandManager
+ .getInstance()
+ .getOrmsStandByStandCode(standata.getPSST());
+ if(null == ormsStand)
+ {
+ logger.error("机位:{},基础数据获取失败",standata.getPSST());
+ return fltr;
+ }
+
+ //远机位,清空登机桥信息
+ if("near".equalsIgnoreCase(ormsStand.getStandType()) == false)
+ {
+ fltr.setAbdg("");
+ return fltr;
+ }
+
+
+ //近机位,获取登机桥
+ String standCode = standata.getPSST();//登机桥
+
+ try {
+ List lsBridge = OrmsStandAirbridgeManager
+ .getInstance()
+ .getAirbridgeCodeByStandCodeCode(standCode);
+ //
+ StringBuilder abdgBuffer = new StringBuilder();
+ lsBridge.forEach(node->{
+ abdgBuffer.append(node);
+ abdgBuffer.append(",");
+ });
+ if(abdgBuffer.toString().endsWith(","))
+ {
+ abdgBuffer.deleteCharAt(abdgBuffer.length() - 1);
}
- }//end for
+
+ fltr.setAbdg(abdgBuffer.toString());//登机桥叠加
+ return fltr;
+ } catch (Exception e) {
+ logger.error("msg:{},trace:{}",e.getMessage(),e);
+ }
return fltr;
} //end function