Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDressingRecyclingApplication.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDressingRecyclingApplication.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDressingRecyclingApplication.java (revision 17726) @@ -0,0 +1,165 @@ +package test.forgon.disinfectsystem.application; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.vo.TousseItemVo; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.annotations.Test; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.application.assertThat.RecyclingApplicationAssert; +import test.forgon.disinfectsystem.dataProvider.application.ApplicationDataProvider; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + +/** + * @author zhonghaowen + * @apiNote 敷料包申请单 + * @since 2017-04-06 + */ +public class TestDressingRecyclingApplication extends AbstractCSSDTest { + + protected Logger log = LoggerFactory.getLogger(this.getClass()); + + private void prepareData() { + initCSSDData(); + makeActiveUser("oruser1"); + } + + /** + * 初始化敷料包物品 + * + * @return + */ + private List initGoods() { + String[] names = new String[]{"中弯(OR)", "短针持(OR)", "烧伤纱(OR)"}; + List list = new ArrayList<>(); + for (String name : names) { + TousseDefinition td = TousseDefinitionDataProvider.createDressingGood(name); + list.add(td); + } + return list; + } + + + /** + * 创建一张敷料包申请单,然后更新里面的物品,最后删除这张申请单 + */ + @Test + public void testDressingGoodRecyclingApplicationCRUD() { + this.prepareData(); + RecyclingApplication dressingGoodRecyclingApplication = this.createDressingGoodRecyclingApplication(); + Long id = dressingGoodRecyclingApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.assertDressingGoodRecyclingApplication(this.getRecyclingApplicationById(id), 2); + //申请单新增呼吸机,止血带数量改成1 + Collection modifyApplyItemVos = new ArrayList<>(); + TousseDefinition 烧伤纱 = tousseDefinitionManager.getTousseDefinitionByName("烧伤纱(OR)"); + appendToCollection(modifyApplyItemVos, "中弯(OR)", 1, TousseDefinition.PACKAGE_TYPE_DRESSING, "是", result.getApplicationItems().get(0).getId()); + appendToCollection2(modifyApplyItemVos, 烧伤纱.getName(), 3, TousseDefinition.PACKAGE_TYPE_DRESSING, "是", 0, 烧伤纱.getId()); + //更新申请单 + recyclingApplicationManager.saveRecyclingApplication(dressingGoodRecyclingApplication, modifyApplyItemVos, true); + result = this.getRecyclingApplicationById(id); + assertNotNull(result); + //断言回收状态为空 + assertEquals(null, result.getRecyclingStatus()); + List newItemList = result.getApplicationItems(); + for (TousseItem tousseItem : newItemList) { + log.info("{}-{}-{}", tousseItem.getTousseName(), tousseItem.getTousseType(), tousseItem.getAmount()); + } + assertNotNull(newItemList); + assertEquals(3, newItemList.size()); + //查找中弯(OR)且数量为1 + Collection select = CollectionUtils.select(newItemList, tousseItem -> "中弯(OR)".equals(tousseItem.getTousseName()) && 1 == tousseItem.getAmount()); + assertEquals(select.size(), 1); + //查找烧伤纱(OR)且数量为3 + select = CollectionUtils.select(newItemList, tousseItem -> "烧伤纱(OR)".equals(tousseItem.getTousseName()) && 3 == tousseItem.getAmount()); + assertEquals(select.size(), 1); + //删除该申请单 + recyclingApplicationManager.deleteRecyclingApplication(id.toString()); + assertNull(this.getRecyclingApplicationById(id)); + } + + + /** + * 终止敷料包申请单 + */ + @Test + public void testDressingGoodRecyclingApplicationTerminate() { + this.prepareData(); + RecyclingApplication recyclingApplication = this.createDressingGoodRecyclingApplication(); + Long id = recyclingApplication.getId(); + assertNotNull(id); + //断言申请单的结果 + this.assertDressingGoodRecyclingApplication(this.getRecyclingApplicationById(id), 2); + invoicePlanManager.terminateInvoicePlan(recyclingApplication, "oruser1", "测试中断"); + //断言终止的结果 + RecyclingApplicationAssert.assertCancelTousseRecyclingApplicationResult(this.getRecyclingApplicationById(id)); + } + + + /** + * 申请中弯(OR), 短针持(OR), 烧伤纱(OR),然后部分终止中弯(OR) + */ + @Test + public void testTerminateDressingGoodItemByIds() { + this.prepareData(); + RecyclingApplication recyclingApplication = this.createDressingGoodRecyclingApplication(); + Long id = recyclingApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.getRecyclingApplicationById(id); + String assertGoodName = "中弯(OR)"; + Collection collect = RecyclingApplicationAssert.beforeTerminateTousseItemByIds(result, assertGoodName); + //终止中弯(OR) + invoicePlanManager.checkTousseItemCanCancel(collect); + invoicePlanManager.terminateTousseItemByIds(collect, "测试部分终止"); + //断言部分终止中弯(OR)后的结果 + RecyclingApplicationAssert.afterTerminateTousseItemByIds(result, assertGoodName); + } + + + /** + * 断言敷料包品申请单 + * + * @param result 要断言的申请单 + * @param itemAmount 申请单下物品的数量 + */ + private RecyclingApplication assertDressingGoodRecyclingApplication(RecyclingApplication result, int itemAmount) { + RecyclingApplicationAssert.assertRecyclingApplicationAmount(result, itemAmount); + //断言申请单的状态 + assertEquals(result.getRecyclingStatus(), null); + assertEquals(result.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + return result; + } + + /** + * 创建敷料包申请单 + * + * @return {@link RecyclingApplication} + */ + private RecyclingApplication createDressingGoodRecyclingApplication() { + Collection applyItemVos = new ArrayList<>(); + RecyclingApplication dressingGoodRecyclingApplication = ApplicationDataProvider.createApplicationByParam(InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM); + List tousseDefinitionList = this.initGoods(); + //只申请前2个物品(中弯(OR),短针持(OR)) + for (int i = 0, size = tousseDefinitionList.size() - 1; i < size; i++) { + TousseDefinition tousseDefinition = tousseDefinitionList.get(i); + appendToCollection2(applyItemVos, tousseDefinition.getName(), 2, TousseDefinition.PACKAGE_TYPE_DRESSING, "是", 0, tousseDefinition.getId()); + } + recyclingApplicationManager.saveRecyclingApplication(dressingGoodRecyclingApplication, applyItemVos, true); + return dressingGoodRecyclingApplication; + } + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestRecyclingApplication.java =================================================================== diff -u -r17530 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestRecyclingApplication.java (.../TestRecyclingApplication.java) (revision 17530) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestRecyclingApplication.java (.../TestRecyclingApplication.java) (revision 17726) @@ -851,20 +851,8 @@ assertNotNull(invoicePlan3.getApplicationItems()); } - /** - * 根据名字和规格查找对应的一次性物品id - * @param name - * @param spec - * @return - */ - public Long getDisposeGoodId(String name, String spec) { - DisposableGoods disposableGoods = diposableGoodsManager.getDisposableGoodsByName(name, spec); - assertNotNull(disposableGoods); - Long id = disposableGoods.getId(); - assertNotNull(id); - return id; - } + //准备器械包申请单---一张申请单,一种物品 @SuppressWarnings("unchecked") @Test @@ -1620,4 +1608,6 @@ assertEquals(300, item.getAmount().intValue()); } + + } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestTousseRecyclingApplication.java =================================================================== diff -u -r17530 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestTousseRecyclingApplication.java (.../TestTousseRecyclingApplication.java) (revision 17530) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestTousseRecyclingApplication.java (.../TestTousseRecyclingApplication.java) (revision 17726) @@ -1,20 +1,22 @@ package test.forgon.disinfectsystem.application; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; -import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; -import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; import com.forgon.disinfectsystem.vo.TousseItemVo; import org.apache.commons.collections4.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate4.HibernateTemplate; import org.testng.annotations.Test; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.application.assertThat.RecyclingApplicationAssert; import test.forgon.disinfectsystem.dataProvider.application.ApplicationDataProvider; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; @@ -25,40 +27,89 @@ * @apiNote 器械包申请单 * @since 2017-03-27 */ -public class TestTousseRecyclingApplication extends TestRecyclingApplication { +public class TestTousseRecyclingApplication extends AbstractCSSDTest { - @Autowired - private RecyclingApplicationManager recyclingApplicationManager; - @Autowired - private InvoicePlanManager invoicePlanManager; - - private void prepareData() { initCSSDData(); - initCustomGoods(); + initGoods(); makeActiveUser("oruser1"); } + /** + * 要初始化物品的map(以名字-数量的形式) + */ + private final Map initGoodsMap = Collections.unmodifiableMap(new LinkedHashMap() { + private static final long serialVersionUID = -6555264637072844490L; + { + put("探针", 10); + put("方盒", 7); + put("手外科仪", 4); + put("眼垫", 6); + } + }); + + /** + * 申请物品的map(以名字-数量的形式) + */ + private final Map applyGoodsMap = Collections.unmodifiableMap(new LinkedHashMap() { + private static final long serialVersionUID = 8517084509264930675L; + + { + put("探针", 2); + put("方盒", 7); + put("手外科仪", 4); + } + }); + + + /** + * 初始化需要的物品 + */ + private void initGoods() { + Collection applyItemVos = this.appendGoodsMapToCollection(this.initGoodsMap); + List tousseDefinitions = ApplicationDataProvider.initCustomOtherGoods(applyItemVos); + for (TousseDefinition tousseDefinition : tousseDefinitions) { + tousseDefinitionManager.saveOrUpdate(tousseDefinition); + } + } + + + /** + * 把物品的map的名字和数量放到applyItemVos中 + * + * @param maps 物品的map + */ + private Collection appendGoodsMapToCollection(Map maps) { + Collection applyItemVos = new ArrayList<>(); + for (Map.Entry map : maps.entrySet()) { + appendToCollection(applyItemVos, map.getKey(), map.getValue(), TousseDefinition.PACKAGE_TYPE_INSIDE, "是", 0); + } + return applyItemVos; + } + + + /** * 创建一张器械包申请单,然后更新里面的物品,最后删除这张申请单 */ @Test public void testTousseRecyclingApplicationCRUD() { this.prepareData(); - HibernateTemplate ht = objectDao.getHt(); RecyclingApplication recyclingApplication = this.createTousseRecyclingApplication(); //断言申请单的结果 - RecyclingApplication result = this.assertTousseRecyclingApplication(recyclingApplication, 3, InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); Long id = recyclingApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.assertTousseRecyclingApplication(this.getRecyclingApplicationById(id), 3); //申请单新增眼垫,探针数量改成1 Collection modifyApplyItemVos = new ArrayList<>(); + //因为上面申请的物品用了LinkedHashMap,所以这里可以直接取第一个(即探针) appendToCollection(modifyApplyItemVos, "探针", 1, "器械包", "是", result.getApplicationItems().get(0).getId()); appendToCollection(modifyApplyItemVos, "眼垫", 6, "器械包", "是", 0); //更新申请单 recyclingApplicationManager.saveRecyclingApplication(recyclingApplication, modifyApplyItemVos, true); - result = ht.get(RecyclingApplication.class, id); + result = this.getRecyclingApplicationById(id); assertNotNull(result); assertEquals(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE, result.getRecyclingStatus()); List newItemList = result.getApplicationItems(); @@ -69,7 +120,7 @@ assertEquals(select.size(), 1); //删除该申请单 recyclingApplicationManager.deleteRecyclingApplication(id.toString()); - result = ht.get(RecyclingApplication.class, id); + result = this.getRecyclingApplicationById(id); assertNull(result); } @@ -78,27 +129,48 @@ * 终止器械包申请单 */ @Test - public void testTousseRecyclingApplicationCancel() { + public void testTousseRecyclingApplicationTerminate() { this.prepareData(); RecyclingApplication recyclingApplication = this.createTousseRecyclingApplication(); + Long id = recyclingApplication.getId(); + assertNotNull(id); //断言申请单的结果 - this.assertTousseRecyclingApplication(recyclingApplication, 3, InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + this.assertTousseRecyclingApplication(this.getRecyclingApplicationById(id), 3); invoicePlanManager.terminateInvoicePlan(recyclingApplication, "oruser1", "测试中断"); //断言终止的结果 - this.assertCancelTousseRecyclingApplication(recyclingApplication); + RecyclingApplicationAssert.assertCancelTousseRecyclingApplicationResult(this.getRecyclingApplicationById(id)); } + /** + * 申请探针,方盒, 手外科仪,然后部分终止探针 + */ + @Test + public void testTerminateTousseItemByIds() { + this.prepareData(); + RecyclingApplication recyclingApplication = this.createTousseRecyclingApplication(); + Long id = recyclingApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.getRecyclingApplicationById(id); + String assertGoodName = "探针"; + Collection collect = RecyclingApplicationAssert.beforeTerminateTousseItemByIds(result, assertGoodName); + //终止探针 + invoicePlanManager.checkTousseItemCanCancel(collect); + invoicePlanManager.terminateTousseItemByIds(collect, "测试部分终止"); + //断言部分终止探针后的结果 + RecyclingApplicationAssert.afterTerminateTousseItemByIds(result, assertGoodName); + } + /** * 创建器械包申请单 * * @return {@link RecyclingApplication} */ private RecyclingApplication createTousseRecyclingApplication() { - Collection applyItemVos = new ArrayList<>(); - appendToCollection(applyItemVos, "探针", 2, "器械包", "是", 0); - appendToCollection(applyItemVos, "方盒", 7, "器械包", "是", 0); - appendToCollection(applyItemVos, "手外科仪", 4, "器械包", "是", 0); + Collection applyItemVos = this.appendGoodsMapToCollection(this.applyGoodsMap); + // appendToCollection(applyItemVos, "探针", 2, "器械包", "是", 0); + // appendToCollection(applyItemVos, "方盒", 7, "器械包", "是", 0); + // appendToCollection(applyItemVos, "手外科仪", 4, "器械包", "是", 0); RecyclingApplication tousseApplication = ApplicationDataProvider.createApplicationByParam(InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM); //新建一张器械包申请单 recyclingApplicationManager.saveRecyclingApplication(tousseApplication, applyItemVos, true); @@ -108,42 +180,16 @@ /** * 断言器械包申请单 * - * @param recyclingApplication 创建好的申请单对应的申请单 - * @param itemAmount 申请单下物品的数量 - * @param recyclingApplicationStatus 申请单的状态 + * @param result 要断言的申请单 + * @param itemAmount 申请单下物品的数量 */ - private RecyclingApplication assertTousseRecyclingApplication(RecyclingApplication recyclingApplication, int itemAmount, String recyclingApplicationStatus) { - HibernateTemplate ht = objectDao.getHt(); - RecyclingApplication result = ht.get(RecyclingApplication.class, recyclingApplication.getId()); - assertNotNull(result); - List itemList = result.getApplicationItems(); - assertNotNull(itemList); - //断言申请的物品数量 - assertEquals(itemAmount, itemList.size()); + private RecyclingApplication assertTousseRecyclingApplication(RecyclingApplication result, int itemAmount) { + RecyclingApplicationAssert.assertRecyclingApplicationAmount(result, itemAmount); //断言申请单的状态 - assertEquals(recyclingApplicationStatus, result.getRecyclingStatus()); + assertEquals(result.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + assertEquals(result.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); return result; } - /** - * 断言终止的结果 - * - * @param recyclingApplication 要断言的申请单 - */ - private RecyclingApplication assertCancelTousseRecyclingApplication(RecyclingApplication recyclingApplication) { - HibernateTemplate ht = objectDao.getHt(); - RecyclingApplication result = ht.get(RecyclingApplication.class, recyclingApplication.getId()); - assertCancelTousseRecyclingApplicationResult(result); - return result; - } - public static RecyclingApplication assertCancelTousseRecyclingApplicationResult(RecyclingApplication result) { - assertNotNull(result); - assertEquals(result.getRecyclingStatus(), InvoicePlan.STATUS_END); - assertEquals(result.getEndStatus(), InvoicePlan.STATUS_END); - assertEquals(result.getDeliverStatus(), InvoicePlan.STATUS_END); - assertEquals(result.getReturnStatus(), InvoicePlan.STATUS_END); - return result; - } - } Index: ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java =================================================================== diff -u -r17721 -r17726 --- ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17721) +++ ssts-web/src/main/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17726) @@ -3944,4 +3944,26 @@ } return success; } + /** + * 根据名字和规格查找对应的一次性物品id + * @param name + * @param spec + * @return + */ + protected Long getDisposeGoodId(String name, String spec) { + DisposableGoods disposableGoods = diposableGoodsManager.getDisposableGoodsByName(name, spec); + assertNotNull(disposableGoods); + Long id = disposableGoods.getId(); + assertNotNull(id); + return id; + } + + /** + * 根据申请单id查找对应的申请单 + * @param id 申请单的id + * @return + */ + protected RecyclingApplication getRecyclingApplicationById(Long id){ + return objectDao.getHt().get(RecyclingApplication.class, id); + } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/goodFilterConfig/GoodFilterConfigDataProvider.java =================================================================== diff -u -r17506 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/goodFilterConfig/GoodFilterConfigDataProvider.java (.../GoodFilterConfigDataProvider.java) (revision 17506) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/goodFilterConfig/GoodFilterConfigDataProvider.java (.../GoodFilterConfigDataProvider.java) (revision 17726) @@ -12,6 +12,7 @@ import org.apache.log4j.Logger; import org.testng.annotations.DataProvider; import test.forgon.constant.Constants; +import test.forgon.disinfectsystem.constants.TousseDefinitionConstant; import test.forgon.disinfectsystem.dataProvider.orgUnit.OrgUnitDataProvider; import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; @@ -37,8 +38,8 @@ int orgUnitCount = 2; int tousseDefinitionTemplateItemsCount = 2; try { - TousseDefinition td1 = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionDataProvider.Test开胸包); - TousseDefinition td2 = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionDataProvider.Test开颅包); + TousseDefinition td1 = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionConstant.Test开胸包); + TousseDefinition td2 = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionConstant.Test开颅包); TousseDefinition[] tds = {td1, td2}; //部门是测试内科和测试外科 String[] orgUnitCoding = {Constants.ORG_UNIT_CODE_NEIKE, Constants.ORG_UNIT_CODE_WAIKE}; @@ -55,6 +56,25 @@ return new Object[][]{{null, orgUnitCount, tousseDefinitionTemplateItemsCount}}; } } + /* @DataProvider(name = "createGoodFilterConfigProvider2") + public static Object[][] createGoodFilterConfigProvider2() { + try { + TousseDefinition td1 = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionConstant.Test开胸包); + TousseDefinition[] tds = {td1}; + //部门是测试内科和测试外科 + String[] orgUnitCoding = {Constants.ORG_UNIT_CODE_NEIKE}; + GoodFilterConfigVo black = createGoodFilterConfigVo(ListType.BLACK.getDesc(), tds, orgUnitCoding); + // GoodFilterConfigVo white = createGoodFilterConfigVo(ListType.WHITE.getDesc(), tds, orgUnitCoding); + return new Object[][]{ + {black} + }; + } + catch (Exception e) { + //由于数据驱动捕获到runtimeException会跳过测试类,所以这里要捕获返回 + logger.error(e, e); + return new Object[][]{{null}}; + } + }*/ /** * 使用黑白名单进行科室申领物品过滤(分别使用器械包申单和通用申请单) @@ -66,8 +86,8 @@ String combo = "combo"; String appCode = "testOR"; OrgUnit orgUnit = OrgUnitDataProvider.createOrgUnit("testCSSD"); - final String[] names1 = new String[]{TousseDefinitionDataProvider.Test开胸包, TousseDefinitionDataProvider.Test开颅包}; - final String[] names2 = new String[]{TousseDefinitionDataProvider.Test开胸包}; + final String[] names1 = new String[]{TousseDefinitionConstant.Test开胸包, TousseDefinitionConstant.Test开颅包}; + final String[] names2 = new String[]{TousseDefinitionConstant.Test开胸包}; return new Object[][]{ {tousseType, appCode, names1, names2, orgUnit}, {combo, appCode, names1, names2, orgUnit} @@ -84,7 +104,7 @@ String combo = "combo"; String appCode = "testOR"; OrgUnit orgUnit = OrgUnitDataProvider.createOrgUnit("testCSSD"); - final String[] names = new String[]{TousseDefinitionDataProvider.Test开胸包}; + final String[] names = new String[]{TousseDefinitionConstant.Test开胸包}; return new Object[][]{ {tousseType, appCode, names, names, orgUnit}, {combo, appCode, names, names, orgUnit} @@ -101,8 +121,8 @@ String combo = "combo"; String appCode = "testOR"; OrgUnit orgUnit = OrgUnitDataProvider.createOrgUnit("testCSSD"); - final String[] names1 = new String[]{TousseDefinitionDataProvider.Test开颅包}; - final String[] names2 = new String[]{TousseDefinitionDataProvider.Test开胸包}; + final String[] names1 = new String[]{TousseDefinitionConstant.Test开颅包}; + final String[] names2 = new String[]{TousseDefinitionConstant.Test开胸包}; return new Object[][]{ {tousseType, appCode, names1, names2, orgUnit}, {combo, appCode, names1, names2, orgUnit} @@ -189,7 +209,7 @@ * @param tousseDefinitionTemplateItems 该模板下的所有器械包 */ public static GoodFilterConfigVo prepareUpdateTousse(GoodFilterConfigVo goodFilterConfigVo, List tousseDefinitionTemplateItems) { - TousseDefinition td = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionDataProvider.Test穿刺包); + TousseDefinition td = TousseDefinitionDataProvider.getTousseDefinition(TousseDefinitionConstant.Test穿刺包); JSONObject tousseDefinition1 = new JSONObject(); JSONObject tousseDefinition2 = new JSONObject(); JSONObject tousseDefinition1_1 = new JSONObject(); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/constants/CustomTousseConstant.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/constants/CustomTousseConstant.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/constants/CustomTousseConstant.java (revision 17726) @@ -0,0 +1,15 @@ +package test.forgon.disinfectsystem.constants; + +/** + * @author zhonghaowen + * @apiNote 自定义器械包常量 + * @since 2017-04-10 + */ +public class CustomTousseConstant { + + public static final String Test镊子 = "Test镊子"; + + public static final String Test钳子 = "Test钳子"; + + public static final String Test棉球 = "Test棉球"; +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/assertThat/RecyclingApplicationAssert.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/assertThat/RecyclingApplicationAssert.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/assertThat/RecyclingApplicationAssert.java (revision 17726) @@ -0,0 +1,127 @@ +package test.forgon.disinfectsystem.application.assertThat; + +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +/** + * @author zhonghaowen + * @apiNote 申请单的断言类 + * @since 2017-03-31 + */ +public class RecyclingApplicationAssert { + + + /** + * 断言被终止了的申请单 + * + * @param result 被终止的申请单 + * @return {@link InvoicePlan} + */ + public static InvoicePlan assertCancelTousseRecyclingApplicationResult(InvoicePlan result) { + assertNotNull(result); + assertEquals(result.getRecyclingStatus(), InvoicePlan.STATUS_END); + assertEquals(result.getEndStatus(), InvoicePlan.STATUS_END); + assertEquals(result.getDeliverStatus(), InvoicePlan.STATUS_END); + assertEquals(result.getReturnStatus(), InvoicePlan.STATUS_END); + return result; + } + + /** + * 断言申请单下物品种类的数量 + * + * @param result 要断言的申请单 + * @param itemAmount 申请单下物品的数量 + */ + public static InvoicePlan assertRecyclingApplicationAmount(InvoicePlan result, int itemAmount) { + assertNotNull(result); + List itemList = result.getApplicationItems(); + assertNotNull(itemList); + //断言申请的物品数量 + assertEquals(itemAmount, itemList.size()); + return result; + } + + /** + * 断言申请单里的物品状态为非终止 + * + * @param items 申请单里的物品 + */ + public static void assertRecyclingApplicationItemsIsNotTerminated(List items) { + for (TousseItem item : items) { + assertFalse(item.terminated()); + } + } + + /** + * 断言申请单部分物品终止后的结果 + * + * @param result 申请单 + * @param goodNames 终止了的物品名字 + * @return 返回这张申请单 + */ + public static Collection afterTerminateTousseItemByIds(RecyclingApplication result, String goodNames) { + //断言这张单是部分终止 + assertEquals(result.getEndStatus(), InvoicePlan.STATUS_PART_END); + //查找该物品且状态是已终止 + Collection select = CollectionUtils.select(result.getApplicationItems(), tousseItem -> goodNames.equals(tousseItem.getTousseName()) && BooleanUtils.isTrue(tousseItem.terminated())); + //断言能找到终止了的该物品 + assertTrue(CollectionUtils.isNotEmpty(select)); + return select; + } + + /** + * 部分终止前的断言,断言里面的物品状态是非终止,最后返回要部分终止的物品id + * + * @param result 申请单 + * @param terminateGoodName 要终止的物品名字 + * @return 要部分终止的物品id + */ + public static Collection beforeTerminateTousseItemByIds(InvoicePlan result, String terminateGoodName) { + List applicationItems = result.getApplicationItems(); + //终止前断言所有物品的状态不为终止 + assertRecyclingApplicationItemsIsNotTerminated(applicationItems); + // 查找要断言的物品 + Collection select = CollectionUtils.select(applicationItems, tousseItem -> terminateGoodName.equals(tousseItem.getTousseName())); + assertTrue(CollectionUtils.isNotEmpty(select)); + //获得要断言的物品的id + Collection collect = select.stream().map((TousseItem tousseItem) -> tousseItem.getId()).collect(Collectors.toSet()); + assertTrue(CollectionUtils.isNotEmpty(collect)); + return collect; + } + + + /** + * 断言自定期器械包或者外来器械包申请单下的材料 + * + * @param tousseDefinition 该张单的器械包 + * @param expectedMaterials 要断言的自定义器械包申请单下面的材料,格式如下:{名字-数量} + */ + public static void assertRecyclingApplicationMaterials(TousseDefinition tousseDefinition, Map expectedMaterials) { + assertNotNull(expectedMaterials); + assertTrue(expectedMaterials.size() > 0); + //获得外来器械包下的材料 + List materialInstances = tousseDefinition.getMaterialInstances(); + // 断言他的材料数量等于传进来的expectedMaterials大小 + assertEquals(materialInstances.size(), expectedMaterials.size()); + for (MaterialInstance materialInstance : materialInstances) { + // 断言申请的材料数量等于map中物品的数量 + assertEquals(materialInstance.getCount(), expectedMaterials.get(materialInstance.getMaterialName()).intValue()); + } + } + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDisposableGoodRecyclingApplication.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDisposableGoodRecyclingApplication.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDisposableGoodRecyclingApplication.java (revision 17726) @@ -0,0 +1,180 @@ +package test.forgon.disinfectsystem.application; + +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.vo.TousseItemVo; +import org.apache.commons.collections4.CollectionUtils; +import org.testng.annotations.Test; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.application.assertThat.RecyclingApplicationAssert; +import test.forgon.disinfectsystem.dataProvider.application.ApplicationDataProvider; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; + +/** + * @author zhonghaowen + * @apiNote 一次性物品申请单 + * @since 2017-03-27 + */ +public class TestDisposableGoodRecyclingApplication extends AbstractCSSDTest { + + /** + * 要初始化物品的map(以名字-数量的形式) + */ + private final Map initGoodsMap = Collections.unmodifiableMap(new LinkedHashMap() { + private static final long serialVersionUID = 6523444244462808734L; + + { + put("一次性导尿包[12#]", 10); + put("一次性压舌板[木质]", 300); + put("动脉采血器[2ML]", 9); + put("灭菌棉球[10粒/包]", 150); + } + }); + + + private void prepareData() { + initCSSDData(); + initGoods(); + makeActiveUser("oruser1"); + } + + /** + * 初始化自定义的一次性物品数据 + */ + private void initGoods() { + Collection applyItemVos = this.appendGoodsMapToCollection(this.initGoodsMap); + List disposableGoodsStocks = ApplicationDataProvider.initCustomDisGoods(applyItemVos); + for (DisposableGoodsStock disposableGoodsStock : disposableGoodsStocks) { + diposableGoodsManager.saveOrUpdate(disposableGoodsStock); + } + } + + /** + * 把物品的map的名字和数量放到applyItemVos中 + * + * @param maps 物品的map + */ + private Collection appendGoodsMapToCollection(Map maps) { + Collection applyItemVos = new ArrayList<>(); + for (Map.Entry map : maps.entrySet()) { + appendToCollection(applyItemVos, map.getKey(), map.getValue(), DisposableGoods.TYPE_NAME, "否", 0); + } + return applyItemVos; + } + + + /** + * 创建一张一次性物品申请单,然后更新里面的物品,最后删除这张申请单 + */ + @Test + public void testDisposableGoodRecyclingApplicationCRUD() { + this.prepareData(); + RecyclingApplication disposableGoodsApplication = this.createDisposableGoodRecyclingApplication(); + Long id = disposableGoodsApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.assertDisposableGoodRecyclingApplication(this.getRecyclingApplicationById(id), 3); + //申请单新增灭菌棉球[10粒/包],一次性导尿包[12#]数量改成1 + Collection modifyApplyItemVos = new ArrayList<>(); + appendToCollection2(modifyApplyItemVos, "一次性导尿包[12#]", 1, "一次性物品", "否", result.getApplicationItems().get(0).getId(), getDisposeGoodId("一次性导尿包", "12#")); + appendToCollection2(modifyApplyItemVos, "灭菌棉球[10粒/包]", 150, "一次性物品", "否", 0, getDisposeGoodId("灭菌棉球", "10粒/包")); + //更新申请单 + recyclingApplicationManager.saveRecyclingApplication(disposableGoodsApplication, modifyApplyItemVos, true); + result = this.getRecyclingApplicationById(id); + assertNotNull(result); + //断言回收状态为空 + assertEquals(null, result.getRecyclingStatus()); + List newItemList = result.getApplicationItems(); + assertNotNull(newItemList); + assertEquals(4, newItemList.size()); + //查找一次性导尿包[12#]且数量为1 + Collection select = CollectionUtils.select(newItemList, tousseItem -> "一次性导尿包[12#]".equals(tousseItem.getTousseName()) && 1 == tousseItem.getAmount()); + assertEquals(select.size(), 1); + //删除该申请单 + recyclingApplicationManager.deleteRecyclingApplication(id.toString()); + result = this.getRecyclingApplicationById(id); + assertNull(result); + } + + + /** + * 终止一次性物品申请单 + */ + @Test + public void testDisposableGoodRecyclingApplicationTerminate() { + this.prepareData(); + RecyclingApplication recyclingApplication = this.createDisposableGoodRecyclingApplication(); + Long id = recyclingApplication.getId(); + assertNotNull(id); + //断言这种一次性物品申请单的结果 + this.assertDisposableGoodRecyclingApplication(this.getRecyclingApplicationById(id), 3); + invoicePlanManager.terminateInvoicePlan(recyclingApplication, "oruser1", "测试中断"); + //断言终止的结果 + RecyclingApplication result = this.getRecyclingApplicationById(id); + RecyclingApplicationAssert.assertCancelTousseRecyclingApplicationResult(result); + } + + + /** + * 申请一次性导尿包[12#],一次性压舌板[木质],动脉采血器[2ML],部分终止一次性导尿包[12#] + */ + @Test + public void testTerminateDisposableGoodItemByIds() { + this.prepareData(); + RecyclingApplication recyclingApplication = this.createDisposableGoodRecyclingApplication(); + Long id = recyclingApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.getRecyclingApplicationById(id); + String assertGoodName = "一次性导尿包[12#]"; + Collection collect = RecyclingApplicationAssert.beforeTerminateTousseItemByIds(result, assertGoodName); + //终止一次性导尿包[12#] + invoicePlanManager.checkTousseItemCanCancel(collect); + invoicePlanManager.terminateTousseItemByIds(collect, "测试部分终止"); + //断言部分终止一次性导尿包[12#]后的结果 + RecyclingApplicationAssert.afterTerminateTousseItemByIds(result, assertGoodName); + } + + + /** + * 创建器械包申请单 + * + * @return {@link RecyclingApplication} + */ + private RecyclingApplication createDisposableGoodRecyclingApplication() { + Collection applyItemVos = new ArrayList<>(); + appendToCollection2(applyItemVos, "一次性导尿包[12#]", 17, "一次性物品", "否", 0, getDisposeGoodId("一次性导尿包", "12#")); + appendToCollection2(applyItemVos, "一次性压舌板[木质]", 300, "一次性物品", "否", 0, getDisposeGoodId("一次性压舌板", "木质")); + appendToCollection2(applyItemVos, "动脉采血器[2ML]", 9, "一次性物品", "否", 0, getDisposeGoodId("动脉采血器", "2ML")); + RecyclingApplication disposableGoodsApplication = ApplicationDataProvider.createApplicationByParam(InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM); + //新建一张一次性物品申请单 + recyclingApplicationManager.saveRecyclingApplication(disposableGoodsApplication, applyItemVos, true); + return disposableGoodsApplication; + } + + + /** + * 断言一次性物品申请单 + * + * @param result 要断言的申请单 + * @param itemAmount 申请单下物品的数量 + */ + private RecyclingApplication assertDisposableGoodRecyclingApplication(RecyclingApplication result, int itemAmount) { + RecyclingApplicationAssert.assertRecyclingApplicationAmount(result, itemAmount); + //断言申请单的状态 + assertEquals(result.getRecyclingStatus(), null); + assertEquals(result.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + return result; + } +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/MaterialDataProvider.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/MaterialDataProvider.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/MaterialDataProvider.java (revision 17726) @@ -0,0 +1,63 @@ +package test.forgon.disinfectsystem.dataProvider.tousseDefinition; + + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import java.util.Arrays; + +/** + * @author zhonghaowen + * @apiNote 材料数据驱动 + * @since 2017-04-06 + */ +public class MaterialDataProvider { + + + /** + * 创建外来器械材料的json对象 + * + * @param materialName 材料的名称 + * @param amount 材料的数量 + * @return 构造好的json对象 + */ + public static JSONObject createForeignMaterial(String materialName, int amount) { + JSONObject material = new JSONObject(); + material.put("materialInstanceId", 0); + material.put("materialName", materialName); + material.put("amount", amount); + material.put("includeImplant", "是"); + material.put("usedAmountOfIncludeImplant", 0); + material.put("minDismantleAmount", 0); + return material; + } + + + /** + * 创建自定义器械包的材料 + * + * @param name 材料的名字 + * @param count 材料的申请数量 + * @return 构造好的json对象 + */ + public static JSONObject createCustomMaterial(String name, int count) { + JSONObject material = new JSONObject(); + material.put("name", name); + material.put("count", count); + material.put("tousseType", "器械"); + return material; + } + + /** + * 构建材料json数组 + * + * @param materials 要添加的材料 + */ + public static JSONArray createMaterials(JSONObject[] materials) { + JSONArray array = new JSONArray(); + array.addAll(Arrays.asList(materials)); + return array; + } + + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/borrow/BorrowApplicationTest.java =================================================================== diff -u -r17530 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/borrow/BorrowApplicationTest.java (.../BorrowApplicationTest.java) (revision 17530) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/borrow/BorrowApplicationTest.java (.../BorrowApplicationTest.java) (revision 17726) @@ -22,6 +22,7 @@ import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; import test.forgon.disinfectsystem.borrow.bo.BorrowBo; +import test.forgon.disinfectsystem.constants.TousseDefinitionConstant; import test.forgon.disinfectsystem.dataProvider.application.ApplicationDataProvider; import test.forgon.disinfectsystem.dataProvider.application.BorrowAppDataProvider; import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; @@ -343,9 +344,9 @@ List applicationItems = invoicePlan.getApplicationItems(); for (TousseItem applicationItem : applicationItems) { //断言里面是Test开胸包 - assertEquals(TousseDefinitionDataProvider.Test开胸包, applicationItem.getTousseName()); + assertEquals(TousseDefinitionConstant.Test开胸包, applicationItem.getTousseName()); //断言Test开胸包是申请的数量 - assertEquals(applyGoodMap.get(TousseDefinitionDataProvider.Test开胸包).intValue(), applicationItem.getAmount().intValue()); + assertEquals(applyGoodMap.get(TousseDefinitionConstant.Test开胸包).intValue(), applicationItem.getAmount().intValue()); } } @@ -385,7 +386,7 @@ * @return {@link BorrowBo} */ private BorrowBo handleInvoice(RecyclingApplication tousseApplication) { - TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(TousseDefinitionDataProvider.Test开胸包); + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(TousseDefinitionConstant.Test开胸包); String[] barcodeArray = {"020000100", "020000200"}; return this.doInvoice(tousseApplication, td, barcodeArray); } @@ -413,10 +414,12 @@ * @return map是返回参数, 可以根据自己需要往里面插入数据, 以便后面的操作 */ private BorrowBo doInvoice(RecyclingApplication tousseApplication, TousseDefinition td, String[] barcodeArray) { + HibernateTemplate ht = objectDao.getHt(); BorrowBo borrowBo = new BorrowBo(); SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); config.setAfterRecyclingTousseDeliver(true); supplyRoomConfigManager.saveOrUpdate(config); + ht.flush(); //申请前断言借物单的数量是0 this.assertBorrowSize(0); //构造申请单的物品 @@ -425,6 +428,7 @@ tousseApplication.setApplicationItems(itemList); //创建借物单 objectDao.saveOrUpdate(tousseApplication); + ht.flush(); //断言借物单的数量是1 this.assertBorrowSize(1); //为这个申请的器械包创建包实例,用于发货 @@ -436,6 +440,8 @@ assertNotNull(wareHouse_CSSD); //准备发货的参数 JSONObject params = this.prepareInvoice(barcodeArray, wareHouse_CSSD); + ht.flush(); + // logger.fatal(params); invoiceManager.submitInvoice(params); //发货完成,断言两个包实例的发货状态 assertEquals(tousseInstance.get(0).getStatus(), TousseInstance.STATUS_SHIPPED); @@ -497,7 +503,8 @@ invoiceItems1.add(this.createInvoiceItem(barcode)); } params.put("mode", "depart"); - params.put("departCode", "3266"); + params.put("departCode", Constants.ORG_UNIT_CODE_WAIKE); + // params.put("departCode", "3266"); params.put("assistantSender", "张华"); params.put("sender", "张华"); params.put("invoiceItems", invoiceItems1); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDisinfectGoodRecyclingApplication.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDisinfectGoodRecyclingApplication.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestDisinfectGoodRecyclingApplication.java (revision 17726) @@ -0,0 +1,169 @@ +package test.forgon.disinfectsystem.application; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.vo.TousseItemVo; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.annotations.Test; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.application.assertThat.RecyclingApplicationAssert; +import test.forgon.disinfectsystem.dataProvider.application.ApplicationDataProvider; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; + +/** + * @author zhonghaowen + * @apiNote 消毒物品申请单 + * @since 2017-04-05 + */ +public class TestDisinfectGoodRecyclingApplication extends AbstractCSSDTest { + + protected Logger log = LoggerFactory.getLogger(this.getClass()); + + + /** + * 要申请的物品 + */ + private final String[] applyGoodsNames = new String[]{"止血带", "湿化瓶", "呼吸机"}; + + private void prepareData() { + initCSSDData(); + makeActiveUser("oruser1"); + } + + /** + * 初始化消毒物品 + * + * @return + */ + private List initGoods(String[] names) { + List list = new ArrayList<>(); + for (String name : names) { + TousseDefinition td = TousseDefinitionDataProvider.createDisinfectGood(name); + list.add(td); + } + return list; + } + + + /** + * 创建一张消毒物品申请单,然后更新里面的物品,最后删除这张申请单 + */ + @Test + public void testDisinfectGoodRecyclingApplicationCRUD() { + this.prepareData(); + RecyclingApplication disinfectGoodApplication = this.createDisinfectGoodRecyclingApplication(this.applyGoodsNames); + Long id = disinfectGoodApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.assertDisposableGoodRecyclingApplication(this.getRecyclingApplicationById(id), 2); + //申请单新增呼吸机,止血带数量改成1 + Collection modifyApplyItemVos = new ArrayList<>(); + TousseDefinition 呼吸机 = tousseDefinitionManager.getTousseDefinitionByName("呼吸机"); + appendToCollection(modifyApplyItemVos, "止血带", 1, "消毒物品", "是", result.getApplicationItems().get(0).getId()); + appendToCollection2(modifyApplyItemVos, 呼吸机.getName(), 3, "消毒物品", "是", 0, 呼吸机.getId()); + //更新申请单 + recyclingApplicationManager.saveRecyclingApplication(disinfectGoodApplication, modifyApplyItemVos, true); + result = this.getRecyclingApplicationById(id); + assertNotNull(result); + //断言回收状态为待回收 + assertEquals(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE, result.getRecyclingStatus()); + List newItemList = result.getApplicationItems(); + for (TousseItem tousseItem : newItemList) { + log.info("{}-{}-{}", tousseItem.getTousseName(), tousseItem.getTousseType(), tousseItem.getAmount()); + } + assertNotNull(newItemList); + assertEquals(3, newItemList.size()); + //查找止血带且数量为1 + Collection select = CollectionUtils.select(newItemList, tousseItem -> "止血带".equals(tousseItem.getTousseName()) && 1 == tousseItem.getAmount()); + assertEquals(select.size(), 1); + //查找呼吸机且数量为3 + select = CollectionUtils.select(newItemList, tousseItem -> "呼吸机".equals(tousseItem.getTousseName()) && 3 == tousseItem.getAmount()); + assertEquals(select.size(), 1); + //删除该申请单 + recyclingApplicationManager.deleteRecyclingApplication(id.toString()); + assertNull(this.getRecyclingApplicationById(id)); + } + + + /** + * 终止消毒物品申请单 + */ + @Test + public void testDisinfectGoodRecyclingApplicationTerminate() { + this.prepareData(); + RecyclingApplication recyclingApplication = this.createDisinfectGoodRecyclingApplication(this.applyGoodsNames); + Long id = recyclingApplication.getId(); + assertNotNull(id); + //断言申请单的结果 + this.assertDisposableGoodRecyclingApplication(this.getRecyclingApplicationById(id), 2); + invoicePlanManager.terminateInvoicePlan(recyclingApplication, "oruser1", "测试中断"); + //断言终止的结果 + RecyclingApplicationAssert.assertCancelTousseRecyclingApplicationResult(this.getRecyclingApplicationById(id)); + } + + /** + * 申请止血带, 湿化瓶, 呼吸机,部分终止止血带 + */ + @Test + public void testTerminateDisinfectGoodItemByIds() { + this.prepareData(); + RecyclingApplication recyclingApplication = this.createDisinfectGoodRecyclingApplication(this.applyGoodsNames); + Long id = recyclingApplication.getId(); + assertNotNull(id); + RecyclingApplication result = this.getRecyclingApplicationById(id); + String assertGoodName = "止血带"; + Collection collect = RecyclingApplicationAssert.beforeTerminateTousseItemByIds(result, assertGoodName); + //终止止血带 + invoicePlanManager.checkTousseItemCanCancel(collect); + invoicePlanManager.terminateTousseItemByIds(collect, "测试部分终止"); + //断言部分终止止血带后的结果 + RecyclingApplicationAssert.afterTerminateTousseItemByIds(this.getRecyclingApplicationById(id), assertGoodName); + } + + + /** + * 创建消毒物品申请单 + * + * @param initGoodsNames 要初始化的物品 + * @return {@link RecyclingApplication} + */ + private RecyclingApplication createDisinfectGoodRecyclingApplication(String[] initGoodsNames) { + Collection applyItemVos = new ArrayList<>(); + RecyclingApplication disinfectGoodApplication = ApplicationDataProvider.createApplicationByParam(InvoicePlan.TYPE_DISINFECT_GOODS_APPLICATION_FORM); + List tousseDefinitionList = this.initGoods(initGoodsNames); + //只申请前2个物品 + for (int i = 0, size = tousseDefinitionList.size() - 1; i < size; i++) { + TousseDefinition tousseDefinition = tousseDefinitionList.get(i); + appendToCollection2(applyItemVos, tousseDefinition.getName(), 4, TousseDefinition.PACKAGE_TYPE_DISINFECTION, "是", 0, tousseDefinition.getId()); + } + recyclingApplicationManager.saveRecyclingApplication(disinfectGoodApplication, applyItemVos, true); + return disinfectGoodApplication; + } + + + /** + * 断言消毒品申请单 + * + * @param result 要断言的申请单 + * @param itemAmount 申请单下物品的数量 + */ + private RecyclingApplication assertDisposableGoodRecyclingApplication(RecyclingApplication result, int itemAmount) { + RecyclingApplicationAssert.assertRecyclingApplicationAmount(result, itemAmount); + //断言申请单的状态 + assertEquals(result.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + assertEquals(result.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + return result; + } + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/goodFilterConfig/GoodFilterConfigTest.java =================================================================== diff -u -r17506 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/goodFilterConfig/GoodFilterConfigTest.java (.../GoodFilterConfigTest.java) (revision 17506) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/goodFilterConfig/GoodFilterConfigTest.java (.../GoodFilterConfigTest.java) (revision 17726) @@ -18,6 +18,7 @@ import org.testng.annotations.Test; import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.constants.TousseDefinitionConstant; import test.forgon.disinfectsystem.dataProvider.goodFilterConfig.GoodFilterConfigDataProvider; import test.forgon.disinfectsystem.dataProvider.orgUnit.OrgUnitDataProvider; import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; @@ -125,10 +126,10 @@ public void testSearchTousseAppFormUseBlackList(OrgUnit cssd) { String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; String appCode = "testOR"; - String[] name = new String[]{TousseDefinitionDataProvider.Test开胸包}; + String[] name = new String[]{TousseDefinitionConstant.Test开胸包}; List list = this.doSearchTousseDefinition(tousseType, appCode, name, null, cssd); //从搜索结果查找Test开胸包 - Collection result = CollectionUtils.select(list, td -> TousseDefinitionDataProvider.Test开胸包.equals(td.getName())); + Collection result = CollectionUtils.select(list, td -> TousseDefinitionConstant.Test开胸包.equals(td.getName())); assertEquals(result.size(), 0); } @@ -144,11 +145,11 @@ public void testSearchTousseAppFormUseWhiteList(OrgUnit cssd) { String tousseType = InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM; String appCode = "testOR"; - String[] name = new String[]{TousseDefinitionDataProvider.Test开胸包}; + String[] name = new String[]{TousseDefinitionConstant.Test开胸包}; List list = this.doSearchTousseDefinition(tousseType, appCode, null, name, cssd); //断言使用白名单后查询出来的结果只有一个 assertEquals(list.size(), 1); - assertEquals(TousseDefinitionDataProvider.Test开胸包, list.get(0).getName()); + assertEquals(TousseDefinitionConstant.Test开胸包, list.get(0).getName()); } /** @@ -169,7 +170,7 @@ assertTrue(blackNames.length > whiteNames.length); List list = this.doSearchTousseDefinition(tousseType, appCode, blackNames, whiteNames, cssd); //从结果查询是否存在Test开颅包 - Collection result = CollectionUtils.select(list, object -> TousseDefinitionDataProvider.Test开颅包.equals(object.getName())); + Collection result = CollectionUtils.select(list, object -> TousseDefinitionConstant.Test开颅包.equals(object.getName())); //断言结果不存在Test开颅包 assertEquals(result.size(), 0); } @@ -193,7 +194,7 @@ //断言查到的结果只有一条 assertEquals(list.size(), 1); //断言器械包的名字是Test开颅包 - assertEquals(list.get(0).getName(), TousseDefinitionDataProvider.Test开颅包); + assertEquals(list.get(0).getName(), TousseDefinitionConstant.Test开颅包); } /** @@ -212,7 +213,7 @@ assertEquals(whiteNames.length, blackNames.length); List list = this.doSearchTousseDefinition(tousseType, appCode, blackNames, whiteNames, cssd); //从结果查询是否存在Test开胸包 - Collection result = CollectionUtils.select(list, object -> TousseDefinitionDataProvider.Test开胸包.equals(object.getName())); + Collection result = CollectionUtils.select(list, object -> TousseDefinitionConstant.Test开胸包.equals(object.getName())); //断言结果不存在Test开胸包 assertEquals(result.size(), 0); } @@ -235,7 +236,7 @@ //断言查到的结果只有一条 assertEquals(list.size(), 1); //断言器械包的名字是Test开颅包 - assertEquals(list.get(0).getName(), TousseDefinitionDataProvider.Test开颅包); + assertEquals(list.get(0).getName(), TousseDefinitionConstant.Test开颅包); } /** Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java =================================================================== diff -u -r17506 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java (.../TousseDefinitionDataProvider.java) (revision 17506) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/tousseDefinition/TousseDefinitionDataProvider.java (.../TousseDefinitionDataProvider.java) (revision 17726) @@ -6,11 +6,15 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; +import com.forgon.tools.GB2Alpha; +import com.forgon.tools.GB2WB; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.date.DateTools; import org.apache.commons.lang3.StringUtils; +import test.forgon.constant.Constants; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; @@ -23,12 +27,9 @@ private static TousseDefinitionManager tousseDefinitionManager = (TousseDefinitionManager) SpringBeanManger.getBean("tousseDefinitionManager"); - public final static String Test开胸包 = "Test开胸包"; + private static TousseInstanceManager tousseInstanceManager = (TousseInstanceManager) SpringBeanManger.getBean("tousseInstanceManager"); - public final static String Test开颅包 = "Test开颅包"; - public final static String Test穿刺包 = "Test穿刺包"; - /** * 为这个器械包创建已灭菌的包实例,用于直接扫描条码发货 * @@ -52,9 +53,7 @@ */ public static List setTousseInstanceList(TousseInstance[] tousseInstance) { List tousseInstanceList = new ArrayList<>(); - for (TousseInstance instance : tousseInstance) { - tousseInstanceList.add(instance); - } + tousseInstanceList.addAll(Arrays.asList(tousseInstance)); return tousseInstanceList; } @@ -78,7 +77,6 @@ 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; } @@ -93,7 +91,6 @@ */ 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); @@ -125,4 +122,123 @@ return tousseDefinitionManager.getTousseDefinitionByName(name); } + + /** + * 创建消毒物品(保存到数据库) + * + * @param name 消毒物品的名字 + * @return {@link TousseDefinition} + */ + public static TousseDefinition createDisinfectGood(String name) { + return createDisinfectGood(name, true); + } + + /** + * 创建消毒物品 + * + * @param name 消毒物品的名字 + * @param isSave 是否保存到数据库 + * @return {@link TousseDefinition} + */ + public static TousseDefinition createDisinfectGood(String name, boolean isSave) { + TousseDefinition tousseDefinition = new TousseDefinition(); + setTousseDefinitionCommonProperties(tousseDefinition, name, TousseDefinition.PACKAGE_TYPE_DISINFECTION); + tousseDefinition.setWorkLoadStatisticalMethod("材料加耗材"); + tousseDefinition.setIsTraceable(TousseDefinition.STR_NO); + tousseDefinition.setIsCleanedEntirely("否"); + // 默认的包装类型 + tousseDefinition.setPackageType("胶袋"); + tousseDefinition.setSterilingMethod("无"); + tousseDefinition.setTaskGroup("常规组"); + if (isSave) { + tousseDefinitionManager.saveOrUpdate(tousseDefinition); + } + return tousseDefinition; + } + + + /** + * 创建敷料包(保存到数据库) + * + * @param name 敷料包的名字 + * @return {@link TousseDefinition} + */ + public static TousseDefinition createDressingGood(String name) { + return createDressingGood(name, true); + } + + /** + * 创建敷料包 + * + * @param name 敷料包的名字 + * @param isSave 是否保存到数据库 + * @return {@link TousseDefinition} + */ + public static TousseDefinition createDressingGood(String name, boolean isSave) { + TousseDefinition tousseDefinition = new TousseDefinition(); + setTousseDefinitionCommonProperties(tousseDefinition, name, TousseDefinition.PACKAGE_TYPE_DRESSING); + tousseDefinition.setTaskGroup("术科组"); + tousseDefinition.setTousseGroupName("普通批"); + tousseDefinition.setHandlerDepartCode(Constants.ORG_UNIT_CODE_CSSD); + tousseDefinition.setExternalCode("1009"); + //是否整包清洗 + tousseDefinition.setIsCleanedEntirely(TousseDefinition.STR_NO); + tousseDefinition.setIsCustomPacking(TousseDefinition.STR_YES); + //是否追朔 + tousseDefinition.setIsTraceable(TousseDefinition.STR_NO); + if (isSave) { + tousseDefinitionManager.saveOrUpdate(tousseDefinition); + } + return tousseDefinition; + } + + /** + * 创建自定义器械包(默认保存到数据库) + * + * @param name 自定义器械报的名字 + * @return {@link TousseDefinition} + */ + public static TousseDefinition createCustomGood(String name) { + return createCustomGood(name, true); + } + + + /** + * 创建自定义器械包 + * + * @param name 自定义器械报的名字 + * @param isSave 是否保存到数据库 + * @return {@link TousseDefinition} + */ + public static TousseDefinition createCustomGood(String name, boolean isSave) { + TousseDefinition tousseDefinition = new TousseDefinition(); + setTousseDefinitionCommonProperties(tousseDefinition, name, TousseDefinition.PACKAGE_TYPE_CUSTOM); + tousseDefinition.setIsTraceable(TousseDefinition.STR_YES); + tousseDefinition.setIsRecycling(TousseDefinition.STR_YES); + tousseDefinition.setIsCleanedEntirely("是"); + tousseDefinition.setWorkLoadStatisticalMethod(TousseDefinition.WORKLOAD_STATISTICAL_METHOD_MATERIAL_AND_DIPOSABLES); + tousseDefinition.setTaskGroup("常规组"); + if (isSave) { + tousseDefinitionManager.saveOrUpdate(tousseDefinition); + } + return tousseDefinition; + } + + + /** + * 设置器械包的公共属性(名字,拼音码,五笔码,类型,价格) + * + * @param tousseDefinition 要设置的器械包 + * @param name 名字 + * @param type 类型 + */ + private static void setTousseDefinitionCommonProperties(TousseDefinition tousseDefinition, String name, String type) { + tousseDefinition.setName(name); + tousseDefinition.setSpelling(GB2Alpha.string2Alpha(name)); + tousseDefinition.setWbCode(GB2WB.getWBCode(name)); + tousseDefinition.setTousseType(type); + tousseDefinition.setPrice(10.0); + } + + } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/constants/TousseDefinitionConstant.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/constants/TousseDefinitionConstant.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/constants/TousseDefinitionConstant.java (revision 17726) @@ -0,0 +1,19 @@ +package test.forgon.disinfectsystem.constants; + +/** + * @author zhonghaowen + * @apiNote 器械包的常量 + * @since 2017-04-07 + */ +public class TousseDefinitionConstant { + + public final static String Test开胸包 = "Test开胸包"; + + public final static String Test开颅包 = "Test开颅包"; + + public final static String Test穿刺包 = "Test穿刺包"; + + public final static String Test开口包 = "Test开口包"; + + public final static String Test治疗巾 = "Test治疗巾"; +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/CustomTousseRecyclingApplicationProvider.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/CustomTousseRecyclingApplicationProvider.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/CustomTousseRecyclingApplicationProvider.java (revision 17726) @@ -0,0 +1,27 @@ +package test.forgon.disinfectsystem.dataProvider.application; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.testng.annotations.DataProvider; +import test.forgon.disinfectsystem.constants.CustomTousseConstant; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.MaterialDataProvider; + +/** + * @author zhonghaowen + * @apiNote 自定义器械包数据驱动 + * @since 2017-04-10 + */ +public class CustomTousseRecyclingApplicationProvider extends ApplicationDataProvider { + + + + @DataProvider(name = "customTousseTreeDataProvider") + public static Object[][] customTousseTreeDataProvider() { + JSONObject material1 = MaterialDataProvider.createCustomMaterial(CustomTousseConstant.Test镊子, 5); + JSONObject material2 = MaterialDataProvider.createCustomMaterial(CustomTousseConstant.Test钳子, 2); + // [{\"name\":\"Test镊子\",\"tousseType\":\"器械\",\"count\":5},{\"name\":\"Test钳子\",\"tousseType\":\"器械\",\"count\":4}]"; + JSONArray materials = MaterialDataProvider.createMaterials(new JSONObject[]{material1, material2}); + return new Object[][]{{materials}}; + } + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/constants/enums/DisposableGoodEnum.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/constants/enums/DisposableGoodEnum.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/constants/enums/DisposableGoodEnum.java (revision 17726) @@ -0,0 +1,40 @@ +package test.forgon.disinfectsystem.constants.enums; + +/** + * @author zhonghaowen + * @apiNote 一次性物品枚举类 + * @since 2017-04-07 + */ +public enum DisposableGoodEnum { + + + 纱块("纱块", "6*8"), + + 注射器("注射器", "5ML"); + + private String name; + private String spec; + + DisposableGoodEnum(String name, String spec) { + this.name = name; + this.spec = spec; + } + + public String getSpec() { + return spec; + } + + public String getName() { + return name; + } + + public static DisposableGoodEnum parseOfSpec(String spec) { + DisposableGoodEnum[] values = DisposableGoodEnum.values(); + for (DisposableGoodEnum value : values) { + if (value.getName().equals(spec)) { + return value; + } + } + throw new IllegalArgumentException("找不到对应的类型"); + } +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestForeignTousseGoodRecyclingApplication.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestForeignTousseGoodRecyclingApplication.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestForeignTousseGoodRecyclingApplication.java (revision 17726) @@ -0,0 +1,143 @@ +package test.forgon.disinfectsystem.application; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.orm.hibernate4.HibernateTemplate; +import org.testng.annotations.Test; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.application.assertThat.RecyclingApplicationAssert; +import test.forgon.disinfectsystem.dataProvider.application.ForeignTousseAppDataProvider; + +import java.util.HashMap; +import java.util.Map; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; + +/** + * @author zhonghaowen + * @apiNote 外来器械申请单 + * @since 2017-04-06 + */ +public class TestForeignTousseGoodRecyclingApplication extends AbstractCSSDTest { + + private void prepareData() { + initCSSDData(); + // initGoods(); + makeActiveUser("oruser1"); + } + + /** + * 外来器械申请单测试用例,场景如下:
+ * 1.添加材料:测试外来器械包材料-数量5, 鼻窥-数量2
+ * 2.修改这张申请单,将供应商改成农业银行
+ * + * @param foreignTousseTreeDatas 这张申请单的数据 + */ + @Test(dataProvider = "foreignTousseTreeDataProvider", dataProviderClass = ForeignTousseAppDataProvider.class) + public void testForeignTousseGoodRecyclingApplicationCRUD(JSONArray foreignTousseTreeDatas) { + this.prepareData(); + // String foreignTousseTreeData = "[{tousseItemId:0,tousseDefinitionId:0,tousseName:\"测试外来器械包\",supplierName:\"工商银行\",amount:1,price:0," + + // "materials:[{materialInstanceId:0,materialName:\"测试外来器械包材料\",amount:5,includeImplant:\"是\",usedAmountOfIncludeImplant:0,minDismantleAmount:0}]}]"; + ForeignTousseApplication foreignTousseApplication = ForeignTousseAppDataProvider.createForeignTousseApplication(); + //创建一张外来器械申请单 + foreignTousseApplicationManager.saveOrUpdate(foreignTousseApplication, foreignTousseTreeDatas.toString(), "", ""); + Long id = foreignTousseApplication.getId(); + assertNotNull(id); + Map expectedMaterials = this.buildExpectedMaterials(foreignTousseTreeDatas); + HibernateTemplate ht = objectDao.getHt(); + ForeignTousseApplication result = ht.get(ForeignTousseApplication.class, id); + this.assertForeignTousseGoodRecyclingApplication(result, expectedMaterials); + assertEquals(result.getSupplierName(), "工商银行"); + JSONArray updateForeignTousseTreeData = this.buildUpdateForeignTousse(foreignTousseTreeDatas); + foreignTousseApplicationManager.saveOrUpdate(foreignTousseApplication, updateForeignTousseTreeData.toString(), "", ""); + expectedMaterials = this.buildExpectedMaterials(updateForeignTousseTreeData); + result = ht.get(ForeignTousseApplication.class, id); + this.assertForeignTousseGoodRecyclingApplication(result, expectedMaterials); + assertEquals(result.getSupplierName(), "农业银行"); + foreignTousseApplicationManager.delete(result); + result = ht.get(ForeignTousseApplication.class, id); + assertNull(result); + } + + + /** + * 终止外来器械申请单 + */ + @Test(dataProvider = "foreignTousseTreeDataProvider", dataProviderClass = ForeignTousseAppDataProvider.class) + public void testForeignTousseGoodRecyclingApplicationTerminate(JSONArray foreignTousseTreeDatas) { + this.prepareData(); + ForeignTousseApplication foreignTousseApplication = ForeignTousseAppDataProvider.createForeignTousseApplication(); + //创建一张外来器械申请单 + foreignTousseApplicationManager.saveOrUpdate(foreignTousseApplication, foreignTousseTreeDatas.toString(), "", ""); + invoicePlanManager.terminateInvoicePlan(foreignTousseApplication, "oruser1", "测试中断"); + //断言终止的结果 + RecyclingApplicationAssert.assertCancelTousseRecyclingApplicationResult(objectDao.getHt().get(ForeignTousseApplication.class, foreignTousseApplication.getId())); + } + + + /** + * 修改这张外来器械申请单,外来器械包材料不允许修改或者新增或者删除 + * + * @return + */ + private JSONArray buildUpdateForeignTousse(JSONArray foreignTousseTreeDatas) { + JSONObject foreignTousseItem = foreignTousseTreeDatas.optJSONObject(0); + //将供应商的名字改成农业银行 + foreignTousseItem.put("supplierName", "农业银行"); + return foreignTousseTreeDatas; + } + + /** + * 构建要断言的材料物品-数量 + * + * @param foreignTousseTreeDatas 申请的物品格式 + */ + private Map buildExpectedMaterials(JSONArray foreignTousseTreeDatas) { + JSONObject obj = foreignTousseTreeDatas.optJSONObject(0); + JSONArray materials = obj.getJSONArray("materials"); + Map expectedMaterials = new HashMap<>(); + for (int i = 0; i < materials.size(); i++) { + JSONObject material = materials.optJSONObject(i); + expectedMaterials.put(material.optString("materialName"), material.getInt("amount")); + } + return expectedMaterials; + } + + + /** + * 断言外来器械申请单 + * + * @param result 外来器械申请单 + * @param expectedMaterials 要断言的外来器械申请单下面的材料,格式如下:{名字-数量} + */ + private void assertForeignTousseGoodRecyclingApplication(ForeignTousseApplication result, Map expectedMaterials) { + this.assertThisApplication(result); + // 断言申请的物品数量(外来器械包只能申请一个) + RecyclingApplicationAssert.assertRecyclingApplicationAmount(result, 1); + TousseDefinition tousseDefinition = objectDao.getHt().get(TousseDefinition.class, result.getApplicationItems().get(0).getTousseDefinitionId()); + RecyclingApplicationAssert.assertRecyclingApplicationMaterials(tousseDefinition, expectedMaterials); + } + + + /** + * 断言这张申请单的状态 + * + * @param result 外来器械器械包申请单 + */ + private void assertThisApplication(ForeignTousseApplication result) { + assertNotNull(result); + //断言申请单的状态 + assertEquals(result.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); + assertEquals(result.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + assertEquals(result.getPackageStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); + } + + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/constants/ForeignTousseConstant.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/constants/ForeignTousseConstant.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/constants/ForeignTousseConstant.java (revision 17726) @@ -0,0 +1,15 @@ +package test.forgon.disinfectsystem.constants; + +/** + * @author zhonghaowen + * @apiNote 外来器械的常量 + * @since 2017-04-07 + */ +public class ForeignTousseConstant { + + public static final String 测试外来器械包材料 = "测试外来器械包材料"; + + public static final String 鼻窥 = "鼻窥"; + + public static final String 测试外来器械包 = "测试外来器械包"; +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/ApplicationDataProvider.java =================================================================== diff -u -r17081 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/ApplicationDataProvider.java (.../ApplicationDataProvider.java) (revision 17081) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/ApplicationDataProvider.java (.../ApplicationDataProvider.java) (revision 17726) @@ -10,14 +10,10 @@ import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; -import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; -import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.tools.GB2Alpha; import com.forgon.tools.GB2WB; import com.forgon.tools.SpringBeanManger; -import com.forgon.tools.date.DateTools; -import org.springframework.context.ApplicationContext; import org.testng.Assert; import test.forgon.constant.Constants; @@ -47,10 +43,10 @@ RecyclingApplication application = new RecyclingApplication(); application.setSerialNumber("201504280001"); application.setApplicant("吴启华"); - application.setDepartCoding("3266"); + application.setDepartCoding(Constants.ORG_UNIT_CODE_WAIKE); + application.setSettleAccountsDepartCoding(Constants.ORG_UNIT_CODE_WAIKE); application.setRemark("测试备注"); application.setIncludeInvoiceItems(InvoicePlan.SIGNED_TRUE); - application.setSettleAccountsDepartCoding("3266"); application.setDepart("外六科护士站18B"); application.setApplicationTime(new Date()); application.setCommittedStatus(true); @@ -70,7 +66,8 @@ * @param amount 申请数量 * @return */ - public static TousseItem createInvoiceItem(RecyclingApplication application, TousseDefinition td, Integer amount) { + public static TousseItem createInvoiceItem(InvoicePlan application, TousseDefinition td, Integer amount) { + // public static TousseItem createInvoiceItem(RecyclingApplication application, TousseDefinition td, Integer amount) { TousseItem item = new TousseItem(); item.setTousseName(td.getName()); item.setAmount(amount); @@ -82,6 +79,7 @@ return item; } + /** * 初始化一些自定义的一次性物品 * @@ -146,34 +144,36 @@ String name = vo.getTousseName(); double price = 1.5; if (!"一次性物品".equals(tousseType)) { - TousseDefinition tousseDefinition1 = new TousseDefinition(); - tousseDefinition1.setName(name); - tousseDefinition1.setTaskGroup("术科组"); - tousseDefinition1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); - tousseDefinition1.setPrice(price); - tousseDefinition1.setSpelling("testkxb"); - tousseDefinition1.setWbCode("testgeq"); - tousseDefinition1.setExternalCode("1001GYT1AA"); - tousseDefinition1.setIntoBasketMaxAmount(5); + TousseDefinition tousseDefinition = new TousseDefinition(); + tousseDefinition.setName(name); + tousseDefinition.setTaskGroup("术科组"); + tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + tousseDefinition.setPrice(price); + tousseDefinition.setSpelling(GB2Alpha.string2Alpha(name)); + tousseDefinition.setWbCode(GB2WB.getWBCode(name)); + tousseDefinition.setExternalCode("1001GYT1AA"); + tousseDefinition.setIntoBasketMaxAmount(5); //是否整包清洗 - tousseDefinition1.setIsCleanedEntirely(TousseDefinition.STR_YES); + tousseDefinition.setIsCleanedEntirely(TousseDefinition.STR_YES); //是否追朔 - tousseDefinition1.setIsTraceable(TousseDefinition.STR_YES); - tousseDefinition1.setIsCustomPacking(TousseDefinition.STR_YES); - tousseDefinition1.setHandlerDepartCode(Constants.ORG_UNIT_CODE_CSSD); + tousseDefinition.setIsTraceable(TousseDefinition.STR_YES); + tousseDefinition.setIsCustomPacking(TousseDefinition.STR_YES); + tousseDefinition.setHandlerDepartCode(Constants.ORG_UNIT_CODE_CSSD); // 自动入筐的数量 - tousseDefinition1.setPackingAmountPerVirtualBasket(5); - MaterialDefinitionManager materialDefinitionManager = SpringBeanManger.getApplicationContext().getBean(MaterialDefinitionManager.class); + tousseDefinition.setPackingAmountPerVirtualBasket(5); + tousseDefinition.setPrice(10.0); + + MaterialDefinitionManager materialDefinitionManager = (MaterialDefinitionManager) SpringBeanManger.getBean("materialDefinitionManager"); Assert.assertNotNull(materialDefinitionManager); - MaterialDefinition materialDefinition1 = materialDefinitionManager.getMaterialDefinitionByName("Test镊子", ""); - MaterialInstance materialInstance1 = new MaterialInstance(); - materialInstance1.setTousse(tousseDefinition1); - materialInstance1.setMaterialDefinition(materialDefinition1); - materialInstance1.setCount(2); - materialInstance1.setMaterialName(materialDefinition1.getName()); - tousseDefinition1.setMaterialInstances(new ArrayList<>()); - tousseDefinition1.getMaterialInstances().add(materialInstance1); - tousseDefinitionList.add(tousseDefinition1); + MaterialDefinition materialDefinition = materialDefinitionManager.getMaterialDefinitionByName("Test镊子", ""); + MaterialInstance materialInstance = new MaterialInstance(); + materialInstance.setTousse(tousseDefinition); + materialInstance.setMaterialDefinition(materialDefinition); + materialInstance.setCount(2); + materialInstance.setMaterialName(materialDefinition.getName()); + tousseDefinition.setMaterialInstances(new ArrayList<>()); + tousseDefinition.getMaterialInstances().add(materialInstance); + tousseDefinitionList.add(tousseDefinition); } } return tousseDefinitionList; Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/BorrowAppDataProvider.java =================================================================== diff -u -r17530 -r17726 --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/BorrowAppDataProvider.java (.../BorrowAppDataProvider.java) (revision 17530) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/BorrowAppDataProvider.java (.../BorrowAppDataProvider.java) (revision 17726) @@ -4,8 +4,8 @@ import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import org.testng.annotations.DataProvider; +import test.forgon.disinfectsystem.constants.TousseDefinitionConstant; import test.forgon.disinfectsystem.dataProvider.UseRecord.UseRecordDataProvider; -import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; import java.util.HashMap; import java.util.Map; @@ -56,11 +56,11 @@ @DataProvider(name = "returnByApplicationProvider") public static Object[][] returnByApplicationProvider() { Map applyGoodMap1 = new HashMap<>(); - applyGoodMap1.put(TousseDefinitionDataProvider.Test开胸包, 1); + applyGoodMap1.put(TousseDefinitionConstant.Test开胸包, 1); Map applyGoodMap2 = new HashMap<>(); - applyGoodMap2.put(TousseDefinitionDataProvider.Test开胸包, 2); + applyGoodMap2.put(TousseDefinitionConstant.Test开胸包, 2); Map applyGoodMap3 = new HashMap<>(); - applyGoodMap3.put(TousseDefinitionDataProvider.Test开胸包, 3); + applyGoodMap3.put(TousseDefinitionConstant.Test开胸包, 3); //构造借物申请单和器械包申请单的相关物品 return new Object[][]{ {createApplicationByParam(InvoicePlan.TYPE_BORROWINGSINGLE), applyGoodMap1} Index: ssts-web/src/test/resources/test/forgon/disinfectsystem/application/AllTests.xml =================================================================== diff -u -r16829 -r17726 --- ssts-web/src/test/resources/test/forgon/disinfectsystem/application/AllTests.xml (.../AllTests.xml) (revision 16829) +++ ssts-web/src/test/resources/test/forgon/disinfectsystem/application/AllTests.xml (.../AllTests.xml) (revision 17726) @@ -5,6 +5,13 @@ + + + + + + + Index: ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/ForeignTousseAppDataProvider.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/ForeignTousseAppDataProvider.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/dataProvider/application/ForeignTousseAppDataProvider.java (revision 17726) @@ -0,0 +1,101 @@ +package test.forgon.disinfectsystem.dataProvider.application; + +import com.forgon.disinfectsystem.entity.basedatamanager.foreigntoussedefinition.ForeignTousseDefinition; +import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.testng.annotations.DataProvider; +import test.forgon.constant.Constants; +import test.forgon.disinfectsystem.constants.ForeignTousseConstant; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.MaterialDataProvider; + +import java.util.Date; + +/** + * @author zhonghaowen + * @apiNote 外来器械包数据驱动 + * @since 2017-04-06 + */ +public class ForeignTousseAppDataProvider extends ApplicationDataProvider { + + + /** + * 创建外来器械包申请单对象 + * + * @return {@link ForeignTousseApplication} + */ + public static ForeignTousseApplication createForeignTousseApplication() { + ForeignTousseApplication foreignTousseApplication = new ForeignTousseApplication(); + foreignTousseApplication.setType(InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION); + foreignTousseApplication.setSurgery("开颅术"); + foreignTousseApplication.setSettleAccountsDepartCoding(Constants.ORG_UNIT_CODE_OR); + foreignTousseApplication.setSettleAccountsDepart("消毒供应房"); + foreignTousseApplication.setSequence(57); + foreignTousseApplication.setReaders(";ORGUNIT_8063;"); + foreignTousseApplication.setPatient("阿斯达"); + foreignTousseApplication.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + // 保存外来器械申请单时,回收状态是待回收 + foreignTousseApplication.setRecyclingStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + foreignTousseApplication.setPackageStatus(ForeignTousseDefinition.PACKAGE_STATUS_RECEIVING); + foreignTousseApplication.setDoctor("阿斯达"); + foreignTousseApplication.setDepartCoding(Constants.ORG_UNIT_CODE_OR); + foreignTousseApplication.setDepart(Constants.ORG_UNIT_NAME_OR); + foreignTousseApplication.setCommittedStatus(true); + foreignTousseApplication.setClinicNumber("0100006"); + foreignTousseApplication.setApplicationTime(new Date()); + return foreignTousseApplication; + } + + + /** + * 创建外来器械的物品 + * + * @param name 外来器械的名字 + */ + public static JSONObject createForeignTousseItem(String name) { + JSONObject foreignItem = new JSONObject(); + foreignItem.put("tousseItemId", 0); + foreignItem.put("tousseDefinitionId", 0); + foreignItem.put("tousseName", name); + foreignItem.put("supplierName", "工商银行"); + //外来器械包只能申请一个 + foreignItem.put("amount", 1); + foreignItem.put("price", 0); + return foreignItem; + } + + + /** + * 创建外来器械申请的数据 + * + * @param foreignItems 外来器械的物品 + * @param materials 外来器械下的材料 + * @return 格式如下:
+ * [{tousseItemId:0,tousseDefinitionId:0,tousseName:"测试外来器械包",supplierName:"工商银行",amount:1,price:0,materials:[{materialInstanceId:0,materialName:"测试外来器械包材料",amount:5,includeImplant:"是",usedAmountOfIncludeImplant:0,minDismantleAmount:0}]}] + */ + public static JSONArray createForeignTousseTreeDatas(JSONObject foreignItems, JSONArray materials) { + JSONArray foreignTousseTreeDatas = new JSONArray(); + foreignItems.put("materials", materials); + foreignTousseTreeDatas.add(foreignItems); + return foreignTousseTreeDatas; + } + + + /** + * 构建外来器械申请单,物品如下: + * 测试外来器械包材料,数量5 + * 鼻窥,数量2 + * + * @return + */ + @DataProvider(name = "foreignTousseTreeDataProvider") + public static Object[][] foreignTousseTreeDataProvider() { + JSONObject material1 = MaterialDataProvider.createForeignMaterial(ForeignTousseConstant.测试外来器械包材料, 5); + JSONObject material2 = MaterialDataProvider.createForeignMaterial(ForeignTousseConstant.鼻窥, 2); + JSONArray materials = MaterialDataProvider.createMaterials(new JSONObject[]{material1, material2}); + JSONArray foreignTousseTreeDatas = createForeignTousseTreeDatas(createForeignTousseItem(ForeignTousseConstant.测试外来器械包), materials); + return new Object[][]{{foreignTousseTreeDatas}}; + } + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestCustomRecyclingApplication.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestCustomRecyclingApplication.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/application/TestCustomRecyclingApplication.java (revision 17726) @@ -0,0 +1,199 @@ +package test.forgon.disinfectsystem.application; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.testng.annotations.Test; +import test.forgon.disinfectsystem.AbstractCSSDTest; +import test.forgon.disinfectsystem.application.assertThat.RecyclingApplicationAssert; +import test.forgon.disinfectsystem.constants.CustomTousseConstant; +import test.forgon.disinfectsystem.dataProvider.application.ApplicationDataProvider; +import test.forgon.disinfectsystem.dataProvider.application.CustomTousseRecyclingApplicationProvider; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.MaterialDataProvider; +import test.forgon.disinfectsystem.dataProvider.tousseDefinition.TousseDefinitionDataProvider; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; + +/** + * @author zhonghaowen + * @apiNote 自定义器械包 + * @since 2017-04-07 + */ +public class TestCustomRecyclingApplication extends AbstractCSSDTest { + + /** + * 自定义器械包的名字 + */ + private final String customGoodName = "测试手术包"; + + private void prepareData() { + initCSSDData(); + makeActiveUser("oruser1"); + } + + /** + * 要更新物品的map(以名字-数量的形式) + */ + private final Map updateGoodsMap = Collections.unmodifiableMap(new LinkedHashMap() { + private static final long serialVersionUID = 7700657909268345459L; + + { + put(CustomTousseConstant.Test镊子, 1); + put(CustomTousseConstant.Test棉球, 2); + } + }); + + + /** + * 自定义器械包申请单测试,场景如下:
+ *

1.自定义器械包的名字为customGoodName

+ *

2.里面的材料有Test镊子x5,Test钳子x2

+ *

3.更新这张申请单下的材料(将Test镊子的数量修改成5,删除Test钳子,新增2个Test棉球)

+ *

4.删除这张申请单

+ * + * @param materials 这张申请单的材料(Test镊子x5,Test钳子x2) + */ + @Test(dataProvider = "customTousseTreeDataProvider", dataProviderClass = CustomTousseRecyclingApplicationProvider.class) + public void testApplyCustomRecyclingApplicationCRUD(JSONArray materials) { + this.prepareData(); + //创建自定义器械包申请单 + RecyclingApplication customRecyclingApplication = this.createCustomRecyclingApplication(this.customGoodName, materials); + Long appId = customRecyclingApplication.getId(); + assertNotNull(appId); + //构造这张申请单下的材料断言 + Map expectedMaterials = this.buildExpectedMaterials(materials); + RecyclingApplication result = this.assertCustomTousseGoodRecyclingApplication(this.getRecyclingApplicationById(appId), expectedMaterials); + //更新这张申请单下的材料(将Test镊子的数量修改成5,删除Test钳子,新增2个Test棉球) + JSONArray updateMaterials = this.buildUpdateMaterials(this.updateGoodsMap); + TousseDefinition tousseDefinition = objectDao.getHt().get(TousseDefinition.class, result.getApplicationItems().get(0).getTousseDefinitionId()); + tousseDefinitionManager.saveTousseDefinition(tousseDefinition, updateMaterials.toString(), null); + recyclingApplicationManager.saveOrUpdateRecyclingApplication(customRecyclingApplication, true); + expectedMaterials = this.buildExpectedMaterials(updateMaterials); + this.assertCustomTousseGoodRecyclingApplication(this.getRecyclingApplicationById(appId), expectedMaterials); + //删除该申请单 + recyclingApplicationManager.deleteRecyclingApplication(appId.toString()); + result = this.getRecyclingApplicationById(appId); + assertNull(result); + } + + /** + * 终止自定义器械包申请单 + */ + @Test(dataProvider = "customTousseTreeDataProvider", dataProviderClass = CustomTousseRecyclingApplicationProvider.class) + public void testCustomRecyclingApplicationTerminate(JSONArray materials) { + this.prepareData(); + //创建自定义器械包申请单 + RecyclingApplication customRecyclingApplication = this.createCustomRecyclingApplication(this.customGoodName, materials); + Long appId = customRecyclingApplication.getId(); + assertNotNull(appId); + invoicePlanManager.terminateInvoicePlan(customRecyclingApplication, "oruser1", "测试中断"); + //断言终止的结果 + RecyclingApplicationAssert.assertCancelTousseRecyclingApplicationResult(this.getRecyclingApplicationById(appId)); + } + + + /** + * 构造要更新的材料 + * + * @param materialMap 要更新材料map(名字-数量) + * @return 构造好的更新的材料map + */ + private JSONArray buildUpdateMaterials(Map materialMap) { + JSONArray updateMaterials = new JSONArray(); + for (Map.Entry entry : materialMap.entrySet()) { + JSONObject material = MaterialDataProvider.createCustomMaterial(entry.getKey(), entry.getValue()); + updateMaterials.add(material); + } + return updateMaterials; + } + + /** + * 构建要断言的材料物品-数量 + * + * @param materials 申请的物品格式 + */ + private Map buildExpectedMaterials(JSONArray materials) { + Map expectedMaterials = new HashMap<>(); + for (int i = 0, size = materials.size(); i < size; i++) { + JSONObject material = materials.optJSONObject(i); + expectedMaterials.put(material.optString("name"), material.getInt("count")); + } + return expectedMaterials; + } + + + /** + * 断言自定义器械包申请单 + * + * @param result 自定义器械包申请单 + * @param expectedMaterials 要断言的自定义器械包申请单下面的材料,格式如下:{名字-数量} + */ + private RecyclingApplication assertCustomTousseGoodRecyclingApplication(RecyclingApplication result, Map expectedMaterials) { + this.assertThisApplication(result); + // 断言申请的物品数量(自定义器械包只有一个) + RecyclingApplicationAssert.assertRecyclingApplicationAmount(result, 1); + TousseDefinition tousseDefinition = objectDao.getHt().get(TousseDefinition.class, result.getApplicationItems().get(0).getTousseDefinitionId()); + RecyclingApplicationAssert.assertRecyclingApplicationMaterials(tousseDefinition, expectedMaterials); + return result; + } + + + /** + * 断言这张申请单的状态 + * + * @param result 自定义器械包申请单 + */ + private void assertThisApplication(RecyclingApplication result) { + assertNotNull(result); + //断言申请单的状态 + assertEquals(result.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + assertEquals(result.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + } + + + /** + * 创建自定义器械包申请单 + * + * @return {@link RecyclingApplication} + */ + private RecyclingApplication createCustomRecyclingApplication(String customTousseName, JSONArray materials) { + RecyclingApplication customRecyclingApplication = ApplicationDataProvider.createApplicationByParam(InvoicePlan.TYPE_CUSTOM_TOUSSE_APPLIACTION_FORM); + TousseDefinition tousseDefinition = TousseDefinitionDataProvider.createCustomGood(customTousseName, false); + // String materialDefinitionConfigResult = "[{\"name\":\"Test镊子\",\"tousseType\":\"器械\",\"count\":6},{\"name\":\"Test钳子\",\"tousseType\":\"器械\",\"count\":4}]"; + tousseDefinitionManager.saveTousseDefinition(tousseDefinition, materials.toString(), null); + List items = this.createInvoiceItems(customRecyclingApplication, tousseDefinition, 2); + customRecyclingApplication.setApplicationItems(items); + recyclingApplicationManager.saveOrUpdateRecyclingApplication(customRecyclingApplication, true); + //新建一张器械包申请单 + return customRecyclingApplication; + } + + /** + * 创建自定义器械包申请单下的器械包(只有一个) + * + * @param recyclingApplication 对应的申请单 + * @param tousseDefinition 自定义的器械包 + * @param applyAmount 要申请的数量 + * @return 返回创建好的申请列表 + */ + private List createInvoiceItems(RecyclingApplication recyclingApplication, TousseDefinition tousseDefinition, int applyAmount) { + List items = new ArrayList<>(); + TousseItem tousseItem = ApplicationDataProvider.createInvoiceItem(recyclingApplication, tousseDefinition, applyAmount); + //这个setEditAmount要加上,不然saveOrUpdateRecyclingApplication的时候,tousseItem不会有数据 + tousseItem.setEditAmount(applyAmount); + items.add(tousseItem); + return items; + } +}