Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManager.java =================================================================== diff -u -r34007 -r34098 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManager.java (.../WashAndDisinfectRecordManager.java) (revision 34007) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManager.java (.../WashAndDisinfectRecordManager.java) (revision 34098) @@ -13,6 +13,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.systemwarning.SystemWarningVo; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washData.WashData; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washData.WashDataItemOfChangLong; @@ -45,9 +46,14 @@ * @param paramMap */ public void saveOrUpdateWashAndDisinfectRecord(WashAndDisinfectRecord washRecord,Map paramMap); + /** + * + * @param ids + * @param confirmType + * @param releaseBasketAfterReturn 归还后释放 + */ + public void washConfirm(String ids,String confirmType,boolean releaseBasketAfterReturn); - public void washConfirm(String ids,String confirmType); - public List getWashAndDisinfectRecordsById(Long id); public List getWashAndDisinfectRecordByBasket(long basketId); @@ -82,9 +88,19 @@ public boolean isRinserCycleCounterExist(Long id,String rinserName,Long cycleCounter); public int getNextCycleCounter(String rinserName); - + /** + * 获取清洗机清洗记录条数 + * @param wr 清洗记录 + * @return + */ public int getWashAndDisinfectRecordsCount(WashAndDisinfectRecord wr); - + /** + * 获取清洗机清洗记录条数 + * @param devInterfaceId 设备接口id + * @param machineNo 机器号 + * @param wr 清洗记录 + * @return + */ public int getWashAndDisinfectRecordsCount(String devInterfaceId, String machineNo, WashAndDisinfectRecord wr); /** Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java =================================================================== diff -u -r34075 -r34098 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java (.../WashAndDisinfectRecordAction.java) (revision 34075) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java (.../WashAndDisinfectRecordAction.java) (revision 34098) @@ -40,6 +40,7 @@ import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.entity.basedatamanager.cleanmethod.CleanMethod; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectPic; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; @@ -194,7 +195,9 @@ String ids = StrutsParamUtils.getPraramValue("ids", null); String confirmType = StrutsParamUtils.getPraramValue("confirmType", null); try{ - washAndDisinfectRecordManager.washConfirm(ids, confirmType); + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + boolean releaseBasketAfterReturn = config != null && config.ftReleaseBasketAfterReturn()?true:false; + washAndDisinfectRecordManager.washConfirm(ids, confirmType, releaseBasketAfterReturn); StrutsResponseUtils.output(true); }catch(Exception e){ exceptionHandler.handleException(StrutsParamUtils.getResponse(), e); Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r34092 -r34098 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 34092) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 34098) @@ -353,8 +353,9 @@ } isWashOrderRight(washRecord.getId(),washRecord.getDisinfectIdentification(), classifyBasketInfoMap.keySet()); - - setClassifyBasketInfo(washRecord, classifyBasketInfoMap,rinser, isNewRecord,toDeleteBasketMap); + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + boolean releaseBasketAfterReturn = config != null && config.ftReleaseBasketAfterReturn()?true:false; + setClassifyBasketInfo(washRecord, classifyBasketInfoMap,rinser, isNewRecord,toDeleteBasketMap,releaseBasketAfterReturn); //清洗器械 setWashMaterials(washRecord,materials,rinser, isNewRecord); //设置清洗记录工作量 @@ -382,7 +383,7 @@ && Constants.STR_YES.equals(rinser.getTimingCompleteWash())){ CleanMethod cleanMethod = cleanMethodManager.getCleanMethodByName(washRecord.getDisinfectProgram()); if(cleanMethod != null && cleanMethod.getCleanMinutes() != null && cleanMethod.getCleanMinutes() > 0){ - timingAutoCompleteWashRecord(cleanMethod.getCleanMinutes(), washRecord); + timingAutoCompleteWashRecord(cleanMethod.getCleanMinutes(), washRecord,releaseBasketAfterReturn); } } //paramMap.put("oldRinserName", ""); @@ -430,24 +431,6 @@ washRecord.getId(), oldDisinfectProgram, oldRinserName); - Rinser rinser = rinserManager.getRinserByName(oldRinserName); - if(rinser == null){ - throw new SystemException("名称为"+ oldRinserName +"的清洗机不存在,可能已被删除,请重新选择!"); - } - ConsumptiveMaterialContainer container = rinser.getConsumptiveMaterialContainer(); - if(container == null){ - throw new SystemException("名称为"+ oldRinserName +"的清洗机没有绑定耗材容器!"); - } - Map consumptiveMaterialTypeMap = new HashMap(); - List volumes = container.getConsumptiveMaterialVolumes(); - if(CollectionUtils.isNotEmpty(volumes)){ - for (ConsumptiveMaterialVolume consumptiveMaterialVolume : volumes) { - ConsumptiveMaterialType type = consumptiveMaterialVolume.getConsumptiveMaterialType(); - if(type != null){ - consumptiveMaterialTypeMap.put(type, consumptiveMaterialVolume); - } - } - } List recordList = objectDao.findByHql(sql, 0, 1); if(CollectionUtils.isNotEmpty(recordList)){ ConsumptiveMaterialUseRecord oldRecord = recordList.get(0); @@ -466,18 +449,10 @@ if(CollectionUtils.isNotEmpty(oldDetails)){ List newDetails = new ArrayList(); for (ConsumptiveMaterialUseDetail consumptiveMaterialUseDetail : oldDetails) { - ConsumptiveMaterialType type = consumptiveMaterialUseDetail.getConsumptiveMaterialType(); ConsumptiveMaterialUseDetail detail = new ConsumptiveMaterialUseDetail(); - detail.setConsumptiveMaterialType(type); + detail.setConsumptiveMaterialType(consumptiveMaterialUseDetail.getConsumptiveMaterialType()); detail.setConsumptiveMaterialVolumn(consumptiveMaterialUseDetail.getConsumptiveMaterialVolumn()); detail.setUseAmount(consumptiveMaterialUseDetail.getUseAmount() * -1l); - //容器耗材种类的余量添加返回的数量 - ConsumptiveMaterialVolume v = consumptiveMaterialTypeMap.get(type); - if(v != null){ - v.setVolume(v.getVolume() + consumptiveMaterialUseDetail.getUseAmount()); - objectDao.saveOrUpdate(v); - detail.setConsumptiveMaterialVolumn(v.getVolume()); - } objectDao.save(detail); newDetails.add(detail); } @@ -678,7 +653,7 @@ * @param useTime 滞后的时间(单位为:分) * @param washRecord 目标清洗记录 */ - private void timingAutoCompleteWashRecord(Integer useTime, WashAndDisinfectRecord washRecord) { + private void timingAutoCompleteWashRecord(Integer useTime, WashAndDisinfectRecord washRecord, boolean releaseBasketAfterReturn) { if (useTime != null && useTime > 0 && washRecord != null && DatabaseUtil.isPoIdValid(washRecord.getId())) { Thread thread = new Thread(){ @@ -689,7 +664,7 @@ public void runTask() { try { sleep(useTime*60*1000); - updateWashRecordAndBasketStatus(washRecord.getId().toString(), WashAndDisinfectRecord.STATUS_WASHED, Container.CONTAINER_STATUS_WASHED, WashDisinfectInterruptRecord.ITERRUPT_FINISH_FINISH); + updateWashRecordAndBasketStatus(washRecord.getId().toString(), WashAndDisinfectRecord.STATUS_WASHED, Container.CONTAINER_STATUS_WASHED, WashDisinfectInterruptRecord.ITERRUPT_FINISH_FINISH, releaseBasketAfterReturn); } catch (InterruptedException e) { e.printStackTrace(); } @@ -772,7 +747,7 @@ } private void setClassifyBasketInfo(WashAndDisinfectRecord washRecord, - Map classifyBasketInfoMap,Rinser rinser, boolean isNewRecord,Map toDeleteBasketMap) { + Map classifyBasketInfoMap,Rinser rinser, boolean isNewRecord,Map toDeleteBasketMap, boolean releaseBasketAfterReturn) { Set classifyBasketIds = classifyBasketInfoMap.keySet(); classifyBasketIds = SetUtils.emptyIfNull(classifyBasketIds); @@ -828,7 +803,7 @@ ClassifyBasket classifyBasket = classifyBasketManager.get(id); if(classifyBasket != null){ Container container = (Container) barcodeManager.getBarcodeByBarcode(classifyBasket.getContainerBarcode()); - setContainerStatus(washRecord, rinser, isNewRecord, container,id); + setContainerStatus(washRecord, rinser, isNewRecord, container,id, releaseBasketAfterReturn); classifyBasket.setPersonInCharge(personInCharge); classifyBasket.setPersonInChargeCode(personInChargeCode); classifyBasket.setPosition(position); @@ -918,7 +893,7 @@ } private void setContainerStatus(WashAndDisinfectRecord washRecord, - Rinser rinser, boolean isNewRecord, Container container,Long classifyBasketId) { + Rinser rinser, boolean isNewRecord, Container container,Long classifyBasketId, boolean releaseBasketAfterReturn) { if(container != null){ //篮筐多次清洗并且清洗机需要确认的话,每开一炉篮筐状态:清洗中->清洗完成 if(container.washloading() || isNewRecord){ @@ -943,13 +918,37 @@ } //如果篮筐没有装配任务了,并且是清洗完成状态,那状态就设置为空闲 if(containerManager.isEmpty(container.getBarcode()) && container.washed()){ + releaseBasketAfterReturn = true; + if(releaseBasketAfterReturn && isExistForeignTousseInBasket(classifyBasketId)){ + return;//如果科室供应室配置中 外来器械归还后释放清洗篮筐为是,篮筐中又包含外来器械 则此处不设置为空闲 + } container.setStatus(Container.CONTAINER_STATUS_FREE); } } } } } - + /** + * 篮筐是否装有外来器械 + * @param classifyBasketId 篮筐id + * @return + */ + private boolean isExistForeignTousseInBasket(Long classifyBasketId){ + String sql = "select count(*) from "+ + ClassifyBasket.class.getSimpleName() + +" cb join "+ + ClassifiedItem.class.getSimpleName() + +" ci on ci.classifybasket_id=cb.id " + + "join " + + TousseDefinition.class.getSimpleName() + +" td on td.id=ci.toussedefinition_id " + +" where td.tousseType in('"+ + TousseDefinition.PACKAGE_TYPE_FOREIGN + +"','"+ + TousseDefinition.PACKAGE_TYPE_SPLIT + +"') and cb.id=" + classifyBasketId; + return objectDao.countBySql(sql) > 0?true:false; + } private boolean isExistUnWashBasket(String barcode,Long classifyBasketId) { if (StringUtils.isNotBlank(barcode) && classifyBasketId != null) { String sql = String.format("select po,r from %s po left join po.washAndDisinfectRecords r " @@ -2142,19 +2141,19 @@ } @Override - public void washConfirm(String ids, String confirmType) { + public void washConfirm(String ids, String confirmType, boolean releaseBasketAfterReturn) { if (StringUtils.isNotBlank(confirmType)) { if (WashAndDisinfectRecord.STATUS_WASHED.equals(confirmType)) { updateWashRecordAndBasketStatus(ids, WashAndDisinfectRecord.STATUS_WASHED, Container.CONTAINER_STATUS_WASHED, - WashDisinfectInterruptRecord.ITERRUPT_FINISH_FINISH); + WashDisinfectInterruptRecord.ITERRUPT_FINISH_FINISH, releaseBasketAfterReturn); } else if (WashAndDisinfectRecord.STATUS_WASHFAILD .equals(confirmType)) { updateWashRecordAndBasketStatus(ids, WashAndDisinfectRecord.STATUS_WASHFAILD, Container.CONTAINER_STATUS_WASHLOADING, - WashDisinfectInterruptRecord.ITERRUPT_FINISH_FAILEURE); + WashDisinfectInterruptRecord.ITERRUPT_FINISH_FAILEURE, releaseBasketAfterReturn); } } } @@ -2339,7 +2338,7 @@ return true; } private void updateWashRecordAndBasketStatus(String ids, String washStatus, - String basketStatus, String interruptOptType) { + String basketStatus, String interruptOptType, boolean releaseBasketAfterReturn) { if (StringUtils.isNotBlank(ids)) { List records = getCollectionForUpdate(ids, ";"); SimpleDateFormat sdf = Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS; @@ -2364,8 +2363,12 @@ .getContainerByBarcode(basketBarcode); String containerStatus = basketStatus; if(WashAndDisinfectRecord.STATUS_WASHED.equals(washStatus) && containerManager.isEmpty(basketBarcode)){ - //如果是清洗完成,并且为空了,那就是空闲状态 - containerStatus = Container.CONTAINER_STATUS_FREE;//如果清洗完成后,篮筐空了,那就设置为空闲状态 + if(releaseBasketAfterReturn && isExistForeignTousseInBasket(classifyBasket.getId())){ + //如果科室供应室配置中 外来器械归还后释放清洗篮筐为是,篮筐中又包含外来器械 则此处不设置为空闲 + }else{ + //如果是清洗完成,并且为空了,那就是空闲状态 + containerStatus = Container.CONTAINER_STATUS_FREE;//如果清洗完成后,篮筐空了,那就设置为空闲状态 + } } if (container != null) { container.setStatus(containerStatus); @@ -2965,7 +2968,7 @@ if(container == null){ return null; } - if(CssdUtils.getSystemSetConfigByNameBool("recycleClassifyBasketAfterPacked",true)){ + if(true){ if(container.washing()){ WashAndDisinfectRecord wr = getLastWashRecord(container); obj = new JSONObject();