Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java =================================================================== diff -u -r27832 -r29594 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 27832) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/DatasyncConstant.java (.../DatasyncConstant.java) (revision 29594) @@ -34,6 +34,11 @@ public final static String MethodName_User = "queryEmployeeInfo"; /** + * 外来器械包基础数据推送方法 + */ + public final static String MethodName_PushForeignTousseInfo = "sendForeignTousseInfo"; + + /** * 病人信息查询成功标识 */ public final static String SUCCESS_STATUS = "AA"; Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szsdsrmyy/ForeignTousseWebService.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szsdsrmyy/ForeignTousseWebService.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szsdsrmyy/ForeignTousseWebService.java (revision 29594) @@ -0,0 +1,46 @@ +package com.forgon.disinfectsystem.webservice.datasync.szsdsrmyy; + +import javax.jws.WebService; + +/** + * 深圳三院的外来器械webservice接口 + * @author ZhouPeiMian + * @since 2020-09-15 + */ +@WebService +public interface ForeignTousseWebService { + + /** + * 查询外来器械包的信息(含供应商名称、联系人、外来器械包信息等) + * @return xml格式的字符串文本,格式为: + * + 1 //1表示成功,0为不成功 + //消息 + ...... //具体的数据内容 + + */ + public String sendForeignTousseInfo(); + + /** + * 查询外来器械包的信息(含供应商名称、联系人、外来器械包信息等) + * @param param 外来器械申请单的参数,格式为: + + ... + + + ... + + + ... + + + + * @return xml格式的字符串文本,格式为: + * + 1 //1表示成功,0为不成功 + //消息 + + */ + public String submitForeignTousseApplication(String param); + +} Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManager.java =================================================================== diff -u -r28878 -r29594 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManager.java (.../DataSynchronizationManager.java) (revision 28878) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManager.java (.../DataSynchronizationManager.java) (revision 29594) @@ -113,4 +113,9 @@ * 同步一次性物品定义GDSZYY-12 一次性物品接口开发 */ public void syncDisposableGoodsDefinition(); + + /** + * 外来器械包基础数据(外来器械供应商和外来器械包数据)推送(SZSDSRMYY-29) + */ + public void pushForeignTousseInfo(); } Index: ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/webservice-cxf.xml =================================================================== diff -u -r28399 -r29594 --- ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 28399) +++ ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/webservice-cxf.xml (.../webservice-cxf.xml) (revision 29594) @@ -19,12 +19,12 @@ implementor="#HIPMessageService" /> - - + + - + \ No newline at end of file Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/ForeignTousseInfoPushDao.java =================================================================== diff -u --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/ForeignTousseInfoPushDao.java (revision 0) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/ForeignTousseInfoPushDao.java (revision 29594) @@ -0,0 +1,10 @@ +package com.forgon.disinfectsystem.datasynchronization.dao; + +public interface ForeignTousseInfoPushDao { + + /** + * 外来器械包基础数据(外来器械供应商和外来器械包数据)推送 + */ + public void pushForeignTousseInfo(String input); + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szsdsrmyy/ForeignTousseWebServiceImpl.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szsdsrmyy/ForeignTousseWebServiceImpl.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szsdsrmyy/ForeignTousseWebServiceImpl.java (revision 29594) @@ -0,0 +1,477 @@ +package com.forgon.disinfectsystem.webservice.datasync.szsdsrmyy; + +import java.sql.ResultSet; +import java.util.List; + +import javax.jws.WebService; + +import jxl.common.Logger; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import com.forgon.Constants; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.basedatamanager.supplier.service.SupplierManager; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; +import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.supplier.Supplier; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.tools.GB2Alpha; +import com.forgon.tools.GB2WB; +import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.ForgonDateUtils; + +/** + * 深圳三院的外来器械webservice接口 + * @author ZhouPeiMian + * @since 2020-09-15 + */ +@WebService(endpointInterface = "com.forgon.disinfectsystem.webservice.datasync.szsdsrmyy.ForeignTousseWebService", serviceName = "/foreignTousseWebService") +public class ForeignTousseWebServiceImpl implements ForeignTousseWebService { + + private Logger logger = Logger.getLogger(this.getClass()); + @Autowired + private ObjectDao objectDao; + @Autowired + private SupplyRoomConfigManager supplyRoomConfigManager; + @Autowired + private TousseDefinitionManager tousseDefinitionManager; + @Autowired + private ForeignTousseApplicationManager foreignTousseApplicationManager; + @Autowired + private DataSynchronizationManager dataSynchronizationManager; + @Autowired + private SupplierManager supplierManager; + @Autowired + private LogManager appLogManager; + + //单号前缀 + final static String SERIALNUMBER_PREFIX = "SYNC_"; + + @Override + public String sendForeignTousseInfo() { + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的sendForeignTousseInfo方法"); + logger.debug("调用外来器械包接口的sendForeignTousseInfo方法"); + JSONObject returnJSONObject = findForeignTousseInfoData(null); + logger.debug("调用外来器械包接口的sendForeignTousseInfo方法 json result=" + returnJSONObject); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "外来器械包接口的sendForeignTousseInfo方法返回结果result=" + returnJSONObject); + //logger.debug("base64 result=" + new BASE64Encoder().encode(bo.toString().getBytes())); + XMLSerializer xmlSerializer = new XMLSerializer(); + xmlSerializer.setRootName("request"); + xmlSerializer.setTypeHintsEnabled(false); + //设置元素标签(数组内),默认e + xmlSerializer.setElementName("sendForeignTousseInfo"); + String result = xmlSerializer.write(returnJSONObject); + return buildResponceXml(result.replace("", "")); + } + + /** + * 查询外来器械包及供应商信息 + * @param supplierName 供应商名称 + * @return + */ + private JSONObject findForeignTousseInfoData(String supplierName) { + String querySql = "select sp.companyName,sp.contact,sp.cellPhone,td.id,td.name," + + " case when td.price is null or td.price = 0 then (select top 1 foreignToussePrice from "+ SupplyRoomConfig.class.getSimpleName() +" where supplyRoomType=0) else td.price end price " + + " from "+ TousseDefinition.class.getSimpleName() +" td join "+ Supplier.class.getSimpleName() +" sp on td.supplierName=sp.companyName" + + " where td.isDisable='"+ Constants.STR_NO +"' and sp.rentTousse='"+ Supplier.SUPPLIER_TYPE_RENTTOUSSE +"' and td.forDisplay=1 and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"'"; + if(StringUtils.isNotBlank(supplierName)){ + querySql += " and sp.companyName = '"+ supplierName +"' "; + } + querySql += " order by sp.companyName "; + ResultSet rs = null; + JSONObject returnJSONObject = new JSONObject(); + /*returnJSONObject.put("result" , "1"); + returnJSONObject.put("message","");*/ + JSONArray items = new JSONArray(); + try { + rs = objectDao.executeSql(querySql); + while(rs.next()){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("SUPPLIER_NAME" , rs.getString("companyName")); + jsonObject.put("CONTACT" , rs.getString("contact")); + jsonObject.put("PHONE" , rs.getString("cellPhone")); + jsonObject.put("TOUSSEDEFINITION_ID" , String.valueOf(rs.getLong("id"))); + jsonObject.put("NAME" , rs.getString("name")); + jsonObject.put("PRICE" , String.valueOf(rs.getObject("price"))); + items.add(jsonObject); + } + returnJSONObject.put("items", items); + } catch (Exception e) { + e.printStackTrace(); + returnJSONObject.put("result" , "0"); + returnJSONObject.put("message","获取外来器械包信息失败"); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return returnJSONObject; + } + + @Override + public String submitForeignTousseApplication(String param) { + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,参数param=" + param); + logger.debug("调用外来器械包接口的submitForeignTousseApplication方法,参数param=" + param); + + JSONObject returnJSONObject = new JSONObject(); + returnJSONObject.put("status" , "AE"); + returnJSONObject.put("message","成功"); + JSONObject paramJson = null; + XMLSerializer xmlSerializer = new XMLSerializer(); + xmlSerializer.setRootName("return"); + //保留元素类型标识,默认true + xmlSerializer.setTypeHintsEnabled(false); + try { + if(StringUtils.isBlank(param)){ + returnJSONObject.put("message","HOSPITAL_NUMBER节点不能为空"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "HOSPITAL_NUMBER节点不能为空"); + } + param = param.replaceAll("\t", ""); + param = param.replaceAll("\n", ""); + param = param.replaceAll("\r", ""); + XMLSerializer xmlSerializerReader = new XMLSerializer(); + paramJson = (JSONObject)xmlSerializerReader.read(param); + paramJson = paramJson.optJSONObject("controlActProcess").optJSONObject("subject").optJSONObject("request").optJSONObject("submitForeignTousseApplication"); + } catch (Exception e) { + returnJSONObject.put("message","参数格式不对"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "参数格式不对"); + } + + try { + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); + String serialNumber = SERIALNUMBER_PREFIX + paramJson.optString("SERIALNUMBER"); + + JSONArray jsonArray = new JSONArray(); + Object itemsJson = (Object)paramJson.opt("ITEMS"); + if(itemsJson == null){ + returnJSONObject.put("message","未找到ITEMS节点"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "未找到ITEMS节点"); + } + if(itemsJson instanceof JSONArray){ + JSONArray itemsJsonArray = (JSONArray)itemsJson; + if(itemsJsonArray.size() == 0){ + returnJSONObject.put("message","未找到ITEMS节点下的ITEM节点"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "未找到ITEMS节点下的ITEM节点"); + } + for (int i = 0; i < itemsJsonArray.size(); i++) { + JSONObject itemsJsonObject = itemsJsonArray.optJSONObject(i); + Long tousseDefinitionId = itemsJsonObject.optLong("TOUSSEDEFINITION_ID"); + if(!DatabaseUtil.isPoIdValid(tousseDefinitionId)){ + returnJSONObject.put("message","TOUSSEDEFINITION_ID不能为空且只能为数字"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "TOUSSEDEFINITION_ID不能为空且只能为数字"); + } + TousseDefinition tousseDefinition = (TousseDefinition)objectDao.getBySql(TousseDefinition.class.getSimpleName(), "where id=" + tousseDefinitionId); + if(tousseDefinition == null){ + returnJSONObject.put("message","未找到TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包定义"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "未找到TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包定义"); + } + if(StringUtils.equals(Constants.STR_YES, tousseDefinition.getIsDisable())){ + returnJSONObject.put("message","【"+ tousseDefinition.getName() +"】已停用,TOUSSEDEFINITION_ID为"+ tousseDefinitionId); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "【"+ tousseDefinition.getName() +"】已停用,TOUSSEDEFINITION_ID为"+ tousseDefinitionId); + } + JSONObject foreignTousseInfoJsonObject = new JSONObject(); + foreignTousseInfoJsonObject.put("amount", 1); + foreignTousseInfoJsonObject.put("tousseName", tousseDefinition.getName()); + foreignTousseInfoJsonObject.put("supplierName", itemsJsonObject.optString("SUPPLIER_NAME")); + if(!StringUtils.equals(tousseDefinition.getSupplierName(), itemsJsonObject.optString("SUPPLIER_NAME"))){ + returnJSONObject.put("message","根据TOUSSEDEFINITION_ID查询到的外来器械包的供应商名称为"+ tousseDefinition.getSupplierName() +",与所传参数的供应商名称"+ itemsJsonObject.optString("SUPPLIER_NAME") +"不一致"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "根据TOUSSEDEFINITION_ID查询到的外来器械包的供应商名称为"+ tousseDefinition.getSupplierName() +",与所传参数的供应商名称"+ itemsJsonObject.optString("SUPPLIER_NAME") +"不一致"); + } + foreignTousseInfoJsonObject.put("price", + tousseDefinition.getPrice() == null || tousseDefinition.getPrice() == 0 ? supplyRoomConfig.getForeignToussePrice() : tousseDefinition.getPrice()); + + JSONArray materialsJsonArray = new JSONArray(); + List materialInstanceList = tousseDefinition.getMaterialInstances(); + if(CollectionUtils.isNotEmpty(materialInstanceList)){ + for (MaterialInstance materialInstance : materialInstanceList) { + JSONObject materialJson = new JSONObject(); + materialJson.put("materialName", CssdUtils.getMaterialName(materialInstance.getMaterialDefinition())); + materialJson.put("amount", materialInstance.getCount()); + materialJson.put("includeImplant", materialInstance.getIsImplant()); + materialsJsonArray.add(materialJson); + } + foreignTousseInfoJsonObject.put("materials", materialsJsonArray); + }else{ + returnJSONObject.put("message","TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包无材料,基础数据有误"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包无材料,基础数据有误"); + } + jsonArray.add(foreignTousseInfoJsonObject); + } + } else if(itemsJson instanceof JSONObject){ + JSONObject itemsJsonObject = (JSONObject)itemsJson; + JSONObject itemJsonObject = itemsJsonObject.optJSONObject("ITEM"); + if(itemJsonObject == null){ + returnJSONObject.put("message","未找到ITEMS下的ITEM节点"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "未找到ITEMS下的ITEM节点"); + } + Long tousseDefinitionId = itemJsonObject.optLong("TOUSSEDEFINITION_ID"); + if(!DatabaseUtil.isPoIdValid(tousseDefinitionId)){ + returnJSONObject.put("message","TOUSSEDEFINITION_ID不能为空且只能为数字"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "TOUSSEDEFINITION_ID不能为空且只能为数字"); + } + TousseDefinition tousseDefinition = (TousseDefinition)objectDao.getBySql(TousseDefinition.class.getSimpleName(), "where id=" + tousseDefinitionId); + if(tousseDefinition == null){ + returnJSONObject.put("message","未找到TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包定义"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "未找到TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包定义"); + } + JSONObject foreignTousseInfoJsonObject = new JSONObject(); + foreignTousseInfoJsonObject.put("amount", 1); + foreignTousseInfoJsonObject.put("tousseName", tousseDefinition.getName()); + foreignTousseInfoJsonObject.put("supplierName", itemJsonObject.optString("SUPPLIER_NAME")); + if(!StringUtils.equals(tousseDefinition.getSupplierName(), itemJsonObject.optString("SUPPLIER_NAME"))){ + returnJSONObject.put("message","根据TOUSSEDEFINITION_ID查询到的外来器械包的供应商名称为"+ tousseDefinition.getSupplierName() +",与所传参数的供应商名称"+ itemJsonObject.optString("SUPPLIER_NAME") +"不一致"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "根据TOUSSEDEFINITION_ID查询到的外来器械包的供应商名称为"+ tousseDefinition.getSupplierName() +",与所传参数的供应商名称"+ itemJsonObject.optString("SUPPLIER_NAME") +"不一致"); + } + foreignTousseInfoJsonObject.put("price", + tousseDefinition.getPrice() == null || tousseDefinition.getPrice() == 0 ? supplyRoomConfig.getForeignToussePrice() : tousseDefinition.getPrice()); + + JSONArray materialsJsonArray = new JSONArray(); + List materialInstanceList = tousseDefinition.getMaterialInstances(); + if(CollectionUtils.isNotEmpty(materialInstanceList)){ + for (MaterialInstance materialInstance : materialInstanceList) { + JSONObject materialJson = new JSONObject(); + materialJson.put("materialName", CssdUtils.getMaterialName(materialInstance.getMaterialDefinition())); + materialJson.put("amount", materialInstance.getCount()); + materialJson.put("includeImplant", materialInstance.getIsImplant()); + materialsJsonArray.add(materialJson); + } + foreignTousseInfoJsonObject.put("materials", materialsJsonArray); + }else{ + returnJSONObject.put("message","TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包无材料,基础数据有误"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "TOUSSEDEFINITION_ID为"+ tousseDefinitionId +"的外来器械包无材料,基础数据有误"); + } + jsonArray.add(foreignTousseInfoJsonObject); + }else{ + returnJSONObject.put("message","所传的ITEMS的格式有误"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "所传的ITEMS的格式有误"); + } + //供应商联系人、供应商联系电话 + String supplierContactUser = null, supplierContactPhone = null; + //查询第一个外来器械包的供应商作为外来器械申请单的联系人与联系电话 + if(jsonArray != null && jsonArray.size() > 0){ + JSONObject firstSupplierJsonObject = jsonArray.optJSONObject(0); + String supplierName = firstSupplierJsonObject.optString("supplierName"); + //根据供应商名称及厂商类型查询供应商 + if(StringUtils.isNotBlank(supplierName)){ + Supplier supplier = supplierManager.getFirst(" companyName = '"+ supplierName +"' and rentTousse = '"+ Supplier.SUPPLIER_TYPE_RENTTOUSSE +"'"); + if(supplier != null){ + supplierContactUser = supplier.getContact(); + supplierContactPhone = supplier.getCellPhone(); + } + } + } + String foreignTousseInfo = jsonArray.toString(); + //住院号 + String hospitalNumber = paramJson.optString("HOSPITAL_NUMBER"); + if(StringUtils.isBlank(hospitalNumber)){ + returnJSONObject.put("message","HOSPITAL_NUMBER节点不能为空"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "HOSPITAL_NUMBER节点不能为空"); + } + String applicant = paramJson.optString("APPLICANT"); + if(StringUtils.isBlank(applicant)){ + returnJSONObject.put("message","APPLICANT节点不能为空"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "APPLICANT节点不能为空"); + } + String departName = paramJson.optString("DEPART_NAME"); + if(StringUtils.isBlank(departName)){ + returnJSONObject.put("message","DEPART_NAME节点不能为空"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "DEPART_NAME节点不能为空"); + } + String departCode = paramJson.optString("DEPART_CODE"); + if(StringUtils.isBlank(departCode)){ + returnJSONObject.put("message","DEPART_CODE节点不能为空"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AE", "DEPART_CODE节点不能为空"); + } + String settlementDepartName = paramJson.optString("SETTLEMENT_DEPART_NAME"); + String settlementDepartCode = paramJson.optString("SETTLEMENT_DEPART_CODE"); + String applicationTime = paramJson.optString("APPLICATION_TIME"); + ForeignTousseApplication orginalForeignTousseApplication = foreignTousseApplicationManager.getFirst("serialNumber='"+ serialNumber +"'"); + //调用外来器械申请单业务方法 + ForeignTousseApplication foreignTousseApplication = null; + //如果根据单号能找到外来器械申请单,那就进行干预修改的操作 + if(orginalForeignTousseApplication == null){ + foreignTousseApplication = new ForeignTousseApplication(); + foreignTousseApplication.setType(InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION); + foreignTousseApplication.setSerialNumber(serialNumber); + foreignTousseApplication.setApplicant(applicant); + foreignTousseApplication.setDepart(departName); + foreignTousseApplication.setDepartCoding(departCode); + foreignTousseApplication.setSettleAccountsDepart(settlementDepartName); + if(StringUtils.isBlank(foreignTousseApplication.getSettleAccountsDepart())){ + foreignTousseApplication.setSettleAccountsDepart(foreignTousseApplication.getDepart()); + } + foreignTousseApplication.setSettleAccountsDepartCoding(settlementDepartCode); + if(StringUtils.isBlank(foreignTousseApplication.getSettleAccountsDepartCoding())){ + foreignTousseApplication.setSettleAccountsDepartCoding(foreignTousseApplication.getSettleAccountsDepartCoding()); + } + foreignTousseApplication.setApplicationTime(ForgonDateUtils.safelyParseDate(applicationTime)); + foreignTousseApplication.setHospitalNumber(hospitalNumber); + PatientInfoVO[] patientInfoVOs = dataSynchronizationManager.findPatientInfoByHospitalNum(hospitalNumber); + if(patientInfoVOs != null && patientInfoVOs.length > 0){ + foreignTousseApplication.setHospitalNumber(hospitalNumber); + foreignTousseApplication.setPatient(patientInfoVOs[0].getPatientName()); + foreignTousseApplication.setPatientAge(patientInfoVOs[0].getPatientAge()); + foreignTousseApplication.setPatientArea(patientInfoVOs[0].getPatientArea()); + foreignTousseApplication.setPatientSex(patientInfoVOs[0].getPatientSex()); + foreignTousseApplication.setDoctor(patientInfoVOs[0].getDoctorName()); + foreignTousseApplication.setOperationRoom(patientInfoVOs[0].getOpRoomId()); + foreignTousseApplication.setAscriptionDepartment(patientInfoVOs[0].getAscriptionDepartment()); + if(StringUtils.isNotBlank(patientInfoVOs[0].getOperationTime())){ + foreignTousseApplication.setOperationTime(ForgonDateUtils.safelyParseDate(patientInfoVOs[0].getOperationTime())); + } + foreignTousseApplication.setRoomNumber(patientInfoVOs[0].getRoomNumber()); + foreignTousseApplication.setSurgery(patientInfoVOs[0].getOperation()); + } + foreignTousseApplication.setPackageStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); + foreignTousseApplication.setOrderByFiled(InvoicePlan.DELIVER_AWAITDELIVER); + // 设置五笔码和拼音码 + foreignTousseApplication.setSpelling(GB2Alpha.string2Alpha(departName)); + foreignTousseApplication.setWbCode(GB2WB.getWBCode(departName)); + //设置外来器械申请单的供应商联系人与联系电话 + foreignTousseApplication.setSupplierContactName(supplierContactUser); + foreignTousseApplication.setSupplierPhoneNumber(supplierContactPhone); + foreignTousseApplicationManager.saveOrUpdate(foreignTousseApplication, foreignTousseInfo, ForeignTousseApplication.ACTION_TYPE_ADD); + }else{ + if(!StringUtils.equals(orginalForeignTousseApplication.getApplicant(), applicant)){ + orginalForeignTousseApplication.setApplicant(applicant); + } + if(!StringUtils.equals(orginalForeignTousseApplication.getDepart(), departName)){ + orginalForeignTousseApplication.setDepart(departName); + } + if(!StringUtils.equals(orginalForeignTousseApplication.getDepartCoding(), departCode)){ + orginalForeignTousseApplication.setDepartCoding(departCode); + } + if(StringUtils.isBlank(settlementDepartName)){ + orginalForeignTousseApplication.setSettleAccountsDepart(departName); + }else if(!StringUtils.equals(orginalForeignTousseApplication.getSettleAccountsDepart(), settlementDepartName)){ + orginalForeignTousseApplication.setSettleAccountsDepart(settlementDepartName); + } + if(StringUtils.isBlank(settlementDepartCode)){ + orginalForeignTousseApplication.setSettleAccountsDepartCoding(departCode); + }else if(!StringUtils.equals(orginalForeignTousseApplication.getSettleAccountsDepartCoding(), settlementDepartCode)){ + orginalForeignTousseApplication.setSettleAccountsDepartCoding(settlementDepartCode); + } + orginalForeignTousseApplication.setApplicationTime(ForgonDateUtils.safelyParseDate(applicationTime)); + if(!StringUtils.equals(orginalForeignTousseApplication.getHospitalNumber(), hospitalNumber)){ + orginalForeignTousseApplication.setHospitalNumber(hospitalNumber); + PatientInfoVO[] patientInfoVOs = dataSynchronizationManager.findPatientInfoByHospitalNum(hospitalNumber); + if(patientInfoVOs != null && patientInfoVOs.length > 0){ + orginalForeignTousseApplication.setHospitalNumber(hospitalNumber); + orginalForeignTousseApplication.setPatient(patientInfoVOs[0].getPatientName()); + orginalForeignTousseApplication.setPatientAge(patientInfoVOs[0].getPatientAge()); + orginalForeignTousseApplication.setPatientArea(patientInfoVOs[0].getPatientArea()); + orginalForeignTousseApplication.setPatientSex(patientInfoVOs[0].getPatientSex()); + orginalForeignTousseApplication.setDoctor(patientInfoVOs[0].getDoctorName()); + orginalForeignTousseApplication.setOperationRoom(patientInfoVOs[0].getOpRoomId()); + orginalForeignTousseApplication.setAscriptionDepartment(patientInfoVOs[0].getAscriptionDepartment()); + if(StringUtils.isNotBlank(patientInfoVOs[0].getOperationTime())){ + orginalForeignTousseApplication.setOperationTime(ForgonDateUtils.safelyParseDate(patientInfoVOs[0].getOperationTime())); + } + orginalForeignTousseApplication.setRoomNumber(patientInfoVOs[0].getRoomNumber()); + orginalForeignTousseApplication.setSurgery(patientInfoVOs[0].getOperation()); + } + } + //设置外来器械申请单的供应商联系人与联系电话 + orginalForeignTousseApplication.setSupplierContactName(supplierContactUser); + orginalForeignTousseApplication.setSupplierPhoneNumber(supplierContactPhone); + objectDao.saveOrUpdate(orginalForeignTousseApplication); + } + returnJSONObject.put("status" , "AA"); + } catch (RuntimeException e) { + e.printStackTrace(); + returnJSONObject.put("message",e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + returnJSONObject.put("message","生成外来器械申请单失败"); + } + appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_QUERY, "调用外来器械包接口的submitForeignTousseApplication方法,返回结果=" + returnJSONObject); + return buildResponceXml("AA", returnJSONObject.optString("message")); + } + + private static String buildResponceXml(String result){ + StringBuffer responceSB = new StringBuffer(); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + responceSB.append(result); + responceSB.append(""); + responceSB.append(""); + responceSB.append(""); + + return responceSB.toString(); + } + + /** + * + + AA/AE + 成功/失败 + + + */ + private String buildResponceXml(String status, String message){ + StringBuffer responceSB = new StringBuffer(); + responceSB.append(""); + responceSB.append(""); + responceSB.append("" + status + ""); + responceSB.append("" + message + ""); + responceSB.append(""); + responceSB.append(""); + return responceSB.toString(); + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/timer.xml =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/timer.xml (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/timer.xml (revision 29594) @@ -0,0 +1,36 @@ + + + + + + + + + + + + pushForeignTousseInfo + + + + + + + + + + 0 0 0 */1 * ? + + + + + + + + + + + + \ No newline at end of file Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java =================================================================== diff -u -r28048 -r29594 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 28048) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/WebServiceClientHelper.java (.../WebServiceClientHelper.java) (revision 29594) @@ -150,6 +150,50 @@ inputXmlSB.append(""); inputXmlSB.append(""); inputXml = inputXmlSB.toString(); + } else if(StringUtils.equals(methodName, DatasyncConstant.MethodName_PushForeignTousseInfo)){ + StringBuffer inputXmlSB = new StringBuffer(); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // action + inputXmlSB.append("" + methodName + ""); + // message + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // receiver + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // sender + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + // controlActProcess + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(arg[0]); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXmlSB.append(""); + + inputXmlSB.append(""); + inputXmlSB.append("]]>"); + + inputXmlSB.append(" "); + inputXmlSB.append(""); + inputXmlSB.append(""); + inputXml = inputXmlSB.toString(); } else { throw new RuntimeException("不存在此方法:" + methodName); } Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java =================================================================== diff -u -r28878 -r29594 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 28878) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/service/DataSynchronizationManagerImpl.java (.../DataSynchronizationManagerImpl.java) (revision 29594) @@ -6,6 +6,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -27,6 +28,7 @@ import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; +import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; @@ -36,10 +38,12 @@ import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByTreatmentNumDao; +import com.forgon.disinfectsystem.datasynchronization.dao.ForeignTousseInfoPushDao; import com.forgon.disinfectsystem.datasynchronization.dao.SyncForeignTousseApplicationDao; import com.forgon.disinfectsystem.datasynchronization.dao.SyncOrgUnitAndUserDao; import com.forgon.disinfectsystem.datasynchronization.dao.SyncOrgUnitAndUserSource2Dao; import com.forgon.disinfectsystem.datasynchronization.dao.SyncSupplierDao; +import com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy.DatasyncConstant; import com.forgon.disinfectsystem.datasynchronization.dwr.DataSynchronizationTableManager; import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; @@ -48,6 +52,8 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.supplier.Supplier; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.useRecord.gyey.PatientAdmissionInfo; import com.forgon.disinfectsystem.inventorymanagement.dao.BaseDataDao; import com.forgon.disinfectsystem.inventorymanagement.dao.InventoryDao; @@ -67,6 +73,7 @@ import com.forgon.tools.Constants; import com.forgon.tools.GB2Alpha; import com.forgon.tools.GB2WB; +import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.string.StringTools; @@ -152,6 +159,19 @@ */ private SyncForeignTousseApplicationDao syncForeignTousseApplicationDao; + private DateQueryAdapter dateQueryAdapter; + + private ForeignTousseInfoPushDao foreignTousseInfoPushDao; + + public void setForeignTousseInfoPushDao( + ForeignTousseInfoPushDao foreignTousseInfoPushDao) { + this.foreignTousseInfoPushDao = foreignTousseInfoPushDao; + } + + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } + public void setSyncForeignTousseApplicationDao( SyncForeignTousseApplicationDao syncForeignTousseApplicationDao) { this.syncForeignTousseApplicationDao = syncForeignTousseApplicationDao; @@ -1286,5 +1306,58 @@ } } } + + @Override + public void pushForeignTousseInfo() { + if(foreignTousseInfoPushDao == null){ + return; + } + // 判断前一天是否成功推送外来器械包信息:是则只推送前一天修改的外来器械包信息,否则需要推送所有外来器械包信息 + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1); + String currentDayStr = DateTools.formatTime(calendar, DateTools.COMMON_DATE_ONLY); + // 通过日志查询判断前一天是否成功推送过 + String operationDescription = "外来器械包基础数据推送:status = " + DatasyncConstant.SUCCESS_STATUS; + String countSql = String.format("select count(*) from %s po where po.operationDescription is not null and po.operationDescription like '%s' and %s", + Log.class.getSimpleName(), operationDescription, dateQueryAdapter.dateAreaSql("po.logDateTime", currentDayStr, currentDayStr, true)); + int count = objectDao.countBySql(countSql); + String modifyTimeSql = ""; + // 状态:0新增、 2 更新、1删除(不考虑) + int state = 0; + if(count > 0){ + // 当前系统已经成功推送过外来器械包信息,则每天只推送前一天修改的器械包 + modifyTimeSql = " and " + dateQueryAdapter.dateAreaSql("td.modifyTime", currentDayStr, currentDayStr, true); + state = 2; + } + String querySql = "select sp.companyName,sp.contact,sp.cellPhone,td.id,td.name," + + " case when td.price is null or td.price = 0 then (select top 1 foreignToussePrice from "+ SupplyRoomConfig.class.getSimpleName() +" where supplyRoomType=0) else td.price end price " + + " from "+ TousseDefinition.class.getSimpleName() +" td join "+ Supplier.class.getSimpleName() +" sp on td.supplierName=sp.companyName" + + " where td.isDisable='"+ Constants.STR_NO +"' and sp.rentTousse='"+ Supplier.SUPPLIER_TYPE_RENTTOUSSE +"' and td.forDisplay=1 and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"'"; + querySql += modifyTimeSql; + querySql += " order by sp.companyName "; + ResultSet rs = null; + StringBuffer tousseInfo = new StringBuffer(); + try { + rs = objectDao.executeSql(querySql); + while(rs.next()){ + String tousse = ""; + tousse += "" + rs.getString("companyName") + ""; + tousse += "" + rs.getString("contact") + ""; + tousse += "" + rs.getString("cellPhone") + ""; + tousse += "" + rs.getString("id") + ""; + tousse += "" + rs.getString("name") + ""; + tousse += "" + rs.getString("price") + ""; + tousse += "" + state + ""; + tousse += ""; + tousseInfo.append(tousse); + } + } catch (Exception e) { + e.printStackTrace(); + logger.info("获取外来器械包信息失败 : " + e.getMessage()); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + foreignTousseInfoPushDao.pushForeignTousseInfo(tousseInfo.toString()); + } } Index: ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/HIS.xml =================================================================== diff -u -r28105 -r29594 --- ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/HIS.xml (.../HIS.xml) (revision 28105) +++ ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/HIS.xml (.../HIS.xml) (revision 29594) @@ -151,4 +151,7 @@ + + + \ No newline at end of file Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/ForeignTousseInfoPushDaoImpl.java =================================================================== diff -u --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/ForeignTousseInfoPushDaoImpl.java (revision 0) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/ForeignTousseInfoPushDaoImpl.java (revision 29594) @@ -0,0 +1,98 @@ +package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; + +import net.sf.json.JSON; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.Node; +import org.dom4j.XPath; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.datasynchronization.dao.ForeignTousseInfoPushDao; +import com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy.DatasyncConstant; +import com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy.WebServiceClientHelper; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; + +public class ForeignTousseInfoPushDaoImpl implements ForeignTousseInfoPushDao { + + public static Logger logger = Logger.getLogger(ForeignTousseInfoPushDaoImpl.class); + + private LogManager appLogManager; + + public void setAppLogManager(LogManager appLogManager) { + this.appLogManager = appLogManager; + } + + @Override + public void pushForeignTousseInfo(String tousseInfo) { + try { + String inputXml = WebServiceClientHelper.buildInputString(DatasyncConstant.MethodName_PushForeignTousseInfo, tousseInfo.toString()); + logger.info("外来器械包基础数据推送请求信息:" + inputXml); + String result = WebServiceClientHelper.doPostSoap1_2(DatasyncConstant.WebserviceAddress, inputXml, DatasyncConstant.MethodName_PushForeignTousseInfo); + /*String result = "" + + "AE" + + "服务异常,原因:Object reference not set to an instance of an object.System.NullReferenceException: Object reference not set to an instance of an object" + + " at Neusoft.HIP.Services.ReceiverService.OnReceive(String request) in E:\\1代码库\\Neusoft.HIP.Services\\ReceiverService.asmx.cs:line 109" + + "";*/ + /*String result = "" + + "" + + "AA" + + "" + + "";*/ + logger.info("外来器械包基础数据推送返回信息:" + result); + int startIndex = result.indexOf(""); + if(startIndex == -1){ + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_SYNC, "外来器械包基础数据推送", "外来器械包基础数据推送失败!"); + return; + } + int endIndex = result.indexOf(""); + if(endIndex == -1 || endIndex < startIndex){ + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_SYNC, "外来器械包基础数据推送", "外来器械包基础数据推送失败!"); + return; + } + String xmlString = result.substring(startIndex + "".length(), endIndex); + xmlString = "" + xmlString + ""; + + Document doc = DocumentHelper.parseText(xmlString); + String statusXpath = "/response/Status"; + String messageXpath = "/response/Message"; + + String status = processDataByXpath(doc, statusXpath); + String message = processDataByXpath(doc, messageXpath); + + String description = "外来器械包基础数据推送:status = " + status + "; message = " + message; + logger.info(description); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_SYNC, "外来器械包基础数据推送", description); + + } catch (DocumentException e) { + e.printStackTrace(); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_SYNC, "外来器械包基础数据推送", "外来器械包基础数据推送失败!" + e.getMessage()); + } + + } + + /** + * 根据document和Xpath表达式解析数据 + * @param document + * @param nameSpaceURIMap + * @param xpathExp + * @return + */ + public 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 null; + } + +}