diff --git a/liscommon/src/main/java/com/czlisinterface/system/socket/ConnectionHandler.java b/liscommon/src/main/java/com/czlisinterface/system/socket/ConnectionHandler.java new file mode 100644 index 0000000..a0df382 --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/socket/ConnectionHandler.java @@ -0,0 +1,177 @@ +package com.czlisinterface.system.socket; + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.Socket; +import java.net.SocketException; +import java.nio.charset.StandardCharsets; +import java.util.LinkedList; +import java.util.List; +import java.util.StringTokenizer; + +@Slf4j +public class ConnectionHandler implements Runnable { + private static final int MESSAGE_CONTROL_ID_LOCATION = 9; + private static final String FIELD_DELIMITER = "|"; + private Socket connection; + private static List pool = new LinkedList(); + static final char END_OF_BLOCK = '\u001c'; //结束符 + static final char START_OF_BLOCK = '\u000b'; //开始符 + static final char CARRIAGE_RETURN = 13; //换行符 + private static final int END_OF_TRANSMISSION = -1; + + + + public ConnectionHandler() { + } + + public void handleConnection() { + try { + System.out.println("Handling client at " + + connection.getInetAddress().getHostAddress() + + " on port " + connection.getPort()); + + // InputStream in = connection.getInputStream(); + InputStreamReader in = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8); + OutputStream out = connection.getOutputStream(); + // PrintWriter out = new PrintWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"), true); + + String parsedHL7Message = getMessage(in); //接受消息 + log.info("接受到的平台消息:"+parsedHL7Message.replaceAll("\\r","\n")); +// XtrmyyUtils xtrmyyUtils = SpringUtil.getBean(XtrmyyUtils.class); +// xtrmyyUtils.busProcess(parsedHL7Message); + String buildAcknowledgmentMessage = getSimpleAcknowledgementMessage(parsedHL7Message); //回复应答ACK消息 + out.write(buildAcknowledgmentMessage.getBytes(), 0, buildAcknowledgmentMessage.length()); + + + } catch (IOException e) { + String errorMessage = "Error whiling reading and writing to connection " + e.getMessage(); + System.out.println(errorMessage); + throw new RuntimeException(errorMessage); + } + + finally { + try { + connection.close(); + } + catch (IOException e) { + String errorMessage = "Error whiling attempting to close to connection " + e.getMessage(); + System.out.println(errorMessage); + throw new RuntimeException(errorMessage); + } + } + } + + public static void processRequest(Socket requestToHandle) { + synchronized (pool) { + pool.add(pool.size(), requestToHandle); + pool.notifyAll(); + } + } + + public void run() { + while (true) { + synchronized (pool) { + while (pool.isEmpty()) { + try { + pool.wait(); + } catch (InterruptedException e) { + return; + } + } + connection = (Socket) pool.remove(0); + } + handleConnection(); + + } + } + + public String getMessage(InputStreamReader anInputStream) throws IOException { + + boolean end_of_message = false; + StringBuffer parsedMessage = new StringBuffer(); + + int characterReceived = 0; + + try { + characterReceived = anInputStream.read(); + } catch (SocketException e) { + System.out + .println("Unable to read from socket stream. " + + "Connection may have been closed: " + e.getMessage()); + return null; + } + + if (characterReceived == END_OF_TRANSMISSION) { + return null; + } + + if (characterReceived != START_OF_BLOCK) { + throw new RuntimeException( + "Start of block character has not been received"); + } + + while (!end_of_message) { + characterReceived = anInputStream.read(); + + if (characterReceived == END_OF_TRANSMISSION) { + throw new RuntimeException( + "Message terminated without end of message character"); + } + + if (characterReceived == END_OF_BLOCK) { + characterReceived = anInputStream.read(); + + if (characterReceived != CARRIAGE_RETURN) { + throw new RuntimeException( + "End of message character must be followed by a carriage return character"); + } + end_of_message = true; + } else { + parsedMessage.append((char) characterReceived); + } + } + System.out.println("接受到的消息:\n"+parsedMessage.toString().replaceAll("\\r","\n")); + return parsedMessage.toString(); + } + + private String getSimpleAcknowledgementMessage(String aParsedHL7Message) { + if (aParsedHL7Message == null) + throw new RuntimeException("Invalid HL7 message for parsing operation" + + ". Please check your inputs"); + + String messageControlID = getMessageControlID(aParsedHL7Message); + + StringBuffer ackMessage = new StringBuffer(); + ackMessage = ackMessage.append(START_OF_BLOCK) + .append("MSH|^~\\&|HIS|RIH|EKG|EKG|199904140038||ACK^A01|12345678|P|2.2") + .append(CARRIAGE_RETURN) + .append("MSA|AA|") + .append(messageControlID) + .append(CARRIAGE_RETURN) + .append(END_OF_BLOCK) + .append(CARRIAGE_RETURN); + + return ackMessage.toString(); + } + + private String getMessageControlID(String aParsedHL7Message) { + int fieldCount = 0; + StringTokenizer tokenizer = new StringTokenizer(aParsedHL7Message, FIELD_DELIMITER); + + while (tokenizer.hasMoreElements()) + { + String token = tokenizer.nextToken(); + fieldCount++; + if (fieldCount == MESSAGE_CONTROL_ID_LOCATION){ + return token; + } + } + + return ""; + } + +} diff --git a/liscommon/src/main/java/com/czlisinterface/system/socket/MLLPBasedHL7ThreadedServer.java b/liscommon/src/main/java/com/czlisinterface/system/socket/MLLPBasedHL7ThreadedServer.java new file mode 100644 index 0000000..762473a --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/socket/MLLPBasedHL7ThreadedServer.java @@ -0,0 +1,65 @@ +package com.czlisinterface.system.socket; + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.net.BindException; +import java.net.ServerSocket; +import java.net.Socket; + + +@Slf4j +public class MLLPBasedHL7ThreadedServer { + + + + private int maxConnections; + private int listenPort; + + + + public MLLPBasedHL7ThreadedServer(int aListenPort, int maxConnections) { + listenPort = aListenPort; + this.maxConnections = maxConnections; + } + + public void acceptConnections() { + try { + ServerSocket server = new ServerSocket(listenPort, 5000); + Socket clientSocket = null; + while (true) { + clientSocket = server.accept(); + //server.setSoTimeout(100000); 设置超时时间 + handleConnection(clientSocket); + System.out.println("SocketServer start at port:"+listenPort); + } + } catch (BindException e) { + System.out.println("Unable to bind to port " + listenPort); + } catch (IOException e) { + System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort); + } + } + + protected void handleConnection(Socket connectionToHandle) { + ConnectionHandler.processRequest(connectionToHandle); + } + +// public static void main(String[] args) { +// MLLPBasedHL7ThreadedServer server = new MLLPBasedHL7ThreadedServer(9568, 3); +// server.setUpConnectionHandlers(); //启动线程 +// server.acceptConnections(); //创建socket服务 +// } + + public void setUpConnectionHandlers() { + for (int i = 0; i < maxConnections; i++) { + ConnectionHandler currentHandler = + new ConnectionHandler(); + Thread handlerThread = new Thread(currentHandler, "Handler " + i); + handlerThread.setDaemon(true); + handlerThread.start(); + } + } + + + +} diff --git a/liscommon/src/main/java/com/czlisinterface/system/socket/SimpleTCPEchoClient.java b/liscommon/src/main/java/com/czlisinterface/system/socket/SimpleTCPEchoClient.java new file mode 100644 index 0000000..70f1d48 --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/socket/SimpleTCPEchoClient.java @@ -0,0 +1,120 @@ +package com.czlisinterface.system.socket; + + + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.net.SocketException; +import java.nio.charset.StandardCharsets; + +@Slf4j +public class SimpleTCPEchoClient { + + private static final char END_OF_BLOCK = '\u001c'; //结束符 + private static final char START_OF_BLOCK = '\u000b'; //开始符 + private static final char CARRIAGE_RETURN = 13; //换行符 + private static final int END_OF_TRANSMISSION = -1; + public static String socketClientHost; + public static String socketClientPort; + + public static String simpleClient(String str) throws IOException { + + int i = str.indexOf("\n", str.length() - 1); + if(i > 0){ + str = str.substring(0,i); + } + str = str.replaceAll("\\n","\r"); + System.out.println("str:"+str); + StringBuffer stringBuffer = new StringBuffer(); +// String testMessage = "MSH|^~\\&|HIS|RIH|EKG|EKG|199904140038||ADT^A01|12345678|P|2.2\r" +// + "PID|0001|00009874|00001122|A00977|SMITH^JOHN^M|MOM|19581119|F|NOTREAL^LINDA^M|C|564 SPRING ST^^NEEDHAM^MA^02494^US|0002|(818)565-1551|(425)828-3344|E|S|C|0000444444|252-00-4414||||SA|||SA||||NONE|V1|0001|I|D.ER^50A^M110^01|ER|P00055|11B^M011^02|070615^BATMAN^GEORGE^L|555888^NOTREAL^BOB^K^DR^MD|777889^NOTREAL^SAM^T^DR^MD^PHD|ER|D.WT^1A^M010^01|||ER|AMB|02|070615^NOTREAL^BILL^L|ER|000001916994|D||||||||||||||||GDD|WA|NORM|02|O|02|E.IN^02D^M090^01|E.IN^01D^M080^01|199904072124|199904101200|199904101200||||5555112333|||666097^NOTREAL^MANNY^P\r" +// + "NK1|0222555|NOTREAL^JAMES^R|FA|STREET^OTHER STREET^CITY^ST^55566|(222)111-3333|(888)999-0000|||||||ORGANIZATION\r" +// + "PV1|0001|I|D.ER^1F^M950^01|ER|P000998|11B^M011^02|070615^BATMAN^GEORGE^L|555888^OKNEL^BOB^K^DR^MD|777889^NOTREAL^SAM^T^DR^MD^PHD|ER|D.WT^1A^M010^01|||ER|AMB|02|070615^VOICE^BILL^L|ER|000001916994|D||||||||||||||||GDD|WA|NORM|02|O|02|E.IN^02D^M090^01|E.IN^01D^M080^01|199904072124|199904101200|||||5555112333|||666097^DNOTREAL^MANNY^P\r" +// + "PV2|||0112^TESTING|55555^PATIENT IS NORMAL|NONE|||19990225|19990226|1|1|TESTING|555888^NOTREAL^BOB^K^DR^MD||||||||||PROD^003^099|02|ER||NONE|19990225|19990223|19990316|NONE\r" +// + "AL1||SEV|001^POLLEN\r" +// + "GT1||0222PL|NOTREAL^BOB^B||STREET^OTHER STREET^CITY^ST^77787|(444)999-3333|(222)777-5555||||MO|111-33-5555||||NOTREAL GILL N|STREET^OTHER STREET^CITY^ST^99999|(111)222-3333\r" +// + "IN1||022254P|4558PD|BLUE CROSS|STREET^OTHER STREET^CITY^ST^00990||(333)333-6666||221K|LENIX|||19980515|19990515|||PATIENT01 TEST D||||||||||||||||||02LL|022LP554"; + stringBuffer.append(START_OF_BLOCK) + .append(str) + .append(END_OF_BLOCK) + .append(CARRIAGE_RETURN); + byte[] byteBuffer = stringBuffer.toString().getBytes(StandardCharsets.UTF_8); + + // Create socket that is connected to a server running on the same machine on port 1080 + socketClientHost = SocketUtils.getYmlValues("socketClientHost"); + socketClientPort = SocketUtils.getYmlValues("socketClientPort"); + Socket socket = new Socket(socketClientHost, Integer.parseInt(socketClientPort)); + System.out.println("Connected to Server"); + + InputStream in = socket.getInputStream(); + OutputStream out = socket.getOutputStream(); + + // Send the message to the server + out.write(byteBuffer); + + //in.read(byteBuffer); + + String message = String.valueOf(getMessage(in)); + log.info("调用平台接口:入参:"+str.replaceAll("\\r","\n")+"\n"+"出参:"+message.replaceAll("\\r","\n")); + System.out.println("Message received from Server: " + message.replaceAll("\\r","\n")); + + // Close the socket and its streams + socket.close(); + + return message; + } + + + public static String getMessage(InputStream anInputStream) throws IOException { + + boolean end_of_message = false; + StringBuffer parsedMessage = new StringBuffer(); + + int characterReceived = 0; + + try { + characterReceived = anInputStream.read(); + } catch (SocketException e) { + System.out + .println("Unable to read from socket stream. " + + "Connection may have been closed: " + e.getMessage()); + return null; + } + + if (characterReceived == END_OF_TRANSMISSION) { + return null; + } + + if (characterReceived != START_OF_BLOCK) { + throw new RuntimeException( + "Start of block character has not been received"); + } + + while (!end_of_message) { + characterReceived = anInputStream.read(); + + if (characterReceived == END_OF_TRANSMISSION) { + throw new RuntimeException( + "Message terminated without end of message character"); + } + + if (characterReceived == END_OF_BLOCK) { + characterReceived = anInputStream.read(); + + if (characterReceived != CARRIAGE_RETURN) { + throw new RuntimeException( + "End of message character must be followed by a carriage return character"); + } + end_of_message = true; + } else { + parsedMessage.append((char) characterReceived); + } + } + //System.out.println("接受到的消息:\n"+parsedMessage.toString().replaceAll("\\r","\n")); + return parsedMessage.toString(); + } +} diff --git a/liscommon/src/main/java/com/czlisinterface/system/socket/SocketUtils.java b/liscommon/src/main/java/com/czlisinterface/system/socket/SocketUtils.java new file mode 100644 index 0000000..4316ff1 --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/socket/SocketUtils.java @@ -0,0 +1,68 @@ +package com.czlisinterface.system.socket; + + +import lombok.extern.slf4j.Slf4j; +import org.yaml.snakeyaml.Yaml; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +@Slf4j +public class SocketUtils { + + + public static String socketServerPort; + + + + + /** + * 启动socket + */ + public static void socketStart(){ + socketServerPort = getYmlValues("socketServerPort"); + MLLPBasedHL7ThreadedServer server = new MLLPBasedHL7ThreadedServer(Integer.parseInt(socketServerPort), 3000); + server.setUpConnectionHandlers(); //启动线程 + server.acceptConnections(); //创建socket服务 + } + + + /** + * 获取配置文件的值 + * @param key + * @return + */ + public static String getYmlValues(String key) { + String value = ""; + Yaml yaml = new Yaml(); + InputStream inputStream = null; + String basePath= Thread.currentThread().getContextClassLoader().getResource("application.yml").getPath(); + try { + inputStream = new FileInputStream(basePath); + Map map = (Map) yaml.load(inputStream); + value = String.valueOf(map.get(key)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + return value; + } + + /** + * 创建一个socket客户端并发送消息 + */ + public static String sendMessage(String str){ + try { + String s = SimpleTCPEchoClient.simpleClient(str); + return s; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + +} diff --git a/liscommon/src/main/java/com/czlisinterface/system/socket/WebContext.java b/liscommon/src/main/java/com/czlisinterface/system/socket/WebContext.java new file mode 100644 index 0000000..e857912 --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/socket/WebContext.java @@ -0,0 +1,34 @@ +package com.czlisinterface.system.socket; + +import ca.uhn.hl7v2.DefaultHapiContext; +import ca.uhn.hl7v2.HapiContext; +import ca.uhn.hl7v2.llp.MinLowerLayerProtocol; +import ca.uhn.hl7v2.llp.MllpConstants; + +/** + * @Author : sxd + * @Date : 2022/7/28 8:53 + * @Description : WebContext + */ +public enum WebContext { + INSTANCE; + + + WebContext() { + HapiContext ctx = new DefaultHapiContext(); + MinLowerLayerProtocol minLowerLayerProtocol = new MinLowerLayerProtocol(); + minLowerLayerProtocol.setCharset("UTF-8"); + System.setProperty(MllpConstants.CHARSET_KEY, "UTF-8"); + ctx.setLowerLayerProtocol(minLowerLayerProtocol); + this.hapiContext = ctx; + } + + private HapiContext hapiContext; + + + public HapiContext getHapiContext() { + return this.hapiContext; + } + + +} diff --git a/liscommon/src/main/java/com/czlisinterface/system/task/BaskCommonTask.java b/liscommon/src/main/java/com/czlisinterface/system/task/BaskCommonTask.java new file mode 100644 index 0000000..5ba6c5c --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/task/BaskCommonTask.java @@ -0,0 +1,123 @@ +package com.czlisinterface.system.task; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.czlisinterface.system.mapper.Hisinter_exec_log_Mapper; +import com.czlisinterface.system.pojo.Hisinter_exec_log; +import com.czlisinterface.system.pojo.Result; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Component +@Slf4j +public class BaskCommonTask implements BaskTask { + + @Value("${lisinterface.task.cron:}") + private String taskCron; + @Value("${lisinterface.task.type:0}") + private String type; + + + @Resource + public Hisinter_exec_log_Mapper hisinterExecLogMapper; + + + @Override + public String getCron() { + if(type.equals("0")){ + return null; + }else{ + return taskCron; + } + + } + + @Override + public void execute() { + + } + + @Override + public void run() { + execute(); + } + + + public Result sendReport(Date jyrq, String yq, String ybh, String status) { + return null; + } + + + /** + * 发送报告定时任务 + */ + public void sendReportTask(){ + List topData = hisinterExecLogMapper.getTopData(); + for (Hisinter_exec_log topDatNum : topData) { + Integer id = topDatNum.getId(); + String recordid = topDatNum.getRecordid(); + String status = topDatNum.getStatus(); + List split = StrUtil.split(recordid, "|"); + String jyrq = split.get(0); + String sjyrq = jyrq.substring(0, 4) + "-" + jyrq.substring(4, 6) + "-" + jyrq.substring(6, 8); + String yq = split.get(1); + String ybh = split.get(2); + try{ + Result result = sendReport(DateUtil.parse(sjyrq, "yyyy-MM-dd"), yq, ybh, status); + saveTaskInfo(id,result); + }catch(Exception e){ + e.printStackTrace(); + log.error("调用定时报告任务出错,id:"+id+";错误信息:",e); + saveTaskInfo(id,new Result("-1",e.getMessage())); + } + } + } + + + public Result sendReportAll(Hisinter_exec_log hisinter_exec_log) { + + return null; + } + + /** + * 发送报告定时任务 + */ + public void sendReportTaskAll(){ + List topData = hisinterExecLogMapper.getTopData(); + for (Hisinter_exec_log topDatNum : topData) { + Integer id = topDatNum.getId(); + try{ + //Result result = sendReport(DateUtil.parse(sjyrq, "yyyy-MM-dd"), yq, ybh, status); + Result result = sendReportAll(topDatNum); + saveTaskInfo(id,result); + }catch(Exception e){ + e.printStackTrace(); + log.error("调用定时报告任务出错,id:"+id+";错误信息:",e); + saveTaskInfo(id,new Result("-1",e.getMessage())); + } + } + } + + /** + * 保存结果信息 + * @param id + * @param result + */ + @DSTransactional + public void saveTaskInfo(Integer id,Result result){ + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",id); + Hisinter_exec_log hisinterExecLog = new Hisinter_exec_log(); + hisinterExecLog.setTextlog(result.getMessage()); + hisinterExecLog.setTxt1(result.getResultCode()); + hisinterExecLogMapper.update(hisinterExecLog, updateWrapper); + + } +} diff --git a/liscommon/src/main/java/com/czlisinterface/system/task/BaskTask.java b/liscommon/src/main/java/com/czlisinterface/system/task/BaskTask.java new file mode 100644 index 0000000..424191a --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/task/BaskTask.java @@ -0,0 +1,10 @@ +package com.czlisinterface.system.task; + +public interface BaskTask extends Runnable { + //获取执行频率 + String getCron(); + //执行任务逻辑 + void execute(); + + +} diff --git a/liscommon/src/main/java/com/czlisinterface/system/task/ReUploadTask.java b/liscommon/src/main/java/com/czlisinterface/system/task/ReUploadTask.java new file mode 100644 index 0000000..9141f9b --- /dev/null +++ b/liscommon/src/main/java/com/czlisinterface/system/task/ReUploadTask.java @@ -0,0 +1,46 @@ +package com.czlisinterface.system.task; + +import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; + +import java.util.Map; + +@EnableScheduling +@Configuration +@Slf4j +public class ReUploadTask implements SchedulingConfigurer { + + @Autowired + private ApplicationContext applicationContext; + @Override + public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { + //在注册器添加定时任务前,添加线程池 + ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); + threadPoolTaskScheduler.setPoolSize(10); + threadPoolTaskScheduler.initialize(); + scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler); + //获取所有的定时任务 + Map map=applicationContext.getBeansOfType(BaskTask.class); + //遍历注册 + for(String key:map.keySet()){ + BaskTask baskTask = map.get(key); + scheduledTaskRegistrar.addTriggerTask( + baskTask,triggerContext -> { + if(StrUtil.isBlank(baskTask.getCron())){ + return null; + } + return new CronTrigger(baskTask.getCron()).nextExecutionTime(triggerContext); + } + ); + } + } +} + diff --git a/lisinterface_jldermyy/src/main/java/com/czlisinterface/jldermyy/service/impl/Lisinterface_jldermyy.java b/lisinterface_jldermyy/src/main/java/com/czlisinterface/jldermyy/service/impl/Lisinterface_jldermyy.java index 1bbe2ac..3cb2f46 100644 --- a/lisinterface_jldermyy/src/main/java/com/czlisinterface/jldermyy/service/impl/Lisinterface_jldermyy.java +++ b/lisinterface_jldermyy/src/main/java/com/czlisinterface/jldermyy/service/impl/Lisinterface_jldermyy.java @@ -1,5 +1,7 @@ package com.czlisinterface.jldermyy.service.impl; +import cn.hutool.core.util.XmlUtil; +import cn.hutool.http.webservice.SoapClient; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.czlisinterface.jldermyy.mapper.HisMapper_jldermyy; @@ -9,10 +11,13 @@ import com.czlisinterface.system.pojo.LabReqmain; import com.czlisinterface.system.pojo.Result; import com.czlisinterface.system.service.impl.CommonImpl; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Configuration; +import org.w3c.dom.Document; import javax.annotation.Resource; +import javax.xml.xpath.XPathConstants; import java.util.List; @@ -25,6 +30,9 @@ import java.util.List; @ConditionalOnProperty(name="lisinterface.action.type",havingValue = "jldermyy_new1") public class Lisinterface_jldermyy extends CommonImpl { + @Value("${lisinterface.postURL:}") + String postURL; + @Resource CommonMapper commonMapper; @Resource @@ -40,4 +48,52 @@ public class Lisinterface_jldermyy extends CommonImpl { return new Result("0",labreqmain.toString()); } + /** + * 调用his的webservice接口 + * @param action + * @param xmlStr + * @return + */ + public Result xmlInvoke(String action,String xmlStr){ + String result = ""; + try{ + //String url = "http://172.29.91.236/sj_web_ss/StandardService.asmx?wsdl"; + SoapClient client = SoapClient.create(postURL) + .header("SOAPAction","http://www.bkgtsoft.com/ESB.SoapService.Send") + // 设置要请求的方法,此接口方法前缀为web,传入对应的命名空间 + .setMethod("bkg:Send", "http://www.bkgtsoft.com") + .setParam("action",action,true)//此处写true,会自动填写命名空间 + .setParam("message","",true); + + // log.info("接口地址:{}\n入参:{}",postURL,client.getMsgStr(false)); + // 发送请求,参数true表示返回一个格式化后的XML内容 + // 返回内容为XML字符串,可以配合XmlUtil解析这个响应 + result = client.send(false); + //log.info("webservice返回内容:"+result); +// if(result.contains("")); +// } + while(result.contains("")){ + result = result.replace("",""); + } + result = result.substring(result.indexOf(""),result.indexOf("")+11); + // log.info("result:"+result); + }catch (Exception ex){ + log.error("服务标识:{}\r\n入参:{}\r\n出参:{},{}",action,xmlStr,result,ex); + throw ex; + } + log.info("服务标识:{}\r\n调用平台接口入参:{}\r\n出参:{}",action,xmlStr,result); + + //解析出参 + String resultCode = ""; + String msg = ""; + Document doc = XmlUtil.parseXml(result); + + return null; + + + } + + } diff --git a/lisinterface_start/src/main/java/com/czlisinterface/start/InterfaceApplication.java b/lisinterface_start/src/main/java/com/czlisinterface/start/InterfaceApplication.java index 2a047dc..e17141b 100644 --- a/lisinterface_start/src/main/java/com/czlisinterface/start/InterfaceApplication.java +++ b/lisinterface_start/src/main/java/com/czlisinterface/start/InterfaceApplication.java @@ -1,5 +1,6 @@ package com.czlisinterface.start; +import com.czlisinterface.system.socket.SocketUtils; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -15,5 +16,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; public class InterfaceApplication { public static void main(String[] args) { SpringApplication.run(InterfaceApplication.class,args); + + //运行socket服务 + String socketstart = SocketUtils.getYmlValues("socketstart"); + if(socketstart.equals("1")){ + SocketUtils.socketStart(); + } } } diff --git a/lisinterface_start/src/main/resources/application.yml b/lisinterface_start/src/main/resources/application.yml index 6b6ec85..3c60486 100644 --- a/lisinterface_start/src/main/resources/application.yml +++ b/lisinterface_start/src/main/resources/application.yml @@ -8,6 +8,12 @@ server: # Tomcat启动初始化的线程数,默认值10 min-spare: 100 +#socket是否开启: +socketstart: 0 +socketServerPort: 9223 +socketClientHost: localhost +socketClientPort: 9222 + spring: mvc: pathmatch: