Index: ssts-web/src/test/java/test/forgon/disinfectsystem/waste/TousseInstanceWasteTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/waste/TousseInstanceWasteTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/waste/TousseInstanceWasteTests.java (revision 16957) @@ -0,0 +1,228 @@ +package test.forgon.disinfectsystem.waste; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import test.forgon.disinfectsystem.AbstractCSSDTest; + +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.packing.service.PackingManager; +import com.forgon.serialnumber.model.SerialNum; + + +/** + * 器械包废弃 + * @author shuyongfu + * @since 2017-02-09 + * + */ +public class TousseInstanceWasteTests extends AbstractCSSDTest { + @Autowired + private PackingManager packingManager; + + /** + * 测试聚合包废弃 + */ + @Test + @Rollback(false) + public void testComboTousseWaste() { + initCSSDData(); + TousseDefinition comboTd_聚合包 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); + //聚合包内普通器械包 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + + //装配时间 + Date packingTime = new Date(); + //构造聚合包实例 + TousseInstance comboTousseInstance1 = new TousseInstance(); + comboTousseInstance1.setTousseDefinition(comboTd_聚合包); + comboTousseInstance1.setComboTousseDefinitionId(comboTd_聚合包.getId()); + comboTousseInstance1.setStatus(TousseInstance.STATUS_PACKED); + comboTousseInstance1.setOperationTime(packingTime); + comboTousseInstance1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(comboTousseInstance1); + + TousseInstance tousseInstance_开胸包1 = new TousseInstance(); + tousseInstance_开胸包1.setTousseDefinition(td_开胸包); + tousseInstance_开胸包1.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开胸包1.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开胸包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开胸包1.setOperationTime(packingTime); + tousseInstance_开胸包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包1); + + TousseInstance tousseInstance_开胸包2 = new TousseInstance(); + tousseInstance_开胸包2.setTousseDefinition(td_开胸包); + tousseInstance_开胸包2.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开胸包2.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开胸包2.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开胸包2.setOperationTime(packingTime); + tousseInstance_开胸包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包2); + + TousseInstance tousseInstance_开颅包1 = new TousseInstance(); + tousseInstance_开颅包1.setTousseDefinition(td_开颅包); + tousseInstance_开颅包1.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包1.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开颅包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包1.setOperationTime(packingTime); + tousseInstance_开颅包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包1); + + TousseInstance tousseInstance_开颅包2 = new TousseInstance(); + tousseInstance_开颅包2.setTousseDefinition(td_开颅包); + tousseInstance_开颅包2.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包2.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开颅包2.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包2.setOperationTime(packingTime); + tousseInstance_开颅包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包2); + + + TousseInstance comboTousseInstance2 = new TousseInstance(); + comboTousseInstance2.setTousseDefinition(comboTd_聚合包); + comboTousseInstance2.setComboTousseDefinitionId(comboTd_聚合包.getId()); + comboTousseInstance2.setStatus(TousseInstance.STATUS_PACKED); + comboTousseInstance2.setOperationTime(packingTime); + comboTousseInstance2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(comboTousseInstance2); + + TousseInstance tousseInstance_开胸包3 = new TousseInstance(); + tousseInstance_开胸包3.setTousseDefinition(td_开胸包); + tousseInstance_开胸包3.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开胸包3.setComboTousseInstanceId(comboTousseInstance2.getId()); + tousseInstance_开胸包3.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开胸包3.setOperationTime(packingTime); + tousseInstance_开胸包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包3); + + TousseInstance tousseInstance_开颅包3 = new TousseInstance(); + tousseInstance_开颅包3.setTousseDefinition(td_开颅包); + tousseInstance_开颅包3.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包3.setComboTousseInstanceId(comboTousseInstance2.getId()); + tousseInstance_开颅包3.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包3.setOperationTime(packingTime); + tousseInstance_开颅包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包3); + + TousseInstance tousseInstance_开颅包4 = new TousseInstance(); + tousseInstance_开颅包4.setTousseDefinition(td_开颅包); + tousseInstance_开颅包4.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包4.setComboTousseInstanceId(comboTousseInstance2.getId()); + tousseInstance_开颅包4.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包4.setOperationTime(packingTime); + tousseInstance_开颅包4.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包4); + + //调用审核(无篮筐审核) + packingManager.reviewTousseInstance(comboTousseInstance1.getId() + ";" + comboTousseInstance2.getId(), "", "aa", "bb", "cc", new Date()); + + //篮筐01 + Container container = containerManager.getContainerByBarcode("018000001"); + //调用灭菌装载至篮筐01 + tousseInstanceManager.addTousseInstanceToBasket( + container.getBarcode(), comboTousseInstance1.getBarcode(), null); + + //因为上一行装载至篮筐的方法里用的原生jdbc更新的篮筐实例id及名称,而非对象方法的更新,所以我们需要再查询一次 + //comboTousseInstance1 = tousseInstanceManager.getTousseInstanceById(String.valueOf(comboTousseInstance1.getId())); + //断言聚合1、聚合2及其对应包实例的灭菌筐实例id及灭菌筐名字是否与篮筐的一致 + assertEquals(comboTousseInstance1.getSterilizationBasket(), container.getContainerName()); + List tousseInstanceList1 = comboTousseInstance1.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousseInstance : tousseInstanceList1) { + AssertJUnit.assertEquals(tousseInstance.getSterilizationBasket(), container.getContainerName()); + } + + //调用灭菌装载至篮筐01 + tousseInstanceManager.addTousseInstanceToBasket( + container.getBarcode(), comboTousseInstance2.getBarcode(), null); + assertEquals(comboTousseInstance2.getSterilizationBasket(), container.getContainerName()); + List tousseInstanceList2 = comboTousseInstance2.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousseInstance : tousseInstanceList2) { + AssertJUnit.assertEquals(tousseInstance.getSterilizationBasket(), container.getContainerName()); + } + + //篮筐02 + Container container2 = containerManager.getContainerByBarcode("018000001"); + //调用灭菌装载至篮筐02 + tousseInstanceManager.addTousseInstanceToBasket( + container2.getBarcode(), comboTousseInstance1.getBarcode(), new ArrayList()); + tousseInstanceManager.addTousseInstanceToBasket( + container2.getBarcode(), comboTousseInstance2.getBarcode(), new ArrayList()); + //断言聚合1、聚合2及其对应包实例的灭菌筐实例id及灭菌筐名字是否与篮筐的一致 + assertEquals(comboTousseInstance1.getSterilizationBasket(), container2.getContainerName()); + tousseInstanceList1 = comboTousseInstance1.getTousseInstancesBelongToThisComboTousse(objectDao); + AssertJUnit.assertEquals(4, tousseInstanceList1.size()); + for (TousseInstance tousseInstance : tousseInstanceList1) { + AssertJUnit.assertEquals(tousseInstance.getSterilizationBasket(), container2.getContainerName()); + } + + assertEquals(comboTousseInstance2.getSterilizationBasket(), container2.getContainerName()); + tousseInstanceList2 = comboTousseInstance2.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousseInstance : tousseInstanceList2) { + AssertJUnit.assertEquals(tousseInstance.getSterilizationBasket(), container2.getContainerName()); + } + + //调用移除comboTousseInstance1 + List barcodes = new ArrayList(); + barcodes.add(comboTousseInstance1.getBarcode()); + barcodes.add(comboTousseInstance2.getBarcode()); + tousseInstanceManager.removeFromBasket(barcodes); + + objectDao.getHibernateSession().refresh(comboTousseInstance1); + + //断言聚合1、聚合2及其对应包实例的灭菌筐名字是否为空 + assertNull(comboTousseInstance1.getSterilizationBasket()); + tousseInstanceList1 = comboTousseInstance1.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousseInstance : tousseInstanceList1) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + assertNull(tousseInstance.getSterilizationBasket()); + } + + objectDao.getHibernateSession().refresh(comboTousseInstance2); + tousseInstanceList2 = comboTousseInstance2.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousseInstance : tousseInstanceList2) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + assertNull(tousseInstance.getSterilizationBasket()); + } + + List waitWasteTousseInstanceList = new ArrayList(); + waitWasteTousseInstanceList.add(comboTousseInstance1); + waitWasteTousseInstanceList.add(comboTousseInstance2); + + //下面两个句不管加不加入到待废弃的集合中,断言结果都是正确的 + waitWasteTousseInstanceList.addAll(tousseInstanceList1); + waitWasteTousseInstanceList.addAll(tousseInstanceList2); + tousseInstanceManager.discardTousseInstance(waitWasteTousseInstanceList, "测试废弃"); + + //断言聚合1、聚合2及其对应包实例的包状态是否为已废弃 + objectDao.getHibernateSession().refresh(comboTousseInstance1); + AssertJUnit.assertEquals(TousseInstance.STATUS_DISCARD, comboTousseInstance1.getStatus()); + tousseInstanceList1 = comboTousseInstance1.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousseInstance : tousseInstanceList1) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_DISCARD, tousseInstance.getStatus()); + } + + objectDao.getHibernateSession().refresh(comboTousseInstance2); + AssertJUnit.assertEquals(TousseInstance.STATUS_DISCARD, comboTousseInstance2.getStatus()); + tousseInstanceList2 = comboTousseInstance2.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousseInstance : tousseInstanceList2) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_DISCARD, tousseInstance.getStatus()); + } + + } +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r16900 -r16957 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16900) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16957) @@ -232,48 +232,79 @@ public void discardTousseInstance(Collection tousseInstances,String operateUser,String wasteReason) { discardTousseInstances(tousseInstances, operateUser, wasteReason, new Date()); } + + /** + * 废弃包实例 + * @param tousseInstances 包实例集合可能存在聚合包实例及聚合包实例下属的普通器械包实例 + * @param operateUser 操作人 + * @param wasteReason 废弃原因 + * @param wasteDate 废弃时间 + */ private void discardTousseInstances(Collection tousseInstances,String operateUser,String wasteReason,Date wasteDate) { if(CollectionUtils.isNotEmpty(tousseInstances)){ //更新器械包库存 List goodsStockList = new ArrayList(); //获取器械包审核前所在的虚拟篮筐集合 List virtualBasketNameList = new ArrayList(); - for(TousseInstance tousseInstance : tousseInstances){ - if(tousseInstance == null){ + for(TousseInstance tousseInstanceFirst : tousseInstances){ + if(tousseInstanceFirst == null){ continue; } - //获取包实例的虚拟篮筐 - String virtualBasketSeqNum = tousseInstance.getVirtualBasketSeqNum(); - if(StringUtils.isNotBlank(virtualBasketSeqNum) && !virtualBasketNameList.contains(virtualBasketSeqNum)){ - virtualBasketNameList.add(virtualBasketSeqNum); + + //当前器械包待废弃的包实例集合 + List waitDiscardTousseInstanceListForCurrentTousseInstance = new ArrayList(); + waitDiscardTousseInstanceListForCurrentTousseInstance.add(tousseInstanceFirst); + //判断是否为聚合包 + if(tousseInstanceFirst.isComboTousse()){ + List belongToThisComboTousseInstanceList = tousseInstanceFirst.getTousseInstancesBelongToThisComboTousse(objectDao); + if(!tousseInstances.containsAll(belongToThisComboTousseInstanceList)){ + for(TousseInstance tousseInstance2 : belongToThisComboTousseInstanceList){ + //获取包实例的虚拟篮筐 + String virtualBasketSeqNum = tousseInstance2.getVirtualBasketSeqNum(); + if(StringUtils.isNotBlank(virtualBasketSeqNum) && !virtualBasketNameList.contains(virtualBasketSeqNum)){ + virtualBasketNameList.add(virtualBasketSeqNum); + } + } + waitDiscardTousseInstanceListForCurrentTousseInstance.addAll(belongToThisComboTousseInstanceList); + } + }else{ + //获取包实例的虚拟篮筐 + String virtualBasketSeqNum = tousseInstanceFirst.getVirtualBasketSeqNum(); + if(StringUtils.isNotBlank(virtualBasketSeqNum) && !virtualBasketNameList.contains(virtualBasketSeqNum)){ + virtualBasketNameList.add(virtualBasketSeqNum); + } } - tousseInstance.setVirtualBasketSeqNum(null); - tousseInstance.setOperateUser(operateUser); - tousseInstance.setWasteReason(wasteReason); - tousseInstance.setWasteDate(wasteDate); - //状态为已装配或已审核的器械包实例将不扣减库存,包实例关联的篮筐实例属性清空 - if(tousseInstance.isPacked() || tousseInstance.isReviewed() - || tousseInstance.isSteriling()){ -// tousseInstance.setReviewBasket_id(null); + //循环包实例或该包实例的子包实例 + for(TousseInstance tousseInstance : waitDiscardTousseInstanceListForCurrentTousseInstance){ + tousseInstance.setVirtualBasketSeqNum(null); + tousseInstance.setOperateUser(operateUser); + tousseInstance.setWasteReason(wasteReason); + tousseInstance.setWasteDate(wasteDate); + + //状态为已装配或已审核的器械包实例将不扣减库存,包实例关联的篮筐实例属性清空 + if(tousseInstance.isPacked() || tousseInstance.isReviewed() + || tousseInstance.isSteriling()){ + // tousseInstance.setReviewBasket_id(null); + tousseInstance.setStatus(TousseInstance.STATUS_DISCARD); + objectDao.saveOrUpdate(tousseInstance); + continue; + } + GoodsStock goodsStock = null; + if(!tousseInstance.isDiscarded()){ + goodsStock = TousseInstanceUtils.newGoodsStock(tousseInstance); + } + + //所属仓库清空(所在位置保留不清空) + //clearLocation(tousseInstance); + clearWarehouseInfo(tousseInstance); tousseInstance.setStatus(TousseInstance.STATUS_DISCARD); objectDao.saveOrUpdate(tousseInstance); - continue; + if(goodsStock != null){ + goodsStockList.add(goodsStock); + } } - GoodsStock goodsStock = null; - if(!tousseInstance.isDiscarded()){ - goodsStock = TousseInstanceUtils.newGoodsStock(tousseInstance); - } - - //所属仓库清空(所在位置保留不清空) - //clearLocation(tousseInstance); - clearWarehouseInfo(tousseInstance); - tousseInstance.setStatus(TousseInstance.STATUS_DISCARD); - objectDao.saveOrUpdate(tousseInstance); - if(goodsStock != null){ - goodsStockList.add(goodsStock); - } } if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ //重新计算虚拟篮筐状态 @@ -592,6 +623,13 @@ List tousseInstances = objectDao.findBySql( TousseInstance.class.getSimpleName(), "where po.useRecord_id=" + useRecordId + " order by useRecordSortNumber"); + + //判断是否存在InTousseInstanceUseRecord表里包实例(通常是聚合包实例)数据,有的话也一同查出来 + List tousseInstancesInTousseInstanceUseRecord = objectDao.findBySql(TousseInstance.class.getSimpleName(), + " where (useRecord_id is null or useRecord_id <> " + useRecordId + ") and id in (select tousseInstanceId from TousseInstanceUseRecord where useRecordId=" + useRecordId + ")"); + if(CollectionUtils.isNotEmpty(tousseInstancesInTousseInstanceUseRecord)){ + tousseInstances.addAll(tousseInstancesInTousseInstanceUseRecord); + } return tousseInstances; } Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/waste/AllTests.xml =================================================================== diff -u --- ssts-web/src/test/resources/test/forgon/disinfectsystem/waste/AllTests.xml (revision 0) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/waste/AllTests.xml (revision 16957) @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file Index: ssts-web/src/main/java/com/forgon/disinfectsystem/recall/action/RecallRecordAction.java =================================================================== diff -u -r16675 -r16957 --- ssts-web/src/main/java/com/forgon/disinfectsystem/recall/action/RecallRecordAction.java (.../RecallRecordAction.java) (revision 16675) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/recall/action/RecallRecordAction.java (.../RecallRecordAction.java) (revision 16957) @@ -176,6 +176,7 @@ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String recallDate = StrutsParamUtils.getPraramValue("recallDate", dateFormat.format(new Date())); + //包实例信息,不包含聚合包实例数据,但实际召开时需要对聚合包内的普通包实例进行召回处理 String treeInfo = StrutsParamUtils.getPraramValue("treeInfo", null); if (StringUtils.isNotBlank(treeInfo)) { try { Index: ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManager.java =================================================================== diff -u -r16675 -r16957 --- ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManager.java (.../RecallRecordManager.java) (revision 16675) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManager.java (.../RecallRecordManager.java) (revision 16957) @@ -43,8 +43,8 @@ /** * 按灭菌炉名称、开始时间、结束时间、开始炉次、结束炉次搜索器械包 * @param sterileName 灭菌炉名称 - * @param startDate 开始时间 - * @param endDate 结束时间 + * @param startDate 开始时间:只能是yyyy-MM-dd格式 + * @param endDate 结束时间:只能是yyyy-MM-dd格式 * @param sterilizingFrequency_end 结束炉次 * @param sterilizingFrequency_start 开始炉次 * @return Index: ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManagerImpl.java =================================================================== diff -u -r16695 -r16957 --- ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManagerImpl.java (.../RecallRecordManagerImpl.java) (revision 16695) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManagerImpl.java (.../RecallRecordManagerImpl.java) (revision 16957) @@ -13,6 +13,7 @@ import java.util.ListIterator; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -320,10 +321,29 @@ .findRecordInTimePart(sterileName, begin, end); if (sterilizationRecords != null) { for (SterilizationRecord record : sterilizationRecords) { - instances.addAll(record.getTousseInstanceList()); + //灭菌记录中的未入篮筐的包实例,包含聚合包实例及聚合包实例下属的普通器械包实例 + List tousseinstanceList = record.getTousseInstanceList(); + //召回不用显示聚合包实例下属的普通器械包实例,所以需要过滤掉 + if(CollectionUtils.isNotEmpty(tousseinstanceList)){ + for(TousseInstance tousseInstance : tousseinstanceList){ + if(!DatabaseUtil.isPoIdValid(tousseInstance.getComboTousseInstanceId())){ + instances.add(tousseInstance); + } + } + } + + //灭菌记录中的已入到篮筐的包实例 for (ReviewedBasket basket : record .getReviewedBaskets()) { - instances.addAll(basket.getTousseInstances(objectDao)); + Set tousseinstanceSet = basket.getTousseInstances(objectDao); + //召回不用显示聚合包实例下属的普通器械包实例,所以需要过滤掉 + if(CollectionUtils.isNotEmpty(tousseinstanceSet)){ + for(TousseInstance tousseInstance : tousseinstanceSet){ + if(!DatabaseUtil.isPoIdValid(tousseInstance.getComboTousseInstanceId())){ + instances.add(tousseInstance); + } + } + } } } } @@ -571,6 +591,18 @@ instance.setStatus(TousseInstance.STATUS_WAIT_FOR_RECALL); tousseInstanceManager.saveOrUpdate(instance); tousseInstances.add(instance); + + //如果是聚合包,则需要将聚合包下的器械包实例都进行召回处理 + if(instance.isComboTousse()){ + List tousseInstanceList = instance.getTousseInstancesBelongToThisComboTousse(objectDao); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + for(TousseInstance ti : tousseInstanceList){ + ti.setStatus(TousseInstance.STATUS_WAIT_FOR_RECALL); + tousseInstanceManager.saveOrUpdate(ti); + tousseInstances.add(ti); + } + } + } } } } @@ -595,7 +627,16 @@ RecallRecord recallRecord = getRecallRecordById(id); if (recallRecord != null && recallRecord.getItems() != null) { for (RecallRecordItem item : recallRecord.getItems()) { - instances.addAll(item.getTousseInstances()); + //灭菌记录中的包实例,包含聚合包实例及聚合包实例下属的普通器械包实例 + List tousseinstanceList = item.getTousseInstances(); + //召回不用显示聚合包实例下属的普通器械包实例,所以需要过滤掉 + if(CollectionUtils.isNotEmpty(tousseinstanceList)){ + for(TousseInstance tousseInstance : tousseinstanceList){ + if(!DatabaseUtil.isPoIdValid(tousseInstance.getComboTousseInstanceId())){ + instances.add(tousseInstance); + } + } + } } return instances; } @@ -621,6 +662,19 @@ instance.setRecallTimeStr(dateFormat.format(new Date())); instance.setRecaller(recaller); tousseInstanceManager.saveOrUpdate(instance); + + //如果是聚合包,则需要将聚合包下的器械包实例都进行召回处理 + if(instance.isComboTousse()){ + List tousseInstanceList = instance.getTousseInstancesBelongToThisComboTousse(objectDao); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + for(TousseInstance ti : tousseInstanceList){ + ti.setStatus(TousseInstance.STATUS_RECALLED); + ti.setRecallTimeStr(instance.getRecallTimeStr()); + ti.setRecaller(recaller); + tousseInstanceManager.saveOrUpdate(ti); + } + } + } } } } Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/recall/AllTests.xml =================================================================== diff -u --- ssts-web/src/test/resources/test/forgon/disinfectsystem/recall/AllTests.xml (revision 0) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/recall/AllTests.xml (revision 16957) @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file Index: ssts-web/src/test/resources/test/forgon/AllTests.xml =================================================================== diff -u -r16910 -r16957 --- ssts-web/src/test/resources/test/forgon/AllTests.xml (.../AllTests.xml) (revision 16910) +++ ssts-web/src/test/resources/test/forgon/AllTests.xml (.../AllTests.xml) (revision 16957) @@ -21,5 +21,7 @@ + + \ No newline at end of file Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recall/TousseInstanceRecallTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/recall/TousseInstanceRecallTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recall/TousseInstanceRecallTests.java (revision 16957) @@ -0,0 +1,393 @@ +package test.forgon.disinfectsystem.recall; +import static org.testng.Assert.assertEquals; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.hibernate.Session; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +import test.forgon.constant.Constants; +import test.forgon.disinfectsystem.AbstractCSSDTest; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.recall.RecallRecord; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.packing.service.PackingManager; +import com.forgon.disinfectsystem.recall.service.RecallRecordManager; +import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.tools.date.DateTools; + + +/** + * 聚合包召回测试用例 + * @author shuyongfu + * Date:2017-01-21 + */ +public class TousseInstanceRecallTests extends AbstractCSSDTest { + @Autowired + private PackingManager packingManager; + @Autowired + private SterilizationRecordManager sterilizationRecordManager; + @Autowired + private RecallRecordManager recallRecordManager; + /** + * 测试聚合包灭菌(无灭菌筐审核) + */ + @Test + @Rollback(value=false) + public void testComboTousseInstanceRecall() { + //初始化数据 + initCSSDData(); + TousseDefinition comboTd_聚合包 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); + //聚合包内普通器械包 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + + //设置装配时间 + Date packingTime = new Date(); + + //构造聚合包实例 + TousseInstance comboTousseInstance1 = new TousseInstance(); + comboTousseInstance1.setTousseDefinition(comboTd_聚合包); + comboTousseInstance1.setComboTousseDefinitionId(comboTd_聚合包.getId()); + comboTousseInstance1.setStatus(TousseInstance.STATUS_PACKED); + comboTousseInstance1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + comboTousseInstance1.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(comboTousseInstance1); + + TousseInstance tousseInstance_开胸包1 = new TousseInstance(); + tousseInstance_开胸包1.setTousseDefinition(td_开胸包); + tousseInstance_开胸包1.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开胸包1.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开胸包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开胸包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开胸包1.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包1); + + TousseInstance tousseInstance_开胸包2 = new TousseInstance(); + tousseInstance_开胸包2.setTousseDefinition(td_开胸包); + tousseInstance_开胸包2.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开胸包2.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开胸包2.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开胸包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开胸包2.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包2); + + TousseInstance tousseInstance_开颅包1 = new TousseInstance(); + tousseInstance_开颅包1.setTousseDefinition(td_开颅包); + tousseInstance_开颅包1.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包1.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开颅包1.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包1.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包1.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包1); + + TousseInstance tousseInstance_开颅包2 = new TousseInstance(); + tousseInstance_开颅包2.setTousseDefinition(td_开颅包); + tousseInstance_开颅包2.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包2.setComboTousseInstanceId(comboTousseInstance1.getId()); + tousseInstance_开颅包2.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包2.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包2); + + + TousseInstance comboTousseInstance2 = new TousseInstance(); + comboTousseInstance2.setTousseDefinition(comboTd_聚合包); + comboTousseInstance2.setComboTousseDefinitionId(comboTd_聚合包.getId()); + comboTousseInstance2.setStatus(TousseInstance.STATUS_PACKED); + comboTousseInstance2.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + comboTousseInstance2.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(comboTousseInstance2); + + TousseInstance tousseInstance_开胸包3 = new TousseInstance(); + tousseInstance_开胸包3.setTousseDefinition(td_开胸包); + tousseInstance_开胸包3.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开胸包3.setComboTousseInstanceId(comboTousseInstance2.getId()); + tousseInstance_开胸包3.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开胸包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开胸包3.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(tousseInstance_开胸包3); + + TousseInstance tousseInstance_开颅包3 = new TousseInstance(); + tousseInstance_开颅包3.setTousseDefinition(td_开颅包); + tousseInstance_开颅包3.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包3.setComboTousseInstanceId(comboTousseInstance2.getId()); + tousseInstance_开颅包3.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包3.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包3.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包3); + + TousseInstance tousseInstance_开颅包4 = new TousseInstance(); + tousseInstance_开颅包4.setTousseDefinition(td_开颅包); + tousseInstance_开颅包4.setComboTousseDefinitionId(comboTd_聚合包.getId()); + tousseInstance_开颅包4.setComboTousseInstanceId(comboTousseInstance2.getId()); + tousseInstance_开颅包4.setStatus(TousseInstance.STATUS_PACKED); + tousseInstance_开颅包4.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + tousseInstance_开颅包4.setOperationTime(packingTime); + tousseInstanceManager.saveOrUpdate(tousseInstance_开颅包4); + + //调用审核 + packingManager.reviewTousseInstance(comboTousseInstance1.getId() + ";" + comboTousseInstance2.getId(), "", "aa", "bb", "cc", new Date()); + + //添加灭菌记录 + String date = DateTools.formatTime(Calendar.getInstance(),DateTools.COMMON_DATE_HM); + Date startDate; + try { + startDate = new SimpleDateFormat(DateTools.COMMON_DATE_HM) + .parse(date); + } catch (ParseException e) { + startDate = new Date(); + } + + String sterilizerName = "1号高温蒸汽灭菌炉"; + Integer frequency = 2; + SterilizationRecord sterilizationRecord = new SterilizationRecord(); + sterilizationRecord.setStartDate(startDate); + sterilizationRecord.setOrgUnitCoding(AcegiHelper.getLoginUser() + .getOrgUnitCodingFromSupplyRoomConfig()); + sterilizationRecord.setOrgUnitCoding(Constants.ORG_UNIT_CODE_CSSD); + sterilizationRecord.setStatus(""); + sterilizationRecord.setSterilizerName(sterilizerName); + sterilizationRecord.setSterilizationUser("test1"); + sterilizationRecord.setFrequency(frequency); + + Session session = objectDao.getHibernateSession(); + + Long originalRecordId = null; + Collection tousseInstanceBarcodes = new ArrayList(); + Collection containerBarcodes = new ArrayList(); + //010029007,,器械包##010029008,,器械包##010000006,,篮筐##004,,篮筐 + String waitSterilizer = comboTousseInstance1.getBarcode() + ",,器械包##"+comboTousseInstance2.getBarcode()+",,器械包##"; + String[] goodsInfoArray = + StringUtils.split(waitSterilizer,"##"); + for (String item : goodsInfoArray) { + String[] goodsItem = StringUtils.split(item, ",,"); + if (goodsItem.length == 2) { + String type = goodsItem[1]; + if (type.equals("器械包")) { + tousseInstanceBarcodes.add(goodsItem[0]); + } else { + // 篮筐 + containerBarcodes.add(goodsItem[0]); + } + } + } + sterilizationRecordManager.saveOrUpdateSterilizationRecord( + sterilizationRecord, tousseInstanceBarcodes, + containerBarcodes, originalRecordId); + + //6.断言灭菌记录、器械包状态 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_BEGIN); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance1.getStatus()); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance2.getStatus()); + + List tousseInstanceList1 = comboTousseInstance1.getTousseInstancesBelongToThisComboTousse(objectDao); + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList1)); + for (TousseInstance tousseInstance : tousseInstanceList1) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + List tousseInstanceList2 = comboTousseInstance2.getTousseInstancesBelongToThisComboTousse(objectDao); + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList2)); + for (TousseInstance tousseInstance : tousseInstanceList2) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + //灭菌失败 + sterilizationRecordManager.updateFailureSterilizedRecordStatus(Collections.singleton(sterilizationRecord.getId())); + //断言聚合包与所属普通器械包的状态是否为已审核及灭菌记录的状态、灭菌完成时间等 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_FAILURE); + assertEquals(TousseInstance.STATUS_REVIEWED, comboTousseInstance1.getStatus()); + assertEquals(TousseInstance.STATUS_REVIEWED, comboTousseInstance2.getStatus()); + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList1)); + for (TousseInstance tousseInstance : tousseInstanceList1) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + } + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList2)); + for (TousseInstance tousseInstance : tousseInstanceList2) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + } + + //重新灭菌(添加灭菌记录) + Long oldSterilizationRecordId = sterilizationRecord.getId(); + + sterilizationRecord = new SterilizationRecord(); + sterilizationRecord.setStartDate(startDate); + sterilizationRecord.setOrgUnitCoding(AcegiHelper.getLoginUser() + .getOrgUnitCodingFromSupplyRoomConfig()); + sterilizationRecord.setOrgUnitCoding(Constants.ORG_UNIT_CODE_CSSD); + sterilizationRecord.setStatus(""); + sterilizationRecord.setSterilizerName("1号高温蒸汽灭菌炉"); + sterilizationRecord.setSterilizationUser("test2"); + sterilizationRecord.setFrequency(3); + + sterilizationRecordManager.saveOrUpdateSterilizationRecord( + sterilizationRecord, tousseInstanceBarcodes, + containerBarcodes, originalRecordId); + //session.refresh(sterilizationRecord); + //断言聚合包与所属普通器械包的状态是否为灭菌中 + AssertJUnit.assertTrue(sterilizationRecord.getId() > oldSterilizationRecordId); + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_BEGIN); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance1.getStatus()); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance2.getStatus()); + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList1)); + for (TousseInstance tousseInstance : tousseInstanceList1) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList2)); + for (TousseInstance tousseInstance : tousseInstanceList2) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + //灭菌中断 + sterilizationRecordManager.updateSterilizedInerruptRecordStatus(Collections.singletonList(sterilizationRecord.getId())); + //断言聚合包与所属普通器械包的状态是否为灭菌中 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_INTERRUPT); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance1.getStatus()); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance2.getStatus()); + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList1)); + for (TousseInstance tousseInstance : tousseInstanceList1) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList2)); + for (TousseInstance tousseInstance : tousseInstanceList2) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + //继续灭菌 + sterilizationRecordManager.continueSterilization(Collections.singletonList(sterilizationRecord.getId())); + //断言聚合包与所属普通器械包的状态是否为灭菌中 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_BEGIN); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance1.getStatus()); + assertEquals(TousseInstance.STATUS_STERILING, comboTousseInstance2.getStatus()); + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList1)); + for (TousseInstance tousseInstance : tousseInstanceList1) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList2)); + for (TousseInstance tousseInstance : tousseInstanceList2) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILING, tousseInstance.getStatus()); + } + + //完成灭菌记录 + String finishComfirmer = "测试完成"; + boolean needFinishConfirm = false; + sterilizationRecordManager.completeSterilization( + Collections.singleton(sterilizationRecord.getId()), Constants.ORG_UNIT_CODE_CSSD,finishComfirmer,finishComfirmer,needFinishConfirm); + + //断言聚合包与所属普通器械包的状态是否为已灭菌及灭菌记录的状态、灭菌完成时间等 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_END); + assertEquals(TousseInstance.STATUS_STERILED, comboTousseInstance1.getStatus()); + assertEquals(TousseInstance.STATUS_STERILED, comboTousseInstance2.getStatus()); + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList1)); + for (TousseInstance tousseInstance : tousseInstanceList1) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILED, tousseInstance.getStatus()); + } + + AssertJUnit.assertTrue(CollectionUtils.isNotEmpty(tousseInstanceList2)); + for (TousseInstance tousseInstance : tousseInstanceList2) { + session.refresh(tousseInstance); + assertEquals(TousseInstance.STATUS_STERILED, tousseInstance.getStatus()); + } + + //灭菌完成时间 + String sterilingStartDate = new SimpleDateFormat("yyyy-MM-dd").format(sterilizationRecord.getStartDate()); + //灭菌完成时间 + String sterilingEndDate = new SimpleDateFormat("yyyy-MM-dd").format(sterilizationRecord.getEndDate()); + //按灭菌记录搜索可被召回的包实例 + List waitRecallingTousseInstanceList = + recallRecordManager.searchToussesForRecall(sterilizerName, sterilingStartDate, sterilingEndDate, String.valueOf(frequency), String.valueOf(frequency)); + assertEquals(waitRecallingTousseInstanceList.size(), 2); + + // 设置召回时间 + RecallRecord recallRecord = new RecallRecord(); + //包实例信息,不包含聚合包实例数据,但实际召开时需要召回处理 + JSONArray jsonArray = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("departName",Constants.ORG_UNIT_NAME_DISINFECT); + jsonObject.put("objAmount",2); + jsonObject.put("departCode",Constants.ORG_UNIT_CODE_DISINFECT); + JSONArray subJsonArray = new JSONArray(); + JSONObject subJsonObject = new JSONObject(); + subJsonObject.put("tousseName",comboTousseInstance1.getTousseName()); + subJsonObject.put("tousseAmount",2); + subJsonObject.put("tousseIds",comboTousseInstance1.getId() + "#" + comboTousseInstance2.getId()); + subJsonArray.add(subJsonObject); + jsonObject.put("children", subJsonArray); + jsonArray.add(jsonObject); + recallRecord.setPublishDate(new Date()); + recallRecord.setStatus(RecallRecord.STATUS_UNFINISHED); + recallRecordManager.saveOrUpdate(jsonArray, recallRecord); + + //断言包实例状态是否为待召回 + List barcodeList = new ArrayList(); + for (TousseInstance tousseInstance : waitRecallingTousseInstanceList) { + assertEquals(TousseInstance.STATUS_WAIT_FOR_RECALL, tousseInstance.getStatus()); + barcodeList.add(tousseInstance.getBarcode()); + } + + AssertJUnit.assertTrue(barcodeList.contains(comboTousseInstance1.getBarcode())); + AssertJUnit.assertTrue(barcodeList.contains(comboTousseInstance2.getBarcode())); + + for (TousseInstance tousseInstance : tousseInstanceList1) { + assertEquals(TousseInstance.STATUS_WAIT_FOR_RECALL, tousseInstance.getStatus()); + } + + for (TousseInstance tousseInstance : tousseInstanceList2) { + assertEquals(TousseInstance.STATUS_WAIT_FOR_RECALL, tousseInstance.getStatus()); + } + + //扫描聚合包条码召回处理 + recallRecordManager.recallTousse(comboTousseInstance1.getBarcode()); + assertEquals(TousseInstance.STATUS_RECALLED, comboTousseInstance1.getStatus()); + for (TousseInstance tousseInstance : tousseInstanceList1) { + assertEquals(TousseInstance.STATUS_RECALLED, tousseInstance.getStatus()); + } + + recallRecordManager.recallTousse(comboTousseInstance2.getBarcode()); + assertEquals(TousseInstance.STATUS_RECALLED, comboTousseInstance2.getStatus()); + for (TousseInstance tousseInstance : tousseInstanceList2) { + assertEquals(TousseInstance.STATUS_RECALLED, tousseInstance.getStatus()); + } + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r16835 -r16957 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16835) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16957) @@ -180,6 +180,15 @@ */ public Collection getUnTraceableTousseInstanceListByFictitiousTousseDefinition( TousseDefinition tousseDefinition, Collection sqlWheres,String orderBy, int needAmount); + + /** + * 废弃全部器械包物品(器械包告警页面的废弃全部按钮调用) + * @param orgUnitCoding 当前登录用户所在科室 + * @param warningType 即将过期的器械包物品与已过期的器械包物品 + * @param reason 废弃原因 + * @param userName 废弃人-当前登录用户 + * @return + */ public boolean deleteAllExpiredTousseGoods(String orgUnitCoding,String warningType,String reason,String userName); public List getTousseInstanceByBasket(String barcode);