From 85a1e420e88f03cb1d53851af7b8b51938e2dd6d Mon Sep 17 00:00:00 2001 From: kevin Date: Wed, 22 Dec 2021 18:48:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=97=E6=96=B9=E5=8C=BB=E9=99=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- power-admin/pom.xml | 32 +++- .../main/java/com/manage/config/MyHandel.java | 20 +++ .../com/manage/config/WebServiceConfig.java | 37 ---- .../java/com/manage/config/WebServiceCxf.java | 1 + .../com/manage/controller/FontController.java | 158 +++++++++++++----- .../resources/config/applicationContext.xml | 2 + .../main/resources/config/config.properties | 6 +- .../src/main/resources/config/jdbc.properties | 2 +- .../main/resources/config/mybatis-config.xml | 3 +- .../main/java/com/manage/dao/InvokeParam.java | 32 ++++ .../manage/service/WeatherServiceInter.java | 13 ++ .../service/ipml/WeatherServiceInterImpl.java | 11 ++ 12 files changed, 226 insertions(+), 91 deletions(-) create mode 100644 power-admin/src/main/java/com/manage/config/MyHandel.java delete mode 100644 power-admin/src/main/java/com/manage/config/WebServiceConfig.java create mode 100644 power-dao/src/main/java/com/manage/dao/InvokeParam.java create mode 100644 power-service/src/main/java/com/manage/service/WeatherServiceInter.java create mode 100644 power-service/src/main/java/com/manage/service/ipml/WeatherServiceInterImpl.java diff --git a/power-admin/pom.xml b/power-admin/pom.xml index 0359664..f2493e6 100644 --- a/power-admin/pom.xml +++ b/power-admin/pom.xml @@ -75,6 +75,15 @@ org.springframework spring-webmvc + + + xerces + xercesImpl + 2.11.0 + test + + + org.springframework spring-jdbc @@ -123,6 +132,23 @@ org.apache.cxf cxf-rt-frontend-jaxws + + + + + + + + + + + + + + + + + org.apache.commons @@ -148,12 +174,6 @@ jdom2 2.0.6 - - org.springframework.boot - spring-boot - 2.5.5 - - power diff --git a/power-admin/src/main/java/com/manage/config/MyHandel.java b/power-admin/src/main/java/com/manage/config/MyHandel.java new file mode 100644 index 0000000..251770b --- /dev/null +++ b/power-admin/src/main/java/com/manage/config/MyHandel.java @@ -0,0 +1,20 @@ +package com.manage.config; + +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +@Component //或者继承implements ApplicationRunner 实现run()方法 +public class MyHandel { + @PostConstruct + public void loadDic() { + System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); + + } + //在spring容器关闭时,释放 + @PreDestroy + public void destroy() { + //系统运行结束 + } +} diff --git a/power-admin/src/main/java/com/manage/config/WebServiceConfig.java b/power-admin/src/main/java/com/manage/config/WebServiceConfig.java deleted file mode 100644 index e30d779..0000000 --- a/power-admin/src/main/java/com/manage/config/WebServiceConfig.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.manage.config; - -import com.manage.interfaces.webservice.PowerWebService; -import com.manage.interfaces.webservice.impl.PowerWebServiceImpl; -import org.apache.cxf.Bus; -import org.apache.cxf.bus.spring.SpringBus; -import org.apache.cxf.jaxws.EndpointImpl; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import javax.xml.ws.Endpoint; - - -@Configuration -public class WebServiceConfig { - - @Bean(name = Bus.DEFAULT_BUS_ID) - public SpringBus springBus() { - - return new SpringBus(); - } - - @Bean - public PowerWebService powerWebService() { - return new PowerWebServiceImpl(); - } - - @Bean - public Endpoint endpoint(){ - EndpointImpl endpoint = new EndpointImpl(springBus(),powerWebService()); - endpoint.publish("PowerWebService"); - return endpoint; - - } - - -} diff --git a/power-admin/src/main/java/com/manage/config/WebServiceCxf.java b/power-admin/src/main/java/com/manage/config/WebServiceCxf.java index 0c5b226..bdbe0be 100644 --- a/power-admin/src/main/java/com/manage/config/WebServiceCxf.java +++ b/power-admin/src/main/java/com/manage/config/WebServiceCxf.java @@ -33,6 +33,7 @@ public class WebServiceCxf implements InitializingBean, ApplicationContextAware @Override public void afterPropertiesSet() throws Exception { Map beanMap = applicationContext.getBeansOfType(PowerWebService.class); + //遍历该接口的所有实现,将其放入map中 for (PowerWebService serviceImpl : beanMap.values()) { queryServiceImplMap.put(serviceImpl.getClass().getSimpleName(), serviceImpl); diff --git a/power-admin/src/main/java/com/manage/controller/FontController.java b/power-admin/src/main/java/com/manage/controller/FontController.java index 85e397c..9dd60d2 100644 --- a/power-admin/src/main/java/com/manage/controller/FontController.java +++ b/power-admin/src/main/java/com/manage/controller/FontController.java @@ -17,11 +17,14 @@ import com.manage.service.webSocket.WsPool; import com.manage.util.DateUtils; import com.manage.util.ExceptionPrintUtil; import com.manage.util.Msg; -import com.manage.utils.ResultUtils; -import com.manage.utils.XmlUtils; import com.manage.vo.*; import org.apache.commons.lang3.StringUtils; import org.apache.cxf.endpoint.Client; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -29,9 +32,7 @@ import org.springframework.stereotype.Controller; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; -import javax.jws.WebService; -import java.io.ByteArrayInputStream; -import java.io.UnsupportedEncodingException; +import java.io.StringReader; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -377,15 +378,15 @@ public class FontController { } - public static void main(String[] args) throws UnsupportedEncodingException { - String xml="*******医院信息平台sj1C821B22D0402F317E40D93213C66843"; - XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(xml.getBytes("UTF-8"))); - String username = xmlUtils.getElement("username"); - String password = xmlUtils.getElement("password"); - System.out.println(username); - System.out.println(password); - System.out.println(ResultUtils.success().asXML()); - } +// public static void main(String[] args) throws UnsupportedEncodingException { +// String xml="*******医院信息平台sj1C821B22D0402F317E40D93213C66843"; +// XmlUtils xmlUtils = new XmlUtils(new ByteArrayInputStream(xml.getBytes("UTF-8"))); +// String username = xmlUtils.getElement("username"); +// String password = xmlUtils.getElement("password"); +// System.out.println(username); +// System.out.println(password); +// System.out.println(ResultUtils.success().asXML()); +// } /** * 2.10 @@ -402,7 +403,7 @@ public class FontController { */ @RequestMapping(value = "getTokenForHis",method = RequestMethod.POST) @ResponseBody - public Msg getTokenForHis(String userName,String password) throws Exception{ + public Msg getTokenForHis(@RequestParam("username") String userName,@RequestParam("password")String password) throws Exception{ if(StringUtils.isBlank(userName)){ @@ -411,25 +412,27 @@ public class FontController { if(StringUtils.isBlank(password)){ return Msg.fail("密码不能为空"); } - //1.根据userName,password调用webService,校验第三方系统中是否有此账号 - if (!linkHisLogin(userName,password)) { - return Msg.fail("校验第三方系统失败"); - } //2.根据userName查询我们的用户表是否存在 Power_UserVo userVo = new Power_UserVo(); // 判断数据库中是否有此用户,如果没有则插入数据库 - List user = userMapper.selectList().stream().filter(u -> userName.equals(u.getUserName())).limit(1).collect(Collectors.toList()); - userVo = user.get(0); - if (user.size() == 0) { + String result = linkHisLogin(userName, password); + if(StringUtils.isBlank(result)){ + return Msg.fail("调用第三方认证失败"); + } + List userList = userMapper.checkUserName(userName); + if (CollectionUtils.isEmpty(userList)) { //2.1不存在往用户表新增这条用户 userVo.setUserName(userName); // userVo.setUserPwd(Base64.encode(MD5.KL("1C821B22D0402F317E40D93213C66843"))); - userVo.setUserPwd(Base64.encode(MD5.KL(password))); + userVo.setUserPwd(Base64.encode(MD5.KL("123456"))); + //TODO name从应答的xml解析 + String name = analysis(result,"Name"); + userVo.setName(name); userVo.setRoleId(1); userVo.setDeptId("3"); userVo.setEffective(1); userVo.setCreater("his"); - SimpleDateFormat fmt= new SimpleDateFormat(); + SimpleDateFormat fmt= new SimpleDateFormat("yyyy-MM-dd"); userVo.setCreateDate(fmt.format(new Date())); //插入00 userMapper.insert(userVo); @@ -438,31 +441,81 @@ public class FontController { return Msg.success().add("token",token); } + /** + * 将xml转换为Map。 支持xml标签多层嵌套,并以"."分隔多级标签(不包括根节点)。 不支持XML标签重复时的情况 + * + * @param xml + * @param map + * @return + */ + private Map parseXml2Map(String xml, Map map) { + try { + SAXReader reader = new SAXReader(); + Document doc = reader.read(new StringReader(xml)); + Element root = doc.getRootElement(); + String path = ""; + if (map.containsKey(root.getName().trim())) { + path = map.get(root.getName().trim()); + map.remove(root.getName().trim()); + } + for (Iterator i = root.elementIterator(); i.hasNext();) { + Element element = (Element) i.next(); + if (element.isTextOnly()) { + if (path.length() > 0) { + map.put(path + element.getName().trim(), element.getTextTrim()); + } else { + map.put(element.getName().trim(), element.getTextTrim()); + } + } else { + map.put(element.getName().trim(), path+ element.getName().trim() + "."); + parseXml2Map(element.asXML(), map); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return map; + } + + + /** + * 解析result中xml中的name节点值 + * @param result + * @param name + * @return + */ + private String analysis(String result, String name) { + String nameValue = ""; + Map map = new HashMap<>(); + Map valueMap = parseXml2Map(result, map); + nameValue = valueMap.get("Name"); + return nameValue; + } + + private String linkHisLogin(String userName, String password) { - private boolean linkHisLogin(String userName, String password) { //创建连接工厂 JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance(); //创建客户端 Object[] objects = new Object[0]; - Client client = null; + Client client = dcf.createClient("http://192.168.128.170/csp/hsb/DHC.Published.PUB0025.BS.PUB0025.CLS?WSDL=1"); try { - //医院给的webservice地址 - String url = "http://192.168.128.170/csp/hsb/DHC.Published.PUB0025.BS.PUB0025.CLS?WSDL=1"; - client = dcf.createClient(url); +// //医院给的webservice地址 +// String url = "http://192.168.128.170/csp/hsb/DHC.Published.PUB0025.BS.PUB0025.CLS?WSDL=1"; +// client = dcf.createClient(url); //动态调用getInfosByUserId方法 //获取请求参数xml字符串 String xmlStr = getXml(userName,password); - objects = client.invoke("HIPManagerInfo", "S0110",xmlStr); + objects = client.invoke("HIPManagerInfo","S0110", xmlStr); //应答信息 - String re = objects[0].toString(); - System.out.println(re); + String result = objects[0].toString(); + System.out.println(result); //新用户存到数据库 - if (re.contains("成功")) { - return true; + if (result.contains("成功")) { + return result; } - return false; } catch (Exception e) { e.printStackTrace(); } finally { @@ -470,20 +523,39 @@ public class FontController { client.destroy(); } } - return false; + return null; } - private String getXml(String userName, String password) { - String Request=" "+"嘉时软件"+"" + - " 医院信息平台 " + - " "+userName+" "+password+"" + - " "; + private String getXml(String userName, String password) { - return Request; + // 1、创建document对象 + Document document = DocumentHelper.createDocument(); + // 2、创建根节点rss + Element requestElement = document.addElement("Request"); +// Element patInfo = Requst.addElement("PatInfo"); +// patInfo.addElement("VUID").setText("12412"); + requestElement.addElement("SourceSystem").setText("厦门嘉时"); + requestElement.addElement("TargetSystem").setText("医院信息平台"); + requestElement.addElement("username").setText(userName); + requestElement.addElement("password").setText(password); + + OutputFormat format = OutputFormat.createPrettyPrint(); + // 设置编码格式 + format.setEncoding("UTF-8"); + String xml = document.asXML(); + System.out.println(xml); + +// String res = service.outHOSREG(xml); +// TBasicWebServiceService serviceService=new TBasicWebServiceService(); +// TBasicWebService service = serviceService.getTBasicWebServicePort(); +// String res = service.outHOSCAN(xml); +// System.out.println(res); + + return document.asXML(); + } - } /** * 动态调用getInfosByUserId方法 diff --git a/power-admin/src/main/resources/config/applicationContext.xml b/power-admin/src/main/resources/config/applicationContext.xml index 19a60df..d447c3e 100644 --- a/power-admin/src/main/resources/config/applicationContext.xml +++ b/power-admin/src/main/resources/config/applicationContext.xml @@ -34,6 +34,8 @@ + + diff --git a/power-admin/src/main/resources/config/config.properties b/power-admin/src/main/resources/config/config.properties index ece2fc1..b3ae042 100644 --- a/power-admin/src/main/resources/config/config.properties +++ b/power-admin/src/main/resources/config/config.properties @@ -9,8 +9,8 @@ TOKEN_EXPIRE_TIME = 3600000 ##################################################服务器ip########################################################## #通用服务器IP与通用服务器端口 -SERVER_IP = 192.168.1.3 -SERVER_PORT = 8081 +SERVER_IP = localhost +SERVER_PORT = 8080 #power权限系统ip POWER_IP = ${SERVER_IP} @@ -25,7 +25,7 @@ EMRMEDICALRECORD_PORT = 8082 #病案管理系统ip EMRRECORD_IP = ${SERVER_IP} #病案管理系统端口 -EMRRECORD_PORT = 8083 +EMRRECORD_PORT = 8081 #病案复印预约ip EMRAPPLYCOPY_IP = ${SERVER_IP} diff --git a/power-admin/src/main/resources/config/jdbc.properties b/power-admin/src/main/resources/config/jdbc.properties index e5818e6..af7fe3a 100644 --- a/power-admin/src/main/resources/config/jdbc.properties +++ b/power-admin/src/main/resources/config/jdbc.properties @@ -1,5 +1,5 @@ jdbc.driver=com.mysql.jdbc.Driver -jdbc.url=jdbc\:mysql\://192.168.1.3\:3306/nanfang_hospital?useUnicode\=true&characterEncoding\=utf-8 +jdbc.url=jdbc:mysql://localhost/nanfang_hospital?useUnicode\=true&characterEncoding\=utf-8 jdbc.username=root jdbc.password=mamba1998 diff --git a/power-admin/src/main/resources/config/mybatis-config.xml b/power-admin/src/main/resources/config/mybatis-config.xml index dc9fa93..69dadef 100644 --- a/power-admin/src/main/resources/config/mybatis-config.xml +++ b/power-admin/src/main/resources/config/mybatis-config.xml @@ -12,7 +12,8 @@ - + + diff --git a/power-dao/src/main/java/com/manage/dao/InvokeParam.java b/power-dao/src/main/java/com/manage/dao/InvokeParam.java new file mode 100644 index 0000000..43d8408 --- /dev/null +++ b/power-dao/src/main/java/com/manage/dao/InvokeParam.java @@ -0,0 +1,32 @@ +package com.manage.dao; + +public class InvokeParam { + private String url; + private String method; + private String xml; + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getXml() { + return xml; + } + + public void setXml(String xml) { + this.xml = xml; + } +} + diff --git a/power-service/src/main/java/com/manage/service/WeatherServiceInter.java b/power-service/src/main/java/com/manage/service/WeatherServiceInter.java new file mode 100644 index 0000000..a3828ff --- /dev/null +++ b/power-service/src/main/java/com/manage/service/WeatherServiceInter.java @@ -0,0 +1,13 @@ +package com.manage.service; + +import javax.jws.WebMethod; +import javax.jws.WebService; + +@WebService +public interface WeatherServiceInter { + + @WebMethod + public String getWeatherByCityname(String name); + + +} diff --git a/power-service/src/main/java/com/manage/service/ipml/WeatherServiceInterImpl.java b/power-service/src/main/java/com/manage/service/ipml/WeatherServiceInterImpl.java new file mode 100644 index 0000000..7c9bd30 --- /dev/null +++ b/power-service/src/main/java/com/manage/service/ipml/WeatherServiceInterImpl.java @@ -0,0 +1,11 @@ +package com.manage.service.ipml; + +import com.manage.service.WeatherServiceInter; + +public class WeatherServiceInterImpl implements WeatherServiceInter { + @Override + public String getWeatherByCityname(String name) { + System.out.println(name+""); + return name+""; + } +}