Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r36570 -r36573 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36570) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36573) @@ -3424,6 +3424,13 @@ // 灭菌开始时间 String sterileStartTime = TousseInstanceUtils.buildSterileStartTime(sterileDate); Set idsForUpdateReviewer = new HashSet(); + if(reviewedBasket != null + && reviewedBasket.getContainer() != null + && Container.CONTAINER_PURPOSE_VIRTUAL.equals(reviewedBasket.getContainer().getPurpose()) + && StringUtils.isNotBlank(reviewedBasket.getContainer().getContainerName())){ + virtualBasketNameList.add(reviewedBasket.getContainer().getContainerName()); + } + Set oldReviewBasketIds = new HashSet();//包实例中VirtualBasketSeqNum为空的篮筐id 数据中是有这种虚拟筐的 for (TousseInstance tousseInstance : tousses) { if(DatabaseUtil.isPoIdValid(tousseInstance.getPackingRecord_id())){ idsForUpdateReviewer.add(tousseInstance.getPackingRecord_id()); @@ -3432,6 +3439,8 @@ String virtualBasketSeqNum = tousseInstance.getVirtualBasketSeqNum(); if(StringUtils.isNotBlank(virtualBasketSeqNum) && !virtualBasketNameList.contains(virtualBasketSeqNum)){ virtualBasketNameList.add(virtualBasketSeqNum); + }else if(DatabaseUtil.isPoIdValid(tousseInstance.getReviewBasket_id())){ + oldReviewBasketIds.add(tousseInstance.getReviewBasket_id()); } tousseInstance.setReviewTime(now); if(needToModifySterileDate){ @@ -3724,7 +3733,28 @@ DatabaseUtil.closeResultSetAndStatement(rs); } } - + if(oldReviewBasketIds.size() > 0){ + //查询篮筐id中的虚拟筐 + StringBuffer sql = new StringBuffer(); + sql.append("select containerName from ") + .append(Container.class.getSimpleName()) + .append(" c join ") + .append(ReviewedBasket.class.getSimpleName()) + .append(" rb on rb.container_id=c.id where c.purpose='") + .append(Container.CONTAINER_PURPOSE_VIRTUAL) + .append("' and c.containerType='") + .append(Container.CONTAINERTYPE_BASKET) + .append("' and ") + .append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("rb.id", oldReviewBasketIds)); + Set containerNames = objectDao.getStringSet(sql.toString(), null); + if(CollectionUtils.isNotEmpty(containerNames)){ + for (String containerName : containerNames) { + if(StringUtils.isNotBlank(containerName) && !virtualBasketNameList.contains(containerName)){ + virtualBasketNameList.add(containerName); + } + } + } + } if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ //重新计算虚拟篮筐状态 tousseInstanceManager.countVirtualContainerStatus(virtualBasketNameList); @@ -3776,37 +3806,6 @@ json.put("success", success); json.put("message", msg); json.put("tousses", toussesArray); - - //如果灭菌篮筐不为空,则判断本次审核的器械包所在虚拟篮筐内是还还有已装配器械包,则将对应虚拟篮筐的状态置为空闲,since2015-10-24 - if (reviewedBasket != null) { - String hql = "select distinct reviewBasket_id from TousseInstance where id in (" - + StringUtils.join(tids, ",") + ")"; - List reviewBasketIdList = objectDao.findByHql(hql); - if(CollectionUtils.isNotEmpty(reviewBasketIdList)){ - ReviewedBasket newReviewedBasket = null; - for(Object obj : reviewBasketIdList){ - Long reviewBasketId = (Long)obj; - - if(reviewBasketId == null){ - continue; - } - newReviewedBasket = (ReviewedBasket) objectDao.getByProperty( - ReviewedBasket.class.getSimpleName(), "id", reviewBasketId); - - if (newReviewedBasket != null){ - //判断该虚拟篮筐是否还存在已装配的器械包实例,如不存在则将虚拟篮筐释放,状态置为空闲 - Container virtualContainer = newReviewedBasket.getContainer(); - if(virtualContainer != null && Container.CONTAINER_PURPOSE_VIRTUAL.equals(virtualContainer.getPurpose())){ - String sql = "where status = '" + TousseInstance.STATUS_PACKED + "' and reviewBasket_id=" + reviewBasketId; - if(objectDao.countObjectBySql("TousseInstance", sql) == 0){ - virtualContainer.setStatus(Container.CONTAINER_STATUS_FREE); - objectDao.saveOrUpdate(virtualContainer); - } - } - } - } - } - } JSONObject logjson = new JSONObject(); JSONUtil.addLogProperty(logjson, "inputReviewBasketBarcode", sterileBasketBarcode); JSONUtil.addLogProperty(logjson, "tousseInstances", logTousseArray); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r36529 -r36573 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 36529) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 36573) @@ -4265,17 +4265,33 @@ @Override public void countVirtualContainerStatus(List virtualBasketNameList) { if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ - for(String virtualBasketName : virtualBasketNameList){ - Container virtualContainer = (Container)objectDao.getByProperty(Container.class.getSimpleName(), "containerName", virtualBasketName); - if(virtualContainer != null && virtualContainer.isVirtualBasket()){ - String sql = "where status in ('"+ TousseInstance.STATUS_PACKED +"','"+ TousseInstance.STATUS_REVIEWED +"','"+ - TousseInstance.STATUS_STERILING +"','"+ TousseInstance.STATUS_STERILED +"','"+ TousseInstance.STATUS_DISINFECTED +"') and virtualBasketSeqNum='" + virtualBasketName + "'"; - if(objectDao.countObjectBySql("TousseInstance", sql) == 0){ - virtualContainer.setStatus(Container.CONTAINER_STATUS_FREE); - objectDao.saveOrUpdate(virtualContainer); - } - } - } + StringBuffer sbf = new StringBuffer(); + sbf.append("update "); + sbf.append(Container.class.getSimpleName()); + sbf.append(" set status='"); + sbf.append(Container.CONTAINER_STATUS_FREE); + sbf.append("' where containerType='"); + sbf.append(Container.CONTAINERTYPE_BASKET); + sbf.append("' and purpose='"); + sbf.append(Container.CONTAINER_PURPOSE_VIRTUAL); + sbf.append("' "); + sbf.append(SqlUtils.getInStringListSql("containerName", virtualBasketNameList)); + sbf.append(" and exists (select 1 from "); + sbf.append(TousseInstance.class.getSimpleName()); + sbf.append(" ti join "); + sbf.append(ReviewedBasket.class.getSimpleName()); + sbf.append(" rb on rb.id=ti.reviewbasket_id where rb.container_id=Container.id and ti.status in('") + .append(TousseInstance.STATUS_PACKED) + .append("','") + .append(TousseInstance.STATUS_REVIEWED) + .append("','") + .append(TousseInstance.STATUS_STERILING) + .append("','") + .append(TousseInstance.STATUS_STERILED) + .append("','") + .append(TousseInstance.STATUS_DISINFECTED) + .append("'))"); + objectDao.excuteSQL(sbf.toString()); } }