完成整体航班动态消息处理框架

This commit is contained in:
zhouxiunai
2018-12-04 14:53:50 +08:00
parent 747232bc89
commit 6c19f9ce4b
12 changed files with 286 additions and 18 deletions
@@ -2,7 +2,7 @@ package com.gzzn.omms.msgexchangeapi.entity.msg;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
public class Meta { public class META {
@JsonProperty("SNDR") @JsonProperty("SNDR")
private String sndr; private String sndr;
@@ -7,13 +7,13 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public class Msg { public class Msg {
@JsonProperty("META") @JsonProperty("META")
private Meta meta; private META meta;
public Meta getMeta() { public META getMeta() {
return meta; return meta;
} }
public void setMeta(Meta meta) { public void setMeta(META meta) {
this.meta = meta; this.meta = meta;
} }
} }
@@ -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;
}
}
@@ -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;
}
}
@@ -5,7 +5,7 @@ import java.util.Locale;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; 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.entity.msg.Msg;
import com.gzzn.omms.msgexchangeapi.utils.DateTimeUtil; import com.gzzn.omms.msgexchangeapi.utils.DateTimeUtil;
@@ -17,7 +17,7 @@ public class RefdMsg extends Msg {
public RefdMsg() public RefdMsg()
{ {
Meta meta = new Meta(); META meta = new META();
meta.setSndr("OMMS"); meta.setSndr("OMMS");
meta.setSeqn("1"); //消息序号,自增 meta.setSeqn("1"); //消息序号,自增
meta.setDttm(DateTimeUtil.gtFormatStr(new Date(), "yyMMddHHmmss", Locale.CHINA)); meta.setDttm(DateTimeUtil.gtFormatStr(new Date(), "yyMMddHHmmss", Locale.CHINA));
@@ -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<FLTR> fltrs; //影响的航班动态信息
public Boolean getIsSuccess() {
return isSuccess;
}
public void setIsSuccess(Boolean isSuccess) {
this.isSuccess = isSuccess;
}
public List<FLTR> getFltrs() {
return fltrs;
}
public void setFltrs(List<FLTR> fltrs) {
this.fltrs = fltrs;
}
public static HandlerResult success(FLTR fltr)
{
HandlerResult handlerResult = new HandlerResult();
handlerResult.isSuccess = true;
List<FLTR> fltrs = new ArrayList();
fltrs.add(fltr);
handlerResult.fltrs = fltrs;
return handlerResult;
}//end function
public static HandlerResult success(List<FLTR> 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
}
@@ -0,0 +1,5 @@
package com.gzzn.omms.msgexchangeapi.msghandler;
public interface IBaseHandler {
public HandlerResult run(String msg);
}
@@ -8,14 +8,13 @@ import org.springframework.stereotype.Service;
import com.gzzn.omms.msgexchangeapi.entity.msg.Msg; import com.gzzn.omms.msgexchangeapi.entity.msg.Msg;
import com.gzzn.omms.msgexchangeapi.service.IExchangeService; import com.gzzn.omms.msgexchangeapi.service.IExchangeService;
import com.gzzn.omms.msgexchangeapi.service.flightInfo.UpdateByCminmsgsResult;
@Service @Service
public class MsgHandlerDispatcher { public class MsgHandlerDispatcher {
@Autowired @Autowired
IExchangeService exchangeService; IExchangeService exchangeService;
public UpdateByCminmsgsResult dispatch(String xmlMsg) public HandlerResult dispatch(String xmlMsg)
{ {
Msg msg = exchangeService.xmlstrToObject(xmlMsg, Msg.class); Msg msg = exchangeService.xmlstrToObject(xmlMsg, Msg.class);
String type = msg.getMeta().getType(); String type = msg.getMeta().getType();
@@ -26,7 +25,7 @@ public class MsgHandlerDispatcher {
Class clazzHandler = Class.forName(getHandlerClassName(type,subType)); Class clazzHandler = Class.forName(getHandlerClassName(type,subType));
Object classObject = clazzHandler.newInstance(); Object classObject = clazzHandler.newInstance();
Method runMethod = clazzHandler.getMethod("run", String.class); Method runMethod = clazzHandler.getMethod("run", String.class);
UpdateByCminmsgsResult result = (UpdateByCminmsgsResult) runMethod.invoke(classObject, xmlMsg); HandlerResult result = (HandlerResult) runMethod.invoke(classObject, xmlMsg);
return result; return result;
} catch (ClassNotFoundException } catch (ClassNotFoundException
| InstantiationException | InstantiationException
@@ -50,7 +49,7 @@ public class MsgHandlerDispatcher {
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
buffer.append("com.gzzn.omms.msgexchangeapi.msghandler" ); buffer.append("com.gzzn.omms.msgexchangeapi.msghandler" );
buffer.append("."); buffer.append(".");
buffer.append(type); buffer.append(type.toLowerCase());
buffer.append("."); buffer.append(".");
buffer.append(subType); buffer.append(subType);
buffer.append("Handler"); buffer.append("Handler");
@@ -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
}
@@ -1,5 +1,6 @@
package com.gzzn.omms.msgexchangeapi.service.flightInfo; package com.gzzn.omms.msgexchangeapi.service.flightInfo;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; 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.Cminmsg;
import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.DnldMsg; 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.entity.msg.schd.dnld.FLTR;
import com.gzzn.omms.msgexchangeapi.msghandler.HandlerResult;
import com.gzzn.omms.msgexchangeapi.msghandler.MsgHandlerDispatcher; import com.gzzn.omms.msgexchangeapi.msghandler.MsgHandlerDispatcher;
import com.gzzn.omms.msgexchangeapi.redis.RedisService; import com.gzzn.omms.msgexchangeapi.redis.RedisService;
import com.gzzn.omms.msgexchangeapi.service.IExchangeService; import com.gzzn.omms.msgexchangeapi.service.IExchangeService;
@@ -52,16 +54,40 @@ public class FlightInfoServiceImpl implements IFlightInfoService {
@Override @Override
public List<UpdateByCminmsgsResult> updateByCminmsgs(List<Cminmsg> lsCminmsgs) { public List<UpdateByCminmsgsResult> updateByCminmsgs(List<Cminmsg> lsCminmsgs) {
List<UpdateByCminmsgsResult> resultUpdated = new ArrayList();//更新结果
for (Cminmsg cminmsg : lsCminmsgs) { for (Cminmsg cminmsg : lsCminmsgs) {
//更新动态航班消息 //更新动态航班消息
String strClobMsg = cminmsg.getCminmsgsClobMsg(); String strClobMsg = cminmsg.getCminmsgsClobMsg();
msgHandlerDispatcher.dispatch(strClobMsg); HandlerResult handlerResult = msgHandlerDispatcher.dispatch(strClobMsg);
UpdateByCminmsgsResult updateResult = null;
if(handlerResult.getIsSuccess())
} {
return null; updateResult = UpdateByCminmsgsResult.success(cminmsg, handlerResult.getFltrs());
}
else {
updateResult = UpdateByCminmsgsResult.failure(cminmsg);
}
resultUpdated.add(updateResult);
}//end for
return resultUpdated;
}//end function }//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 * 重新包装的set
* @param fltr * @param fltr
@@ -3,6 +3,7 @@ package com.gzzn.omms.msgexchangeapi.service.flightInfo;
import java.util.List; import java.util.List;
import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg;
import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR;
public interface IFlightInfoService { public interface IFlightInfoService {
/** /**
@@ -16,4 +17,16 @@ public interface IFlightInfoService {
* @return 返回被更新了的动态航班信息 * @return 返回被更新了的动态航班信息
*/ */
public List<UpdateByCminmsgsResult> updateByCminmsgs(List<Cminmsg> lsCminmsgs); public List<UpdateByCminmsgsResult> updateByCminmsgs(List<Cminmsg> lsCminmsgs);
/**
* 通过航班id获取航班动态
* @param flid
* @return
*/
public FLTR getByFlid(String flid);
/**
* 保存航班动态信息,新增或更新
*/
public boolean saveFltr(FLTR fltr);
} }
@@ -1,12 +1,68 @@
package com.gzzn.omms.msgexchangeapi.service.flightInfo; package com.gzzn.omms.msgexchangeapi.service.flightInfo;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.gzzn.omms.msgexchangeapi.entity.Cminmsg; import com.gzzn.omms.msgexchangeapi.entity.Cminmsg;
import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR; import com.gzzn.omms.msgexchangeapi.entity.msg.schd.dnld.FLTR;
public class UpdateByCminmsgsResult { public class UpdateByCminmsgsResult {
Boolean isSuccess;//是否更新成功 private Boolean isSuccess;//是否更新成功
Cminmsg cminmsg; //消息 private Cminmsg cminmsg; //消息
List<FLTR> fltrs; //影响的航班动态信息 private List<FLTR> 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<FLTR> getFltrs() {
return fltrs;
}
public void setFltrs(List<FLTR> fltrs) {
this.fltrs = fltrs;
}
public static UpdateByCminmsgsResult success(Cminmsg cminmsg,FLTR fltr)
{
UpdateByCminmsgsResult updateByCminmsgsResult = new UpdateByCminmsgsResult();
updateByCminmsgsResult.isSuccess = true;
updateByCminmsgsResult.cminmsg = cminmsg;
List<FLTR> fltrs = new ArrayList();
fltrs.add(fltr);
updateByCminmsgsResult.fltrs = fltrs;
return updateByCminmsgsResult;
}//end function
public static UpdateByCminmsgsResult success(Cminmsg cminmsg,List<FLTR> 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
} }