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 3579594..39c8456 100644 --- a/power-admin/src/main/java/com/manage/controller/FontController.java +++ b/power-admin/src/main/java/com/manage/controller/FontController.java @@ -1,6 +1,6 @@ package com.manage.controller; - import com.fasterxml.jackson.databind.ObjectMapper; + import com.manage.dao.Power_NoticeMapper; import com.manage.dao.Power_UserMapper; import com.manage.encrypt.Base64; @@ -16,15 +16,21 @@ import com.manage.util.ExceptionPrintUtil; import com.manage.util.Msg; 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; import org.springframework.stereotype.Controller; import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; +import java.io.StringReader; +import java.text.SimpleDateFormat; import java.util.*; /** @@ -63,6 +69,10 @@ public class FontController { @Autowired private Power_DeptService power_deptService; + public static Class getUserClass(Object root) { + return null; + } + /** * 2.1 * @ProjectName: getRolePowerTreeBySysFlag @@ -363,6 +373,227 @@ public class FontController { return Msg.success().add("list",list); } + +// 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 + * @ProjectName: getToken + * @Description: 获取token + * @Param 无 + * @Return Msg + * @Author: 曾文和 + * @CreateDate: 2019/11/06 10:00 + * @UpdateUser: 更新者 + * @UpdateDate: 2019/11/06 10:00 + * @UpdateRemark: 更新说明 + * @Version: 1.0 + */ + @RequestMapping(value = "getTokenForHis",method = RequestMethod.POST) + @ResponseBody + public Msg getTokenForHis(@RequestParam("username") String userName,@RequestParam("password")String password) throws Exception{ + if(StringUtils.isBlank(userName)){ + return Msg.fail("用户名不能为空"); + } + if(StringUtils.isBlank(password)){ + return Msg.fail("密码不能为空"); + } + //2.根据userName查询我们的用户表是否存在 + Power_UserVo userVo = new Power_UserVo(); + // 判断数据库中是否有此用户,如果没有则插入数据库 + 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("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("yyyy-MM-dd"); + userVo.setCreateDate(fmt.format(new Date())); + //插入00 + userMapper.insert(userVo); + } + String token = setToken(userVo); + 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) { + + //创建连接工厂 + JAXDynamicClientFactory dcf = JAXDynamicClientFactory.newInstance(); + //创建客户端 + Object[] objects = new Object[0]; + + 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); + //动态调用getInfosByUserId方法 + //获取请求参数xml字符串 + String xmlStr = getXml(userName,password); + objects = client.invoke("HIPManagerInfo","S0110", xmlStr); + //应答信息 + String result = objects[0].toString(); + System.out.println(result); + //新用户存到数据库 + if (result.contains("成功")) { + return result; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(null != client) { + client.destroy(); + } + } + return null; + } + + + private String getXml(String userName, String password) { + + // 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(); + } + + private String setToken(Power_UserVo userVo){ + String date = String.valueOf(DateUtils.getDate()); + String token = Base64.encode(MD5.KL(date)); + List list = null; + List menuList = new ArrayList<>(); + Set menus = new TreeSet<>(); + if (userVo.getRoleId().equals(0) || userVo.getRoleId().equals(-100)) { + list = powerMenuService.queryAllPowerMenu(null,userVo.getRoleId()); + } else { + list = powerMenuService.selectUserAndRoleMenuListPower(userVo.getUserId(),null); + } + if(null != list && !list.isEmpty()){ + for (Power_Menu powerMenu : list) { + User_Dept_Menu deptMenu = new User_Dept_Menu(); + String menuUrl = powerMenu.getMenuUrl(); + if (StringUtils.isNotBlank(menuUrl)) { + BeanUtils.copyProperties(powerMenu, deptMenu); + deptMenu.setMethodParent(powerMenu.getParentId()); + menuList.add(deptMenu); + } + if (StringUtils.isNotBlank(powerMenu.getMethod())) { + menus.add(powerMenu.getMenuUrl()); + } + } + } + userVo.setMenuList(menuList); + userVo.setMenus(menus); + + //设置科室 + StringBuilder powerDepts = new StringBuilder(); + List powerDeptList = power_deptService.selectByPrimaryKeys(userVo.getDeptId()); + for(int j = 0;j < powerDeptList.size();j++){ + if(j