Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r16708 -r16727 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 16708) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 16727) @@ -1790,6 +1790,7 @@ } /** + * 根据发货物品项根据包状态重新计算虚拟篮筐状态 * @param submitInvoiceItems */ private void refreshReviewedBasketStatus( Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r16702 -r16727 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16702) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16727) @@ -9,8 +9,11 @@ import net.sf.json.JSONObject; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; +import org.apache.commons.lang3.StringUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; @@ -19,6 +22,7 @@ import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; +import com.forgon.disinfectsystem.invoice.service.SubmitInvoiceItem; import com.forgon.disinfectsystem.vo.TousseSimpleVO; import com.forgon.tools.hibernate.BasePoManager; @@ -361,5 +365,11 @@ * @return */ public TousseInstance getExpireNearest(TousseInstance tousseInstance,List acceptStatus,Collection scanedBarcodes); + + /** + * 重新计算虚拟篮筐状态 + * @param virtualBasketNameList 虚拟篮筐名称集合 + */ + public void countVirtualContainerStatus(List virtualBasketNameList); } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r16702 -r16727 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16702) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16727) @@ -236,10 +236,18 @@ if(CollectionUtils.isNotEmpty(tousseInstances)){ //更新器械包库存 List goodsStockList = new ArrayList(); + + //获取器械包审核前所在的虚拟篮筐集合 + List virtualBasketNameList = new ArrayList(); for(TousseInstance tousseInstance : tousseInstances){ if(tousseInstance == null){ continue; } + //获取包实例的虚拟篮筐 + String virtualBasketSeqNum = tousseInstance.getVirtualBasketSeqNum(); + if(virtualBasketNameList.contains(virtualBasketSeqNum)){ + virtualBasketNameList.add(virtualBasketSeqNum); + } tousseInstance.setOperateUser(operateUser); tousseInstance.setWasteReason(wasteReason); tousseInstance.setWasteDate(wasteDate); @@ -266,6 +274,10 @@ goodsStockList.add(goodsStock); } } + if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ + //重新计算虚拟篮筐状态 + countVirtualContainerStatus(virtualBasketNameList); + } if(CollectionUtils.isNotEmpty(goodsStockList)){ goodsStockManager.saveOrUpdateGoodsStock(goodsStockList, GoodsStockManager.MODE_OUTSTOCK); } @@ -996,7 +1008,22 @@ + Log.MODEL_STERILELOADING, Log.TYPE_UPDATE, json); Query query = objectDao.getHibernateSession().createQuery("from TousseInstance where barcode in :barcode order by barcode"); query.setParameterList("barcode", tousseInstanceBarcodes); - return query.list(); + + List tousses = query.list(); + //获取器械包审核前所在的虚拟篮筐集合 + List virtualBasketNameList = new ArrayList(); + for (TousseInstance tousseInstance : tousses) { + //获取审核前虚拟篮筐 + String virtualBasketSeqNum = tousseInstance.getVirtualBasketSeqNum(); + if(virtualBasketNameList.contains(virtualBasketSeqNum)){ + virtualBasketNameList.add(virtualBasketSeqNum); + } + } + if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ + //重新计算虚拟篮筐状态 + countVirtualContainerStatus(virtualBasketNameList); + } + return tousses; } return null; } @@ -2491,4 +2518,22 @@ hql += " order by po.validUntil asc"; return getFirst(hql); } + + /** + * 重新计算虚拟篮筐状态(灭菌装载、审核、废弃、发货后都需要重新计算) + * @param virtualBasketNameList 虚拟篮筐名称集合 + */ + public void countVirtualContainerStatus(List virtualBasketNameList) { + if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ + for(String virtualBasketName : virtualBasketNameList){ + Container virtualContainer = (Container)objectDao.getByProperty(Container.class.getSimpleName(), "containerName", virtualBasketName); + String sql = "where status in ('"+ TousseInstance.STATUS_PACKED +"','"+ TousseInstance.STATUS_REVIEWED +"','"+ + TousseInstance.STATUS_STERILING +"','"+ TousseInstance.STATUS_STERILED +"') and virtualBasketSeqNum='" + virtualBasketName + "'"; + if(objectDao.countObjectBySql("TousseInstance", sql) == 0){ + virtualContainer.setStatus(Container.CONTAINER_STATUS_FREE); + objectDao.saveOrUpdate(virtualContainer); + } + } + } + } } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r16725 -r16727 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16725) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16727) @@ -2215,8 +2215,15 @@ !SupplyRoomConfig.RECYCLING_PACKING_NO.equals(supplyRoomConfigParams.getIsSecondSupplyRoomAutoInvoice()); Map packageTypeMap = httpOptionManager.getHttpOptionTextToValueMapByListIdId(HttpOption.SYSTEMSETTING_PACKAGING_TYPE); + + //获取器械包审核前所在的虚拟篮筐集合 + List virtualBasketNameList = new ArrayList(); for (TousseInstance tousseInstance : tousses) { - + //获取审核前虚拟篮筐 + String virtualBasketSeqNum = tousseInstance.getVirtualBasketSeqNum(); + if(virtualBasketNameList.contains(virtualBasketSeqNum)){ + virtualBasketNameList.add(virtualBasketSeqNum); + } tousseInstance.setReviewTime(now); String sterileStartTime = TousseInstanceUtils.buildSterileStartTime(sterileDate); @@ -2432,7 +2439,10 @@ tousseInstanceManager.saveOrUpdate(tousseInstance); } - + if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ + //重新计算虚拟篮筐状态 + tousseInstanceManager.countVirtualContainerStatus(virtualBasketNameList); + } updateGoodsStock(coding, tousses); //判断如果配置二级供应室是否自动发货不为否才自动发货,否则不自动发货 @@ -2543,9 +2553,13 @@ Map map = new HashMap(); Double totalPrice = 0.0; for (TousseInstance tousseInstance : tousseInstances) { + //消毒物品不能签收,所以二级供应室发货后只设置成已发货状态 tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); tousseInstance.setLocation(deptCode); tousseInstance.setLocationForDisplay(deptName); + //结算科室赋值为所在位置,解决不能退货的问题 + tousseInstance.setSettleAccountsDepartCode(deptCode); + tousseInstance.setSettleAccountsDepart(deptName); tousseInstance.setInvoice_id(invoice.getId()); tousseInstanceManager.saveOrUpdate(tousseInstance); TousseDefinition td = tousseInstance