From 98a12111bf1a86f45448e0a31f6e128d84df6e33 Mon Sep 17 00:00:00 2001 From: mrz <17966059@qq.com> Date: Sun, 5 Nov 2017 19:58:04 +0800 Subject: [PATCH] 增加给九州的数据类型CLR类型 --- src/java/com/airport/core/IMFSender.java | 43 ++++++++++++++++++++++++++++++++++++------- src/java/com/airport/dao/impl/DaoImpl.java | 4 ++-- src/java/com/airport/util/parse/IMFXMLMaker.java | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+), 9 deletions(-) create mode 100644 src/java/com/airport/util/parse/IMFXMLMaker.java diff --git a/src/java/com/airport/core/IMFSender.java b/src/java/com/airport/core/IMFSender.java index 6706811..b900b85 100644 --- a/src/java/com/airport/core/IMFSender.java +++ b/src/java/com/airport/core/IMFSender.java @@ -12,6 +12,7 @@ import com.airport.dao.impl.DaoImpl; import com.airport.util.ConfigUtils; import com.airport.util.SystemBean; import com.airport.util.Utils; +import com.airport.util.parse.IMFXMLMaker; import com.airport.util.parse.XMPParse; import com.caac.imf.api.IMFClient; import org.apache.commons.lang.StringUtils; @@ -46,7 +47,7 @@ public class IMFSender extends TimerTask { logger.info("lastFID=" + lastFID + " maxFID=" + maxFID); int is_ok = 0; if (maxFID > lastFID) { - List<MessageBak> list = this.dao.getRecordByFID(lastFID); + List<MessageBak> list = this.dao.getRecordByFID(lastFID); //查询大于[FID]350的报文 Map<Integer, XMLHeader> map = ConfigUtils.XML_HEADER_MAP; Iterator var7 = list.iterator(); @@ -60,17 +61,45 @@ public class IMFSender extends TimerTask { if (m.getContent() != null) { int times = 0; - + //配置文件里面有几个sender 这里循环几次 for(Iterator var10 = map.keySet().iterator(); var10.hasNext(); Thread.sleep((long)ConfigUtils.SEND_MESSAGE_INTERVAL)) { Integer key = (Integer)var10.next(); XMLHeader header = (XMLHeader)map.get(key); logger.info("key=" + key + " value=" + ((XMLHeader)map.get(key)).toString()); logger.info("准备发送数据 FID:" + m.getFid() + " XML.length=:" + m.getContent().length()); - String sendMsg = Utils.searchReplace(m.getContent(), header.getSndr(), "SNDR"); - sendMsg = Utils.searchReplace(sendMsg, header.getType(), "TYPE"); - String stype = tranlateXML(m.getContent()); - sendMsg = Utils.searchReplace(sendMsg, stype, "STYP"); - sendMsg = Utils.searchReplaceSingle(sendMsg, header.getRcvr(), "RCVR"); + + + //初始化最终发布报文内容的存储器 + String sendMsg = ""; + String xmlStr = m.getContent(); +//_____________________________________解析华东的报文------------------------------------------------------------------------------------------- + if (xmlStr.contains("<MessageType>IS1</MessageType>")){ + IMFXMLMaker haiguanXml = new IMFXMLMaker("DCKS",Integer.toString(m.getFid()),"DFME","IS1"); + haiguanXml.setIMFContent(m.getContent()); + sendMsg = haiguanXml.finalXmlStr(); + }else if(xmlStr.contains("<MessageType>ES1</MessageType>") ){ + IMFXMLMaker haiguanXml = new IMFXMLMaker("DCKS",Integer.toString(m.getFid()),"DFME","ES1"); + haiguanXml.setIMFContent(m.getContent()); + sendMsg = haiguanXml.finalXmlStr(); + }else if(xmlStr.contains("<MessageType>CLR</MessageType>")){ + IMFXMLMaker haiguanXml = new IMFXMLMaker("DCKS",Integer.toString(m.getFid()),"DFME","CLR"); + haiguanXml.setIMFContent(m.getContent()); + sendMsg = haiguanXml.finalXmlStr(); + }else if(xmlStr.contains("<MessageType>RSC</MessageType>")){ + IMFXMLMaker haiguanXml = new IMFXMLMaker("DCKS",Integer.toString(m.getFid()),"DFME","RSC"); + haiguanXml.setIMFContent(m.getContent()); + sendMsg = haiguanXml.finalXmlStr(); + } else { +//_____________________________________解析天信达的报文------------------------------------------------------------------------------------------- + sendMsg= Utils.searchReplace(m.getContent(), header.getSndr(), "SNDR"); + sendMsg = Utils.searchReplace(sendMsg, header.getType(), "TYPE"); //替换报文主类型 + + String stype = tranlateXML(m.getContent()); + sendMsg = Utils.searchReplace(sendMsg, stype, "STYP"); + sendMsg = Utils.searchReplaceSingle(sendMsg, header.getRcvr(), "RCVR"); +//_____________________________________解析天信达的报文------------------------------------------------------------------------------------------- + } + if (!"".equals(sendMsg)) { logger.info("开始发送数据 XML:" + sendMsg); String is_send_ok = this.client.sendMSG(sendMsg); diff --git a/src/java/com/airport/dao/impl/DaoImpl.java b/src/java/com/airport/dao/impl/DaoImpl.java index 7b2d363..7a40247 100644 --- a/src/java/com/airport/dao/impl/DaoImpl.java +++ b/src/java/com/airport/dao/impl/DaoImpl.java @@ -112,11 +112,11 @@ public class DaoImpl implements Dao { } public int getMaxFID() { - return this.jdbcTemplate.queryForInt("select max(FID) from MESSAGE_BAK where SNDR='CFPS' OR TYPE='CLR'"); + return this.jdbcTemplate.queryForInt("select max(FID) from MESSAGE_BAK where SNDR='CFPS' OR TYPE='CLR' OR TYPE ='RSC' OR TYPE ='ES1' OR TYPE='IS1'"); } public List<MessageBak> getRecordByFID(int fid) { - String SQL_FMT = "select FID,CONTENT from MESSAGE_BAK where (FID>%s and FID<%s+%s) and (SNDR='CFPS' OR TYPE='CLR') order by FID"; + String SQL_FMT = "select FID,CONTENT from MESSAGE_BAK where (FID>%s and FID<%s+%s) and (SNDR='CFPS' OR TYPE='CLR' OR TYPE ='RSC' OR TYPE ='ES1' OR TYPE='IS1') order by FID"; String sql = String.format(SQL_FMT, fid, fid, ConfigUtils.RECORD_COUNT); logger.info(sql); final LobHandler lobHandler = new DefaultLobHandler(); diff --git a/src/java/com/airport/util/parse/IMFXMLMaker.java b/src/java/com/airport/util/parse/IMFXMLMaker.java new file mode 100644 index 0000000..cf7862c --- /dev/null +++ b/src/java/com/airport/util/parse/IMFXMLMaker.java @@ -0,0 +1,199 @@ +package com.airport.util.parse; +import org.apache.log4j.Logger; +import org.jdom.Document; +import org.jdom.Element; +import org.jdom.JDOMException; +import org.jdom.input.SAXBuilder; +import org.jdom.output.Format; +import org.jdom.output.XMLOutputter; + +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class IMFXMLMaker { + private static final Logger logger = Logger.getLogger(IMFXMLMaker.class); + private Document XmlDocument; + private Element RootElement; + private Element SndrElement; + private Element RcvrElement; + private Element SEQNElement; + private Element TYPEElement; + private Element STYPElement; + + private String XmlStr; + private String SNDR; + private String RCVR; + private String SEQN; + private String TYPE; + private String STYP; + private String IMFContent; + private String IMFXml; + + public String getXmlStr() { + return XmlStr; + } + + public void setXmlStr(String xmlStr) { + XmlStr = xmlStr; + } + + public String getSNDR() { + return SNDR; + } + + public void setSNDR(String SNDR) { + this.SNDR = SNDR; + } + + public String getRCVR() { + return RCVR; + } + + public void setRCVR(String RCVR) { + this.RCVR = RCVR; + } + + public String getSEQN() { + return SEQN; + } + + public void setSEQN(String SEQN) { + this.SEQN = SEQN; + } + + public String getTYPE() { + return TYPE; + } + + public void setTYPE(String TYPE) { + this.TYPE = TYPE; + } + + public String getSTYP() { + return STYP; + } + + public void setSTYP(String STYP) { + this.STYP = STYP; + } + + public String getIMFContent() { + return IMFContent; + } + + public void setIMFContent(String IMFContent) { + this.IMFContent = IMFContent; + } + + public String getIMFXml() { + return IMFXml; + } + + public void setIMFXml(String IMFXml) { + this.IMFXml = IMFXml; + } + + //初始化报文头部节点 + public IMFXMLMaker(String sndr,String seqn,String type,String styp){ + this.SNDR = sndr; + this.SEQN = seqn; + this.TYPE = type; + this.STYP = styp; + + this.XmlDocument = new Document(); + + //跟节点 + this.RootElement = new Element("MSG"); + this.XmlDocument.addContent(this.RootElement); + + //meta节点 + Element MetaElement = new Element("META"); + this.RootElement.addContent(0,MetaElement); + + //meta下的子节点们 + SndrElement = new Element("SNDR"); + RcvrElement = new Element("RCVR"); + SEQNElement = new Element("SEQN"); + Element DDTMElement = new Element("DDTM"); + TYPEElement = new Element("TYPE"); + STYPElement = new Element("STYP"); + + MetaElement.addContent(0,SndrElement); + MetaElement.addContent(1,RcvrElement); + MetaElement.addContent(2,SEQNElement); + MetaElement.addContent(3,DDTMElement); + MetaElement.addContent(4,TYPEElement); + MetaElement.addContent(5,STYPElement); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String dateString = simpleDateFormat.format(new Date()); + DDTMElement.setText(dateString); + + SndrElement.setText(this.SNDR); + SEQNElement.setText(this.SEQN); + TYPEElement.setText(this.TYPE); + STYPElement.setText(this.STYP); + + } + + public String finalXmlStr(){ + + try{ + Document contentDocument = string2Doc(this.IMFContent); + this.RootElement.addContent(1,contentDocument.detachRootElement()); + + String backXml = doc2String(this.XmlDocument); + return backXml; + }catch (Exception e){ + e.printStackTrace(); + return this.SEQN+"error"; + } + + } + + /** + * 字符串转换为DOCUMENT + * + * @param xmlStr 字符串 + * @return doc JDOM的Document + * @throws Exception + */ + public static Document string2Doc(String xmlStr) throws Exception { + java.io.Reader in = new StringReader(xmlStr); + Document doc = (new SAXBuilder()).build(in); + return doc; + } + + /** + * Document转换为字符串 + * + * @param doc DOCUMENT对象 + * @return xmlStr 字符串 + * @throws Exception + */ + public String doc2String(Document doc) throws Exception { + Format format = Format.getPrettyFormat(); + format.setEncoding("UTF-8");// 设置xml文件的字符为UTF-8,解决中文问题 + XMLOutputter xmlout = new XMLOutputter(format); + ByteArrayOutputStream bo = new ByteArrayOutputStream(); + xmlout.output(doc, bo); + return bo.toString(); + } + + /** + * XML转换为Document + * + * @param xmlFilePath XML文件路径 + * @return doc Document对象 + * @throws Exception + */ + public static Document xml2Doc(String xmlFilePath) throws Exception { + File file = new File(xmlFilePath); + return (new SAXBuilder()).build(file); + } + + public void main(String[] args) throws Exception{ + finalXmlStr(); + } +} -- libgit2 0.24.0