Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r16845 -r16891 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 16845) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 16891) @@ -24,6 +24,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; import org.hibernate.Query; import org.hibernate.Session; @@ -84,6 +85,8 @@ public class SterilizationRecordManagerImpl implements SterilizationRecordManager { + + private Logger logger = Logger.getLogger(SterilizationRecordManagerImpl.class); private ObjectDao objectDao; @@ -327,7 +330,7 @@ } return completeSterilization(sterilizationRecordIds,orgUnitCode,finishOperater,finishOperater); } - public JSONObject completeSterilization(Collection sterilizationRecordIds, + private JSONObject completeSterilization(Collection sterilizationRecordIds, String orgUnitCode,String finishOperater,String finishComfirmer){ return completeSterilization(sterilizationRecordIds,orgUnitCode,finishOperater,finishComfirmer,false); } @@ -444,7 +447,8 @@ } updateTousseInstanceProperty(sdf, sterilizationRecord, tousseInstance,needFinishConfirm); - if(needFinishConfirm == false){ + //只有当所属聚合包实例的id属性为空(即聚合包实例及不属于任何聚合包实例内的普通器械包实例)时才计算库存,比如聚合包内普通器械包不计算到库存中 + if(needFinishConfirm == false && tousseInstance.getComboTousseInstanceId() == null){ // 不需要灭菌确认,灭菌完成时加库存 GoodsStock goodsStock = TousseInstanceUtils.newGoodsStock(tousseInstance,defaultWareHouse); goodsStockList.add(goodsStock); @@ -558,9 +562,9 @@ saveOrUpdate(sterilizationRecord); } - //更新库存 - updateTousseStock(tousseMap); - updateFirstSupplyRoomStock(supplyRoomConfig,tousseMap,tousseListMap); + //更新库存(旧版本的库存不再使用,代码注释) + //updateTousseStock(tousseMap); + //updateFirstSupplyRoomStock(supplyRoomConfig,tousseMap,tousseListMap); // throw new RuntimeException("测试"); @@ -593,10 +597,13 @@ tousseInstance.setStatus(TousseInstance.STATUS_DISCARD); }else{ tousseInstance.setStatus(TousseInstance.STATUS_STERILED); - // 添加库存 - GoodsStock goodsStock = TousseInstanceUtils.newGoodsStock(tousseInstance,defaultWareHouse); - goodsStockList.add(goodsStock); - tousseInstanceManager.setToWarehouse(tousseInstance, defaultWareHouse); + //只有当所属聚合包实例的id属性为空(即聚合包实例及不属于任何聚合包实例内的普通器械包实例)时才计算库存,比如聚合包内普通器械包不计算到库存中 + if(tousseInstance.getComboTousseInstanceId() == null){ + // 添加库存 + GoodsStock goodsStock = TousseInstanceUtils.newGoodsStock(tousseInstance,defaultWareHouse); + goodsStockList.add(goodsStock); + tousseInstanceManager.setToWarehouse(tousseInstance, defaultWareHouse); + } } tousseInstanceManager.saveOrUpdate(tousseInstance); } @@ -727,6 +734,21 @@ tousseInstance.setSterilizerName(sterilizationRecord.getSterilizerName()); //增加灭菌程序赋值,器械包的灭菌程序也与灭菌单的灭菌程序的值一致 tousseInstance.setSterilingType(sterilizationRecord.getSterilizationType()); + + //如果是聚合包,则将该聚合包下属的普通器械包实例也相应赋值 + if(tousseInstance.isComboTousse()){ + String sql = String.format("update TousseInstance set status=%s,sterileFrequency=%s,sterilizationUser=%s,sterilizerName=%s," + + "sterileStartTime=%s,sterileEndTime=%s,sterilizationRecord_id=%d where comboTousseInstanceId=%d", + "'" + tousseInstance.getStatus() + "'", + "'" + tousseInstance.getSterileFrequency() + "'", + "'" + tousseInstance.getSterilizationUser() + "'", + "'" + tousseInstance.getSterilizerName() + "'", + "'" + tousseInstance.getSterileStartTime() + "'", + "'" + tousseInstance.getSterileEndTime() + "'", + sterilizationRecord.getId(), + tousseInstance.getId()); + objectDao.excuteSQL(sql); + } } private void updateTousseStock(Map tousseMap){ @@ -1234,7 +1256,7 @@ // 原有器械包的状态还原为[已审核] Collection originalTousseInstances = sterilizationRecord .getTousseInstanceList(); - if (!CollectionUtils.isEmpty(originalTousseInstances)) { + if (CollectionUtils.isNotEmpty(originalTousseInstances)) { for (TousseInstance tousseInstance : originalTousseInstances) { tousseInstance.setStatus(TousseInstance.STATUS_REVIEWED); tousseInstanceManager.saveOrUpdate(tousseInstance); @@ -1348,6 +1370,19 @@ tousseInstance.setSterilizerName(sterilizationRecord.getSterilizerName()); tousseInstance.setSterileStartTime(TousseInstanceUtils.buildSterileStartTime(sterilizationRecord.getStartDate())); tousseInstanceManager.saveOrUpdate(tousseInstance); + + //如果是聚合包,则将该聚合包下属的普通器械包实例也相应赋值 + if(tousseInstance.isComboTousse()){ + String sql = String.format("update TousseInstance set status=%s,sterileFrequency=%s,sterilizationUser=%s,sterilizerName=%s," + + "sterileStartTime=%s where comboTousseInstanceId=%d", + "'" + TousseInstance.STATUS_STERILING + "'", + "'" + tousseInstance.getSterileFrequency() + "'", + "'" + tousseInstance.getSterilizationUser() + "'", + "'" + tousseInstance.getSterilizerName() + "'", + "'" + tousseInstance.getSterileStartTime() + "'", + tousseInstance.getId()); + objectDao.excuteSQL(sql); + } } // 更新灭菌记录的温度压力数据条数 @@ -1375,10 +1410,10 @@ return result; } // 计算并更新灭菌记录的器械统计信息 - private void updateSterilizationRecordStatisticsInfo( - SterilizationRecord sterilizationRecord) { - updateSterilizationRecordStatisticsInfo(sterilizationRecord,null); - } + private void updateSterilizationRecordStatisticsInfo( + SterilizationRecord sterilizationRecord) { + updateSterilizationRecordStatisticsInfo(sterilizationRecord,null); + } // 计算并更新灭菌记录的器械统计信息 private void updateSterilizationRecordStatisticsInfo( SterilizationRecord sterilizationRecord,Collection tis) { @@ -1487,6 +1522,14 @@ for (TousseInstance tousse : tousseList) { if(tousse != null && tousse.isSteriling()){ tousse.setStatus(TousseInstance.STATUS_REVIEWED); + + //如果是聚合包,则将该聚合包下属的普通器械包实例也相应赋值 + if(tousse.isComboTousse()){ + String sql = String.format("update TousseInstance set status=%s where comboTousseInstanceId=%d", + "'" + TousseInstance.STATUS_REVIEWED + "'", + tousse.getId()); + objectDao.excuteSQL(sql); + } } } List basketList = sterilizationRecord @@ -1500,20 +1543,20 @@ for (TousseInstance tousse : basket.getTousseInstances(objectDao)) { if(tousse != null && tousse.isSteriling()){ tousse.setStatus(TousseInstance.STATUS_REVIEWED); + + //如果是聚合包,则将该聚合包下属的普通器械包实例也相应赋值 + if(tousse.isComboTousse()){ + String sql = String.format("update TousseInstance set status=%s where comboTousseInstanceId=%d", + "'" + TousseInstance.STATUS_REVIEWED + "'", + tousse.getId()); + objectDao.excuteSQL(sql); + } } } } saveOrUpdate(sterilizationRecord); } } - @Override - public void updateFailureSterilizedRecordStatus(String sterilizationRecordId){ - if(DatabaseUtil.isPoIdValid(sterilizationRecordId)){ - List list = new ArrayList(); - list.add(Long.valueOf(sterilizationRecordId)); - updateFailureSterilizedRecordStatus(list); - } - } /** * 更新灭菌记录为灭菌中断 */ Index: ssts-web/src/test/java/test/forgon/disinfectsystem/sterileLoading/SterileLoadingManagerTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/sterileLoading/SterileLoadingManagerTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/sterileLoading/SterileLoadingManagerTests.java (revision 16891) @@ -0,0 +1,204 @@ +package test.forgon.disinfectsystem.sterileLoading; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; + +import java.util.ArrayList; +import java.util.Arrays; +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 date:2017-01-19 + */ +public class SterileLoadingManagerTests extends AbstractCSSDTest { + @Autowired + private PackingManager packingManager; + + /** + * 测试器械包、消毒物品、敷料包、聚合包等不同类型物品混合的灭菌装载 + * 外来器械包及其拆分小包、自定义器械包的物品暂时没有含括,待完善. + * 分别回收自不同科室 + */ + @Test + @Rollback(false) + public void testSterileLoadingNormalAndComboTousse() { + 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()); + } + } +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java =================================================================== diff -u -r16876 -r16891 --- ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 16876) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 16891) @@ -1150,6 +1150,15 @@ container5.setType(BarcodeDevice.BARCODE_TYPE_CONTAINER); containerManager.saveOrUpdate(container5); + Container container6 = new Container(); + container6.setBarcode("018000002"); + container6.setContainerName("灭菌筐02"); + container6.setPurpose(Container.CONTAINER_PURPOSE_DISINFECTION); + container6.setContainerType(Container.CONTAINERTYPE_BASKET); + container6.setStatus(Container.CONTAINER_STATUS_FREE); + container6.setType(BarcodeDevice.BARCODE_TYPE_CONTAINER); + containerManager.saveOrUpdate(container6); + containerManager.createVirtualContainer(999 , null); Index: ssts-web/src/test/resources/test/forgon/AllTests.xml =================================================================== diff -u -r16829 -r16891 --- ssts-web/src/test/resources/test/forgon/AllTests.xml (.../AllTests.xml) (revision 16829) +++ ssts-web/src/test/resources/test/forgon/AllTests.xml (.../AllTests.xml) (revision 16891) @@ -17,5 +17,8 @@ + + + \ No newline at end of file Index: ssts-web/src/test/java/test/forgon/disinfectsystem/sterileRecord/SterieRecordManagerTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/sterileRecord/SterieRecordManagerTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/sterileRecord/SterieRecordManagerTests.java (revision 16891) @@ -0,0 +1,608 @@ +package test.forgon.disinfectsystem.sterileRecord; +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 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.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.packing.service.PackingManager; +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 SterieRecordManagerTests extends AbstractCSSDTest { + @Autowired + private PackingManager packingManager; + @Autowired + private SterilizationRecordManager sterilizationRecordManager; + /** + * 测试聚合包灭菌(无灭菌筐审核) + */ + @Test + @Rollback(value=false) + public void testComboTousseInstanceSterileWithoutBasket() { + //初始化数据 + 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(); + } + + SterilizationRecord 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("test1"); + sterilizationRecord.setFrequency(2); + + 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()); + } + } + + /** + * 测试聚合包灭菌(扫描至灭菌筐) + */ + @Test + @Rollback(value=false) + public void testComboTousseInstanceSterileScanBasket() { + //初始化数据 + initCSSDData(); + TousseDefinition comboTd_聚合包 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); + //聚合包内普通器械包 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + + //篮筐01 + Container container = containerManager.getContainerByBarcode("018000001"); + + //设置装配时间 + 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); + + Session session = objectDao.getHibernateSession(); + //调用审核 + packingManager.reviewTousseInstance(comboTousseInstance1.getId() + ";" + comboTousseInstance2.getId(), container.getBarcode(), "", "", "", new Date()); + assertEquals(container.getStatus(),Container.CONTAINER_STATUS_STERILIZELOADING); + + //添加灭菌记录 + 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(); + } + + SterilizationRecord 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(2); + + Long originalRecordId = null; + Collection tousseInstanceBarcodes = new ArrayList(); + Collection containerBarcodes = new ArrayList(); + //篮筐##004,,篮筐 + String waitSterilizer = "篮筐##" + container.getBarcode() +",,篮筐"; + String[] goodsInfoArray = + StringUtils.split(waitSterilizer,"##"); + for (String item : goodsInfoArray) { + String[] goodsItem = StringUtils.split(item, ",,"); + if (goodsItem.length == 2) { + String type = goodsItem[1]; + if (TousseDefinition.PACKAGE_TYPE_INSIDE.equals(type)) { + tousseInstanceBarcodes.add(goodsItem[0]); + } else if (Container.CONTAINERTYPE_BASKET.equals(type)) { + // 篮筐 + containerBarcodes.add(goodsItem[0]); + } + } + } + sterilizationRecordManager.saveOrUpdateSterilizationRecord( + sterilizationRecord, tousseInstanceBarcodes, + containerBarcodes, originalRecordId); + session.refresh(sterilizationRecord); + + //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.singletonList(sterilizationRecord.getId())); + //断言聚合包与所属普通器械包的状态是否为已审核及灭菌记录的状态、灭菌完成时间等 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_FAILURE); + assertEquals(container.getStatus(),Container.CONTAINER_STATUS_STERILIZELOADING); + 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()); + } + + //重新灭菌(添加灭菌记录) + 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); + //断言聚合包与所属普通器械包的状态是否为灭菌中 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_BEGIN); + assertEquals(container.getStatus(),Container.CONTAINER_STATUS_STERILIZING); + 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(container.getStatus(),Container.CONTAINER_STATUS_STERILIZING); + 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(container.getStatus(),Container.CONTAINER_STATUS_STERILIZING); + 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.singletonList(sterilizationRecord.getId()), Constants.ORG_UNIT_CODE_CSSD,finishComfirmer,finishComfirmer,needFinishConfirm); + //断言聚合包与所属普通器械包的状态是否为已灭菌及灭菌记录的状态、灭菌完成时间等 + assertEquals(sterilizationRecord.getStatus(),SterilizationRecord.STERILIZATION_STATUS_END); + assertEquals(container.getStatus(),Container.CONTAINER_STATUS_FREE); + 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()); + } + } +} Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/review/AllTests.xml =================================================================== diff -u --- ssts-web/src/test/resources/test/forgon/disinfectsystem/review/AllTests.xml (revision 0) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/review/AllTests.xml (revision 16891) @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file Index: ssts-web/src/test/java/test/forgon/disinfectsystem/review/ComboTousseInstanceReviewTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/review/ComboTousseInstanceReviewTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/review/ComboTousseInstanceReviewTests.java (revision 16891) @@ -0,0 +1,274 @@ +package test.forgon.disinfectsystem.review; +import static org.testng.Assert.assertEquals; + +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 + * Date:2017-01-19 + */ +public class ComboTousseInstanceReviewTests extends AbstractCSSDTest { + @Autowired + private PackingManager packingManager; + + /** + * 测试聚合包审核(无灭菌筐审核) + */ + @Test + public void testReviewComboTousseInstanceWithoutBasket() { + //初始化数据 + initCSSDData(); + TousseDefinition comboTd_聚合包 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); + //聚合包内普通器械包 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + + //篮筐01 + Container container = containerManager.getContainerByBarcode("018000001"); + + //设置装配时间 + 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(), container.getBarcode(), "aa", "bb", "cc", new Date()); + + //断言聚合1、聚合2及其对应的包实例的状态都为已审核 + assertEquals(comboTousseInstance1.getStatus(), TousseInstance.STATUS_REVIEWED); + List tousseInstanceList1 = comboTousseInstance1.getTousseInstancesBelongToThisComboTousse(objectDao); + AssertJUnit.assertEquals(4, tousseInstanceList1.size()); + for (TousseInstance tousseInstance : tousseInstanceList1) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + } + + assertEquals(comboTousseInstance2.getStatus(), TousseInstance.STATUS_REVIEWED); + List tousseInstanceList2 = comboTousseInstance2.getTousseInstancesBelongToThisComboTousse(objectDao); + AssertJUnit.assertEquals(3, tousseInstanceList2.size()); + for (TousseInstance tousseInstance : tousseInstanceList2) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + } + } + + /** + * 测试聚合包审核(扫灭菌筐审核) + */ + @Test + public void testReviewComboTousseInstanceScanBasket() { + //初始化数据 + initCSSDData(); + TousseDefinition comboTd_聚合包 = tousseDefinitionManager.getTousseDefinitionByName("Test聚合包"); + //聚合包内普通器械包 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseDefinition td_开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); + + //篮筐01 + Container container = containerManager.getContainerByBarcode("018000001"); + + //设置装配时间 + 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(), container.getBarcode(), "", "", "", new Date()); + + //断言聚合1、聚合2及其对应的包实例的状态都为已审核 + assertEquals(comboTousseInstance1.getStatus(), TousseInstance.STATUS_REVIEWED); + assertEquals(comboTousseInstance1.getSterilizationBasket(), container.getContainerName()); + List tousseInstanceList1 = comboTousseInstance1.getTousseInstancesBelongToThisComboTousse(objectDao); + AssertJUnit.assertEquals(4, tousseInstanceList1.size()); + for (TousseInstance tousseInstance : tousseInstanceList1) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + AssertJUnit.assertEquals(tousseInstance.getSterilizationBasket(), container.getContainerName()); + } + + assertEquals(comboTousseInstance2.getStatus(), TousseInstance.STATUS_REVIEWED); + assertEquals(comboTousseInstance2.getSterilizationBasket(), container.getContainerName()); + List tousseInstanceList2 = comboTousseInstance2.getTousseInstancesBelongToThisComboTousse(objectDao); + AssertJUnit.assertEquals(3, tousseInstanceList2.size()); + for (TousseInstance tousseInstance : tousseInstanceList2) { + objectDao.getHibernateSession().refresh(tousseInstance); + AssertJUnit.assertEquals(TousseInstance.STATUS_REVIEWED, tousseInstance.getStatus()); + AssertJUnit.assertEquals(tousseInstance.getSterilizationBasket(), container.getContainerName()); + } + + } +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r16876 -r16891 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 16876) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 16891) @@ -121,7 +121,15 @@ public int loadTodayPackingRecordTotalAmount(String taskGroup); public List loadTodayPackingRecord(String taskGroup,String tousseName,int firstIndex,int maxResults,String orderField); - + /** + * 器械包审核 + * @param idsStr 器械包实例编号串,用分号分隔 + * @param basketBarcode 灭菌篮筐 + * @param taskGroup 任务组 + * @param reviewer 审核人 + * @param reviewerCode 审核人编码 + * @param sterileDate 来菌日期 + */ public JSONObject reviewTousseInstance(String idsStr,String basketBarcode, String taskGroup,String reviewer,String reviewerCode,Date sterileDate); public String updateTousseInstanceForModifyPackingRecord(String modificationInfo, String tousseInstanceJson); Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/sterileRecord/AllTests.xml =================================================================== diff -u --- ssts-web/src/test/resources/test/forgon/disinfectsystem/sterileRecord/AllTests.xml (revision 0) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/sterileRecord/AllTests.xml (revision 16891) @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file Index: ssts-web/src/test/java/test/forgon/constant/Constants.java =================================================================== diff -u -r16837 -r16891 --- ssts-web/src/test/java/test/forgon/constant/Constants.java (.../Constants.java) (revision 16837) +++ ssts-web/src/test/java/test/forgon/constant/Constants.java (.../Constants.java) (revision 16891) @@ -40,4 +40,14 @@ * 测试内科名称 */ public static final String ORG_UNIT_NAME_NEIKE= "测试内科"; + + /** + * 测试外科编码 + */ + public static final String ORG_UNIT_CODE_WAIKE= "testWaike"; + + /** + * 测试外科名称 + */ + public static final String ORG_UNIT_NAME_WAIKE= "测试外科"; } Index: ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java =================================================================== diff -u -r16341 -r16891 --- ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java (.../QualityMonitoringInstanceManagerImpl.java) (revision 16341) +++ ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java (.../QualityMonitoringInstanceManagerImpl.java) (revision 16891) @@ -519,7 +519,9 @@ } } if(StringTools.equals(SterilizationRecord.STERILIZATION_STATUS_FAILURE, sterilizationStatus)){ - sterilizationRecordManager.updateFailureSterilizedRecordStatus(sterilizeRecordId); + List list = new ArrayList(); + list.add(Long.valueOf(sterilizeRecordId)); + sterilizationRecordManager.updateFailureSterilizedRecordStatus(list); }else if(StringTools.equals(SterilizationRecord.STERILIZATION_STATUS_INTERRUPT, sterilizationStatus)){ sterilizationRecordManager.updateSterilizedInerruptRecordStatus(sterilizeRecordId); } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r16876 -r16891 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 16876) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 16891) @@ -1441,11 +1441,16 @@ boolean showExternalCodeOfDisposableGoods,String deptCode) { List> mapList = new ArrayList>(); - // 只搜索器械包(包含敷料包和消毒物品) + // 只搜索器械包(包含敷料包和消毒物品),如果启用了聚合包功能则包括聚合包 if (TousseDefinition.PACKAGE_TYPE_INSIDE_AND_DISINFECTION.equals(tousseType)){ + String[] searchTousseTypeArray = new String[]{TousseDefinition.PACKAGE_TYPE_INSIDE, + TousseDefinition.PACKAGE_TYPE_DRESSING,TousseDefinition.PACKAGE_TYPE_DISINFECTION }; + if(CssdUtils.getSystemSetConfigByNameBool("enableComboTousse")){ + searchTousseTypeArray = new String[]{TousseDefinition.PACKAGE_TYPE_INSIDE, + TousseDefinition.PACKAGE_TYPE_DRESSING,TousseDefinition.PACKAGE_TYPE_DISINFECTION,TousseDefinition.PACKAGE_TYPE_COMBO }; + } mapList = searchTousseBySimpleCodeAndAnyTousseTypeArr( - searchString, new String[]{TousseDefinition.PACKAGE_TYPE_INSIDE, - TousseDefinition.PACKAGE_TYPE_DRESSING,TousseDefinition.PACKAGE_TYPE_DISINFECTION },false); + searchString, searchTousseTypeArray,false); //器械包和敷料包 }else if(TousseDefinition.PACKAGE_TYPE_INSIDE_AND_DRESSING.equals(tousseType)){ mapList = searchTousseBySimpleCodeAndAnyTousseTypeArr( Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/sterileLoading/AllTests.xml =================================================================== diff -u --- ssts-web/src/test/resources/test/forgon/disinfectsystem/sterileLoading/AllTests.xml (revision 0) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/sterileLoading/AllTests.xml (revision 16891) @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r16868 -r16891 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16868) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16891) @@ -702,6 +702,12 @@ .format("update TousseInstance set reviewBasket_ID = null,sterilizationBasket = null, status = '%s' where id in (select id from barcodeDevice where barcode in (%s))", TousseInstance.STATUS_REVIEWED, StringUtils.join(barcodeArray, ",")); objectDao.excuteSQL(sql); + + //更新聚合包内的包实例相关属性 + sql = String + .format("update TousseInstance set reviewBasket_ID = null,sterilizationBasket = null, status = '%s' where comboTousseInstanceId in (select id from barcodeDevice where barcode in (%s))", + TousseInstance.STATUS_REVIEWED, StringUtils.join(barcodeArray, ",")); + objectDao.excuteSQL(sql); } } @@ -992,8 +998,11 @@ reviewedBasketManager.saveOrUpdate(basket); } - tousseInstanceBarcodes = CollectionUtils.subtract( + //增加空对象或空集合的判断,防止空指针异常报错 + if(CollectionUtils.isNotEmpty(excludeBarcodes)){ + tousseInstanceBarcodes = CollectionUtils.subtract( tousseInstanceBarcodes, excludeBarcodes); + } /*for (String tousseBarcode : tousseInstanceBarcodes) { TousseInstance tousseInstance = getTousseInstanceByBarcode(tousseBarcode); tousseInstance.setReviewBasket_id(basket.getId()); @@ -1027,12 +1036,32 @@ virtualBasketNameList.add(virtualBasketSeqNum); } } - //必须先把虚拟篮筐编号清空 - Query updateQuery = objectDao.getHibernateSession().createQuery("update TousseInstance set virtualBasketSeqNum = null, reviewBasket_id=" + basket.getId() + + //必须先把虚拟篮筐编号清空(测试用例那边拿到时,并未拿到更新后的值) + /*Query updateQuery = objectDao.getHibernateSession().createQuery("update TousseInstance set virtualBasketSeqNum = null, reviewBasket_id=" + basket.getId() + ",sterilizationBasket='" + basket.getContainer().getContainerName() + "' where barcode in :barcode"); updateQuery.setParameterList("barcode", tousseInstanceBarcodes); - updateQuery.executeUpdate(); + updateQuery.executeUpdate();*/ + Query queryForUpate = objectDao.getHibernateSession().createQuery("from TousseInstance where barcode in :barcode"); + queryForUpate.setParameterList("barcode", tousseInstanceBarcodes); + List tousseInstanceList = queryForUpate.list(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + for(TousseInstance tousseInstanceUpdate : tousseInstanceList){ + tousseInstanceUpdate.setVirtualBasketSeqNum(null); + tousseInstanceUpdate.setReviewBasket_id(basket.getId()); + tousseInstanceUpdate.setSterilizationBasket(basket.getContainer().getContainerName()); + objectDao.saveOrUpdate(tousseInstanceUpdate); + + List tousseInstanceListBelongInComboTousse = tousseInstanceUpdate.getTousseInstancesBelongToThisComboTousse(objectDao); + for (TousseInstance tousse : tousseInstanceListBelongInComboTousse) { + tousse.setReviewBasket_id(tousseInstanceUpdate.getReviewBasket_id()); + tousse.setSterilizationBasket(tousseInstanceUpdate.getSterilizationBasket()); + tousse.setVirtualBasketSeqNum(null); + objectDao.saveOrUpdate(tousse); + } + } + } + //然后执行计算虚拟篮筐状态 if(CollectionUtils.isNotEmpty(virtualBasketNameList)){ //重新计算虚拟篮筐状态 Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r16876 -r16891 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16876) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 16891) @@ -2313,6 +2313,21 @@ //removeFromBasket(tousseInstance.getBarcode()); } tousseInstanceManager.saveOrUpdate(tousseInstance); + + //如果审核的是聚合包时,包内的包实例也需要赋值 + if(tousseInstance.isComboTousse()){ + String reviewedBasketIdUpdateValue = tousseInstance.getReviewBasket_id() == null ? "null" : String.valueOf(tousseInstance.getReviewBasket_id()); + String sterilizationBasketUpdateValue = StringUtils.isBlank(tousseInstance.getSterilizationBasket()) ? "null" : "'" + String.valueOf(tousseInstance.getSterilizationBasket()) + "'"; + String databaseNowTime = "GETDATE()"; + if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + databaseNowTime = "SYSDATE"; + } + String sterileStartTimeUpdateValue = "'" + sterileStartTime + "'"; + String reviewerUpdateValue = StringUtils.isBlank(tousseInstance.getReviewer()) ? "null" : "'" + String.valueOf(tousseInstance.getReviewer()) + "'"; + String reviewerCodeUpdateValue = StringUtils.isBlank(tousseInstance.getReviewerCode()) ? "null" : "'" + String.valueOf(tousseInstance.getReviewerCode()) + "'"; + objectDao.excuteSQL(String.format("update TousseInstance set status=%s, reviewTime=%s, sterileStartTime=%s, reviewBasket_id=%s, sterilizationBasket=%s, reviewer=%s, reviewerCode=%s where comboTousseInstanceId=%d", + "'"+ TousseInstance.STATUS_REVIEWED +"'",databaseNowTime,sterileStartTimeUpdateValue,reviewedBasketIdUpdateValue,sterilizationBasketUpdateValue,reviewerUpdateValue,reviewerCodeUpdateValue,tousseInstance.getId())); + } } String tousseName = tousseInstance.getTousseName(); Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java =================================================================== diff -u -r16479 -r16891 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 16479) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManager.java (.../SterilizationRecordManager.java) (revision 16891) @@ -26,7 +26,6 @@ public JSONObject completeSterilization(Collection sterilizationRecordIds, String orgUnitCode,String finishOperater); - public JSONObject completeSterilization(Collection sterilizationRecordIds, String orgUnitCode,String finishOperater,String finishComfirmer); /** * 灭菌完成 增加是否需要"完成确认"参数 * @param sterilizationRecordIds @@ -88,11 +87,6 @@ */ public void updateFailureSterilizedRecordStatus(Collection sterilizationRecordIds); /** - * 单个灭菌失败记录的处理 - * @param sterilizationRecordId 灭菌记录id - */ - public void updateFailureSterilizedRecordStatus(String sterilizationRecordId); - /** * 灭菌中断 * @param sterilizationRecordIds */