Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szslgzxyy/OrgUserDataWebServiceManagerImpl.java =================================================================== diff -u -r37554 -r38060 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szslgzxyy/OrgUserDataWebServiceManagerImpl.java (.../OrgUserDataWebServiceManagerImpl.java) (revision 37554) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/szslgzxyy/OrgUserDataWebServiceManagerImpl.java (.../OrgUserDataWebServiceManagerImpl.java) (revision 38060) @@ -4,8 +4,10 @@ import java.io.PrintStream; 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 java.util.UUID; import javax.xml.namespace.QName; @@ -23,16 +25,22 @@ import org.springframework.beans.factory.annotation.Autowired; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitVo; +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.datasynchronization.model.UserVo; import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; +import com.forgon.disinfectsystem.entity.useRecord.gyey.PatientAdmissionInfo; +import com.forgon.disinfectsystem.useRecord.service.gyey.PatientAdmissionInfoManager; import com.forgon.exception.SystemException; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.security.service.UserManager; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.SqlUtils; public class OrgUserDataWebServiceManagerImpl implements OrgUserDataWebServiceManager { @@ -50,6 +58,12 @@ @Autowired private UserManager userManager; + @Autowired + private PatientAdmissionInfoManager patientAdmissionInfoManager; + + @Autowired + private ObjectDao objectDao; + /** * 增加机构科室信息 */ @@ -76,6 +90,11 @@ public static final String SERVICE_NAME_SYNC_DICT_RANGE_DATA = "syncDictRangeData"; /** + * 发送手术安排(住院患者信息) + */ + public static final String SERVICE_NAME_SEND_OPERATION_SCHEDULE = "sendOperationSchedule"; + + /** * 0000 成功。 */ public static final String RESULT_CODE_0000 = "0000"; @@ -189,6 +208,10 @@ }else{ return buildResponceXml("人员信息为空!", RESULT_CODE_0001); } + }else if (StringUtils.equals(SERVICE_NAME_SEND_OPERATION_SCHEDULE, serviceName)) { + //手术安排(住院患者信息) + List patientInfoVoList = buildPatientInfoVOList(msgBody); + processSyncPatientInfoData(patientInfoVoList); }else{ return buildResponceXml("serviceName无效!", RESULT_CODE_0002); } @@ -209,6 +232,112 @@ return buildResponceXml(message, retValue); } + /** + * 保存患者信息 + * @param patientInfoVoList + */ + private void processSyncPatientInfoData(List patientInfoVoList) { + if(CollectionUtils.isEmpty(patientInfoVoList)){ + return; + } + Set applyNoSet = new HashSet(); + for (PatientInfoVO vo : patientInfoVoList) { + String operationScheduleId = vo.getOperationScheduleId(); + if(StringUtils.isNotEmpty(operationScheduleId)){ + applyNoSet.add(operationScheduleId); + } + } + if(CollectionUtils.isEmpty(applyNoSet)){ + throw new SystemException("申请号不能为空!"); + } + + String deleteSql = String.format("delete from %s where %s ", + PatientAdmissionInfo.class.getSimpleName(), + SqlUtils.getStringFieldInLargeCollectionsPredicate("operationScheduleId", applyNoSet)); + objectDao.excuteSQL(deleteSql); + + for (PatientInfoVO vo : patientInfoVoList) { + PatientAdmissionInfo patientAdmissionInfo = new PatientAdmissionInfo(); + patientAdmissionInfo.setHospitalNumber(vo.getHospitalNumber()); + patientAdmissionInfo.setOperationScheduleId(vo.getOperationScheduleId()); + patientAdmissionInfo.setPatientName(vo.getPatientName()); + patientAdmissionInfo.setAscriptionDepartment(vo.getAscriptionDepartment()); + patientAdmissionInfo.setAscriptionDepartCode(vo.getAscriptionDepartCode()); + patientAdmissionInfo.setSurgeryName(vo.getOperation()); + patientAdmissionInfo.setOperationRoom(vo.getOpRoomId()); + patientAdmissionInfo.setDoctorName(vo.getDoctorName()); + patientAdmissionInfoManager.save(patientAdmissionInfo); + } + } + + /** + * 解析并返回患者信息 + * @param msgBody + * @return + * @throws Exception + */ + private List buildPatientInfoVOList(String msgBody) throws Exception { + List patientInfoVOList = new ArrayList(); + + if(StringUtils.isBlank(msgBody)){ + return patientInfoVOList; + } + + Document document = DocumentHelper.parseText(msgBody.trim()); + + PatientInfoVO vo = new PatientInfoVO(); + //就诊号 visitNo 住院号 + String hospitalNumberXpath = "/root/applyInfo/visitNo"; + String hospitalNumber = processDataByXpath(document, hospitalNumberXpath); + if(StringUtils.isBlank(hospitalNumber)){ + throw new SystemException("就诊号不能为空!"); + } + vo.setHospitalNumber(hospitalNumber); + //申请单号 applyNo 手术单号 + String operationScheduleIdXpath = "/root/applyInfo/applyNo"; + String operationScheduleId = processDataByXpath(document, operationScheduleIdXpath); + if(StringUtils.isBlank(hospitalNumber)){ + throw new SystemException("申请单号不能为空!"); + } + vo.setOperationScheduleId(operationScheduleId); + //姓名 name 姓名(患者姓名) + String patientNameXpath = "/root/applyInfo/name"; + String patientName = processDataByXpath(document, patientNameXpath); + if(StringUtils.isBlank(patientName)){ + throw new SystemException("姓名不能为空!"); + } + vo.setPatientName(patientName); + //病人所在科室 deptCode 病人所在科室 + String ascriptionDepartCodeXpath = "/root/applyInfo/deptCode"; + String ascriptionDepartCode = processDataByXpath(document, ascriptionDepartCodeXpath); + vo.setAscriptionDepartCode(ascriptionDepartCode); + String ascriptionDepartmentXpath = "/root/applyInfo/deptName"; + String ascriptionDepartment = processDataByXpath(document, ascriptionDepartmentXpath); + vo.setAscriptionDepartment(ascriptionDepartment); + if(StringUtils.isNotBlank(ascriptionDepartCode)){ + OrgUnit orgUnit = orgUnitManager.getByCode(ascriptionDepartCode); + if(orgUnit != null){ + vo.setAscriptionDepartment(orgUnit.getName()); + } + } + //手术名称 operationName 手术名称 + String operationXpath = "/root/scheduleInfo/operationName"; + String operation = processDataByXpath(document, operationXpath); + vo.setOperation(operation); + //手术间 operatingRoomNo 手术间 + String opRoomIdXpath = "/root/scheduleInfo/operatingRoomNo"; + String opRoomId = processDataByXpath(document, opRoomIdXpath); + vo.setOpRoomId(opRoomId); + //手术医师名称 surgeonName 手术医生 + String doctorNameXpath = "/root/scheduleInfo/surgeonName"; + String doctorName = processDataByXpath(document, doctorNameXpath); + vo.setDoctorName(doctorName); + + patientInfoVOList.add(vo); + + return patientInfoVOList; + } + @SuppressWarnings("unchecked") private List buildUserVoList(String serviceName, String msgBody) throws Exception { List userVoList = new ArrayList(); Index: ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/spring/HIS.xml =================================================================== diff -u -r37281 -r38060 --- ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/spring/HIS.xml (.../HIS.xml) (revision 37281) +++ ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/spring/HIS.xml (.../HIS.xml) (revision 38060) @@ -84,9 +84,22 @@ --> + + + + + + + + + + + + - + Index: ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/interfaces/mybatis/FindPatientInfoByHospitalNumMapper.xml =================================================================== diff -u -r28893 -r38060 --- ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/interfaces/mybatis/FindPatientInfoByHospitalNumMapper.xml (.../FindPatientInfoByHospitalNumMapper.xml) (revision 28893) +++ ssts-web/src/main/webapp/disinfectsystem/config/szslgzxyy/interfaces/mybatis/FindPatientInfoByHospitalNumMapper.xml (.../FindPatientInfoByHospitalNumMapper.xml) (revision 38060) @@ -7,48 +7,28 @@