Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/common/HIPMessageWebServiceImplV2.java =================================================================== diff -u -r40683 -r41429 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/common/HIPMessageWebServiceImplV2.java (.../HIPMessageWebServiceImplV2.java) (revision 40683) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/datasync/common/HIPMessageWebServiceImplV2.java (.../HIPMessageWebServiceImplV2.java) (revision 41429) @@ -26,6 +26,7 @@ import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.urgent.service.UrgentLevelManager; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByHospitalNumDao; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientInfoByTreatmentNumDao; @@ -84,6 +85,8 @@ private OrgUnitManager orgUnitManager; @Autowired private DateQueryAdapter dateQueryAdapter; + @Autowired + private UrgentLevelManager urgentLevelManager; /** * 器械包使用登记(消毒物料使用登记) @@ -343,7 +346,7 @@ || MapUtils.isNotEmpty(tiBarcodeToUrgentLevelNameMap)){ Map idToUrgentLevelMap = new HashMap(); Map nameToUrgentLevelMap = new HashMap(); - List urgentLevelList = objectDao.findAllObjects(UrgentLevel.class.getSimpleName()); + List urgentLevelList = urgentLevelManager.getUrgentsForSelect(true, departCoding); if(CollectionUtils.isNotEmpty(urgentLevelList)){ for (UrgentLevel urgentLevel : urgentLevelList) { idToUrgentLevelMap.put(urgentLevel.getId(), urgentLevel); @@ -394,7 +397,10 @@ List canRegisterUseRecordTousseInstanceList = new ArrayList(); //状态异常的器械包实例 List statusErrorTiList = new ArrayList(); + //修改加急等级的器械包实例 + List updateUrgentLevelTiList = new ArrayList(); if(CollectionUtils.isNotEmpty(tousseInsBarcodeSet)){ + boolean zjyy = ConfigUtils.isProject("zjyy"); for (String code : tousseInsBarcodeSet) { TousseInstance tousseInstance = barcodeTousseInstanceMap.get(code); if(tousseInstance == null){ @@ -404,8 +410,12 @@ } if(!StringUtils.equals(TousseInstance.STATUS_SHIPPED, tousseInstance.getStatus()) && !StringUtils.equals(TousseInstance.STATUS_SIGNED, tousseInstance.getStatus())){ - //不是“已发货”、“已签收”状态的器械包实例 - statusErrorTiList.add(tousseInstance); + if(zjyy && tousseInstance.getUseRecord(objectDao) != null){ + //ZJYY-170当使用记录接口收到相同的器械包使用记录信息时,加急登记信息如果有变化,则更新对应使用记录与转换后的申请单该物品的加急信息。 + updateUrgentLevelTiList.add(tousseInstance); + }else{ + statusErrorTiList.add(tousseInstance); + } continue; } String canRegisterUseRecordMessage = canRegisterUseRecord(tousseInstance, departCoding); @@ -438,199 +448,202 @@ } } - //所有条码的包的状态都是异常的,不能录入使用记录 - if(CollectionUtils.isEmpty(canRegisterUseRecordTousseInstanceList)){ + if(CollectionUtils.isEmpty(canRegisterUseRecordTousseInstanceList) && CollectionUtils.isEmpty(updateUrgentLevelTiList)){ throw new RuntimeException("没有可以录入使用记录的器械包"); } - // 检查器械包是否包含丢失报损的材料 - tousseIncludeMaterial(canRegisterUseRecordTousseInstanceList, tiBarcodeToErrorDamageMap); - - // 查找同一场手术的未审核的使用记录 - UseRecord newUseRecord = getUnReviewUseRecord(hospitalNumber, treatmentNum, operationTimeStr); + //所有条码的包的状态都是异常的,不能录入使用记录 + if(CollectionUtils.isNotEmpty(canRegisterUseRecordTousseInstanceList)){ + // 检查器械包是否包含丢失报损的材料 + tousseIncludeMaterial(canRegisterUseRecordTousseInstanceList, tiBarcodeToErrorDamageMap); + + // 查找同一场手术的未审核的使用记录 + UseRecord newUseRecord = getUnReviewUseRecord(hospitalNumber, treatmentNum, operationTimeStr); - // 患者姓名 - if(newUseRecord == null){ - // 2、创建使用记录 - newUseRecord = new UseRecord(); - newUseRecord.setDataSource(Constants.SOURCE_SYNC); - // 该使用记录关联的手术未登记过使用记录 - String patientName = processDataByXpath(document, null, patientNameXpath); - if(StringUtils.isBlank(patientName)){ - // 不传患者姓名则根据住院号查询患者信息 - PatientInfoVO patient = null; - if(StringUtils.isNotBlank(hospitalNumber)){ - if(findPatientInfoByHospitalNumDao != null){ - PatientInfoVO[] patientInfoVOs = findPatientInfoByHospitalNumDao.findPatientInfoByHospitalNum(hospitalNumber); - if(patientInfoVOs != null && patientInfoVOs.length > 0){ - patient = patientInfoVOs[0]; + // 患者姓名 + if(newUseRecord == null){ + // 2、创建使用记录 + newUseRecord = new UseRecord(); + newUseRecord.setDataSource(Constants.SOURCE_SYNC); + // 该使用记录关联的手术未登记过使用记录 + String patientName = processDataByXpath(document, null, patientNameXpath); + if(StringUtils.isBlank(patientName)){ + // 不传患者姓名则根据住院号查询患者信息 + PatientInfoVO patient = null; + if(StringUtils.isNotBlank(hospitalNumber)){ + if(findPatientInfoByHospitalNumDao != null){ + PatientInfoVO[] patientInfoVOs = findPatientInfoByHospitalNumDao.findPatientInfoByHospitalNum(hospitalNumber); + if(patientInfoVOs != null && patientInfoVOs.length > 0){ + patient = patientInfoVOs[0]; + } } + if (patient == null) { + throw new RuntimeException("患者消毒物料使用登记失败 :未找到住院号为" + hospitalNumber + "的患者信息"); + } + }else{ + if(findPatientInfoByTreatmentNumDao != null){ + PatientInfoVO[] patientInfoVOs = findPatientInfoByTreatmentNumDao.findPatientInfoByTreatmentNum(treatmentNum); + if(patientInfoVOs != null && patientInfoVOs.length > 0){ + patient = patientInfoVOs[0]; + } + } + if (patient == null) { + throw new RuntimeException("患者消毒物料使用登记失败 :未找到诊疗号为" + treatmentNum + "的患者信息"); + } } - if (patient == null) { - throw new RuntimeException("患者消毒物料使用登记失败 :未找到住院号为" + hospitalNumber + "的患者信息"); + + if(StringUtils.isNotBlank(patient.getHospitalNumber())){ + newUseRecord.setHospitalNum(patient.getHospitalNumber()); + }else{ + newUseRecord.setHospitalNum(patient.getPatientNumber()); } + newUseRecord.setTreatmentNum(patient.getClinicNumber()); + newUseRecord.setPatientName(patient.getPatientName()); + newUseRecord.setPatientAge(patient.getPatientAge()); + newUseRecord.setPatientSex(patient.getPatientSex()); + newUseRecord.setPatientIDCard(patient.getPatientIDCard()); + newUseRecord.setDoctorName(patient.getDoctorName()); + newUseRecord.setOperation(patient.getOperation()); + newUseRecord.setOperationRoom(patient.getOpRoomId()); + newUseRecord.setPatientArea(patient.getPatientArea()); + newUseRecord.setRoomNumber(patient.getRoomNumber()); + newUseRecord.setBedNumber(patient.getBedNumber()); + newUseRecord.setAscriptionDepartment(patient.getAscriptionDepartment()); + newUseRecord.setVisitId(patient.getVisitId()); + newUseRecord.setWashHandNurse(patient.getWashHandNurse()); + newUseRecord.setCircuitNurse(patient.getCircuitNurse()); + newUseRecord.setSpecialInfection(patient.getSpecialInfection()); + useRecordManager.setSpecialInfection(patient.getSpecialInfection(), newUseRecord); + //newUseRecord.setOperationScheduleId(patient.getOperationScheduleId()); }else{ - if(findPatientInfoByTreatmentNumDao != null){ - PatientInfoVO[] patientInfoVOs = findPatientInfoByTreatmentNumDao.findPatientInfoByTreatmentNum(treatmentNum); - if(patientInfoVOs != null && patientInfoVOs.length > 0){ - patient = patientInfoVOs[0]; - } + newUseRecord.setHospitalNum(hospitalNumber); + newUseRecord.setTreatmentNum(treatmentNum); + newUseRecord.setPatientName(patientName); + newUseRecord.setPatientAge(processDataByXpath(document, null, patientAgeXpath)); + newUseRecord.setPatientSex(processDataByXpath(document, null, patientSexXpath)); + newUseRecord.setPatientIDCard(processDataByXpath(document, null, patientIDCardXpath)); + newUseRecord.setDoctorName(processDataByXpath(document, null, doctorNameXpath)); + newUseRecord.setOperation(processDataByXpath(document, null, operationXpath)); + newUseRecord.setOperationRoom(processDataByXpath(document, null, operationRoomXpath)); + newUseRecord.setPatientArea(processDataByXpath(document, null, patientAreaXpath)); + newUseRecord.setRoomNumber(processDataByXpath(document, null, roomNumberXpath)); + newUseRecord.setBedNumber(processDataByXpath(document, null, bedNumberXpath)); + newUseRecord.setAscriptionDepartment(processDataByXpath(document, null, ascriptionDepartmentXpath)); + String visitId = processDataByXpath(document, null, visitIdXpath); + if(!DatabaseUtil.isPoIdValid(visitId)){ + visitId = "0"; } - if (patient == null) { - throw new RuntimeException("患者消毒物料使用登记失败 :未找到诊疗号为" + treatmentNum + "的患者信息"); - } + newUseRecord.setVisitId(Long.parseLong(visitId)); + newUseRecord.setWashHandNurse(processDataByXpath(document, null, washHandNurseXpath)); + newUseRecord.setCircuitNurse(processDataByXpath(document, null, circuitNurseXpath)); + newUseRecord.setOperationScheduleId(processDataByXpath(document, null, operationScheduleIdXpath)); } - if(StringUtils.isNotBlank(patient.getHospitalNumber())){ - newUseRecord.setHospitalNum(patient.getHospitalNumber()); - }else{ - newUseRecord.setHospitalNum(patient.getPatientNumber()); + if(StringUtils.isNotBlank(operationTimeStr)){ + newUseRecord.setOperationTime(DateTools.coverStrToDate(operationTimeStr, "yyyyMMddHHmmss")); } - newUseRecord.setTreatmentNum(patient.getClinicNumber()); - newUseRecord.setPatientName(patient.getPatientName()); - newUseRecord.setPatientAge(patient.getPatientAge()); - newUseRecord.setPatientSex(patient.getPatientSex()); - newUseRecord.setPatientIDCard(patient.getPatientIDCard()); - newUseRecord.setDoctorName(patient.getDoctorName()); - newUseRecord.setOperation(patient.getOperation()); - newUseRecord.setOperationRoom(patient.getOpRoomId()); - newUseRecord.setPatientArea(patient.getPatientArea()); - newUseRecord.setRoomNumber(patient.getRoomNumber()); - newUseRecord.setBedNumber(patient.getBedNumber()); - newUseRecord.setAscriptionDepartment(patient.getAscriptionDepartment()); - newUseRecord.setVisitId(patient.getVisitId()); - newUseRecord.setWashHandNurse(patient.getWashHandNurse()); - newUseRecord.setCircuitNurse(patient.getCircuitNurse()); - newUseRecord.setSpecialInfection(patient.getSpecialInfection()); - useRecordManager.setSpecialInfection(patient.getSpecialInfection(), newUseRecord); - //newUseRecord.setOperationScheduleId(patient.getOperationScheduleId()); - }else{ - newUseRecord.setHospitalNum(hospitalNumber); - newUseRecord.setTreatmentNum(treatmentNum); - newUseRecord.setPatientName(patientName); - newUseRecord.setPatientAge(processDataByXpath(document, null, patientAgeXpath)); - newUseRecord.setPatientSex(processDataByXpath(document, null, patientSexXpath)); - newUseRecord.setPatientIDCard(processDataByXpath(document, null, patientIDCardXpath)); - newUseRecord.setDoctorName(processDataByXpath(document, null, doctorNameXpath)); - newUseRecord.setOperation(processDataByXpath(document, null, operationXpath)); - newUseRecord.setOperationRoom(processDataByXpath(document, null, operationRoomXpath)); - newUseRecord.setPatientArea(processDataByXpath(document, null, patientAreaXpath)); - newUseRecord.setRoomNumber(processDataByXpath(document, null, roomNumberXpath)); - newUseRecord.setBedNumber(processDataByXpath(document, null, bedNumberXpath)); - newUseRecord.setAscriptionDepartment(processDataByXpath(document, null, ascriptionDepartmentXpath)); - String visitId = processDataByXpath(document, null, visitIdXpath); - if(!DatabaseUtil.isPoIdValid(visitId)){ - visitId = "0"; + + newUseRecord.setDepart(depart); + newUseRecord.setDepartCoding(departCoding); + newUseRecord.setEnteringDate(operTime); + // 登记人 + newUseRecord.setOperator(operator); + // 录入时间 + newUseRecord.setEnteringDate(operTime); + // 特殊感染类型 + newUseRecord.setSpecialInfection(specialInfection); + useRecordManager.setSpecialInfection(specialInfection, newUseRecord); + newUseRecord.setRemark(remark); + newUseRecord.setOperationStatus(operationStatus); + if(StringUtils.isNotBlank(newUseRecord.getAscriptionDepartment())){ + newUseRecord.setDepartCodeOfpatient(newUseRecord.getAscriptionDepartment()); + //ZJYY-112接口程序接收到手麻系统传入的入参后,根据字段ascriptionDepartment的值, + //查询出科室的编码,然后给UseRecord表的departCodeOfpatient字段赋值。 + OrgUnit orgUnit = orgUnitManager.getByName(newUseRecord.getAscriptionDepartment()); + if(orgUnit != null){ + newUseRecord.setDepartCodeOfpatient(orgUnit.getOrgUnitCoding()); + } } - newUseRecord.setVisitId(Long.parseLong(visitId)); - newUseRecord.setWashHandNurse(processDataByXpath(document, null, washHandNurseXpath)); - newUseRecord.setCircuitNurse(processDataByXpath(document, null, circuitNurseXpath)); - newUseRecord.setOperationScheduleId(processDataByXpath(document, null, operationScheduleIdXpath)); + }else{ + // 修改记录录入时间 + newUseRecord.setEnteringDate(operTime); + newUseRecord.setOperationStatus(operationStatus); } - if(StringUtils.isNotBlank(operationTimeStr)){ - newUseRecord.setOperationTime(DateTools.coverStrToDate(operationTimeStr, "yyyyMMddHHmmss")); - } - - newUseRecord.setDepart(depart); - newUseRecord.setDepartCoding(departCoding); - newUseRecord.setEnteringDate(operTime); - // 登记人 - newUseRecord.setOperator(operator); - // 录入时间 - newUseRecord.setEnteringDate(operTime); - // 特殊感染类型 - newUseRecord.setSpecialInfection(specialInfection); - useRecordManager.setSpecialInfection(specialInfection, newUseRecord); - newUseRecord.setRemark(remark); - newUseRecord.setOperationStatus(operationStatus); - if(StringUtils.isNotBlank(newUseRecord.getAscriptionDepartment())){ - newUseRecord.setDepartCodeOfpatient(newUseRecord.getAscriptionDepartment()); - //ZJYY-112接口程序接收到手麻系统传入的入参后,根据字段ascriptionDepartment的值, - //查询出科室的编码,然后给UseRecord表的departCodeOfpatient字段赋值。 - OrgUnit orgUnit = orgUnitManager.getByName(newUseRecord.getAscriptionDepartment()); - if(orgUnit != null){ - newUseRecord.setDepartCodeOfpatient(orgUnit.getOrgUnitCoding()); - } - } - }else{ - // 修改记录录入时间 - newUseRecord.setEnteringDate(operTime); - newUseRecord.setOperationStatus(operationStatus); - } - - //objectDao.saveOrUpdate(newUseRecord); + //objectDao.saveOrUpdate(newUseRecord); - if (CollectionUtils.isNotEmpty(canRegisterUseRecordTousseInstanceList)) { - //科室的默认仓库 - WareHouse warehouse = wareHouseManager.getDefaultWareHouseByUnitCode(departCoding); - for (TousseInstance tousseInstance : canRegisterUseRecordTousseInstanceList) { - //tousseInstance.setUseRecord_id(newUseRecord.getId()); - //录入使用记录后,更新位置(此方法一定要放在tousseInstance.setUseRecord_id方法后面调用) - tousseInstance.resetLocationInfoAndWarehouseForUseRecord(newUseRecord,null,warehouse); - //tousseInstance.setStatus(TousseInstance.STATUS_USED); - tousseInstance.setPatientName(newUseRecord.getPatientName()); - tousseInstance.setDoctorName(newUseRecord.getDoctorName()); - tousseInstance.setUseTime(operTime); - if(MapUtils.isNotEmpty(tiBarcodeToUrgentLevelMap)){ - // 加急级别 - tousseInstance.setUrgentLevelForUseRecord(tiBarcodeToUrgentLevelMap.get(tousseInstance.getBarcode())); + if (CollectionUtils.isNotEmpty(canRegisterUseRecordTousseInstanceList)) { + //科室的默认仓库 + WareHouse warehouse = wareHouseManager.getDefaultWareHouseByUnitCode(departCoding); + for (TousseInstance tousseInstance : canRegisterUseRecordTousseInstanceList) { + //tousseInstance.setUseRecord_id(newUseRecord.getId()); + //录入使用记录后,更新位置(此方法一定要放在tousseInstance.setUseRecord_id方法后面调用) + tousseInstance.resetLocationInfoAndWarehouseForUseRecord(newUseRecord,null,warehouse); + //tousseInstance.setStatus(TousseInstance.STATUS_USED); + tousseInstance.setPatientName(newUseRecord.getPatientName()); + tousseInstance.setDoctorName(newUseRecord.getDoctorName()); + tousseInstance.setUseTime(operTime); + if(MapUtils.isNotEmpty(tiBarcodeToUrgentLevelMap)){ + // 加急级别 + tousseInstance.setUrgentLevelForUseRecord(tiBarcodeToUrgentLevelMap.get(tousseInstance.getBarcode())); + } + if(MapUtils.isNotEmpty(errorRemarkMap)){ + // 丢失备注 + tousseInstance.setErrorRemark(errorRemarkMap.get(tousseInstance.getBarcode())); + } + if(MapUtils.isNotEmpty(damageRemarkMap)){ + // 报损备注 + tousseInstance.setDamageRemark(damageRemarkMap.get(tousseInstance.getBarcode())); + } + //objectDao.saveOrUpdate(tousseInstance); } - if(MapUtils.isNotEmpty(errorRemarkMap)){ - // 丢失备注 - tousseInstance.setErrorRemark(errorRemarkMap.get(tousseInstance.getBarcode())); + newUseRecord.setTousseInstanceList(canRegisterUseRecordTousseInstanceList); + //手术状态”这个字段的值为“手术结束”时把单据改成已申请的状态,并且自动生成一张通用申请单 + if(StringUtils.equals(newUseRecord.getOperationStatus(), UseRecord.OPERATION_STATUS_END_OPERATION) + || StringUtils.equals(newUseRecord.getOperationStatus(), UseRecord.OPERATION_STATUS_OUT_OPERATIONROOM) + || StringUtils.equals(newUseRecord.getOperationStatus(), UseRecord.OPERATION_STATUS_END_ANESTHESIA)){ + String applicationFormType = ConfigUtils.getSystemSetConfigByName("applicationFormType", ""); + String appType = InvoicePlan.TYPE_COMBO_FORM; + if(StringUtils.equals(applicationFormType, "2")){ + appType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; + } + // 审核人 + newUseRecord.setReviewer(operator); + // 审核时间 + newUseRecord.setReviewTime(operTime); + newUseRecord.setApplicationTime(operTime); + // 使用记录转申请单 + useRecordManager.saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( + newUseRecord, operator, depart, departCoding, + operTime, appType, + operator, operator, updateUrgentLevelTiList, tiBarcodeToUrgentLevelMap); + }else{ + useRecordManager.saveUseRecord_TRANS_REQUIRED(newUseRecord, updateUrgentLevelTiList, tiBarcodeToUrgentLevelMap); } - if(MapUtils.isNotEmpty(damageRemarkMap)){ - // 报损备注 - tousseInstance.setDamageRemark(damageRemarkMap.get(tousseInstance.getBarcode())); - } - //objectDao.saveOrUpdate(tousseInstance); - } - newUseRecord.setTousseInstanceList(canRegisterUseRecordTousseInstanceList); - //手术状态”这个字段的值为“手术结束”时把单据改成已申请的状态,并且自动生成一张通用申请单 - if(StringUtils.equals(newUseRecord.getOperationStatus(), UseRecord.OPERATION_STATUS_END_OPERATION) - || StringUtils.equals(newUseRecord.getOperationStatus(), UseRecord.OPERATION_STATUS_OUT_OPERATIONROOM) - || StringUtils.equals(newUseRecord.getOperationStatus(), UseRecord.OPERATION_STATUS_END_ANESTHESIA)){ - String applicationFormType = ConfigUtils.getSystemSetConfigByName("applicationFormType", ""); - String appType = InvoicePlan.TYPE_COMBO_FORM; - if(StringUtils.equals(applicationFormType, "2")){ - appType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; - } - // 审核人 - newUseRecord.setReviewer(operator); - // 审核时间 - newUseRecord.setReviewTime(operTime); - newUseRecord.setApplicationTime(operTime); - // 使用记录转申请单 - useRecordManager.saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( - newUseRecord, operator, depart, departCoding, - operTime, appType, - operator, operator); - }else{ - useRecordManager.saveUseRecord_TRANS_REQUIRED(newUseRecord); - } - - // 设置丢失报损 - for (TousseInstance tousseInstance : canRegisterUseRecordTousseInstanceList) { - TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); - if(MapUtils.isNotEmpty(tiBarcodeToErrorDamageMap)){ - if(!(StringUtils.equals(tousseDefinition.getTousseType(), TousseDefinition.PACKAGE_TYPE_CUSTOM) - || StringUtils.equals(tousseDefinition.getTousseType(), TousseDefinition.PACKAGE_TYPE_INSIDE))){ - //throw new RuntimeException(tousseDefinition.getTousseType() + "不需要丢失报损!"); - continue; + + // 设置丢失报损 + for (TousseInstance tousseInstance : canRegisterUseRecordTousseInstanceList) { + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + if(MapUtils.isNotEmpty(tiBarcodeToErrorDamageMap)){ + if(!(StringUtils.equals(tousseDefinition.getTousseType(), TousseDefinition.PACKAGE_TYPE_CUSTOM) + || StringUtils.equals(tousseDefinition.getTousseType(), TousseDefinition.PACKAGE_TYPE_INSIDE))){ + //throw new RuntimeException(tousseDefinition.getTousseType() + "不需要丢失报损!"); + continue; + } + // 丢失报损,自定义器械包和普通器械包科室登记丢失报损 + List materialErrorDamageList = tiBarcodeToErrorDamageMap.get(tousseInstance.getBarcode()); + if(CollectionUtils.isNotEmpty(materialErrorDamageList)){ + setErrorDamageInfo(tousseInstance, tousseDefinition, materialErrorDamageList, newUseRecord); + } } - // 丢失报损,自定义器械包和普通器械包科室登记丢失报损 - List materialErrorDamageList = tiBarcodeToErrorDamageMap.get(tousseInstance.getBarcode()); - if(CollectionUtils.isNotEmpty(materialErrorDamageList)){ - setErrorDamageInfo(tousseInstance, tousseDefinition, materialErrorDamageList, newUseRecord); - } } - } - - if (StringUtils.isNotBlank(messageId)) { typeCode = "AA"; returnStr = "患者消毒物料使用登记成功"; } + }else if (CollectionUtils.isNotEmpty(updateUrgentLevelTiList)){ + useRecordManager.updateUseRecordTousseInstanceUrgentLevel(updateUrgentLevelTiList, tiBarcodeToUrgentLevelMap); + typeCode = "AA"; + returnStr = "加急等级修改成功"; } } catch (Exception e) { e.printStackTrace(); Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r41196 -r41429 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 41196) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 41429) @@ -13600,7 +13600,7 @@ //根据申请项关联的使用记录器械包实例,更新申请项的加急等级 List tousseInstanceList = searchTousseItemTousseInstance(tousseInstanceTousseItem); - setTousseItemUrgentLevel(tousseInstanceTousseItem, tousseInstanceList); + setTousseItemUrgentLevel(tousseInstanceTousseItem, tousseInstanceList, false); objectDao.saveOrUpdate(tousseInstanceTousseItem); //设置申请单的加急等级 @@ -13796,10 +13796,11 @@ /** * 根据器械包实例的加急信息设置申请项的加急信息 - * @param tousseInstanceTousseItem - * @param tousseInstance + * @param tousseInstanceTousseItem 申请项 + * @param tousseInstance 器械包实例 + * @param allowSetLowGradleUrgentLevel 允许设置比当前加急等级级别低的加急等级 */ - private void setTousseItemUrgentLevel(TousseItem tousseInstanceTousseItem, List tousseInstanceList) { + private void setTousseItemUrgentLevel(TousseItem tousseInstanceTousseItem, List tousseInstanceList, boolean allowSetLowGradleUrgentLevel) { if(CollectionUtils.isEmpty(tousseInstanceList)){ throw new SystemException("更新失败,未找到申请项关联的使用记录录入的器械包实例!"); @@ -13838,7 +13839,7 @@ if(urgentLevelObj != null && urgentLevelObj.getGrade() == null){ throw new SystemException("更新失败,【" + urgentLevelObj.getName() + "】没有设置加急级别!"); } - if(urgentLevelObj != null + if(!allowSetLowGradleUrgentLevel && urgentLevelObj != null && (maxUrgentLevel == null || urgentLevelObj.getGrade().intValue() > maxUrgentLevel.getGrade().intValue())){ throw new SystemException("无法修改为更低的加急级别,请联系供应室操作。"); @@ -15422,4 +15423,219 @@ return applyTousseAmountMap; } + @Override + public void updateUseRecordTousseInstanceUrgentLevel(TousseInstance tousseInstance, UrgentLevel urgentLevel) { + if(tousseInstance == null){ + return; + } + //器械包实例原来使用记录的加急等级 + UrgentLevel urgentLevelForUseRecord = tousseInstance.getUrgentLevelForUseRecord(); + if(urgentLevelForUseRecord == null && urgentLevel == null){ + return; + } + UseRecord useRecord = tousseInstance.getUseRecord(objectDao); + if(useRecord == null){ + throw new SystemException("器械包实例" + tousseInstance.getTousseName() + "没有登记使用记录!"); + } + if(urgentLevel == null){ + //加急等级ID为空时,器械包实例取消加急 + UrgentAdditionalInfo urgentAdditionalInfoDB = tousseInstance.searchUrgentAdditionalInfo(objectDao); + if(urgentAdditionalInfoDB != null){ + tousseInstance.setUrgentAdditionalInfoId(null); + objectDao.delete(urgentAdditionalInfoDB); + } + + tousseInstance.setUrgentAdditionalInfoId(null); + tousseInstance.setUrgentLevelForUseRecord(null); + objectDao.saveOrUpdate(tousseInstance); + }else{ + //加急等级 + if(urgentLevel.getGrade() == null){ + throw new SystemException("加急等级【" + urgentLevel.getName() + "】没有设置级别!"); + } + + if(urgentLevelForUseRecord != null && urgentLevel.getId().equals(urgentLevelForUseRecord.getId())){ + return; + } + + //修改器械包实例的加急等级 + tousseInstance.setUrgentLevelForUseRecord(urgentLevel); + //删除旧的加急额外信息 + UrgentAdditionalInfo urgentAdditionalInfoDB = tousseInstance.searchUrgentAdditionalInfo(objectDao); + if(urgentAdditionalInfoDB != null){ + tousseInstance.setUrgentAdditionalInfoId(null); + objectDao.delete(urgentAdditionalInfoDB); + } + + objectDao.saveOrUpdate(tousseInstance); + } + + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_USERECORD, Log.LOGGER_TYPE_UPDATE, + String.format("%s【%s】的加急等级由%s改成%s。", tousseInstance.getTousseName(), tousseInstance.getBarcode(), + urgentLevelForUseRecord == null ? null : urgentLevelForUseRecord.getName(), urgentLevel == null ? null : urgentLevel.getName())); + + //已审核、已申请的使用记录,无法修改为更低的加急级别 + /*if(useRecord.isApplied() || useRecord.isAudited()){ + //无法修改为更低的加急级别,请联系供应室操作。 + UrgentLevel urgentLevel = tousseInstance.getUrgentLevelForUseRecord(); + if(urgentLevelForUseRecord != null + && (urgentLevel == null + || urgentLevelForUseRecord.getGrade().intValue() > urgentLevel.getGrade().intValue())){ + throw new SystemException("无法修改为更低的加急级别,请联系供应室操作。"); + } + }*/ + + //未审核、已审核的使用记录,没有转换申请单,不需要联动修改申请单 + if(useRecord.isUnaudited() + || useRecord.isAudited()){ + return; + } + + Long ancestorID = getTousseInstanceAncestorID(tousseInstance); + + //查询使用记录关联的申请单 + RecyclingApplication convertApplication = searchUseRecordConvertApplication(useRecord, tousseInstance); + + //判断是否可以修改申请单加急信息 + recyclingApplicationCanUpdateUrgentInfo(tousseInstance, convertApplication); + + TousseItem tousseInstanceTousseItem = null; + for (TousseItem tousseItem : convertApplication.getApplicationItems()) { + Long tiAncestorID = tousseItem.getAncestorID(); + if(tiAncestorID != null && tiAncestorID.longValue() == ancestorID.longValue()){ + tousseInstanceTousseItem = tousseItem; + break; + } + } + if(tousseInstanceTousseItem == null){ + throw new SystemException("更新失败,【" + tousseInstance.getTousseName() + "】已经被删除!"); + } + if(tousseInstanceTousseItem.terminated()){ + throw new SystemException("更新失败,【" + tousseInstance.getTousseName() + "】已经被终止!"); + } + + /*String packedAmountsql = String.format("select count(1) from %s where invoicePlanID = %s and tousseDefinition_id = %s", + TousseInstance.class.getSimpleName(), + convertApplication.getId(), + tousseInstanceTousseItem.getTousseDefinitionId()); + if(objectDao.countBySql(packedAmountsql) > 0){ + throw new SystemException("更新失败,【" + tousseInstance.getTousseName() + "】已经被装配,如需修改等级请跟供应室联系。"); + } + if(tousseInstanceTousseItem.isForeignTousse()){ + String foreignPackedAmountsql = String.format("select count(1) from %s ti join %s td on ti.tousseDefinition_id = td.id where ti.invoicePlanID = %s and td.parentID = %s", + TousseInstance.class.getSimpleName(), + TousseDefinition.class.getSimpleName(), + convertApplication.getId(), + tousseInstanceTousseItem.getTousseDefinitionId()); + if(objectDao.countBySql(foreignPackedAmountsql) > 0){ + throw new SystemException("更新失败,【" + tousseInstance.getTousseName() + "】已经被装配,如需修改等级请跟供应室联系。"); + } + }*/ + + //根据申请项关联的使用记录器械包实例,更新申请项的加急等级 + List tousseInstanceList = searchTousseItemTousseInstance(tousseInstanceTousseItem); + setTousseItemUrgentLevel(tousseInstanceTousseItem, tousseInstanceList, true); + objectDao.saveOrUpdate(tousseInstanceTousseItem); + + //设置申请单的加急等级 + setRecyclingApplicationUrgentLevel(convertApplication); + //更新申请单的加急信息 + convertApplication.setUrgentInfo(); + //版本加1 + VersionOperators.increaseVersion(convertApplication); + objectDao.saveOrUpdate(convertApplication); + + //回收记录 + RecyclingRecord recyclingRecord = convertApplication.getRecyclingRecord(objectDao); + RecyclingItem recyclingItem = null; + if(recyclingRecord != null){ + List recyclingItems = recyclingRecord.getItems(); + if(CollectionUtils.isNotEmpty(recyclingItems)){ + for (RecyclingItem recyclingItem2 : recyclingItems) { + if(tousseInstanceTousseItem.getTousseDefinitionId().equals(recyclingItem2.getTousseDefinitionId())){ + recyclingItem = recyclingItem2; + break; + } + } + } + if(recyclingItem != null){ + Integer recyclingAmount = recyclingItem.getAmount(); + if(recyclingAmount != null + && recyclingAmount.intValue() < tousseInstanceList.size()){ + throw new SystemException("更新失败,回收数量小于使用记录录入包实例数量,请检查申请单是否部分回收!"); + } + recyclingItem.setUrgentLevel(tousseInstanceTousseItem.getUrgentLevel()); + recyclingItem.setUrgentAmount(tousseInstanceTousseItem.getUrgentAmount()); + if(recyclingItem.getUrgentAmount() != null + && recyclingItem.getAmount() < recyclingItem.getUrgentAmount()){ + throw new SystemException("更新失败,加急数量不能大于回收数量!"); + } + } + } + + //修改装配任务加急等级信息 + List tasks = null; + if(recyclingItem != null){ + tasks = packingManager.getUnfinishedTaskForUpdate(recyclingItem.getRecyclingRecord().getId(), + tousseInstanceTousseItem.getTousseDefinitionId(), PackingTask.TASK_RECYCLINGRECORD); + } + if(CollectionUtils.isEmpty(tasks)){ + tasks = packingManager.getUnfinishedTaskForUpdate(convertApplication.getId(), + tousseInstanceTousseItem.getTousseDefinitionId(), PackingTask.TASK_APPLICATION); + } + + if(CollectionUtils.isNotEmpty(tasks)){ + for (PackingTask packingTask : tasks) { + /*String urgentLevelName = null; + UrgentLevel tiUrgentLevelForUseRecord = tousseInstance.getUrgentLevelForUseRecord(); + if(tiUrgentLevelForUseRecord != null){ + urgentLevelName = tiUrgentLevelForUseRecord.getName(); + }*/ + packingTask.setUrgentAmount(tousseInstanceTousseItem.getUrgentAmount()); + packingTask.setUrgentLevel(tousseInstanceTousseItem.getUrgentLevel()); + packingTask.setUrgentLevelObj(tousseInstanceTousseItem.getUrgentLevelObj()); + if(packingTask.getUrgentAmount() != null + && packingTask.getUnPackAmount() < packingTask.getUrgentAmount()){ + packingTask.setUrgentAmount(packingTask.getUnPackAmount()); + } + //更新装配任务的加急额外信息ID,接口推送的使用记录,没有加急额外信息 + packingTask.setUrgentAdditionalInfoId(null); + objectDao.saveOrUpdate(packingTask); + } + } + } + + @Override + public void updateUseRecordTousseInstanceUrgentLevel(List updateUrgentLevelTiList, Map tiBarcodeToUrgentLevelMap) { + if(CollectionUtils.isEmpty(updateUrgentLevelTiList)){ + return; + } + if(tiBarcodeToUrgentLevelMap == null){ + tiBarcodeToUrgentLevelMap = new HashMap(); + } + for (TousseInstance tousseInstance : updateUrgentLevelTiList) { + updateUseRecordTousseInstanceUrgentLevel(tousseInstance, tiBarcodeToUrgentLevelMap.get(tousseInstance.getBarcode())); + } + } + + @Override + public void saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( + UseRecord newUseRecord, String operator, String depart, + String departCoding, Date applicationCreateDate, String applicationFormType, + String reviewer, String reviewCode, + List updateUrgentLevelTiList, + Map tiBarcodeToUrgentLevelMap) throws Exception { + this.saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED(newUseRecord, operator, depart, departCoding, applicationCreateDate, applicationFormType, reviewer, reviewCode); + //更新已经录入使用记录的器械包实例的加急等级 + this.updateUseRecordTousseInstanceUrgentLevel(updateUrgentLevelTiList, tiBarcodeToUrgentLevelMap); + } + + @Override + public void saveUseRecord_TRANS_REQUIRED(UseRecord newUseRecord, List updateUrgentLevelTiList, + Map tiBarcodeToUrgentLevelMap) { + this.saveUseRecord_TRANS_REQUIRED(newUseRecord); + //更新已经录入使用记录的器械包实例的加急等级 + this.updateUseRecordTousseInstanceUrgentLevel(updateUrgentLevelTiList, tiBarcodeToUrgentLevelMap); + } + } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java =================================================================== diff -u -r40325 -r41429 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 40325) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 41429) @@ -15,6 +15,7 @@ import com.forgon.disinfectsystem.datasynchronization.model.OperationInfoVo; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; +import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.useRecord.vo.UseRecordPrintData; @@ -532,4 +533,51 @@ * @return */ public List patientDischargeNotification(Long minuteInterval); + + /** + * 修改已经录入使用记录的器械包实例的加急登记 + * @param tousseInstance 器械包实例 + * @param urgentLevel 加急登记 + */ + public void updateUseRecordTousseInstanceUrgentLevel(TousseInstance tousseInstance, UrgentLevel urgentLevel); + + /** + * 修改器械包实例加急等级 + * @param updateUrgentLevelTiList 器械包实例 + * @param tiBarcodeToUrgentLevelMap 加急等级map + */ + public void updateUseRecordTousseInstanceUrgentLevel(List updateUrgentLevelTiList, + Map tiBarcodeToUrgentLevelMap); + + /** + * 保存并审核使用记录,同时支持修改已经录入使用记录的器械包的加急等级 + * @param newUseRecord 使用记录 + * @param operator 录入人 + * @param depart 科室名称 + * @param departCoding 科室编码 + * @param applicationCreateDate 操作时间 + * @param applicationFormType 申请单类型 + * @param reviewer 审核人 + * @param reviewCode 审核人工号 + * @param updateUrgentLevelTiList 器械包实例 + * @param tiBarcodeToUrgentLevelMap 加急等级map + * @throws Exception + */ + public void saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( + UseRecord newUseRecord, String operator, String depart, + String departCoding, Date applicationCreateDate, String applicationFormType, + String reviewer, String reviewCode, + List updateUrgentLevelTiList, + Map tiBarcodeToUrgentLevelMap) throws Exception ; + + /** + * 保存使用记录,同时支持修改已经录入使用记录的加急等级 + * @param newUseRecord 使用记录 + * @param updateUrgentLevelTiList 器械包实例 + * @param tiBarcodeToUrgentLevelMap 加急等级map + */ + public void saveUseRecord_TRANS_REQUIRED(UseRecord newUseRecord, + List updateUrgentLevelTiList, + Map tiBarcodeToUrgentLevelMap); + }