Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r31405 -r31413 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 31405) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 31413) @@ -527,7 +527,7 @@ setEndDate(sterilizationRecord, new Date()); } resetNoVirtualBasketStatus(sterilizationRecord); - List allTousseInstancesOfSterile = getAllTousseInstancesOfSterile(sterilizationRecord,true); + List allTousseInstancesOfSterile = getAllTousseInstancesOfSterile(sterilizationRecord,true,false); long l1 = System.currentTimeMillis(); logger.debug("l1-l0耗时:" + (l1-l0)); WareHouse defaultWareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(orgUnitCode); @@ -823,11 +823,12 @@ * 获取灭菌记录关联的已入筐和未入筐的器械包 * @param sterilizationRecord 灭菌记录 * @param updateTousseInstanceSterileBasket 是否更新器械包实例的灭菌篮筐信息。 + * @param discardTousse 是否加载已废弃的包 *
本来应该重新定义一个方法来完成对应的工作,但是考虑到性能(要访问数据库).所以放到一起,用一个参数来控制.完成灭菌的功能,此参数为true * @return */ private List getAllTousseInstancesOfSterile( - SterilizationRecord sterilizationRecord,boolean updateTousseInstanceSterileBasket) { + SterilizationRecord sterilizationRecord,boolean updateTousseInstanceSterileBasket, boolean discardTousse) { long t1 = System.currentTimeMillis(); List allTousseInstancesOfSterile = new ArrayList(); if(sterilizationRecord != null){ @@ -845,7 +846,9 @@ rbIdList.add(rb.getId()); } String queryString = " where " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.reviewBasket_id", rbIdList); - queryString += " and po.status !='"+TousseInstance.STATUS_DISCARD+"'"; + if(!discardTousse){ + queryString += " and po.status !='"+TousseInstance.STATUS_DISCARD+"'"; + } // List list = objectDao.findByHql(" from " + TousseInstance.class.getSimpleName() + " po " + queryString); List list = objectDao.getBySql_ForUpdate2(TousseInstance.class.getSimpleName() ,queryString , false); String tousseInstanceIds = ""; @@ -945,7 +948,7 @@ @Override public List getAllTousseInstancesOfSterile(SterilizationRecord sterilizationRecord){ - return getAllTousseInstancesOfSterile(sterilizationRecord,false); + return getAllTousseInstancesOfSterile(sterilizationRecord,false,false); } @Override public List getSterilizationRecordPrintItem(SterilizationRecord sterilizationRecord){ @@ -3565,10 +3568,11 @@ } } // 获取所有器械包 - List allTousseInstancesOfSterile = getAllTousseInstancesOfSterile(sr,false); + List allTousseInstancesOfSterile = getAllTousseInstancesOfSterile(sr,false,true); // 如果灭菌状态有变动,处理器械包信息 if(!sr.getStatus().equals(status)){ // 对包状态校验 + Set statusSet = new HashSet(); for (TousseInstance tousseInstance : allTousseInstancesOfSterile) { // 如果记录是灭菌完成,包状态却不是已灭菌,说明包状态有改动,不允许干预 if(SterilizationRecord.STERILIZATION_STATUS_END.equals(sr.getStatus())){ @@ -3598,7 +3602,12 @@ return JSONUtil.buildJsonObject(false, msg); } } + statusSet.add(tousseInstance.getStatus()); } + if(statusSet.size() > 1){ + String msg = "不能修改此灭菌记录的灭菌状态,因为不满足如下修改要求:该炉所有包的状态均相同,并且为已灭菌、已审核、灭菌中的状态之一!"; + return JSONUtil.buildJsonObject(false, msg); + } String orgUnitCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); WareHouse defaultWareHouse = wareHouseManager.getDefaultWareHouseByUnitCode(orgUnitCode); List inStockTousseList = new ArrayList(); @@ -3619,6 +3628,8 @@ // outStockTousseList.add(goodsStock); tousseInstanceManager.setToWarehouse(tousseInstance, defaultWareHouse); } + // 灭菌完成干预成灭菌中时,需要删除灭菌记录信息 + tousseInstance.setSterilizationRecord_id(null); }else if(SterilizationRecord.STERILIZATION_STATUS_FAILURE.equals(status)){ // 改为灭菌失败 包状态改为‘已审核’ newStatus = TousseInstance.STATUS_REVIEWED;