Index: ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java =================================================================== diff -u -r17042 -r17498 --- ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 17042) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/useRecord/UseRecordManagerTests.java (.../UseRecordManagerTests.java) (revision 17498) @@ -5,6 +5,7 @@ import java.util.List; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.orm.hibernate4.HibernateTemplate; import org.springframework.test.annotation.Rollback; import org.testng.AssertJUnit; import org.testng.annotations.Test; @@ -21,6 +22,8 @@ import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.useRecord.service.UseRecordManager; import com.forgon.serialnumber.model.SerialNum; +import test.forgon.disinfectsystem.dataProvider.UseRecord.UseRecordDataProvider; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; /** @@ -375,5 +378,139 @@ //只有开口包1被转换成申请单,聚合包都不会转换 AssertJUnit.assertEquals(1, recyclingApplication2.getApplicationItems().size()); } + + + /** + * 测试使用记录干预功能修改(在审核之后在转成申请单之前) + */ + @Test + public void testInterfereUpdateUseRecordBeforeChangeToApp(){ + //初始化数据 + initCSSDData(); + HibernateTemplate ht = objectDao.getHt(); + //准备新增的数据 + TousseInstance tousseInstance_开胸包 = TousseDefinitionDataProvider.prepareTousseInstance("Test开胸包", null); + TousseInstance tousseInstance_开口包 = TousseDefinitionDataProvider.prepareTousseInstance("Test开口包", null); + List tousseInstanceList = TousseDefinitionDataProvider.setTousseInstanceList(new TousseInstance[]{tousseInstance_开胸包, tousseInstance_开口包}); + UseRecord original = UseRecordDataProvider.createUseRecord(); + original.setTousseInstanceList(tousseInstanceList); + //新增使用记录 + useRecordManager.saveUseRecord_TRANS_REQUIRED(original); + UseRecord useRecord = ht.get(UseRecord.class, original.getId()); + this.assertUserRecord(useRecord, 2, UseRecord.STATUS_UNAUDITED); + //审核使用记录 + useRecordManager.auditUseRecords_TRANS_REQUIRED(Collections.singletonList(original.getId())); + UseRecord useRecordResult = ht.get(UseRecord.class, original.getId()); + //审核完毕,断言结果 + this.assertUserRecord(useRecordResult, 2, UseRecord.STATUS_AUDITED); + //使用干预功能修改使用记录,使用记录增加病人的名字,删除Test开口包,Test开胸包更新成包含植入物 + UseRecord modified = this.prepareInterfereUpdateUseReocrd(new TousseInstance[]{tousseInstance_开胸包}, original); + useRecordManager.updateUseRecord_TRANS_REQUIRED_USEINTERFERE(original, modified, true); + useRecordResult = ht.get(UseRecord.class, modified.getId()); + //断言使用干预之后的使用记录 + this.assertUserRecord(useRecordResult, 1, UseRecord.STATUS_AUDITED); + //断言使用记录的名人名字 + AssertJUnit.assertEquals("病人A", useRecordResult.getPatientName()); + // 查询Test开胸包 + TousseInstance tousseInstance1 = ht.get(TousseInstance.class, tousseInstance_开胸包.getId()); + AssertJUnit.assertNotNull(tousseInstance1); + TousseDefinition tousseDefinition = tousseInstance1.getTousseDefinition(); + AssertJUnit.assertNotNull(tousseDefinition); + //断言Test开胸包是否包含植入物为是 + AssertJUnit.assertEquals(com.forgon.Constants.STR_YES, tousseDefinition.getIncludeImplantStr()); + //查询Test开口包 + TousseInstance tousseInstance2 = ht.get(TousseInstance.class, tousseInstance_开口包.getId()); + AssertJUnit.assertNotNull(tousseInstance2); + //断言删除了的Test开口包状态变回已发货 + AssertJUnit.assertEquals(TousseInstance.STATUS_SHIPPED, tousseInstance2.getStatus()); + } + + + /** + * 测试使用记录干预功能修改(转成申请单之后) + */ + @Test + public void testInterfereUpdateUseRecordAfterChangeToApp(){ + //初始化数据 + initCSSDData(); + HibernateTemplate ht = objectDao.getHt(); + TousseInstance tousseInstance_开胸包 = TousseDefinitionDataProvider.prepareTousseInstance("Test开胸包", null); + TousseInstance tousseInstance_开口包 = TousseDefinitionDataProvider.prepareTousseInstance("Test开口包", null); + List tousseInstanceList = TousseDefinitionDataProvider.setTousseInstanceList(new TousseInstance[]{tousseInstance_开胸包, tousseInstance_开口包}); + UseRecord original = UseRecordDataProvider.createUseRecord(); + original.setTousseInstanceList(tousseInstanceList); + //保存审核并转换申请单 + try { + useRecordManager.saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED(original, original.getOperator(), original.getDepart(), original.getDepartCoding(), new Date(), CssdUtils.getConfigProperty("applicationFormType")); + AssertJUnit.assertEquals(UseRecord.STATUS_APPLIED, original.getStatus()); + } + catch (Exception e) { + AssertJUnit.fail(e.getMessage()); + } + RecyclingApplication recyclingApplication = (RecyclingApplication) objectDao.getByProperty(RecyclingApplication.class.getSimpleName(), "useRecord.id", original.getId()); + //断言申请单的物品数量为2 + AssertJUnit.assertEquals(2, recyclingApplication.getApplicationItems().size()); + UseRecord useRecordResult = ht.get(UseRecord.class, original.getId()); + this.assertUserRecord(useRecordResult, 2, UseRecord.STATUS_APPLIED); + // 使用干预功能修改使用记录,使用记录增加病人的名字,删除Test开口包,Test开胸包更新成包含植入物 + UseRecord modified = this.prepareInterfereUpdateUseReocrd(new TousseInstance[]{tousseInstance_开胸包}, original); + useRecordManager.updateUseRecord_TRANS_REQUIRED_USEINTERFERE(original, modified, true); + useRecordResult = ht.get(UseRecord.class, modified.getId()); + // 断言使用干预之后的使用记录 + this.assertUserRecord(useRecordResult, 1, UseRecord.STATUS_APPLIED); + // 断言使用记录的名人名字 + AssertJUnit.assertEquals("病人A", useRecordResult.getPatientName()); + // 查询Test开胸包 + TousseInstance tousseInstance1 = ht.get(TousseInstance.class, tousseInstance_开胸包.getId()); + AssertJUnit.assertNotNull(tousseInstance1); + AssertJUnit.assertEquals(TousseInstance.STATUS_USED, tousseInstance1.getStatus()); + TousseDefinition tousseDefinition = tousseInstance1.getTousseDefinition(); + AssertJUnit.assertNotNull(tousseDefinition); + //断言Test开胸包包含植入物为是 + AssertJUnit.assertEquals(com.forgon.Constants.STR_YES, tousseDefinition.getIncludeImplantStr()); + //查询Test开口包 + TousseInstance tousseInstance2 = ht.get(TousseInstance.class, tousseInstance_开口包.getId()); + AssertJUnit.assertNotNull(tousseInstance2); + //断言删除了的Test开口包状态变回已发货 + AssertJUnit.assertEquals(TousseInstance.STATUS_SHIPPED, tousseInstance2.getStatus()); + } + + /** + * 准备干预功能要使用的数据(将传进来的包实例全部设置成包含植入物) + * @param tousseInstances 要更新的器械包实例 + * @param original 原来的器械包实例 + * @return 返回要更新的UseRecord + */ + private UseRecord prepareInterfereUpdateUseReocrd(TousseInstance []tousseInstances, UseRecord original) { + for (TousseInstance tousseInstance : tousseInstances) { + tousseInstance.getTousseDefinition().setIncludeImplantStr(com.forgon.Constants.STR_YES); + } + List modifiedTousseInstanceList = TousseDefinitionDataProvider.setTousseInstanceList(tousseInstances); + UseRecord modified = UseRecordDataProvider.createUseRecord(); + modified.setId(original.getId()); + modified.setTousseInstanceList(modifiedTousseInstanceList); + //使用记录添加病人的名字 + modified.setPatientName("病人A"); + return modified; + } + + /** + * 断言使用记录 + * @param useRecord 使用记录 + * @param tousseInstanceListAmount 使用记录下的器械包实例数量 + * @param useRecordStatus 使用记录的状态 + */ + private void assertUserRecord(UseRecord useRecord, int tousseInstanceListAmount, String useRecordStatus){ + AssertJUnit.assertNotNull(useRecord); + //查找这条使用记录下的器械包实例 + List tousseInstanceList = useRecord.getTousseInstanceList(objectDao); + //断言这条使用记录下的器械包实例数量 + AssertJUnit.assertEquals(tousseInstanceListAmount, tousseInstanceList.size()); + for (TousseInstance tousseInstance : tousseInstanceList) { + //断言这条使用记录下的器械包实例状态为已使用 + AssertJUnit.assertEquals(TousseInstance.STATUS_USED, tousseInstance.getStatus()); + } + AssertJUnit.assertEquals(useRecordStatus, useRecord.getStatus()); + } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java =================================================================== diff -u -r17081 -r17498 --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java (.../TousseDefinitionDataProvider.java) (revision 17081) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java (.../TousseDefinitionDataProvider.java) (revision 17498) @@ -2,10 +2,15 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; +import com.forgon.serialnumber.model.SerialNum; +import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.date.DateTools; +import org.apache.commons.lang3.StringUtils; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -16,6 +21,9 @@ */ public class TousseDefinitionDataProvider { + private static TousseDefinitionManager tousseDefinitionManager = (TousseDefinitionManager) SpringBeanManger.getBean("tousseDefinitionManager"); + + /** * 为这个器械包创建已灭菌的包实例,用于直接扫描条码发货 * @@ -25,23 +33,91 @@ public static List createTousseInstance(String[] barcodeArray, TousseDefinition td) { List list = new LinkedList<>(); for (int i = 0, size = barcodeArray.length; i < size; i++) { - TousseInstance instance = new TousseInstance(); - instance.setBarcode(barcodeArray[i]); - String validUnitl = "2200-10-20 10:00:00"; - instance.setValidUntil(DateTools.coverStrToDate(validUnitl, DateTools.COMMON_DATE_HMS)); - instance.setTousseDefinition(td); - instance.setTousseName(td.getName()); - instance.setStatus("已灭菌"); - instance.setStatisticsAmount(1); - instance.setPrice(2.3); - instance.setFluctuationPrice(2.5); - instance.setOrgUnitCoding(td.getHandlerDepartCode()); - instance.setOrgUnitName(td.getHandlerDepartName()); - TousseInstanceManager tousseInstanceManager = (TousseInstanceManager) SpringBeanManger.getBean("tousseInstanceManager"); - tousseInstanceManager.setToDefaultWareHouse(instance, td.getHandlerDepartCode()); + TousseInstance instance = createSingleTousseInstance(barcodeArray[i], td, "已灭菌"); list.add(instance); } return list; } + /** + * 根据传进来的包实例数组设置成包实例List + * + * @param tousseInstance 包实例数组 + * @return 返回一个包实例List + */ + public static List setTousseInstanceList(TousseInstance[] tousseInstance) { + List tousseInstanceList = new ArrayList<>(); + for (TousseInstance instance : tousseInstance) { + tousseInstanceList.add(instance); + } + return tousseInstanceList; + } + + /** + * 创建单个包实例 + * + * @param barcode 条码 + * @param td 器械包相关信息 + * @param tousseInstanceStatus 包实例的状态 + */ + public static TousseInstance createSingleTousseInstance(String barcode, TousseDefinition td, String tousseInstanceStatus) { + TousseInstance instance = new TousseInstance(); + instance.setBarcode(barcode); + String validUntil = "2200-10-20 10:00:00"; + instance.setValidUntil(DateTools.coverStrToDate(validUntil, DateTools.COMMON_DATE_HMS)); + instance.setTousseDefinition(td); + instance.setTousseName(td.getName()); + instance.setStatus(tousseInstanceStatus); + instance.setStatisticsAmount(1); + instance.setPrice(2.3); + instance.setFluctuationPrice(2.5); + instance.setOrgUnitCoding(td.getHandlerDepartCode()); + instance.setOrgUnitName(td.getHandlerDepartName()); + TousseInstanceManager tousseInstanceManager = (TousseInstanceManager) SpringBeanManger.getBean("tousseInstanceManager"); + tousseInstanceManager.setToDefaultWareHouse(instance, td.getHandlerDepartCode()); + return instance; + } + + /** + * 根据提供的器械包名字,状态准备一个器械包实例 + * + * @param tousseName 器械包名字 + * @param tousseInstanceStatus 包实例的状态 + * @param isSave 是否要保存到数据库 + * @return 构造好的包实例 + */ + public static TousseInstance prepareTousseInstance(String tousseName, String tousseInstanceStatus, boolean isSave) { + SerialNumManager serialNumManager = (SerialNumManager) SpringBeanManger.getBean("serialNumManager"); + TousseInstanceManager tousseInstanceManager = (TousseInstanceManager) SpringBeanManger.getBean("tousseInstanceManager"); + tousseInstanceStatus = StringUtils.isBlank(tousseInstanceStatus) ? TousseInstance.STATUS_SHIPPED : tousseInstanceStatus; + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(tousseName); + TousseInstance tousseInstance = TousseDefinitionDataProvider.createSingleTousseInstance(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE), td, tousseInstanceStatus); + if (isSave) { + tousseInstanceManager.saveOrUpdate(tousseInstance); + } + return tousseInstance; + } + + /** + * 根据提供的器械包名字,状态准备一个器械包实例(保存到数据库) + * + * @param tousseName 器械包名字 + * @param tousseInstanceStatus 包实例的状态 + * @return 构造好的包实例 + */ + public static TousseInstance prepareTousseInstance(String tousseName, String tousseInstanceStatus) { + return prepareTousseInstance(tousseName, tousseInstanceStatus, true); + } + + + /** + * 根据名字查找器械包 + * + * @param name 器械包的名字 + * @return {@link TousseDefinition} + */ + public static TousseDefinition getTousseDefinition(String name) { + return tousseDefinitionManager.getTousseDefinitionByName(name); + } + }