Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByHospitalNumDaoImpl.java =================================================================== diff -u -r41454 -r41466 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByHospitalNumDaoImpl.java (.../FindPatientInfoByHospitalNumDaoImpl.java) (revision 41454) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szsdsrmyy/FindPatientInfoByHospitalNumDaoImpl.java (.../FindPatientInfoByHospitalNumDaoImpl.java) (revision 41466) @@ -1,17 +1,26 @@ package com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import net.sf.json.JSON; 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.apache.log4j.Logger; +import com.forgon.directory.model.OrgUnit; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; import com.forgon.disinfectsystem.datasynchronization.dao.szsdsrmyy.DatasyncConstant; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; +import com.forgon.exception.SystemException; +import com.forgon.tools.hibernate.ObjectDao; /** * 根据住院号查询病人信息(深圳市第三人民医院) @@ -23,7 +32,13 @@ FindPatientInfoByHospitalNumDao { Logger logger = Logger.getLogger(FindPatientInfoByHospitalNumDaoImpl.class); + + private ObjectDao objectDao; + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + @Override public PatientInfoVO[] findPatientInfoByHospitalNum(String hospitalNum) { try { @@ -114,6 +129,7 @@ //vo.setDoctorAccountDepartCode(doctorAccountDepartCode instanceof String ? (String)doctorAccountDepartCode : ""); patientInfoVOArray[i++] = vo; } + searchOrgUnitCoding(patientInfoVOArray); return patientInfoVOArray; } } @@ -124,6 +140,70 @@ } return null; } + + /** + * 查询患者所属科室编码 + * @param vo + */ + @SuppressWarnings("unchecked") + private void searchOrgUnitCoding(PatientInfoVO[] patientInfoArray) { + if(patientInfoArray == null || patientInfoArray.length == 0){ + return; + } + List orgUnitNameList = new ArrayList(); + for (PatientInfoVO vo : patientInfoArray) { + if(StringUtils.isNotBlank(vo.getAscriptionDepartment()) + && StringUtils.isBlank(vo.getAscriptionDepartCode())){ + orgUnitNameList.add(vo.getAscriptionDepartment()); + } + if(StringUtils.isNotBlank(vo.getDoctorAccountDepart()) + && StringUtils.isBlank(vo.getDoctorAccountDepartCode())){ + orgUnitNameList.add(vo.getDoctorAccountDepart()); + } + } + + if(CollectionUtils.isEmpty(orgUnitNameList)){ + return; + } + + List orgUnitList = objectDao.getCollection(OrgUnit.class.getSimpleName(), "name", orgUnitNameList); + if(CollectionUtils.isEmpty(orgUnitList)){ + return; + } + + Map> nameOrgUnitMap = new HashMap>(); + for (OrgUnit orgUnit : orgUnitList) { + List mapOrgUnitList = nameOrgUnitMap.get(orgUnit.getName()); + if(mapOrgUnitList == null){ + mapOrgUnitList = new ArrayList(); + } + mapOrgUnitList.add(orgUnit); + nameOrgUnitMap.put(orgUnit.getName(), mapOrgUnitList); + } + + for (PatientInfoVO vo : patientInfoArray) { + if(StringUtils.isNotBlank(vo.getAscriptionDepartment()) + && StringUtils.isBlank(vo.getAscriptionDepartCode())){ + List mapOrgUnitList = nameOrgUnitMap.get(vo.getAscriptionDepartment()); + if(CollectionUtils.isNotEmpty(mapOrgUnitList)){ + if(mapOrgUnitList.size() > 1){ + throw new SystemException(String.format("根据病人所属科室名称查找科室编码失败,存在多个名称为%s的科室。", vo.getAscriptionDepartment())); + } + vo.setAscriptionDepartCode(mapOrgUnitList.get(0).getOrgUnitCoding()); + } + } + if(StringUtils.isNotBlank(vo.getDoctorAccountDepart()) + && StringUtils.isBlank(vo.getDoctorAccountDepartCode())){ + List mapOrgUnitList = nameOrgUnitMap.get(vo.getDoctorAccountDepart()); + if(CollectionUtils.isNotEmpty(mapOrgUnitList)){ + if(mapOrgUnitList.size() > 1){ + throw new SystemException(String.format("根据主刀医生核算科室名称查找科室编码失败,存在多个名称为%s的科室。", vo.getDoctorAccountDepart())); + } + vo.setDoctorAccountDepartCode(mapOrgUnitList.get(0).getOrgUnitCoding()); + } + } + } + } @Override public PatientInfoVO[] findPatientInfoByHospitalNumBeforeOperation( Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java =================================================================== diff -u -r40302 -r41466 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java (.../ButtJointUseRecordAction.java) (revision 40302) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java (.../ButtJointUseRecordAction.java) (revision 41466) @@ -43,6 +43,7 @@ import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; import com.forgon.disinfectsystem.useRecord.util.UseRecordUtil; +import com.forgon.exception.SystemException; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.security.model.User; @@ -1011,11 +1012,14 @@ } List orgUnitNameList = new ArrayList(); for (PatientInfoVO vo : patientInfoArray) { - if(StringUtils.isNotBlank(vo.getAscriptionDepartCode()) - || StringUtils.isBlank(vo.getAscriptionDepartment())){ - continue; + if(StringUtils.isNotBlank(vo.getAscriptionDepartment()) + && StringUtils.isBlank(vo.getAscriptionDepartCode())){ + orgUnitNameList.add(vo.getAscriptionDepartment()); } - orgUnitNameList.add(vo.getAscriptionDepartment()); + if(StringUtils.isNotBlank(vo.getDoctorAccountDepart()) + && StringUtils.isBlank(vo.getDoctorAccountDepartCode())){ + orgUnitNameList.add(vo.getDoctorAccountDepart()); + } } if(CollectionUtils.isEmpty(orgUnitNameList)){ @@ -1027,19 +1031,36 @@ return; } - Map nameCodeMap = new HashMap(); + Map> nameOrgUnitMap = new HashMap>(); for (OrgUnit orgUnit : orgUnitList) { - nameCodeMap.put(orgUnit.getName(), orgUnit.getOrgUnitCoding()); + List mapOrgUnitList = nameOrgUnitMap.get(orgUnit.getName()); + if(mapOrgUnitList == null){ + mapOrgUnitList = new ArrayList(); + } + mapOrgUnitList.add(orgUnit); + nameOrgUnitMap.put(orgUnit.getName(), mapOrgUnitList); } for (PatientInfoVO vo : patientInfoArray) { - if(StringUtils.isNotBlank(vo.getAscriptionDepartCode()) - || StringUtils.isBlank(vo.getAscriptionDepartment())){ - continue; + if(StringUtils.isNotBlank(vo.getAscriptionDepartment()) + && StringUtils.isBlank(vo.getAscriptionDepartCode())){ + List mapOrgUnitList = nameOrgUnitMap.get(vo.getAscriptionDepartment()); + if(CollectionUtils.isNotEmpty(mapOrgUnitList)){ + if(mapOrgUnitList.size() > 1){ + throw new SystemException(String.format("根据病人所属科室名称查找科室编码失败,存在多个名称为%s的科室。", vo.getAscriptionDepartment())); + } + vo.setAscriptionDepartCode(mapOrgUnitList.get(0).getOrgUnitCoding()); + } } - String code = nameCodeMap.get(vo.getAscriptionDepartment()); - if(StringUtils.isNotBlank(code)){ - vo.setAscriptionDepartCode(code); + if(StringUtils.isNotBlank(vo.getDoctorAccountDepart()) + && StringUtils.isBlank(vo.getDoctorAccountDepartCode())){ + List mapOrgUnitList = nameOrgUnitMap.get(vo.getDoctorAccountDepart()); + if(CollectionUtils.isNotEmpty(mapOrgUnitList)){ + if(mapOrgUnitList.size() > 1){ + throw new SystemException(String.format("根据主刀医生核算科室名称查找科室编码失败,存在多个名称为%s的科室。", vo.getDoctorAccountDepart())); + } + vo.setDoctorAccountDepartCode(mapOrgUnitList.get(0).getOrgUnitCoding()); + } } } }