Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r40548 -r40604 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 40548) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 40604) @@ -721,7 +721,8 @@ //状态为已装配、已审核、灭菌中的包实例ID,如果已经入筐,要从灭菌篮筐中移除。(GDSRMYZHYY-35) List isPackedReviewedSterilingTousseInstanceIdList = new ArrayList(); - + //状态为已装配、已审核、灭菌中的包实例关联得篮筐实例id + List isPackedReviewedSterilingReviewedBasketIdList = new ArrayList(); //状态不是已装配、已审核、灭菌中的包实例ID,所属仓库清空(所在位置保留不清空) List notPackedReviewedSterilingTousseInstanceIdList = new ArrayList(); Map subForeignProxyItemAmount = new HashMap<>();//key=ForeignProxyItem_id value=废弃的包实例数量 用于联动减少TousseItem.amount 以实现页面上看到发货计划数量减少 @@ -788,7 +789,18 @@ if(tousseInstance.isPacked() || tousseInstance.isReviewed() || tousseInstance.isSteriling()){ // 状态为灭菌中或者已审核的器械包被废弃时,如果已经入筐,要从灭菌篮筐中移除。(GDSRMYZHYY-35) - isPackedReviewedSterilingTousseInstanceIdList.add(tousseInstance.getId()); + if(DatabaseUtil.isPoIdValid(tousseInstance.getReviewBasket_id())){ + Long maxRBId = objectDao.getALongNum(" select max(rb.id) maxID from "+ ReviewedBasket.class.getSimpleName() + +" rb where exists (select 1 from " + + ReviewedBasket.class.getSimpleName() + +" cbn where cbn.id= " + + tousseInstance.getReviewBasket_id() + + " and rb.container_id=cbn.container_id) ", "maxID"); + if(MathTools.equals(tousseInstance.getReviewBasket_id(), maxRBId)){//说明是最大的篮筐实例 废弃最大的篮筐实例内的包 才修改容器状态 + isPackedReviewedSterilingReviewedBasketIdList.add(tousseInstance.getReviewBasket_id()); + } + isPackedReviewedSterilingTousseInstanceIdList.add(tousseInstance.getId()); + } }else{ //状态不是已装配、已审核、灭菌中的器械包实例 notPackedReviewedSterilingTousseInstanceIdList.add(tousseInstance.getId()); @@ -798,36 +810,68 @@ } } - //废弃包实例的通用修改 - String updateSql = String.format( - "update %s set virtualBasketSeqNum = null, operateUser = '%s', wasteReason = '%s', wasteDate = %s, status = '%s' ", - TousseInstance.class.getSimpleName(), - operateUser, wasteReason, dateQueryAdapter.dateAdapter(wasteDate), - TousseInstance.STATUS_DISCARD - ); - //状态为已装配、已审核、灭菌中的器械包实例将不扣减库存,包实例关联的篮筐实例属性清空 - if(CollectionUtils.isNotEmpty(isPackedReviewedSterilingTousseInstanceIdList)){ - String updatePackedReviewedSterilingTousseInstanceBatchSql = String.format( - "%s, reviewBasket_id = null where id = ?", updateSql); - jdbcTemplate.batchUpdate(updatePackedReviewedSterilingTousseInstanceBatchSql, new BatchPreparedStatementSetter() { + if(CollectionUtils.isNotEmpty(waitDiscardTousseInstanceList)){ + //废弃包实例的通用修改 + String updateSql = String.format( + "update %s set virtualBasketSeqNum = null, operateUser = '%s', wasteReason = '%s', wasteDate = %s, status = '%s' where id = ?", + TousseInstance.class.getSimpleName(), + operateUser, wasteReason, dateQueryAdapter.dateAdapter(wasteDate), + TousseInstance.STATUS_DISCARD + ); + jdbcTemplate.batchUpdate(updateSql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) throws SQLException { - ps.setLong(1, isPackedReviewedSterilingTousseInstanceIdList.get(i)); + ps.setLong(1, waitDiscardTousseInstanceList.get(i).getId()); } @Override public int getBatchSize() { - return isPackedReviewedSterilingTousseInstanceIdList.size(); + return waitDiscardTousseInstanceList.size(); } }); } + //状态为已装配、已审核、灭菌中的器械包实例将不扣减库存,包实例关联的篮筐实例属性清空 + if(CollectionUtils.isNotEmpty(isPackedReviewedSterilingTousseInstanceIdList)){ + String updatePackedReviewedSterilingTousseInstanceBatchSql = String.format( + "update %s set reviewBasket_id = null where 1=1 " + + SqlUtils.getInLongListSql("id", isPackedReviewedSterilingTousseInstanceIdList) + , TousseInstance.class.getSimpleName()); + objectDao.excuteSQL(updatePackedReviewedSterilingTousseInstanceBatchSql); + if(CollectionUtils.isNotEmpty(isPackedReviewedSterilingReviewedBasketIdList)){ + //先查询废弃的包实例所关联的篮筐实例中哪些装了几个状态中的包 + Set rbIds = objectDao.getLongSet(" select ti.reviewBasket_id from " + + TousseInstance.class.getSimpleName() + +" ti where ti.status in ('" + + TousseInstance.STATUS_PACKED + +"','" + + TousseInstance.STATUS_REVIEWED + +"','" + + TousseInstance.STATUS_STERILING + +"','" + + TousseInstance.STATUS_DELAY_CONFIRM + +"') " + + SqlUtils.getInLongListSql("ti.reviewBasket_id", isPackedReviewedSterilingReviewedBasketIdList)); + Set updateRbids = new HashSet<>(isPackedReviewedSterilingReviewedBasketIdList); + //如果篮筐实例内不存在有效状态的包了 那么容器置为空闲 + updateRbids.removeAll(rbIds); + if(CollectionUtils.isNotEmpty(updateRbids)){ + String updateSql = " update "+ Container.class.getSimpleName() + +" set status='空闲' where exists (select 1 from " + + ReviewedBasket.class.getSimpleName() + + " rb where rb.container_id=Container.id " + +SqlUtils.getInLongListSql("rb.id", updateRbids) + + " )"; + objectDao.excuteSQL(updateSql); + } + } + } //状态不是已装配、已审核、灭菌中的器械包实例,需要清空所属仓库清空(所在位置保留不清空) if(CollectionUtils.isNotEmpty(notPackedReviewedSterilingTousseInstanceIdList)){ String updateNotPackedReviewedSterilingTousseInstanceBatchSql = String.format( - "%s, wareHouseId = null, wareHouseName = null where id = ?", updateSql); + "update %s set wareHouseId = null, wareHouseName = null where id = ?", TousseInstance.class.getSimpleName()); jdbcTemplate.batchUpdate(updateNotPackedReviewedSterilingTousseInstanceBatchSql, new BatchPreparedStatementSetter() { @Override @@ -869,7 +913,7 @@ } } } - + @Override public void handleSubForeignProxyItemAmount(Map subForeignProxyItemAmount){ if(MapUtils.isEmpty(subForeignProxyItemAmount)){