Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/DatasyncConstant.java =================================================================== diff -u -r35441 -r39349 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 35441) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 39349) @@ -21,6 +21,26 @@ public final static String MethodName_HospitalNumber = "operationScheduleInfoQuery"; /** + * 接口方法名:获取科室字典(作为输入参数) + */ + public final static String MethodName_OrgUnit = "getDeptDict"; + + /** + * 接口方法名:获取员工字典(作为输入参数) + */ + public final static String MethodName_User = "getStaffDict"; + + /** + * 科室人员同步的入参:机构代码,必填 + */ + public final static String orgCode = "45726533-2"; + + /** + * 院区代码 + */ + public final static String districtCode = "01"; + + /** * 每页行数(不超过1200)必填 */ public final static Integer PageSize = 1000; Index: ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/spring/applicationContext-his.xml =================================================================== diff -u -r35441 -r39349 --- ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/spring/applicationContext-his.xml (.../applicationContext-his.xml) (revision 35441) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/spring/applicationContext-his.xml (.../applicationContext-his.xml) (revision 39349) @@ -56,18 +56,8 @@ - - - - - - - - - - - + + " + param = "" + "" + args[0] + "" + "" + DatasyncConstant.PageSize + "" - + "" + DatasyncConstant.PageIndex + "" + + "" + pageIndex + "" + "]]>"; - inputXml = "" - + "" - + "" - + "" - + "" - + "" + methodName + "XML" + DatasyncConstant.AccessKey + "]]>" - + "" - + "" - + param - + "" - + "" - +"" - +""; + } else if(DatasyncConstant.MethodName_OrgUnit.equals(methodName)){ + // 查询所有科室 + // 科室代码、科室名称为空返回所有 + param = "" + + "" + DatasyncConstant.orgCode + "" + + "" + DatasyncConstant.districtCode + "" + + "" + + "" + + "" + + "]]>"; + } else if(DatasyncConstant.MethodName_User.equals(methodName)){ + // 查询所有人员 + // 科室代码、员工姓名、员工代码、工作类别编码为空显示所有 + param = "" + + "" + DatasyncConstant.orgCode + "" + + "" + DatasyncConstant.districtCode + "" + + "" + + "" + + "" + + "" + + "" + + "]]>"; } else { throw new RuntimeException("不存在此methodName:" + methodName); } + String inputXml = "" + + "" + + "" + + "" + + "" + + "" + methodName + "XML" + DatasyncConstant.AccessKey + "]]>" + + "" + + "" + + param + + "" + + "" + +"" + +""; return inputXml; } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/SyncOrgUnitAndUserDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/SyncOrgUnitAndUserDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/zsszyy/SyncOrgUnitAndUserDaoImpl.java (revision 39349) @@ -0,0 +1,253 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.zsszyy; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.collections.MapUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Node; +import org.dom4j.XPath; + +import net.sf.json.JSONObject; + +import com.forgon.disinfectsystem.datasynchronization.dao.SyncOrgUnitAndUserDao; +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.model.UserVo; +import com.forgon.tools.string.StringTools; + +/** + * 人员及科室信息同步接口 + * ZSSZYY-172 + */ +public class SyncOrgUnitAndUserDaoImpl implements SyncOrgUnitAndUserDao { + + Logger logger = Logger.getLogger(SyncOrgUnitAndUserDaoImpl.class); + + @Override + public UserVo[] getAllUser() { + UserVo[] userVoArray = null; + List userVoList = new ArrayList(); + try{ + String inputXml = WebServiceClientHelper.buildInputXml(DatasyncConstant.MethodName_User, 0, ""); + logger.info("用户信息接口请求信息:" + inputXml); + String xmlResult = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebServiceAddress, inputXml); + /*String xmlResult = "" + + "" + + "" + + "Z1032" + + "诸莉敏" + + "21409" + + "外二科护理单元" + + "" + + "" + + "Z1037" + + "吴嘉琪" + + "24109" + + "重症医学科护理单元" + + "" + + "" + + "]]>";*/ + logger.info("用户信息接口返回信息:" + xmlResult); + + if(StringUtils.isBlank(xmlResult)){ + logger.info("用户信息接口同步失败,接口返回为空!"); + return null; + } + + int startIndex = xmlResult.indexOf(""); + int endIndex = xmlResult.indexOf(""); + + if(startIndex == -1 || endIndex == -1 || endIndex < startIndex){ + logger.info("同步用户信息失败,接口返回信息没有节点!"); + return null; + } + + xmlResult = xmlResult.substring(startIndex, endIndex + "".length()); + Document document = DocumentHelper.parseText(xmlResult); + String itemXpath = "/returnContents/returnContent"; + XPath xpath = document.createXPath(itemXpath); + @SuppressWarnings("unchecked") + List nodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isNotEmpty(nodeList)){ + Map> userCodingOrgUnitCodingMap = new HashMap>(); + for(int i=1;i<=nodeList.size();i++){ + String msgXpath = "/returnContents/returnContent[" + i + "]"; + // 用户编码 + String codingXpath = msgXpath + "/staffCode"; + // 用户名称 + String nameXpath = msgXpath + "/staffName"; + // 用户所属科室编码 + String orgUnitCodingXpath = msgXpath + "/adminDeptCode"; + + String coding = WebServiceClientHelper.processDataByXpath(document, codingXpath); + String name = WebServiceClientHelper.processDataByXpath(document, nameXpath); + String orgUnitCoding = WebServiceClientHelper.processDataByXpath(document, orgUnitCodingXpath); + UserVo userVo = new UserVo(); + userVo.setCoding(coding); + userVo.setName(name); + userVo.setOrgUnitCoding(orgUnitCoding); + //如果人员工号或名称为空,则忽略该条数据 + if(StringUtils.isBlank(userVo.getName()) || StringUtils.isBlank(userVo.getCoding())){ + continue; + } + if(StringUtils.isNotBlank(orgUnitCoding)){ + Set orgUnitCodingSet = userCodingOrgUnitCodingMap.get(userVo.getCoding()); + if(orgUnitCodingSet == null){ + orgUnitCodingSet = new LinkedHashSet(); + } + orgUnitCodingSet.add(orgUnitCoding); + userCodingOrgUnitCodingMap.put(userVo.getCoding(), orgUnitCodingSet); + } + userVoList.add(userVo); + } + if(MapUtils.isNotEmpty(userCodingOrgUnitCodingMap) && CollectionUtils.isNotEmpty(userVoList)){ + for (UserVo userVo : userVoList) { + Set orgUnitCodingSet = userCodingOrgUnitCodingMap.get(userVo.getCoding()); + if(CollectionUtils.isEmpty(orgUnitCodingSet)){ + continue; + } + userVo.setOrgUnitCoding(StringTools.join(orgUnitCodingSet, ";")); + } + } + userVoArray = new UserVo[userVoList.size()]; + userVoList.toArray(userVoArray); + } + + }catch(Exception e){ + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + logger.error("同步人员信息失败:" + exception); + e.printStackTrace(); + } + + return userVoArray; + } + + @Override + public OrgUnitVo[] getAllOrgUnit() { + OrgUnitVo[] orgUnitVoArray = null; + List orgUnitVoList = new ArrayList(); + try { + String inputXml = WebServiceClientHelper.buildInputXml(DatasyncConstant.MethodName_OrgUnit, 0, ""); + logger.info("科室信息接口请求信息:" + inputXml); + String xmlResult = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebServiceAddress, inputXml); + /*String xmlResult = "" + + "" + + "AA" + + "查询返回" + + "" + + "" + + "45726533-2" + + "01" + + "21409" + + "外二科护理单元1" + + "" + + "" + + "" + + "" + + "45726533-2" + + "01" + + "24109" + + "重症医学科护理单元1" + + "" + + "" + + "" + + "" + + "]]>";*/ + logger.info("科室信息接口返回信息:" + xmlResult); + if(StringUtils.isBlank(xmlResult)){ + logger.info("科室信息接口返回信息为空!"); + return null; + } + + int startIndex = xmlResult.indexOf(""); + if(startIndex == -1){ + logger.info("科室信息接口返回信息没有标签!"); + return null; + } + int endIndex = xmlResult.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + logger.info("科室信息接口返回信息没有标签"); + return null; + } + String xmlString = xmlResult.substring(startIndex, endIndex + "".length()); + if(StringUtils.isBlank(xmlString)){ + logger.info("科室信息接口返回信息为空!" + xmlString); + return null; + } + + Document document = DocumentHelper.parseText(xmlString); + String itemXpath = "/returnContents/returnContent"; // 返回结果可能存在多条住院病人信息 + XPath xpath = document.createXPath(itemXpath); + @SuppressWarnings("unchecked") + List nodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isNotEmpty(nodeList)){ + for(int i=1;i<=nodeList.size();i++){ + String msgXpath = "/returnContents/returnContent[" + i + "]"; + // 科室编码 + String codingXpath = msgXpath + "/deptCode"; + // 科室名称 + String nameXpath = msgXpath + "/deptName"; + // 上级科室代码 + String parentCodingXpath = msgXpath + "/upperDeptCode"; + + String coding = WebServiceClientHelper.processDataByXpath(document, codingXpath); + String name = WebServiceClientHelper.processDataByXpath(document, nameXpath); + String parentCoding = WebServiceClientHelper.processDataByXpath(document, parentCodingXpath); + OrgUnitVo orgVo = new OrgUnitVo(); + orgVo.setCoding(coding); + orgVo.setName(name); + orgVo.setParentCoding(parentCoding); + + //科室编码与上级科室编码相同时,默认其上级科室编码为空 + if(StringUtils.equals(orgVo.getCoding(), orgVo.getParentCoding())){ + orgVo.setParentCoding(null); + } + //如果科室编码或名称为空,则忽略该条数据 + if(StringUtils.isBlank(orgVo.getCoding()) || StringUtils.isBlank(orgVo.getName())){ + continue; + } + orgUnitVoList.add(orgVo); + } + orgUnitVoArray = new OrgUnitVo[orgUnitVoList.size()]; + orgUnitVoList.toArray(orgUnitVoArray); + }else{ + throw new RuntimeException("未找到科室数据..."); + } + + } catch (Exception e) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + e.printStackTrace(new PrintStream(baos)); + String exception = baos.toString(); + logger.error("获取科室信息失败," + exception); + } + return orgUnitVoArray; + } + + @Override + public OrgUnitVo[] paramToOrgUnitVos(String param) { + return null; + } + + @Override + public UserVo[] paramToUserVos(String param) { + return null; + } + + @Override + public JSONObject buttjoinResponse(Boolean success, String message, String param) { + return null; + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/config.js =================================================================== diff -u -r36493 -r39349 --- ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/config.js (.../config.js) (revision 36493) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/config.js (.../config.js) (revision 39349) @@ -114,6 +114,8 @@ hiddenUserSyncButton:true, //是否禁用科室同步 hiddenOrgunitSyncButton:true, +//同步组织机构与用户数据 +showOrgunitAndUserSyncButton:true, //外来器械允许申请多套器械 allowApplyMultipleForeignTousse:true, //待装配任务列表的列配置