Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/TousseIntoBasketRestrictionsTests.java =================================================================== diff -u -r17325 -r18093 --- ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/TousseIntoBasketRestrictionsTests.java (.../TousseIntoBasketRestrictionsTests.java) (revision 17325) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/TousseIntoBasketRestrictionsTests.java (.../TousseIntoBasketRestrictionsTests.java) (revision 18093) @@ -111,20 +111,20 @@ /** * Test开颅包 非整包清洗 材料如下: - * Test钳子 最大入筐数量 60 篮筐组序号 1 包内数量 3 + * Test钳子 最大入筐数量 80 篮筐组序号 1 包内数量 3 * Test棉球 最大入筐数量 60 篮筐组序号 1 包内数量 4 * Test胆道探条 最大入筐数量 20 篮筐组序号 2 包内数量 2 * Test静脉拉钩 最大入筐数量 无 篮筐组序号 2 包内数量 5 * * W2-001-01 019000001 * W2-001-02 019000002 * - * + * 注:以下计算都是4位精度 */ @Test public void testMaterialIntoBasket(){ prepareData(); - //当前发的物品占篮筐体积 1号篮筐 0.35 2号篮筐 0.3 + //当前发的物品占篮筐体积 1号篮筐 0.3125[(3*3)/80 + (4*3)/60] 2号篮筐 0.3[(2*3)/20] TousseDefinition td_Test开颅包 = tousseDefinitionManager.getTousseDefinitionByName("Test开颅包"); String params = "[{barcode:'019000001',scanedGoods:[]},{barcode:'019000002',scanedGoods:[]}]"; JSONObject result = recyclingRecordManager.recycleTousseIntoBasket(""+td_Test开颅包.getId(),3,"",params); @@ -133,21 +133,28 @@ assertEquals(3, obj.optInt("amount")); setDBClassifyBasket(); - //再次入筐后体积 1号篮筐 1.2834 2号篮筐 1.1 所以物品只能入筐5个;入五个后:1号篮筐体积:0.9333,2号筐:0.8 + // 能入筐的包实例数量的计算: + // 1号篮筐:1-0.3125=0.6875 入一个包需要占用1号篮筐体积:(1/80)*3 + (1/60)*4 = 0.1042 所以最多入0.6871/0.1042=6个(这里取整) + // 2号篮筐:1-0.3000=0.7000 入一个包需要占用2号篮筐体积(1/20)*2=0.1000 所以最多入0.7000/0.1000 = 7个 + // 综上,最多可以再入6个[取小的那一个] + // 入6个后 + //1号篮筐: 0.3125 + (3*6)/80 + (4*6)/60 = 0.9375 + //2号筐 :0.3 + (2*6)/20 = 0.9 String params2 = "[{barcode:'019000001',scanedGoods:[]},{barcode:'019000002',scanedGoods:[]}]"; JSONObject result2 = recyclingRecordManager.recycleTousseIntoBasket(""+td_Test开颅包.getId(),8,"",params2); assertNotNull(result2); boolean success = result2.optBoolean("success"); assertEquals(false, success); + //入筐6个器械包的材料 updateClassifyBasket(); - //在往1号筐里丢一个 小于 1-0.9334 体积的包 + //在往1号筐里丢一个 小于 1-0.9381 体积的包 TousseDefinition td = new TousseDefinition(); td.setName("腰椎穿刺包"); td.setIsCleanedEntirely("是"); td.setIntoBasketMaxAmount(60); objectDao.saveOrUpdate(td); - //0.0667 + // (1-0.9375) / (1/60) = 3.7425[只能取3个] String params3 = "[{barcode:'019000001',scanedGoods:[]}]"; JSONObject result3 = recyclingRecordManager.recycleTousseIntoBasket(""+td.getId(),4,"",params3); assertNotNull(result3); @@ -160,26 +167,26 @@ ClassifyBasket basket = beCleanItemManager.getUnWashedBasketByBarcode("019000001"); ClassifyBasket basket2 = beCleanItemManager.getUnWashedBasketByBarcode("019000002"); ClassifiedItem item = new ClassifiedItem(); - item.setAmount(15); + item.setAmount(18); MaterialDefinition md = materialDefinitionManager.getMaterialDefinitionByName("Test钳子", null); item.setMaterialDefinition(md); item.setIsRestrictAmountGoods(true); item.setClassifyBasket(basket); ClassifiedItem item2 = new ClassifiedItem(); - item2.setAmount(20); + item2.setAmount(24); MaterialDefinition md2 = materialDefinitionManager.getMaterialDefinitionByName("Test棉球", null); item2.setMaterialDefinition(md2); item2.setIsRestrictAmountGoods(true); item2.setClassifyBasket(basket); ClassifiedItem item3 = new ClassifiedItem(); - item3.setAmount(10); + item3.setAmount(12); MaterialDefinition md3 = materialDefinitionManager.getMaterialDefinitionByName("Test胆道探条", null); item3.setMaterialDefinition(md3); item3.setIsRestrictAmountGoods(true); item3.setClassifyBasket(basket2); ClassifiedItem item4 = new ClassifiedItem(); - item4.setAmount(25); + item4.setAmount(30); MaterialDefinition md4 = materialDefinitionManager.getMaterialDefinitionByName("Test静脉拉钩 ", null); item4.setMaterialDefinition(md4); item4.setIsRestrictAmountGoods(false);