Index: ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java =================================================================== diff -u -r16729 -r16742 --- ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 16729) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 16742) @@ -46,6 +46,7 @@ import com.forgon.disinfectsystem.basedatamanager.goodsstock.service.GoodsStockManager; import com.forgon.disinfectsystem.basedatamanager.sterilizer.service.SterilizerManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; @@ -69,6 +70,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.recyclingerror.RecyclingError; @@ -1953,7 +1955,9 @@ tousseInstance1.setOperationTime(date); tousseInstanceManager.setToDefaultWareHouse(tousseInstance1, orgCode); tousseInstanceManager.saveOrUpdate(tousseInstance1); - + //入库到GoodStock表 + GoodsStock gs = TousseInstanceUtils.newGoodsStock(tousseInstance1); + goodsStockManager.saveOrUpdateGoodsStock(gs, GoodsStockManager.MODE_INSTOCK); //不对申请单类型为外部代理来菌单的器械包或器械包定义的类型为外部代理灭菌的器械包实例增加库存 if(!TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY.equals(tousseType) && TousseDefinition.STR_YES.equals(tousseDefinition1.getIsTraceable())){ tousseStockManager.increaseStockByTousseName(tousseInstance1.getTousseName()); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/TestPDATousseInvoiceManager.java =================================================================== diff -u -r16709 -r16742 --- ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/TestPDATousseInvoiceManager.java (.../TestPDATousseInvoiceManager.java) (revision 16709) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/TestPDATousseInvoiceManager.java (.../TestPDATousseInvoiceManager.java) (revision 16742) @@ -3,8 +3,10 @@ import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; +import org.apache.commons.collections4.CollectionUtils; import org.testng.annotations.Test; import net.sf.json.JSONArray; @@ -16,18 +18,25 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; import com.forgon.disinfectsystem.entity.assestmanagement.TousseStock; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.departmentstock.DepartmentStock; +import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.tools.db.DatabaseUtil; public class TestPDATousseInvoiceManager extends AbstractCSSDTest { private static final String testAll = "TESTALL"; private static final String testPart = "TESTPART"; private String [] barcodeArray1 = {"201410260001","201410260002","201410260003"};//普通器械包条码 + /** + * 测试的临床科室编码 + */ + private String clinicOrgUnitCode = "3266"; /** * 创普通的器械包申请单 @@ -36,19 +45,39 @@ private void createTousseApplication(){ Map appMap = new HashMap(); appMap.put("Test开胸包", 3); - createSimpleTousseOrDiposableGoodsApplicationByParam("2014021100001", InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, "外六科护士站18B", "3266", new Date(), appMap); + createSimpleTousseOrDiposableGoodsApplicationByParam("2014021100001", InvoicePlan.TYPE_TOUSSE_APPLICATION_FORM, "外六科护士站18B", clinicOrgUnitCode, new Date(), appMap); } private void prepareData(){ initCSSDData(); makeActiveUser("admin"); initBasicData(); + //仓库仓库 + createWareHouse(); //创建普通器械包申请单 createTousseApplication(); //生成器械包实例,增加库存 createTousseInstanceAndUpdateStock(); } - + private void createWareHouse(){ + //消毒供应室的仓库 + WareHouse whDisinfect = new WareHouse(); + whDisinfect.setOrgUnitCode(Constants.ORG_UNIT_CODE_DISINFECT); + whDisinfect.setOrgUnitName(Constants.ORG_UNIT_NAME_DISINFECT); + whDisinfect.setName(Constants.ORG_UNIT_NAME_DISINFECT + "仓库"); + //仓库临床科室的仓库 + WareHouse wh = new WareHouse(); + wh.setOrgUnitCode(clinicOrgUnitCode); + wh.setOrgUnitName("外六科护士站18B"); + wh.setName("外六科护士站18B仓库"); + try { + wareHouseManager.saveOrUpdateWareHouse(whDisinfect); + wareHouseManager.saveOrUpdateWareHouse(wh); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } private void createTousseInstanceAndUpdateStock(){ createSimpleTousseInstanceByParam(barcodeArray1, "Test开胸包", BarcodeDevice.BARCODE_TYPE_PACKAGE, Constants.ORG_UNIT_NAME_DISINFECT, Constants.ORG_UNIT_CODE_DISINFECT, 3.14); } @@ -59,7 +88,7 @@ //浮动价格 double tousseFluctionPrice = supplyRoomConfigManager.getTousseFluctuationPercent(); //发货前的器械包二级库存 - DepartmentStock departmentStock = departmentStockManager.getByDepartCodingAndTousseName("3266", "Test开胸包"); + DepartmentStock departmentStock = departmentStockManager.getByDepartCodingAndTousseName(clinicOrgUnitCode, "Test开胸包"); int departmentStockBeforeInvoice = 0; if(departmentStock != null){ departmentStockBeforeInvoice = departmentStock.getAmount(); @@ -81,7 +110,7 @@ TousseStock stock_afterInvoice = tousseStockManager.getTousseStockByTousseName("Test开胸包"); objectDao.getHibernateSession().refresh(stock_afterInvoice); //发货后的部门二级库存量 - DepartmentStock departmentStock2 = departmentStockManager.getByDepartCodingAndTousseName("3266", "Test开胸包"); + DepartmentStock departmentStock2 = departmentStockManager.getByDepartCodingAndTousseName(clinicOrgUnitCode, "Test开胸包"); //测试全部发货 if(type.equals(testAll)){ @@ -145,7 +174,7 @@ for(String barcode :barcodeArray1){ map.put(barcode, 1); } - map.put("departCode", "3266"); + map.put("departCode", clinicOrgUnitCode); String jsonStr = createSendOutParam(map); sendOutTousseAssertment(jsonStr, testAll); } @@ -158,7 +187,7 @@ prepareData(); //运行前对全局变量清空,以防止影响下一个用例的运行结果 - WareHouse wareHouse_CSSD = wareHouseManager.getDefaultWareHouseByUnitCode(Constants.ORG_UNIT_CODE_CSSD); + WareHouse wareHouse_CSSD = wareHouseManager.getDefaultWareHouseByUnitCode(Constants.ORG_UNIT_CODE_DISINFECT); assertNotNull(wareHouse_CSSD); JSONObject params = new JSONObject(); JSONArray invoiceItems1 = new JSONArray(); @@ -176,7 +205,7 @@ invoiceItems1.add(invoiceItems1_2); params.put("mode", "depart"); - params.put("departCode", "3266"); + params.put("departCode", clinicOrgUnitCode); params.put("assistantSender", "朱广兴"); params.put("sender", "朱广兴"); params.put("invoiceItems", invoiceItems1); @@ -186,7 +215,7 @@ //浮动价格 double tousseFluctionPrice = supplyRoomConfigManager.getTousseFluctuationPercent(); //发货前的器械包二级库存 - DepartmentStock departmentStock = departmentStockManager.getByDepartCodingAndTousseName("3266", "Test开胸包"); + DepartmentStock departmentStock = departmentStockManager.getByDepartCodingAndTousseName(clinicOrgUnitCode, "Test开胸包"); int departmentStockBeforeInvoice = 0; if(departmentStock != null){ departmentStockBeforeInvoice = departmentStock.getAmount(); @@ -208,7 +237,7 @@ TousseStock stock_afterInvoice = tousseStockManager.getTousseStockByTousseName("Test开胸包"); objectDao.getHibernateSession().refresh(stock_afterInvoice); //发货后的部门二级库存量 - DepartmentStock departmentStock2 = departmentStockManager.getByDepartCodingAndTousseName("3266", "Test开胸包"); + DepartmentStock departmentStock2 = departmentStockManager.getByDepartCodingAndTousseName(clinicOrgUnitCode, "Test开胸包"); //部分发货 @@ -236,5 +265,78 @@ } } - + /** + * 测试部分发货的库存 + */ + @Test + public void testSendOutPartlyGoodsStock(){ + prepareData(); + //运行前对全局变量清空,以防止影响下一个用例的运行结果 + WareHouse wareHouse_CSSD = wareHouseManager.getDefaultWareHouseByUnitCode(Constants.ORG_UNIT_CODE_DISINFECT); + WareHouse wareHouse_clinic = wareHouseManager.getDefaultWareHouseByUnitCode(clinicOrgUnitCode); + Long tdAcestorId = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包").getAncestorID(); + assertNotNull(wareHouse_CSSD); + assertNotNull(wareHouse_clinic); + assertTrue(DatabaseUtil.isPoIdValid(tdAcestorId)); + + JSONObject params = new JSONObject(); + JSONArray invoiceItems1 = new JSONArray(); + + JSONObject invoiceItems1_1 = new JSONObject(); + invoiceItems1_1.put("barcode", "201410260001"); + invoiceItems1_1.put("sendAmount", 1); + invoiceItems1_1.put("isRoutine", TousseInstance.ROUTINE_YES); + invoiceItems1.add(invoiceItems1_1); + + JSONObject invoiceItems1_2 = new JSONObject(); + invoiceItems1_2.put("barcode", "201410260002"); + invoiceItems1_2.put("sendAmount", 1); + invoiceItems1_2.put("isRoutine", TousseInstance.ROUTINE_YES); + invoiceItems1.add(invoiceItems1_2); + + params.put("mode", "depart"); + params.put("departCode", "3266"); + params.put("assistantSender", "朱广兴"); + params.put("sender", "朱广兴"); + params.put("invoiceItems", invoiceItems1); + params.put("sourceWarehouseId", wareHouse_CSSD.getId()); + params.put("sourceWarehouseName", wareHouse_CSSD.getName()); + + List cssdGoodsStockBefore = goodsStockManager.getTousseStock(wareHouse_CSSD.getId(), tdAcestorId); + //断言是有库存的 + assertNotNull(cssdGoodsStockBefore); + //测试只有一条库存记录 + assertEquals(cssdGoodsStockBefore.size(), 1); + int cssdGoodsAmoutBefore = cssdGoodsStockBefore.get(0).getAmount(); + //断言库存数量为3 + assertEquals(cssdGoodsAmoutBefore, 3); + + List goodsStock3266Before = goodsStockManager.getTousseStock(wareHouse_clinic.getId(), tdAcestorId); + //断言没有库存的。这里得看之前的数据准备。如果这个仓库下没有入过库,肯定是没有库存的。但是如果有库存,则应该是对应的库存数量 + assertTrue(CollectionUtils.isEmpty(goodsStock3266Before)); + + webServiceManager.submitInvoicePlans(params.toString()); + + //发货后的库存量 + List cssdGoodsStockAfter = goodsStockManager.getTousseStock(wareHouse_CSSD.getId(), tdAcestorId); + //断言是有库存的 + assertNotNull(cssdGoodsStockAfter); + //测试只有一条库存记录 + assertEquals(cssdGoodsStockAfter.size(), 1); + + //发货后的库存量 + List goodsStock3266After = goodsStockManager.getTousseStock(wareHouse_clinic.getId(), tdAcestorId); + //断言是有库存的 + assertNotNull(goodsStock3266After); + //测试只有一条库存记录 + assertEquals(goodsStock3266After.size(), 1); + + //供应室的库存数量减少2个,临床科室增加2个 + assertEquals(cssdGoodsStockAfter.get(0).getAmount()-cssdGoodsAmoutBefore, -2); + //供应室库存数量为1个 + assertEquals(cssdGoodsStockAfter.get(0).getAmount().intValue(), 1); + //这里需要根据先前的库存数量进行断言.因为之前数量为0,现在库存数量为2 + assertEquals(goodsStock3266After.get(0).getAmount().intValue(), 2); + + } }