From f091643d2ff143757271efdb2d815781060337d6 Mon Sep 17 00:00:00 2001 From: zhouxiunai <154707516@qq.com> Date: Tue, 7 May 2019 18:27:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=99=BB=E6=9C=BA=E9=97=A8?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=EF=BC=9A1.=20=E6=B8=85=E7=A9=BA=E7=99=BB?= =?UTF-8?q?=E6=9C=BA=E9=97=A8=E4=BA=8B=E4=BB=B6=E5=A4=84=E7=90=86=202.=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A7=E7=99=BB=E6=9C=BA=E9=97=A8=E5=88=B0?= =?UTF-8?q?lgtdt=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../msghandler/flop/GTDTHandler.java | 113 +++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/GTDTHandler.java b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/GTDTHandler.java index b162e2cd..3a9b4825 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/GTDTHandler.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/GTDTHandler.java @@ -1,8 +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.entity.msg.FLOP; import com.gzzn.omms.msgexchangeapi.entity.msg.GATEDATA; @@ -22,14 +27,120 @@ public class GTDTHandler extends FlopBaseHandler { @Override protected SCHD.FLTR updateFltr(FLOP flop,SCHD.FLTR fltr) { + //相同直接返回 + if(isTheSameGtdt(fltr.getGTDT(),flop.getGTDT())) + { + return fltr; + } + + + //先保存当前航班机位数据 + if(!CollectionUtils.isEmpty(fltr.getGTDT())) + { + fltr.setLgtdt(getGtdtAsStr(fltr.getGTDT())); + } + fltr.getGTDT().clear(); //清空旧数据 + + //清空登机门事件,直接返回 + if (isClearGtdtMsg(flop.getGTDT())) { + return fltr; + } + + //更新登记门信息 for(OPTGATEDATA optgatedata : flop.getGTDT() ) { GATEDATA gatedata = new GATEDATA(); BeanUtils.copyProperties(optgatedata, gatedata); fltr.getGTDT().add(gatedata); - } //添加新数据 + } return fltr; } + + /** + * 判断当前的登机门信息和要设置的登记门信息是否一致 + * @param lsGatedata 当前登记门信息 + * @param lsOptgatedata 要设置成的登记门信息 + * @return true ,false + */ + private Boolean isTheSameGtdt(List lsGatedata,List lsOptgatedata) + { + //特殊处理清空航班事件 + if( + isClearGtdtMsg(lsOptgatedata) + && + CollectionUtils.isEmpty(lsGatedata) + ) + { + return true;//当前为清除机位信息,同时当前登机门信息为空 + } + + //不相等,必然不同 + if (lsGatedata.size() != lsOptgatedata.size()) { + return false; + } + + //生成序列比较是否相等 + lsGatedata.sort((node1,node2)-> node1.getGATE().compareTo(node2.getGATE())); + lsOptgatedata.sort((node1,node2)-> node1.getGATE().compareTo(node2.getGATE())); + + + StringBuilder strGtdt = new StringBuilder(); + lsGatedata.forEach(node->{ + strGtdt.append(node.getGATE()); + strGtdt.append(","); + }); + + StringBuilder strOptGtdt = new StringBuilder(); + lsOptgatedata.forEach(node->{ + strOptGtdt.append(node.getGATE()); + strOptGtdt.append(","); + }); + + return strGtdt.toString().equals(strOptGtdt.toString()); + } + + + /** + * 判断是否清空登机门事件,内容为空的情况, + * @param lsOptgatedata 登机门数据列表 + * @return true 清空登机门事件 ,false 非清空登机门事件 + */ + private Boolean isClearGtdtMsg(List lsOptgatedata) + { + return ( + lsOptgatedata.size() == 1 + && lsOptgatedata.get(0).getGTNO().equals(new BigInteger("0")) + && StringUtils.isEmpty(lsOptgatedata.get(0).getGATE()) + ); + } + + + /** + * 将机位信息列表,组织成逗号分隔的字符串 + * @return + */ + private String getGtdtAsStr(List lsGatedata) + { + if(CollectionUtils.isEmpty(lsGatedata)) + { + return ""; + } + + + //先保存当前航班机位数据 + StringBuilder lgtdt= new StringBuilder(); + for(GATEDATA node : lsGatedata) + { + lgtdt.append(node.getGATE()); + lgtdt.append(","); + } + if(lgtdt.toString().endsWith(",")) + { + lgtdt.deleteCharAt(lgtdt.length()-1); + } + + return lgtdt.toString(); + }//end function }