diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/Meta.java b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/META.java similarity index 92% rename from src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/Meta.java rename to src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/META.java index 0d4a3a7a..b83c51c1 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/Meta.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/META.java @@ -2,7 +2,7 @@ package com.gzzn.omms.msgexchangeapi.entity.msg; import com.fasterxml.jackson.annotation.JsonProperty; -public class Meta { +public class META { @JsonProperty("SNDR") private String sndr; diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/Msg.java b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/Msg.java index addd9813..8ca7af1f 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/Msg.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/Msg.java @@ -7,13 +7,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class Msg { @JsonProperty("META") - private Meta meta; + private META meta; - public Meta getMeta() { + public META getMeta() { return meta; } - public void setMeta(Meta meta) { + public void setMeta(META meta) { this.meta = meta; } } diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/flop/acft/ACFTMsg.java b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/flop/acft/ACFTMsg.java new file mode 100644 index 00000000..4965f36f --- /dev/null +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/flop/acft/ACFTMsg.java @@ -0,0 +1,32 @@ +/** + * Copyright 2018 bejson.com + */ +package com.gzzn.omms.msgexchangeapi.entity.msg.flop.acft; + +import com.gzzn.omms.msgexchangeapi.entity.msg.META; + +/** + * Auto-generated: 2018-12-04 13:55:4 + * + * @author bejson.com (i@bejson.com) + * @website http://www.bejson.com/java2pojo/ + */ +public class ACFTMsg { + + private META META; + private FLOP FLOP; + public void setMETA(META META) { + this.META = META; + } + public META getMETA() { + return META; + } + + public void setFLOP(FLOP FLOP) { + this.FLOP = FLOP; + } + public FLOP getFLOP() { + return FLOP; + } + +} \ No newline at end of file diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/flop/acft/FLOP.java b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/flop/acft/FLOP.java new file mode 100644 index 00000000..d9c058d5 --- /dev/null +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/flop/acft/FLOP.java @@ -0,0 +1,38 @@ +/** + * Copyright 2018 bejson.com + */ +package com.gzzn.omms.msgexchangeapi.entity.msg.flop.acft; + +/** + * Auto-generated: 2018-12-04 13:55:4 + * + * @author bejson.com (i@bejson.com) + * @website http://www.bejson.com/java2pojo/ + */ +public class FLOP { + + private String FLID; + private String FFID; + private String ACFT; + public void setFLID(String FLID) { + this.FLID = FLID; + } + public String getFLID() { + return FLID; + } + + public void setFFID(String FFID) { + this.FFID = FFID; + } + public String getFFID() { + return FFID; + } + + public void setACFT(String ACFT) { + this.ACFT = ACFT; + } + public String getACFT() { + return ACFT; + } + +} \ No newline at end of file diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/rqfd/RefdMsg.java b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/rqfd/RefdMsg.java index 5b8731b1..df166687 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/rqfd/RefdMsg.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/entity/msg/rqfd/RefdMsg.java @@ -5,7 +5,7 @@ import java.util.Locale; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; -import com.gzzn.omms.msgexchangeapi.entity.msg.Meta; +import com.gzzn.omms.msgexchangeapi.entity.msg.META; import com.gzzn.omms.msgexchangeapi.entity.msg.Msg; import com.gzzn.omms.msgexchangeapi.utils.DateTimeUtil; @@ -17,7 +17,7 @@ public class RefdMsg extends Msg { public RefdMsg() { - Meta meta = new Meta(); + META meta = new META(); meta.setSndr("OMMS"); meta.setSeqn("1"); //消息序号,自增 meta.setDttm(DateTimeUtil.gtFormatStr(new Date(), "yyMMddHHmmss", Locale.CHINA)); diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/HandlerResult.java b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/HandlerResult.java new file mode 100644 index 00000000..ba87e535 --- /dev/null +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/HandlerResult.java @@ -0,0 +1,55 @@ +package com.gzzn.omms.msgexchangeapi.msghandler; + +import java.util.ArrayList; +import java.util.List; + +import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR; + +public class HandlerResult { + private Boolean isSuccess;//是否更新成功 + private List fltrs; //影响的航班动态信息 + + public Boolean getIsSuccess() { + return isSuccess; + } + public void setIsSuccess(Boolean isSuccess) { + this.isSuccess = isSuccess; + } + public List getFltrs() { + return fltrs; + } + public void setFltrs(List fltrs) { + this.fltrs = fltrs; + } + + + public static HandlerResult success(FLTR fltr) + { + HandlerResult handlerResult = new HandlerResult(); + handlerResult.isSuccess = true; + + List fltrs = new ArrayList(); + fltrs.add(fltr); + + handlerResult.fltrs = fltrs; + + return handlerResult; + }//end function + + public static HandlerResult success(List fltrs) + { + HandlerResult handlerResult = new HandlerResult(); + handlerResult.isSuccess = true; + handlerResult.fltrs = fltrs; + + return handlerResult; + }//end function + + public static HandlerResult failure() + { + HandlerResult handlerResult = new HandlerResult(); + handlerResult.isSuccess = false; + + return handlerResult; + }//end function +} diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/IBaseHandler.java b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/IBaseHandler.java new file mode 100644 index 00000000..0b09be17 --- /dev/null +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/IBaseHandler.java @@ -0,0 +1,5 @@ +package com.gzzn.omms.msgexchangeapi.msghandler; + +public interface IBaseHandler { + public HandlerResult run(String msg); +} diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/MsgHandlerDispatcher.java b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/MsgHandlerDispatcher.java index 777ba0b5..4d9c7593 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/MsgHandlerDispatcher.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/MsgHandlerDispatcher.java @@ -8,14 +8,13 @@ import org.springframework.stereotype.Service; import com.gzzn.omms.msgexchangeapi.entity.msg.Msg; import com.gzzn.omms.msgexchangeapi.service.IExchangeService; -import com.gzzn.omms.msgexchangeapi.service.flightInfo.UpdateByCminmsgsResult; @Service public class MsgHandlerDispatcher { @Autowired IExchangeService exchangeService; - public UpdateByCminmsgsResult dispatch(String xmlMsg) + public HandlerResult dispatch(String xmlMsg) { Msg msg = exchangeService.xmlstrToObject(xmlMsg, Msg.class); String type = msg.getMeta().getType(); @@ -26,7 +25,7 @@ public class MsgHandlerDispatcher { Class clazzHandler = Class.forName(getHandlerClassName(type,subType)); Object classObject = clazzHandler.newInstance(); Method runMethod = clazzHandler.getMethod("run", String.class); - UpdateByCminmsgsResult result = (UpdateByCminmsgsResult) runMethod.invoke(classObject, xmlMsg); + HandlerResult result = (HandlerResult) runMethod.invoke(classObject, xmlMsg); return result; } catch (ClassNotFoundException | InstantiationException @@ -50,7 +49,7 @@ public class MsgHandlerDispatcher { StringBuffer buffer = new StringBuffer(); buffer.append("com.gzzn.omms.msgexchangeapi.msghandler" ); buffer.append("."); - buffer.append(type); + buffer.append(type.toLowerCase()); buffer.append("."); buffer.append(subType); buffer.append("Handler"); diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/ACFTHandler.java b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/ACFTHandler.java new file mode 100644 index 00000000..4a511ade --- /dev/null +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/msghandler/flop/ACFTHandler.java @@ -0,0 +1,44 @@ +package com.gzzn.omms.msgexchangeapi.msghandler.flop; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import com.gzzn.omms.msgexchangeapi.entity.msg.flop.acft.ACFTMsg; +import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR; +import com.gzzn.omms.msgexchangeapi.msghandler.HandlerResult; +import com.gzzn.omms.msgexchangeapi.msghandler.IBaseHandler; +import com.gzzn.omms.msgexchangeapi.service.IExchangeService; +import com.gzzn.omms.msgexchangeapi.service.flightInfo.IFlightInfoService; + +public class ACFTHandler implements IBaseHandler { + + private static Logger logger = LoggerFactory.getLogger(ACFTHandler.class); + + @Autowired + IExchangeService exchangeService; + + @Autowired + IFlightInfoService flightInfoService; + + /** + * 处理航班消息,更新航班动态信息 + */ + @Override + public HandlerResult run(String msg) { + ACFTMsg acftMsg = exchangeService.xmlstrToObject(msg, ACFTMsg.class); + FLTR fltr = flightInfoService.getByFlid(acftMsg.getFLOP().getFLID()); + if(null != fltr) + { + fltr.setAcft(acftMsg.getFLOP().getACFT()); + flightInfoService.saveFltr(fltr); + return HandlerResult.success(fltr); + } + else { + //没有该动态航班信息 + logger.warn("没有flid为:{}的消息",acftMsg.getFLOP().getFLID()); + } + + return HandlerResult.failure(); + }//end function +} diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/FlightInfoServiceImpl.java b/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/FlightInfoServiceImpl.java index 8183fc0e..87394b3b 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/FlightInfoServiceImpl.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/FlightInfoServiceImpl.java @@ -1,5 +1,6 @@ package com.gzzn.omms.msgexchangeapi.service.flightInfo; +import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -9,6 +10,7 @@ import org.springframework.stereotype.Service; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.DnldMsg; import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR; +import com.gzzn.omms.msgexchangeapi.msghandler.HandlerResult; import com.gzzn.omms.msgexchangeapi.msghandler.MsgHandlerDispatcher; import com.gzzn.omms.msgexchangeapi.redis.RedisService; import com.gzzn.omms.msgexchangeapi.service.IExchangeService; @@ -52,16 +54,40 @@ public class FlightInfoServiceImpl implements IFlightInfoService { @Override public List updateByCminmsgs(List lsCminmsgs) { + List resultUpdated = new ArrayList();//更新结果 + for (Cminmsg cminmsg : lsCminmsgs) { //更新动态航班消息 String strClobMsg = cminmsg.getCminmsgsClobMsg(); - msgHandlerDispatcher.dispatch(strClobMsg); - - - } - return null; + HandlerResult handlerResult = msgHandlerDispatcher.dispatch(strClobMsg); + UpdateByCminmsgsResult updateResult = null; + if(handlerResult.getIsSuccess()) + { + updateResult = UpdateByCminmsgsResult.success(cminmsg, handlerResult.getFltrs()); + } + else { + updateResult = UpdateByCminmsgsResult.failure(cminmsg); + } + resultUpdated.add(updateResult); + }//end for + + return resultUpdated; }//end function + + @Override + public FLTR getByFlid(String flid) { + FLTR fltr = (FLTR) redisGet(flid); + return fltr; + } + + + @Override + public boolean saveFltr(FLTR fltr) { + return redisSet(fltr); + } + + /** * 重新包装的set * @param fltr diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/IFlightInfoService.java b/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/IFlightInfoService.java index 49e25f91..c4c5f1a4 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/IFlightInfoService.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/IFlightInfoService.java @@ -3,6 +3,7 @@ package com.gzzn.omms.msgexchangeapi.service.flightInfo; import java.util.List; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; +import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR; public interface IFlightInfoService { /** @@ -16,4 +17,16 @@ public interface IFlightInfoService { * @return 返回被更新了的动态航班信息 */ public List updateByCminmsgs(List lsCminmsgs); + + /** + * 通过航班id获取航班动态 + * @param flid + * @return + */ + public FLTR getByFlid(String flid); + + /** + * 保存航班动态信息,新增或更新 + */ + public boolean saveFltr(FLTR fltr); } diff --git a/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/UpdateByCminmsgsResult.java b/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/UpdateByCminmsgsResult.java index 308733cd..99da3533 100644 --- a/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/UpdateByCminmsgsResult.java +++ b/src/main/java/com/gzzn/omms/msgexchangeapi/service/flightInfo/UpdateByCminmsgsResult.java @@ -1,12 +1,68 @@ package com.gzzn.omms.msgexchangeapi.service.flightInfo; +import java.util.ArrayList; import java.util.List; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR; public class UpdateByCminmsgsResult { - Boolean isSuccess;//是否更新成功 - Cminmsg cminmsg; //消息 - List fltrs; //影响的航班动态信息 + private Boolean isSuccess;//是否更新成功 + private Cminmsg cminmsg; //消息 + private List fltrs; //影响的航班动态信息 + + public Boolean getIsSuccess() { + return isSuccess; + } + public void setIsSuccess(Boolean isSuccess) { + this.isSuccess = isSuccess; + } + public Cminmsg getCminmsg() { + return cminmsg; + } + public void setCminmsg(Cminmsg cminmsg) { + this.cminmsg = cminmsg; + } + public List getFltrs() { + return fltrs; + } + public void setFltrs(List fltrs) { + this.fltrs = fltrs; + } + + + public static UpdateByCminmsgsResult success(Cminmsg cminmsg,FLTR fltr) + { + UpdateByCminmsgsResult updateByCminmsgsResult = new UpdateByCminmsgsResult(); + updateByCminmsgsResult.isSuccess = true; + updateByCminmsgsResult.cminmsg = cminmsg; + + List fltrs = new ArrayList(); + fltrs.add(fltr); + + updateByCminmsgsResult.fltrs = fltrs; + + return updateByCminmsgsResult; + }//end function + + public static UpdateByCminmsgsResult success(Cminmsg cminmsg,List fltrs) + { + + UpdateByCminmsgsResult updateByCminmsgsResult = new UpdateByCminmsgsResult(); + updateByCminmsgsResult.isSuccess = true; + updateByCminmsgsResult.cminmsg = cminmsg; + updateByCminmsgsResult.fltrs = fltrs; + + + return updateByCminmsgsResult; + }//end function + + public static UpdateByCminmsgsResult failure(Cminmsg cminmsg) + { + UpdateByCminmsgsResult updateByCminmsgsResult = new UpdateByCminmsgsResult(); + updateByCminmsgsResult.isSuccess = false; + updateByCminmsgsResult.cminmsg = cminmsg; + + return updateByCminmsgsResult; + }//end function }