|
|
|
@ -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="<Request><SourceSystem>*******</SourceSystem><TargetSystem>医院信息平台</TargetSystem><username>sj</username><password>1C821B22D0402F317E40D93213C66843</password></Request>";
|
|
|
|
|
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="<Request><SourceSystem>*******</SourceSystem><TargetSystem>医院信息平台</TargetSystem><username>sj</username><password>1C821B22D0402F317E40D93213C66843</password></Request>";
|
|
|
|
|
// 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<Power_UserVo> 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<Power_User> 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<String, String> parseXml2Map(String xml, Map<String, String> 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<String,String> map = new HashMap<>();
|
|
|
|
|
Map<String, String> 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="<Request> <SourceSystem>"+"嘉时软件"+"" +
|
|
|
|
|
"</SourceSystem> <TargetSystem>医院信息平台</TargetSystem> " +
|
|
|
|
|
" <username>"+userName+"</username> <password>"+password+"" +
|
|
|
|
|
"</password> </Request> ";
|
|
|
|
|
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方法
|
|
|
|
|