作者 朱兆平

集成IMF包 基本完成

/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
\ No newline at end of file
... ...
Manifest-Version: 1.0
Class-Path: ribbon-transport-2.3.0.jar spring-boot-starter-tomcat-2.2.
0.BUILD-20181221.162141-59.jar tomcat-embed-core-9.0.14.jar jackson-a
nnotations-2.9.0.jar commons-math-2.2.jar netflix-statistics-0.1.1.ja
r spring-boot-starter-aop-2.2.0.BUILD-20181221.162119-59.jar rxnetty-
0.4.9.jar hystrix-core-1.5.18.jar eureka-client-1.9.8.jar spring-secu
rity-crypto-5.1.3.BUILD-20181227.072951-43.jar ribbon-core-2.3.0.jar
tomcat-embed-websocket-9.0.14.jar spring-webmvc-5.1.4.BUILD-20181226.
140909-39.jar jersey-core-1.19.1.jar spring-jcl-5.1.4.BUILD-20181226.
140909-39.jar servo-core-0.12.21.jar spring-boot-autoconfigure-2.2.0.
BUILD-20181221.162052-59.jar xmlbeans-2.4.0.jar mybatis-spring-boot-s
tarter-1.3.2.jar archaius-core-0.7.6.jar ribbon-loadbalancer-2.3.0.ja
r jettison-1.3.7.jar spring-cloud-starter-netflix-eureka-client-2.1.0
.BUILD-20181228.020430-1172.jar spring-tx-5.1.4.BUILD-20181226.140909
-39.jar commons-configuration-1.8.jar bcprov-jdk15on-1.60.jar jackson
-datatype-jdk8-2.9.8.jar spring-cloud-netflix-ribbon-2.1.0.BUILD-2018
1228.020108-1232.jar jboss-logging-3.3.2.Final.jar spring-cloud-netfl
ix-archaius-2.1.0.BUILD-20181228.020040-1241.jar spring-cloud-starter
-netflix-ribbon-2.1.0.BUILD-20181228.020424-1172.jar spring-beans-5.1
.4.BUILD-20181226.140909-39.jar spring-cloud-starter-2.1.0.BUILD-2018
1227.235921-1180.jar jackson-datatype-jsr310-2.9.8.jar jaxen-1.1.6.ja
r commons-lang-2.6.jar log4j-to-slf4j-2.11.1.jar hibernate-validator-
6.0.13.Final.jar HdrHistogram-2.1.9.jar dom4j-2.1.0.jar gson-2.8.5.ja
r xpp3_min-1.1.4c.jar druid-1.1.9.jar commons-jxpath-1.3.jar xstream-
1.4.10.jar commons-collections-3.2.2.jar spring-cloud-starter-netflix
-archaius-2.1.0.BUILD-20181228.020417-1172.jar stringtemplate-3.2.1.j
ar javax.annotation-api-1.3.2.jar spring-boot-starter-2.2.0.BUILD-201
81221.162144-59.jar spring-web-5.1.4.BUILD-20181226.140909-39.jar com
mons-io-2.6.jar guava-16.0.jar httpcore-4.4.10.jar spring-core-5.1.4.
BUILD-20181226.140909-39.jar HikariCP-3.2.0.jar rxjava-1.3.8.jar jers
ey-apache-client4-1.19.1.jar druid-spring-boot-starter-1.1.9.jar log4
j-1.2.16.jar tomcat-embed-el-9.0.14.jar bcpkix-jdk15on-1.60.jar mybat
is-3.4.6.jar antlr-2.7.7.jar ojdbc6-11.2.0.4.0-atlassian-hosted.jar s
nakeyaml-1.23.jar netflix-commons-util-0.3.0.jar spring-aop-5.1.4.BUI
LD-20181226.140909-39.jar ribbon-2.3.0.jar spring-jdbc-5.1.4.BUILD-20
181226.140909-39.jar jackson-module-parameter-names-2.9.8.jar spring-
cloud-netflix-eureka-client-2.1.0.BUILD-20181228.020404-1172.jar stax
-api-1.0.1.jar spring-cloud-netflix-hystrix-2.1.0.BUILD-20181228.0201
46-564.jar netflix-eventbus-0.3.0.jar jul-to-slf4j-1.7.25.jar javax.i
nject-1.jar spring-boot-starter-logging-2.2.0.BUILD-20181221.162136-5
9.jar stax2-api-3.1.4.jar rxnetty-contexts-0.4.9.jar antlr-runtime-3.
4.jar spring-expression-5.1.4.BUILD-20181226.140909-39.jar jsr311-api
-1.1.1.jar ribbon-eureka-2.3.0.jar compactmap-1.2.1.jar spring-boot-2
.2.0.BUILD-20181221.162149-59.jar commons-codec-1.11.jar log4j-api-2.
11.1.jar spring-cloud-context-2.1.0.BUILD-20181227.235814-1191.jar je
rsey-client-1.19.1.jar rxnetty-servo-0.4.9.jar slf4j-api-1.6.1.jar sp
ring-boot-starter-json-2.2.0.BUILD-20181221.162134-59.jar spring-secu
rity-rsa-1.0.7.RELEASE.jar jackson-databind-2.9.8.jar spring-context-
5.1.4.BUILD-20181226.140909-39.jar httpclient-4.5.6.jar ribbon-httpcl
ient-2.3.0.jar woodstox-core-asl-4.4.1.jar eureka-core-1.9.8.jar logb
ack-core-1.2.3.jar stax-api-1.0-2.jar mybatis-spring-1.3.2.jar dexx-c
ollections-0.2.jar xmlpull-1.1.3.1.jar classmate-1.4.0.jar validation
-api-2.0.1.Final.jar aopalliance-1.0.jar netflix-infix-0.3.0.jar spri
ng-boot-starter-web-2.2.0.BUILD-20181221.162143-59.jar spring-cloud-c
ommons-2.1.0.BUILD-20181227.235904-1180.jar joda-time-2.10.1.jar aspe
ctjweaver-1.9.2.jar jackson-core-2.9.8.jar spring-boot-starter-jdbc-2
.2.0.BUILD-20181221.162131-59.jar IMFClient.1.0.0.jar mybatis-spring-
boot-autoconfigure-1.3.2.jar logback-classic-1.2.3.jar guice-4.1.0.ja
r
Main-Class: com.tianbo.warehouse.WarehouseApplication
... ...
#登录账号
loginname = KKW1
#登录密码
loginpass = KKW1
#发送报文目录,相对程序目录
readDirectory = /Users/mrz/Downloads/3.CV972/1.CV报文
#接收存储报文目录
bakDirectory = xmlFromImf
#IMF MEAT报头配置
RCVR=
TYPE=KAKO
STYP=CARM
\ No newline at end of file
... ...
#log4j=log_api.xml
isneedlog=N
#psip=218.28.199.134
psip=10.50.3.74
psport=7484
encoding=UTF-8
... ...
########Log4j configuration#####################################
log4j.rootLogger=INFO, stdout, fileout
log4j.logger.com.fiscal = INFO
#*******************************
log4j.logger.com.system = INFO
#*******************************
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH:mm:ss,SSSS}[%p] %m%n
#yyyy-MM-dd HH:mm:ss
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=logs/imf.log
log4j.appender.fileout.MaxFileSize=50MB
log4j.appender.fileout.MaxBackupIndex=10
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss,SSSS}[%p] %m%n
... ...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tianbo</groupId>
<artifactId>warehouse</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>warehouse</name>
<description>warehouse for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.BUILD-SNAPSHOT</spring-cloud.version>
</properties>
<dependencies>
<!--spring boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--<exclusions>-->
<!--<exclusion>-->
<!--<groupId>ch.qos.logback</groupId>-->
<!--<artifactId>logback-classic</artifactId>-->
<!--</exclusion>-->
<!--</exclusions>-->
</dependency>
<!--spring boot-->
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4.0-atlassian-hosted</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!--IMF需要的包-->
<!-- https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans -->
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.ws.commons.schema/XmlSchema -->
<dependency>
<groupId>org.apache.ws.commons.schema</groupId>
<artifactId>XmlSchema</artifactId>
<version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/wsdl4j/wsdl4j -->
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.neethi/neethi -->
<dependency>
<groupId>org.apache.neethi</groupId>
<artifactId>neethi</artifactId>
<version>2.0.4</version>
</dependency>
<!-- LOG -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jdk14 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.6.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf.xjcplugins/cxf-xjc-boolean -->
<dependency>
<groupId>org.apache.cxf.xjcplugins</groupId>
<artifactId>cxf-xjc-boolean</artifactId>
<version>3.2.3</version>
</dependency>
<!--添加本地IMF包-->
<dependency>
<groupId>com.caac</groupId>
<artifactId>imf</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/IMFClient.1.0.0.jar</systemPath>
</dependency>
<dependency>
<groupId>com.caac.imf</groupId>
<artifactId>imfmessage</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/imfmsg.jar</systemPath>
</dependency>
<dependency>
<groupId>com.caac.imf</groupId>
<artifactId>process</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ProcessService.jar</systemPath>
</dependency>
<dependency>
<groupId>com.caac.imf</groupId>
<artifactId>apiconfig</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/apiConfig.jar</systemPath>
</dependency>
<dependency>
<groupId>com.caac.imf</groupId>
<artifactId>upload</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/UploadService.jar</systemPath>
</dependency>
<dependency>
<groupId>com.caac.imf</groupId>
<artifactId>heartbeat</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/HeartbeatService.jar</systemPath>
</dependency>
<dependency>
<groupId>com.caac.imf</groupId>
<artifactId>returnxml</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/returnXml.jar</systemPath>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hyperic/sigar -->
<dependency>
<groupId>org.hyperic</groupId>
<artifactId>sigar</artifactId>
<version>1.6.4</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/sigar.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache</groupId>
<artifactId>cxf</artifactId>
<version>2.3.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/cxf-2.3.2.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>xjc</artifactId>
<version>2.3.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/cxf-xjc-bug671-2.3.2.jar</systemPath>
</dependency>
<dependency>
<groupId>maven.org.apache</groupId>
<artifactId>cxf</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/cxf-manifest.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.cxf.xjc</groupId>
<artifactId>dv</artifactId>
<version>2.3.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/cxf-xjc-dv-2.3.2.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.cxf.xjc</groupId>
<artifactId>ts</artifactId>
<version>2.3.2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/cxf-xjc-ts-2.3.2.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.xml</groupId>
<artifactId>xmlsec</artifactId>
<version>1.4.4</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/xmlsec-1.4.4.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.disthub2.impl</groupId>
<artifactId>cl3e</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/CL3Export.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.disthub2.impl</groupId>
<artifactId>cl3ne</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/CL3Nonexport.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>axis2</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.axis2.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>commonservices</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.commonservices.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>defaultconfig</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.defaultconfig.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>fta</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.fta.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>headers</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.headers.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>mq</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>jmqi</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.jmqi.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>jms.nojndi</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.jms.Nojndi.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>pcf</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.pcf.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>postcard</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.postcard.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>soap</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.soap.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>tools.ras</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mq.tools.ras.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>etclient</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mqetclient.jar</systemPath>
</dependency>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>mqjms</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/com.ibm.mqjms.jar</systemPath>
<!-- https://mvnrepository.com/artifact/javax.resource/connector -->
</dependency>
<dependency>
<groupId>javax.resource</groupId>
<artifactId>connector</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/connector.jar</systemPath>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
</project>
... ...
package com.tianbo.warehouse;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
@EnableEurekaClient
public class WarehouseApplication {
public static void main(String[] args) {
SpringApplication.run(WarehouseApplication.class, args);
}
}
... ...
package com.tianbo.warehouse.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/")
public class IndexController {
@GetMapping("index")
public String index(){
return "数据仓库接收,落地报文给新舱单";
}
}
... ...
package com.tianbo.warehouse.imf;
import com.caac.imf.api.IMFClient;
import com.tianbo.warehouse.schedul.IMF_Task;
import com.tianbo.warehouse.util.IO.FileTool;
import org.apache.log4j.Logger;
public class IMF_Reader extends Thread{
protected static final Logger logger = Logger.getLogger(IMF_Reader.class);
private IMFClient client;
public static boolean isrunning;
public IMF_Reader(IMFClient client) {
this.client = client;
}
@Override
public void run() {
try{
isrunning =true;
while(true) {
if (IMF_Task.LOGIN_OK) {
String message = this.client.getMSG();
if (message != null) {
FileTool.writeFileToBak(message);
// IMF_Message_MainHandle mainHandle = new IMF_Message_MainHandle();
// IMF_META meta = mainHandle.messageHandle(message);
}
logger.info("当前线程:"+Thread.currentThread().getName());
} else {
//logger.info("***");
}
try {
Thread.sleep(500L);
} catch (InterruptedException var3) {
var3.printStackTrace();
}
}
}catch (Exception e){
e.printStackTrace();
}
isrunning=false;
logger.info("****************读取线程不在了****************");
}
}
... ...
package com.tianbo.warehouse.imf;
import com.caac.imf.api.IMFClient;
import com.tianbo.warehouse.schedul.IMF_Task;
import com.tianbo.warehouse.util.Date.DateUtil;
import com.tianbo.warehouse.util.IO.FileTool;
import com.tianbo.warehouse.util.XML.MakeImfMeta;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.xml.sax.SAXParseException;
import java.io.File;
import java.util.List;
public class IMF_Sender extends Thread{
protected static final Logger logger = Logger.getLogger(IMF_Sender.class);
public static boolean isrunning;
private IMFClient client;
private String content;
public IMF_Sender(IMFClient client) {
this.client = client;
}
public IMF_Sender(IMFClient client, String content) {
this.client = client;
this.content = content;
}
@Override
public void run(){
try {
String sendDir = FileTool.readProperties("readDirectory");
String SNDR = FileTool.readProperties("loginname");
String TYPE = FileTool.readProperties("TYPE");
String STYP = FileTool.readProperties("STYP");
String RCVR = FileTool.readProperties("RCVR");
String DDTM = DateUtil.getDDTM();
String SEQN = DDTM;
if (this.client == null) {
logger.info("IMFClient has been closed");
return;
}
isrunning=true;
if(IMF_Task.isSuc){
if(IMF_Task.LOGIN_OK){
while (true){
//发送报文
List<File> files = FileTool.readDirectoryFiles(new File(sendDir));
for (File file:files) {
String sendMsg = MakeImfMeta.makeImfDocument(SNDR,RCVR,TYPE,STYP,DDTM,SEQN,file);
String returnMsg = this.client.sendMSG(sendMsg);
//发送成功处理,删除已发送成功的目录下的文件
if(returnMsg.indexOf("<CODE>9</CODE>")>=0){
FileUtils.forceDelete(file);
}
}
try {
Thread.sleep(500L);
} catch (InterruptedException var3) {
var3.printStackTrace();
}
}
}else{
logger.info("<<<<<<<<<<<登陆中>>>>>>>>>>>>");
}
}
}catch (Exception var14) {
var14.printStackTrace();
logger.info(var14.getMessage());
}
isrunning=false;
logger.info("<<<<<<<<<<<发送线程结束>>>>>>>>>>>>");
}
}
... ...
package com.tianbo.warehouse.schedul;
import com.caac.imf.api.IMFClient;
import com.caac.imf.api.IMFClientFactory;
import com.tianbo.warehouse.imf.IMF_Reader;
import com.tianbo.warehouse.imf.IMF_Sender;
import com.tianbo.warehouse.util.IO.FileTool;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
@Component
public class IMF_Task {
protected static final Logger logger = Logger.getLogger(IMF_Task.class);
private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static boolean LOGIN_OK = false;
public static boolean isSuc = true;
public static IMFClient client = null;
@Scheduled(fixedRate = 5000)
private static void start() throws Exception {
PropertyConfigurator.configure("config/log4j.properties");
client = IMFClientFactory.createInstance();
String loginname = FileTool.readProperties("loginname");
String loginpass = FileTool.readProperties("loginpass");
if (client != null) {
IMF_Reader reader = new IMF_Reader(client);
if (!IMF_Reader.isrunning) {
reader.start();
logger.info("*********KAKO读取线程已开启***********");
} else {
// logger.info("*********KAKO读取线程已开启-不再启动线程*********");
}
IMF_Sender kako_sender = new IMF_Sender(client);
if(!IMF_Sender.isrunning) {
kako_sender.start();
}
}
if (!LOGIN_OK) {
loginIMF(client, loginname, loginpass, "config/imf_config.properties");
}
}
public void sendMsg(String msg){
if (!msg.equals(null) && !msg.isEmpty()){
if(LOGIN_OK){
IMF_Sender sender = new IMF_Sender(client,msg);
sender.start();
}
}
}
private static void loginIMF(IMFClient client, String userName, String password, String confFileName) {
if (client.initial(confFileName)) {
String message = client.login(userName, password);
logger.info("message=" + message);
if (message.indexOf("<CODE>1</CODE>") > 0) {
logger.info("登陆成功");
LOGIN_OK = true;
} else {
int times = 0;
while(times <= 3) {
logger.info("try connection...");
++times;
logger.info("message.=" + message);
if (message.indexOf("<CODE>1</CODE>") > 0) {
logger.info("登陆成功");
LOGIN_OK = true;
break;
}
logger.info("登录失败~~~~");
message = client.login(userName, password);
try {
Thread.sleep(4000L);
} catch (InterruptedException var7) {
var7.printStackTrace();
}
}
if (!LOGIN_OK) {
logger.info("多次尝试登录失败,退出登陆");
client.disconnect();
isSuc =false;
System.exit(-1);
}
}
}
}
}
... ...
package com.tianbo.warehouse.util.Date;
import java.text.SimpleDateFormat;
import java.util.Date;
public final class DateUtil {
private static Date currentDate = new Date();
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat timesdf = new SimpleDateFormat("yyyyMMddHHmmss");
public static String getToday(){
return sdf.format(currentDate);
}
public static String getDDTM(){
return timesdf.format(currentDate);
}
}
... ...
package com.tianbo.warehouse.util;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Map;
import java.util.UUID;
public class Helper {
/**
* Object转BigDecimal类型-MRZ-2018年5月14日09:56:26
*
* @param value 要转的object类型
* @return 转成的BigDecimal类型数据
*/
static public BigDecimal getBigDecimal(Object value) {
BigDecimal ret = null;
if (value != null) {
if (value instanceof BigDecimal) {
ret = (BigDecimal) value;
} else if (value instanceof String) {
ret = new BigDecimal((String) value);
} else if (value instanceof BigInteger) {
ret = new BigDecimal((BigInteger) value);
} else if (value instanceof Number) {
ret = new BigDecimal(((Number) value).doubleValue());
} else {
throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigDecimal.");
}
}
return ret;
}
public static String getUUID(){
return UUID.randomUUID().toString().replace("-", "");
}
}
... ...
package com.tianbo.warehouse.util.IO;
import com.tianbo.warehouse.util.Date.DateUtil;
import com.tianbo.warehouse.util.Helper;
import org.apache.commons.io.FileUtils;
import java.io.*;
import java.util.List;
import java.util.Properties;
public final class FileTool {
private final static String errorRootDirectory = "errorLogs";//错误的根目录名
private final static String xmlRootDirectory = "xmlLog"; //记录已收到的报文目录
private final static String Cherector = "UTF-8";
/**
* 写入文件
* @param path 二级目录
* @param content 写入内容
* @param rightOrwrong 是写入错误记录目录还是记录目录
*/
public static void writeFile(String path,String content,boolean rightOrwrong){
StringBuffer stringBuffer = new StringBuffer();
if (rightOrwrong){
stringBuffer.append(xmlRootDirectory).append("/").append(path).append("/").append(DateUtil.getToday()).append("/").append(Helper.getUUID()).append(".log");
}else {
stringBuffer.append(errorRootDirectory).append("/").append(path).append("/").append(DateUtil.getToday()).append("/").append(Helper.getUUID()).append(".log");
}
File file = new File(stringBuffer.toString());
try{
FileUtils.writeStringToFile(file,content,Cherector);
}catch (IOException e){
e.printStackTrace();
}
}
public static String readfile(File file) throws IOException{
String fileToString = FileUtils.readFileToString(file, "GB2312");
return fileToString;
}
public static List<File> readDirectoryFiles(File dir){
List<File> files = (List<File>)FileUtils.listFiles(dir,new String[]{"xml"},false);
return files;
}
public static void writeWaybill(String path,String content,String waybillNo){
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(xmlRootDirectory).append("/").append(path).append("/").append(DateUtil.getToday()).append("/").append(waybillNo).append(".log");
File file = new File(stringBuffer.toString());
try{
FileUtils.writeStringToFile(file,content,Cherector);
}catch (IOException e){
e.printStackTrace();
}
}
public static void writeFileToBak(String content){
String bakDir = readProperties("bakDirectory");
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(bakDir).append("/").append(Helper.getUUID()).append(".txt");
File file = new File(stringBuffer.toString());
try{
FileUtils.writeStringToFile(file,content,Cherector);
}catch (IOException e){
e.printStackTrace();
}
}
public static String readProperties(String key){
Properties properties = new Properties();
String value = "";
try{
BufferedReader bufferedReader = new BufferedReader(new FileReader("config/config.properties"));
properties.load(bufferedReader);
//获取key对应的value值
value= properties.getProperty(key);
}catch (Exception e){
e.printStackTrace();
}
return value;
}
}
... ...
package com.tianbo.warehouse.util.XML;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXParseException;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.UnsupportedEncodingException;
public class MakeImfMeta {
public static String makeImfDocument(String SNDR,String RCVR,String TYPE,String STYP,String DDTM,String SEQN,File Content) throws DocumentException,UnsupportedEncodingException,SAXParseException{
Document document = DocumentHelper.createDocument();
Element root = document.addElement( "MSG" );
Element meta = root.addElement("META");
meta.addElement("SNDR").addText(SNDR);
meta.addElement("RCVR").addText(RCVR);
meta.addElement("SEQN").addText(SEQN);
meta.addElement("DDTM").addText(DDTM);
meta.addElement("TYPE").addText(TYPE);
meta.addElement("STYP").addText(STYP);
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(Content);
Element contentRoot = doc.getRootElement();
root.add(contentRoot);
return document.asXML();
}
}
... ...
package com.tianbo.warehouse.util.XML;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
public class XML2ENTITY {
@SuppressWarnings("unchecked")
/**取KEY的VALUE
*
*/
public Map<String, Object> Dom2Map(Document doc){
Map<String, Object> map = new HashMap<String, Object>();
if(doc == null)
return map;
Element root = doc.getRootElement();
for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
Element e = (Element) iterator.next();
List list = e.elements();
if(list.size() > 0){
map.put(e.getName(), Dom2Map(e));
}else
map.put(e.getName(), e.getText());
}
return map;
}
@SuppressWarnings("unchecked")
public Map Dom2Map(Element e){
Map map = new HashMap();
List list = e.elements();
if(list.size() > 0){
for (int i = 0;i < list.size(); i++) {
Element iter = (Element) list.get(i);
List mapList = new ArrayList();
if(iter.elements().size() > 0){
Map m = Dom2Map(iter);
if(map.get(iter.getName()) != null){
Object obj = map.get(iter.getName());
if(!obj.getClass().getName().equals("java.util.ArrayList")){
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if(obj.getClass().getName().equals("java.util.ArrayList")){
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
}else
map.put(iter.getName(), m);
}
else{
if(map.get(iter.getName()) != null){
Object obj = map.get(iter.getName());
if(!obj.getClass().getName().equals("java.util.ArrayList")){
mapList = new ArrayList();
mapList.add(obj);
mapList.add(iter.getText());
}
if(obj.getClass().getName().equals("java.util.ArrayList")){
mapList = (List) obj;
mapList.add(iter.getText());
}
map.put(iter.getName(), mapList);
}else
map.put(iter.getName(), iter.getText());
}
}
}else
map.put(e.getName(), e.getText());
return map;
}
public List<Map> attrOfElement(Element e){
List attList = new ArrayList();
List<Attribute> listAttr = e.attributes();
for(Attribute attr:listAttr){//遍历当前节点的所有属性
String name=attr.getName();//属性名称
String value=attr.getValue();//属性的值
Map<String, Object> attMap = new HashMap<String, Object>();
attMap.put(name,value);
attList.add(attMap);
}
return attList;
}
@SuppressWarnings("unchecked")
/**遍历所有节点的属性值
*
*/
public Map<String, Object> Dom2Map_propety(Document doc){
Map<String, Object> map = new HashMap<String, Object>();
if(doc == null)
return map;
Element root = doc.getRootElement();
for (Iterator iterator = root.elementIterator(); iterator.hasNext();) {
Element e = (Element) iterator.next();
List list = e.elements();
if(list.size() > 0){
map.put(e.getName(), Dom2Map_propety(e));
}else {
map.put(e.getName(), attrOfElement(e));
}
}
return map;
}
@SuppressWarnings("unchecked")
public Map Dom2Map_propety(Element e){
Map map = new HashMap();
List list = e.elements();
if(list.size() > 0){
for (int i = 0;i < list.size(); i++) {
Element iter = (Element) list.get(i);
List mapList = new ArrayList();
if(iter.elements().size() > 0){
Map m = Dom2Map_propety(iter);
if(map.get(iter.getName()) != null){
Object obj = map.get(iter.getName());
if(!obj.getClass().getName().equals("java.util.ArrayList")){
mapList = new ArrayList();
mapList.add(obj);
mapList.add(m);
}
if(obj.getClass().getName().equals("java.util.ArrayList")){
mapList = (List) obj;
mapList.add(m);
}
map.put(iter.getName(), mapList);
}else
map.put(iter.getName(), m);
}
else{
if(map.get(iter.getName()) != null){
Object obj = map.get(iter.getName());
if(!obj.getClass().getName().equals("java.util.ArrayList")){
mapList = new ArrayList();
mapList.add(obj);
mapList.add(iter.getText());
}
if(obj.getClass().getName().equals("java.util.ArrayList")){
mapList = (List) obj;
mapList.add(iter.getText());
}
map.put(iter.getName(), mapList);
}else{
map.put(iter.getName(), attrOfElement(iter));
}
}
}
}else {
map.put(e.getName(), attrOfElement(e));
}
return map;
}
/**
* 判断map是否包含key,包含返回KEY值,不包含返回NULL
* @param map
* @param key
* @return
*/
public static Object getMap(Map map, String key){
if(map!=null && map.containsKey(key)){
return map.get(key);
} else {
return null;
}
}
}
... ...
package com.tianbo.warehouse.util.XML;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Node;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class XMLXPath {
public static String getSingleValueByPath(Document document,String path){
Node node = document.selectSingleNode(path);
if (node!=null){
String nodeValue = node.getStringValue();
return nodeValue;
}else {
return null;
}
}
public static List<Node> getPathValues(Document document,String path){
List<Node> nodes= document.selectNodes(path);
return nodes;
}
public static void getPathValues2(Document document,String path){
List list = document.selectNodes(path);
for (Iterator it = list.iterator(); it.hasNext();) {
Attribute attr = (Attribute) it.next();
//TODO
}
}
}
... ...
#服务端口
server.port=7003
#eureka主机名,会在控制页面中显示
eureka.instance.hostname=localhost
#eureka服务器页面中status的请求路径
eureka.instance.status-page-url=http://localhost:7003/index
#eureka注册中心服务器地址
eureka.client.service-url.defaultZone=http://10.50.3.82:19527/eureka/
#服务名
spring.application.name=imf-warehouse-reader
#spring.datasource.name=CGOETL
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@10.50.3.70:1521:CGODB
spring.datasource.username=CGONMS
spring.datasource.password=1q2w3e4r
#配置初始化大小/最小/最大
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
#获取连接等待超时时间
spring.datasource.druid.max-wait=60000
#一个连接在池中最小生存的时间
spring.datasource.druid.min-evictable-idle-time-millis=300000
#间隔多久进行一次检测,检测需要关闭的空闲连接
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.validation-query=SELECT 'x' FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.default-auto-commit=true
mybatis.mapper-locations=classpath:mapping/*.xml
mybatis.type-aliases-package=com.example.demo.model
logging.level.com.example.demo.mapper=DEBUG
pagehelper.helper-dialect=oracle
#pagehelper.auto-dialect=true
#pagehelper.auto-runtime-dialect=true
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
... ...
package com.tianbo.warehouse;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class WarehouseApplicationTests {
@Test
public void contextLoads() {
}
}
... ...