Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManager.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManager.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManager.java (revision 38438) @@ -0,0 +1,21 @@ +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebResult; +import javax.jws.WebService; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.ws.RequestWrapper; +import javax.xml.ws.ResponseWrapper; + +@WebService(targetNamespace = "http://www.gzsums.net/hie", name = "HieService") +@XmlSeeAlso({ObjectFactory.class}) +public interface HieServiceManager { + + @WebMethod + @RequestWrapper(localName = "hie", targetNamespace = "http://www.gzsums.net/hie", className = "com.forgon.disinfectsystem.webservice.datasync.zsyy.Hies") + @ResponseWrapper(localName = "hieResponse", targetNamespace = "http://www.gzsums.net/hie", className = "com.forgon.disinfectsystem.webservice.datasync.zsyy.HieResponse") + @WebResult(name = "return", targetNamespace = "") + public Response hie(@WebParam(name = "arg0")Request request); + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/spring/webservice-cxf.xml =================================================================== diff -u -r28754 -r38438 --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 28754) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 38438) @@ -40,7 +40,16 @@ + + + + + + \ No newline at end of file Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieServiceManagerImpl.java (revision 38438) @@ -0,0 +1,404 @@ +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.jws.WebService; + +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 org.springframework.beans.factory.annotation.Autowired; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.OrgUnit; +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.model.UserVo; +import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; +import com.forgon.exception.SystemException; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.SqlUtils; + +@WebService( + serviceName = "HieService", + portName = "IHieServicePort", + targetNamespace = "http://www.gzsums.net/hie", + endpointInterface = "com.forgon.disinfectsystem.webservice.datasync.zsyy.HieServiceManager" + ) +public class HieServiceManagerImpl implements HieServiceManager { + + private final Logger logger = Logger.getLogger(this.getClass()); + + @Autowired + private LogManager appLogManager; + + /** + * 错误编码:成功 + */ + public static final String RESULT_CODE_SUCCESS = "1"; + + /** + * 错误编码:失败 + */ + public static final String RESULT_CODE_FAIL = "2"; + + /** + * 主数据系统新人员字典 + */ + public static final String MSG_TYPE_HIE_NEW_HRP_EMPLOYEES = "hie_newhrpemployees"; + + /** + * 主数据系统科室字典 + */ + public static final String MSG_TYPE_HIE_HRP_DEPARTMENT = "hie_hrpdepartment"; + + @Autowired + private ObjectDao objectDao; + + @Autowired + private DataSynchronizationManager dataSynchronizationManager; + + @Override + public Response hie(Request request) { + String resultCode = RESULT_CODE_SUCCESS; + String errorMessage = ""; + try { + logger.debug("param request=" + request.toString()); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用推送科室人员同步接口,参数request=" + request.toString()); + + String msgType = request.getRequestHeader().getMsgType(); + if(StringUtils.equals(msgType, MSG_TYPE_HIE_HRP_DEPARTMENT)){ + syncOrgUnit(request.getRequestBody()); + }else if(StringUtils.equals(msgType, MSG_TYPE_HIE_NEW_HRP_EMPLOYEES)){ + syncUser(request.getRequestBody()); + }else{ + throw new SystemException("暂不支持的消息类型:" + msgType); + } + } catch (Exception e) { + resultCode = RESULT_CODE_FAIL; + errorMessage = "同步失败:" + e.getMessage(); + } + Response responce = new Response(); + //本次通讯结果 + String responseBody = buildResponseBody(resultCode, errorMessage); + responce.setResponseBody(responseBody); + //设置请求头信息 + ResponseHeader responseHeader = buildResponseHeaderByRequest(request); + responce.setResponseHeader(responseHeader); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用推送科室人员同步接口,参数responce=" + responce.toString()); + return responce; + } + + /** + * 同步用户,每次只同步一个用户 + * @param requestBody + * @throws Exception + */ + private void syncUser(String requestBody) throws Exception { + List userVoList = buildUserVo(requestBody); + if(CollectionUtils.isEmpty(userVoList)){ + return; + } + UserVo[] allVos = new UserVo[userVoList.size()]; + for(int i=0;i buildUserVo(String requestBody) throws Exception { + List userVoList = new ArrayList(); + + if(StringUtils.isBlank(requestBody)){ + throw new SystemException("responseBody为必填项"); + } + + Document document = DocumentHelper.parseText(requestBody.trim()); + + String subjectXpath = "/newhrpemployees"; + XPath xpath = document.createXPath(subjectXpath); + List subjectNodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isEmpty(subjectNodeList)){ + return userVoList; + } + for(int i=1;i<=subjectNodeList.size();i++){ + String codingXpath = subjectXpath + "[" + i + "]" + "/UserID"; + String nameXpath = subjectXpath + "[" + i + "]" + "/UserName"; + String deptCodeXpath = subjectXpath + "[" + i + "]" + "/OrgCode"; + + String coding = processDataByXpath(document, codingXpath); + String name = processDataByXpath(document, nameXpath); + String deptCode = processDataByXpath(document, deptCodeXpath); + + if(StringUtils.isBlank(coding)){ + throw new RuntimeException("人事工号(工号)不能为空!"); + } + if(StringUtils.isBlank(name)){ + throw new RuntimeException("姓名不能为空!"); + } + if(StringUtils.isBlank(deptCode)){ + throw new RuntimeException("编制科室代码(所属科室编码)不能为空!"); + } + + UserVo vo = new UserVo(); + vo.setCoding(coding); + vo.setName(name); + vo.setDeptCode(deptCode); + userVoList.add(vo); + } + + //验证用户所属科室是否存在 + validateUserVo(userVoList); + + return userVoList; + + } + + /** + * 验证用户所属科室是否存在 + * @param userVoList + */ + private void validateUserVo(List userVoList) { + if(CollectionUtils.isEmpty(userVoList)){ + return; + } + Set deptCodeSet = new HashSet(); + for (UserVo vo : userVoList) { + String deptCode = vo.getDeptCode(); + if(StringUtils.isNotBlank(deptCode)){ + deptCodeSet.add(deptCode); + } + } + if(CollectionUtils.isEmpty(deptCodeSet)){ + return; + } + Map orgCodingIdMap = new HashMap(); + StringBuffer sql = new StringBuffer(); + sql.append("select po.id, po.orgUnitCoding from "); + sql.append(OrgUnit.class.getSimpleName()); + sql.append(" po where "); + sql.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgUnitCoding", deptCodeSet)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + Long id = rs.getLong("id"); + String orgUnitCoding = rs.getString("orgUnitCoding"); + if(DatabaseUtil.isPoIdValid(id) + && StringUtils.isNotBlank(orgUnitCoding)){ + orgCodingIdMap.put(orgUnitCoding, id); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + for (UserVo vo : userVoList) { + String deptCode = vo.getDeptCode(); + if(StringUtils.isNotBlank(deptCode)){ + if(orgCodingIdMap.get(deptCode) == null){ + throw new SystemException("不存在科室编码为:" + deptCode + "的科室"); + } + } + } + } + + /** + * 同步科室,每次只同步一个科室 + * @param requestBody + * @throws Exception + */ + private void syncOrgUnit(String requestBody) throws Exception { + + List orgUnitVoList = buildOrgUnitVo(requestBody); + if(CollectionUtils.isEmpty(orgUnitVoList)){ + return; + } + //同步科室 + OrgUnitVo[] allVos = new OrgUnitVo[orgUnitVoList.size()]; + for(int i=0;i buildOrgUnitVo(String requestBody) throws Exception { + if(StringUtils.isBlank(requestBody)){ + throw new SystemException("responseBody为必填项"); + } + + List orgUnitVoList = new ArrayList(); + Document document = DocumentHelper.parseText(requestBody.trim()); + + String subjectXpath = "/hrpdepartment"; + XPath xpath = document.createXPath(subjectXpath); + List subjectNodeList = xpath.selectNodes(document, xpath); + if(CollectionUtils.isEmpty(subjectNodeList)){ + return orgUnitVoList; + } + + Set parentIDSet = new HashSet(); + for(int i=1;i<=subjectNodeList.size();i++){ + String idXpath = subjectXpath + "[" + i + "]" + "/ID"; + String orgUnitCodeXpath = subjectXpath + "[" + i + "]" + "/OrgCode"; + String deptnameXpath = subjectXpath + "[" + i + "]" + "/OrgName"; + String parentIDXpath = subjectXpath + "[" + i + "]" + "/ParentID"; + + + String coding = processDataByXpath(document, orgUnitCodeXpath); + String name = processDataByXpath(document, deptnameXpath); + String orgForeignKey = processDataByXpath(document, idXpath); + String parentOrgForeignKey = processDataByXpath(document, parentIDXpath); + + if(StringUtils.isBlank(coding)){ + throw new RuntimeException("科室编码不能为空!"); + } + if(StringUtils.isBlank(name)){ + throw new RuntimeException("科室名称不能为空!"); + } + + if(StringUtils.isNotBlank(parentOrgForeignKey)){ + parentIDSet.add(parentOrgForeignKey); + } + + OrgUnitVo orgUnitVo = new OrgUnitVo(); + //科室编码 + orgUnitVo.setCoding(coding); + //科室名称 + orgUnitVo.setName(name); + //科室ID + orgUnitVo.setOrgForeignKey(orgForeignKey); + //上级科室ID + orgUnitVo.setParentOrgForeignKey(parentOrgForeignKey); + + orgUnitVoList.add(orgUnitVo); + } + //设置上级科室编码 + setParentCoding(orgUnitVoList, parentIDSet); + + return orgUnitVoList; + } + + /** + * 设置上级科室编码 + * @param orgUnitVoList + * @param parentIDSet + */ + private void setParentCoding(List orgUnitVoList, Set parentOrgUnitForeignKey) { + if(CollectionUtils.isEmpty(parentOrgUnitForeignKey) || CollectionUtils.isEmpty(orgUnitVoList)){ + return; + } + Map orgUnitForeignKeyCodingMap = new HashMap(); + StringBuffer sql = new StringBuffer(); + sql.append("select po.id, po.orgForeignKey, po.orgUnitCoding from "); + sql.append(OrgUnit.class.getSimpleName()); + sql.append(" po where "); + sql.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgForeignKey", parentOrgUnitForeignKey)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + String orgForeignKey = rs.getString("orgForeignKey"); + String orgUnitCoding = rs.getString("orgUnitCoding"); + if(StringUtils.isNotBlank(orgForeignKey) + && StringUtils.isNotBlank(orgUnitCoding)){ + orgUnitForeignKeyCodingMap.put(orgForeignKey, orgUnitCoding); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + //设置上级科室编码 + for (OrgUnitVo vo : orgUnitVoList) { + String parentOrgForeignKey = vo.getParentOrgForeignKey(); + if(StringUtils.isBlank(parentOrgForeignKey)){ + continue; + } + vo.setParentCoding(orgUnitForeignKeyCodingMap.get(parentOrgForeignKey)); + } + + } + + /** + * 构建通讯结果 + * @param resultCode 错误编码 + * @param errorMessage 错误消息 + * @return + */ + private String buildResponseBody(String resultCode, String errorMessage) { + String responseBody = String.format("%s%s", + resultCode, errorMessage); + return responseBody; + } + + /** + * 根据请求信息构建返回头信息 + * @param request + * @return + */ + private ResponseHeader buildResponseHeaderByRequest(Request request) { + ResponseHeader header = new ResponseHeader(); + header.setErrCode("0"); + header.setErrMessage(""); + RequestHeader requestHeader = request.getRequestHeader(); + if(requestHeader != null){ + header.setMsgId(requestHeader.getMsgId()); + header.setMsgPriority(requestHeader.getMsgPriority()); + header.setMsgType(requestHeader.getMsgType()); + header.setMsgVersion(requestHeader.getMsgVersion()); + header.setReceiver(requestHeader.getSender()); + header.setSender(requestHeader.getReceiver()); + } + header.setResponseTime(DateTools.getCurrentDayByFormat("yyyyMMddHHmmss")); + return header; + } + + /** + * 解析xml字段 + * @param document + * @param nameSpaceURIMap + * @param xpathExp + * @return + */ + private String processDataByXpath(Document document, String xpathExp) { + if ((StringUtils.isNotBlank(xpathExp)) && (document != null)) { + XPath xpath = document.createXPath(xpathExp); + Node node = xpath.selectSingleNode(document); + if (node != null) { + return node.getStringValue(); + } + } + return ""; + } + + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Hies.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Hies.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Hies.java (revision 38438) @@ -0,0 +1,60 @@ + +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

hies complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="hies">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.gzsums.net/hie}request" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "hies", propOrder = { + "arg0" +}) +public class Hies { + + protected Request arg0; + + /** + * 获取arg0属性的值。 + * + * @return + * possible object is + * {@link Request } + * + */ + public Request getArg0() { + return arg0; + } + + /** + * 设置arg0属性的值。 + * + * @param value + * allowed object is + * {@link Request } + * + */ + public void setArg0(Request value) { + this.arg0 = value; + } + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Response.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Response.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Response.java (revision 38438) @@ -0,0 +1,93 @@ + +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

response complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="response">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="responseBody" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="responseHeader" type="{http://www.gzsums.net/hie}responseHeader" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "response", propOrder = { + "responseBody", + "responseHeader" +}) +public class Response { + + protected String responseBody; + protected ResponseHeader responseHeader; + + /** + * 获取responseBody属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getResponseBody() { + return responseBody; + } + + /** + * 设置responseBody属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setResponseBody(String value) { + this.responseBody = value; + } + + /** + * 获取responseHeader属性的值。 + * + * @return + * possible object is + * {@link ResponseHeader } + * + */ + public ResponseHeader getResponseHeader() { + return responseHeader; + } + + /** + * 设置responseHeader属性的值。 + * + * @param value + * allowed object is + * {@link ResponseHeader } + * + */ + public void setResponseHeader(ResponseHeader value) { + this.responseHeader = value; + } + + @Override + public String toString() { + return "Response [responseBody=" + responseBody + ", responseHeader=" + + responseHeader + "]"; + } + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/ObjectFactory.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/ObjectFactory.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/ObjectFactory.java (revision 38438) @@ -0,0 +1,102 @@ +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the net.gzsums.hie package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private final static QName _Hie_QNAME = new QName("http://www.gzsums.net/hie", "hie"); + private final static QName _HieResponse_QNAME = new QName("http://www.gzsums.net/hie", "hieResponse"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: net.gzsums.hie + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link Hies } + * + */ + public Hies createHies() { + return new Hies(); + } + + /** + * Create an instance of {@link HieResponse } + * + */ + public HieResponse createHieResponse() { + return new HieResponse(); + } + + /** + * Create an instance of {@link Request } + * + */ + public Request createRequest() { + return new Request(); + } + + /** + * Create an instance of {@link RequestHeader } + * + */ + public RequestHeader createRequestHeader() { + return new RequestHeader(); + } + + /** + * Create an instance of {@link Response } + * + */ + public Response createResponse() { + return new Response(); + } + + /** + * Create an instance of {@link ResponseHeader } + * + */ + public ResponseHeader createResponseHeader() { + return new ResponseHeader(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Hies }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.gzsums.net/hie", name = "hie") + public JAXBElement createHie(Hies value) { + return new JAXBElement(_Hie_QNAME, Hies.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link HieResponse }{@code >}} + * + */ + @XmlElementDecl(namespace = "http://www.gzsums.net/hie", name = "hieResponse") + public JAXBElement createHieResponse(HieResponse value) { + return new JAXBElement(_HieResponse_QNAME, HieResponse.class, null, value); + } + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Request.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Request.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/Request.java (revision 38438) @@ -0,0 +1,93 @@ + +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

request complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="request">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="requestBody" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="requestHeader" type="{http://www.gzsums.net/hie}requestHeader" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "request", propOrder = { + "requestBody", + "requestHeader" +}) +public class Request { + + protected String requestBody; + protected RequestHeader requestHeader; + + /** + * 获取requestBody属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getRequestBody() { + return requestBody; + } + + /** + * 设置requestBody属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRequestBody(String value) { + this.requestBody = value; + } + + /** + * 获取requestHeader属性的值。 + * + * @return + * possible object is + * {@link RequestHeader } + * + */ + public RequestHeader getRequestHeader() { + return requestHeader; + } + + /** + * 设置requestHeader属性的值。 + * + * @param value + * allowed object is + * {@link RequestHeader } + * + */ + public void setRequestHeader(RequestHeader value) { + this.requestHeader = value; + } + + @Override + public String toString() { + return "Request [requestBody=" + requestBody + ", requestHeader=" + + requestHeader + "]"; + } + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/RequestHeader.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/RequestHeader.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/RequestHeader.java (revision 38438) @@ -0,0 +1,231 @@ + +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

requestHeader complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="requestHeader">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="msgId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="msgPriority" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="msgType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="msgVersion" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="receiver" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="requestTime" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="sender" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "requestHeader", propOrder = { + "msgId", + "msgPriority", + "msgType", + "msgVersion", + "receiver", + "requestTime", + "sender" +}) +public class RequestHeader { + + protected String msgId; + protected String msgPriority; + protected String msgType; + protected String msgVersion; + protected String receiver; + protected String requestTime; + protected String sender; + + /** + * 获取msgId属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgId() { + return msgId; + } + + /** + * 设置msgId属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgId(String value) { + this.msgId = value; + } + + /** + * 获取msgPriority属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgPriority() { + return msgPriority; + } + + /** + * 设置msgPriority属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgPriority(String value) { + this.msgPriority = value; + } + + /** + * 获取msgType属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgType() { + return msgType; + } + + /** + * 设置msgType属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgType(String value) { + this.msgType = value; + } + + /** + * 获取msgVersion属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgVersion() { + return msgVersion; + } + + /** + * 设置msgVersion属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgVersion(String value) { + this.msgVersion = value; + } + + /** + * 获取receiver属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReceiver() { + return receiver; + } + + /** + * 设置receiver属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReceiver(String value) { + this.receiver = value; + } + + /** + * 获取requestTime属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getRequestTime() { + return requestTime; + } + + /** + * 设置requestTime属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRequestTime(String value) { + this.requestTime = value; + } + + /** + * 获取sender属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSender() { + return sender; + } + + /** + * 设置sender属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSender(String value) { + this.sender = value; + } + + + @Override + public String toString() { + return "RequestHeader [msgId=" + msgId + ", msgPriority=" + msgPriority + + ", msgType=" + msgType + ", msgVersion=" + msgVersion + + ", receiver=" + receiver + ", requestTime=" + requestTime + + ", sender=" + sender + "]"; + } + +} Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java =================================================================== diff -u -r38323 -r38438 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 38323) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 38438) @@ -1014,7 +1014,11 @@ // } orgUnit = new OrgUnit(); orgUnit.setOrgUnitCoding(vo.coding);// 部门编码 - orgUnit.setOrgForeignKey(vo.coding);// 部门外部ID + if(StringUtils.isNotBlank(vo.getOrgForeignKey())){ + orgUnit.setOrgForeignKey(vo.getOrgForeignKey());// 部门外部ID + }else{ + orgUnit.setOrgForeignKey(vo.coding);// 部门外部ID + } if(StringUtils.isNotBlank(vo.getSource())){//数据来源 orgUnit.setSource(vo.getSource()); }else{ Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/OrgUnitVo.java =================================================================== diff -u -r37553 -r38438 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/OrgUnitVo.java (.../OrgUnitVo.java) (revision 37553) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/OrgUnitVo.java (.../OrgUnitVo.java) (revision 38438) @@ -20,6 +20,16 @@ private Long idFromHisSync; /** + * 部门外部ID + */ + private String orgForeignKey; + + /** + * 部门外部ID + */ + private String parentOrgForeignKey; + + /** * 父科室的id */ private Long parentIdFromHisSync; @@ -222,4 +232,20 @@ public void setModifyTime(String modifyTime) { this.modifyTime = modifyTime; } + + public String getOrgForeignKey() { + return orgForeignKey; + } + + public void setOrgForeignKey(String orgForeignKey) { + this.orgForeignKey = orgForeignKey; + } + + public String getParentOrgForeignKey() { + return parentOrgForeignKey; + } + + public void setParentOrgForeignKey(String parentOrgForeignKey) { + this.parentOrgForeignKey = parentOrgForeignKey; + } } Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieResponse.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieResponse.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/HieResponse.java (revision 38438) @@ -0,0 +1,60 @@ +package com.forgon.disinfectsystem.webservice.datasync.zsyy; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

hieResponse complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="hieResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.gzsums.net/hie}response" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "hieResponse", propOrder = { + "_return" +}) +public class HieResponse { + + @XmlElement(name = "return") + protected Response _return; + + /** + * 获取return属性的值。 + * + * @return + * possible object is + * {@link Response } + * + */ + public Response getReturn() { + return _return; + } + + /** + * 设置return属性的值。 + * + * @param value + * allowed object is + * {@link Response } + * + */ + public void setReturn(Response value) { + this._return = value; + } + +} \ No newline at end of file Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/ResponseHeader.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/ResponseHeader.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/zsyy/ResponseHeader.java (revision 38438) @@ -0,0 +1,285 @@ +package com.forgon.disinfectsystem.webservice.datasync.zsyy; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

responseHeader complex type的 Java 类。 + * + *

以下模式片段指定包含在此类中的预期内容。 + * + *

+ * <complexType name="responseHeader">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="errCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="errMessage" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="msgId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="msgPriority" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="msgType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="msgVersion" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="receiver" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="responseTime" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *         <element name="sender" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "responseHeader", propOrder = { + "errCode", + "errMessage", + "msgId", + "msgPriority", + "msgType", + "msgVersion", + "receiver", + "responseTime", + "sender" +}) +public class ResponseHeader { + + protected String errCode; + protected String errMessage; + protected String msgId; + protected String msgPriority; + protected String msgType; + protected String msgVersion; + protected String receiver; + protected String responseTime; + protected String sender; + + /** + * 获取errCode属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getErrCode() { + return errCode; + } + + /** + * 设置errCode属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setErrCode(String value) { + this.errCode = value; + } + + /** + * 获取errMessage属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getErrMessage() { + return errMessage; + } + + /** + * 设置errMessage属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setErrMessage(String value) { + this.errMessage = value; + } + + /** + * 获取msgId属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgId() { + return msgId; + } + + /** + * 设置msgId属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgId(String value) { + this.msgId = value; + } + + /** + * 获取msgPriority属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgPriority() { + return msgPriority; + } + + /** + * 设置msgPriority属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgPriority(String value) { + this.msgPriority = value; + } + + /** + * 获取msgType属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgType() { + return msgType; + } + + /** + * 设置msgType属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgType(String value) { + this.msgType = value; + } + + /** + * 获取msgVersion属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getMsgVersion() { + return msgVersion; + } + + /** + * 设置msgVersion属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setMsgVersion(String value) { + this.msgVersion = value; + } + + /** + * 获取receiver属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getReceiver() { + return receiver; + } + + /** + * 设置receiver属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReceiver(String value) { + this.receiver = value; + } + + /** + * 获取responseTime属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getResponseTime() { + return responseTime; + } + + /** + * 设置responseTime属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setResponseTime(String value) { + this.responseTime = value; + } + + /** + * 获取sender属性的值。 + * + * @return + * possible object is + * {@link String } + * + */ + public String getSender() { + return sender; + } + + /** + * 设置sender属性的值。 + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setSender(String value) { + this.sender = value; + } + + + @Override + public String toString() { + return "ResponseHeader [errCode=" + errCode + ", errMessage=" + + errMessage + ", msgId=" + msgId + ", msgPriority=" + + msgPriority + ", msgType=" + msgType + ", msgVersion=" + + msgVersion + ", receiver=" + receiver + ", responseTime=" + + responseTime + ", sender=" + sender + "]"; + } + +}