Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r17336 -r17339 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 17336) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 17339) @@ -23,9 +23,9 @@ import com.beust.jcommander.ParameterException; import com.forgon.disinfectsystem.entity.invoicemanager.enums.BorrowConfirmStatus; - import com.forgon.tools.date.DateTools; import com.forgon.tools.util.ForgonDateUtils; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; @@ -88,6 +88,7 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; +import com.forgon.disinfectsystem.tousseitem.service.TousseItemUtils; import com.forgon.disinfectsystem.vo.ApplicationItemVO; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.log.model.Log; @@ -1236,6 +1237,21 @@ needInvoice = false; } } + if(needInvoice){ + if(application != null){ + List applicationItems = application.getApplicationItems(); + List needInvoiceApplicationItems = new ArrayList(); + for (TousseItem tousseItem : applicationItems) { + if(TousseItemUtils.IsInvoice(tousseItem)){ + needInvoiceApplicationItems.add(tousseItem); + } + } + if(needInvoiceApplicationItems.isEmpty()){ + needInvoice = false; + } + } + } + return needInvoice; } @@ -2750,8 +2766,8 @@ boolean needInvoice = isNeedInvoiceForRecyclingApplication(application); if(needInvoice){ -// application.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); - invoicePlanManager.computeAndSetInvoiceStatus(application); + application.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); +// invoicePlanManager.computeAndSetInvoiceStatus(application); }else{ application.setDeliverStatus(""); } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java =================================================================== diff -u -r17188 -r17339 --- ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17188) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/AbstractCSSDTest.java (.../AbstractCSSDTest.java) (revision 17339) @@ -646,6 +646,22 @@ tousseDefinition4.getMaterialInstances().add(materialInstance2); tousseDefinitionManager.saveOrUpdate(tousseDefinition4); + // 不回收的包 + { + TousseDefinition tousseDefinition = new TousseDefinition(); + tousseDefinition.setName("不回收的包"); + tousseDefinition.setIsCleanedEntirely("是"); + tousseDefinition.setTaskGroup("灭菌组"); + tousseDefinition.setIsRecycling(TousseDefinition.STR_NO); + tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + tousseDefinition.setHandlerDepartName(Constants.ORG_UNIT_NAME_DISINFECT); + tousseDefinition.setHandlerDepartCode(Constants.ORG_UNIT_CODE_DISINFECT); + + tousseDefinition.getMaterialInstances().add(materialInstance1); + tousseDefinition.getMaterialInstances().add(materialInstance2); + tousseDefinitionManager.saveOrUpdate(tousseDefinition); + } + } /** Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r17333 -r17339 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 17333) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 17339) @@ -1493,6 +1493,34 @@ return (sendOutAmount >= waitDeliverAmount); } }; + // 不回收的物品,不包括已终止的,包括一次性物品和敷料包 + Collection nonRecyclingTousseItems = CollectionUtils + .select(invoicePlan.getApplicationItems(), + new Predicate() { + @Override + public boolean evaluate(TousseItem tousseItem) { + if(tousseItem.isDisposableGoods() || tousseItem.isDressing()){ + return true; + } + if(!TousseItemUtils.IsInvoice(tousseItem)){ + return false; + } + if(TousseItemUtils.isRecycling(tousseItem)){ + return false; + } + if(BooleanUtils.isTrue(tousseItem.getIsTerminated())){ + return false; + } + + int sendOutAmount = (tousseItem.getSendOutAmount() != null ? tousseItem.getSendOutAmount() : 0); + int waitDeliverAmount = CssdUtils.getWaitDeliverAmountForApply( + tousseItem, invoiceOrigin, isBorrowTousse, objectDao); + if(sendOutAmount >= waitDeliverAmount){ + return false; + } + return true; + } + }); if(!InvoicePlan.TYPE_APPLYING_FOR_RETURN_FORM.equals(invoicePlan.getType())){ if(notTerminateTousseItems.isEmpty()){ @@ -1537,6 +1565,9 @@ } } + if(nonRecyclingTousseItems.isEmpty()){ + invoicePlan.setIncludeInvoiceItems(0); + } /*计算发货状态*/ } /** Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemUtils.java =================================================================== diff -u -r17029 -r17339 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemUtils.java (.../TousseItemUtils.java) (revision 17029) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/tousseitem/service/TousseItemUtils.java (.../TousseItemUtils.java) (revision 17339) @@ -21,4 +21,12 @@ } return true; } + + public static boolean isRecycling(TousseItem tousseItem) { + if (StringUtils.equals(TousseDefinition.STR_YES, + tousseItem.getIsRecycling())) { + return true; + } + return false; + } } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/InvoicePlanManagerTest.java =================================================================== diff -u -r16709 -r17339 --- ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/InvoicePlanManagerTest.java (.../InvoicePlanManagerTest.java) (revision 16709) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/invoicemanager/service/InvoicePlanManagerTest.java (.../InvoicePlanManagerTest.java) (revision 17339) @@ -4,6 +4,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import net.sf.json.JSONArray; @@ -18,6 +19,7 @@ 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.vo.ApplicationGoodsVo; import test.forgon.constant.Constants; import test.forgon.disinfectsystem.AbstractCSSDTest; @@ -410,4 +412,368 @@ assertEquals(0, item3.getSendOutAmount().intValue()); } + /** + * 发货来源是回收单、不回收可以发货 + * 三张同一科室的申请单 + * 申请单号 申请时间 回收状态 发货状态 + * 01 2015-4-28 09:00 待回收 待发货 + * 02 2015-4-28 13:00 已回收 待发货 + * 03 2015-4-28 17:00 已回收 待发货 + * + * 验证是否01单号是否能发货 + */ + @Test + public void test4(){ + prepareData(); + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + config.setAfterRecyclingTousseDeliver(true); + supplyRoomConfigManager.saveOrUpdate(config); + + + { + WareHouse wareHouse_CSSD = wareHouseManager.getDefaultWareHouseByUnitCode(Constants.ORG_UNIT_CODE_CSSD); + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + RecyclingApplication application1 = new RecyclingApplication(); + application1.setSerialNumber("201504280001"); + application1.setApplicant("吴启华"); + application1.setDepartCoding("3266"); + application1.setIncludeInvoiceItems(InvoicePlan.SIGNED_TRUE); + application1.setSettleAccountsDepartCoding("3266"); + application1.setDepart("外六科护士站18B"); + String applicationTime1 = "2015-04-28 09:00"; + try { + application1.setApplicationTime(new SimpleDateFormat( + "yyyy-MM-dd HH:mm").parse(applicationTime1)); + } catch (ParseException e) { + } + application1.setIncludeInvoiceItems(1); + application1.setCommittedStatus(true); + application1.setRecyclingStatus("待回收"); + application1.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + application1.setType(InvoicePlan.TYPE_COMBO_FORM); + application1.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); + application1.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); + List itemList1 = new ArrayList(); + TousseItem item1 = new TousseItem(); + item1.setTousseName("Test开胸包"); + item1.setAmount(2); + item1.setRecyclingAmount(null); + item1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item1.setDiposable("否"); + item1.setInvoicePlan(application1); + item1.setTousseDefinitionId(td.getId()); + itemList1.add(item1); + + TousseItem item2 = new TousseItem(); + item2.setTousseName("不回收的包"); + item2.setAmount(2); + item2.setRecyclingAmount(null); + item2.setIsRecycling(TousseDefinition.STR_NO); + item2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item2.setDiposable("否"); + item2.setInvoicePlan(application1); + item2.setTousseDefinitionId(td.getId()); + itemList1.add(item2); + + application1.setApplicationItems(itemList1); + objectDao.saveOrUpdate(application1); + + + Collection list = invoiceManager + .getWaitDeliverGoods("3266", null, null); + + assertNotNull(list); + assertTrue(list.size() > 0); + } + } + /** + * 测试计算不回收物品项的逻辑 + */ + @Test + public void test_computeAndSetInvoiceStatus_1(){ + prepareData(); + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + config.setAfterRecyclingTousseDeliver(true); + supplyRoomConfigManager.saveOrUpdate(config); + + + { + // 1个物品需要回收,1个不需要回收, + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + RecyclingApplication application1 = new RecyclingApplication(); + application1.setSerialNumber("201504280001"); + application1.setApplicant("吴启华"); + application1.setDepartCoding("3266"); + application1.setIncludeInvoiceItems(InvoicePlan.SIGNED_TRUE); + application1.setSettleAccountsDepartCoding("3266"); + application1.setDepart("外六科护士站18B"); + String applicationTime1 = "2015-04-28 09:00"; + try { + application1.setApplicationTime(new SimpleDateFormat( + "yyyy-MM-dd HH:mm").parse(applicationTime1)); + } catch (ParseException e) { + } + application1.setIncludeInvoiceItems(1); + application1.setCommittedStatus(true); + application1.setRecyclingStatus("待回收"); + application1.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + application1.setType(InvoicePlan.TYPE_COMBO_FORM); + application1.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); + application1.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); + List itemList1 = new ArrayList(); + TousseItem item1 = new TousseItem(); + item1.setTousseName("Test开胸包"); + item1.setAmount(2); + item1.setRecyclingAmount(null); + item1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item1.setDiposable("否"); + item1.setInvoicePlan(application1); + item1.setTousseDefinitionId(td.getId()); + itemList1.add(item1); + + TousseItem item2 = new TousseItem(); + item2.setTousseName("不回收的包"); + item2.setAmount(2); + item2.setRecyclingAmount(null); + item2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item2.setDiposable("否"); + item2.setIsRecycling(TousseDefinition.STR_NO); + item2.setInvoicePlan(application1); + item2.setTousseDefinitionId(td.getId()); + itemList1.add(item2); + + application1.setApplicationItems(itemList1); +// objectDao.saveOrUpdate(application1); + + + invoicePlanManager.computeAndSetInvoiceStatus(application1); + + assertEquals(application1.getIncludeInvoiceItems().intValue(), 1); + } + //////////////////////////////////////////// + { + // 1个物品需要回收,1个不需要回收(已终止), + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + RecyclingApplication application1 = new RecyclingApplication(); + application1.setSerialNumber("201504280001"); + application1.setApplicant("吴启华"); + application1.setDepartCoding("3266"); + application1.setIncludeInvoiceItems(InvoicePlan.SIGNED_TRUE); + application1.setSettleAccountsDepartCoding("3266"); + application1.setDepart("外六科护士站18B"); + String applicationTime1 = "2015-04-28 09:00"; + try { + application1.setApplicationTime(new SimpleDateFormat( + "yyyy-MM-dd HH:mm").parse(applicationTime1)); + } catch (ParseException e) { + } + application1.setIncludeInvoiceItems(1); + application1.setCommittedStatus(true); + application1.setRecyclingStatus("待回收"); + application1.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + application1.setType(InvoicePlan.TYPE_COMBO_FORM); + application1.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); + application1.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); + List itemList1 = new ArrayList(); + TousseItem item1 = new TousseItem(); + item1.setTousseName("Test开胸包"); + item1.setAmount(2); + item1.setRecyclingAmount(null); + item1.setIsRecycling(TousseDefinition.STR_YES); + item1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item1.setDiposable("否"); + item1.setInvoicePlan(application1); + item1.setTousseDefinitionId(td.getId()); + itemList1.add(item1); + + TousseItem item2 = new TousseItem(); + item2.setTousseName("不回收的包"); + item2.setAmount(2); + item2.setRecyclingAmount(null); + item2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item2.setDiposable("否"); + item2.setIsTerminated(true); + item2.setIsRecycling(TousseDefinition.STR_NO); + item2.setInvoicePlan(application1); + item2.setTousseDefinitionId(td.getId()); + itemList1.add(item2); + + application1.setApplicationItems(itemList1); +// objectDao.saveOrUpdate(application1); + + + invoicePlanManager.computeAndSetInvoiceStatus(application1); + + assertEquals(application1.getIncludeInvoiceItems().intValue(), 0); + } + { + // 1个物品需要回收,1个不需要回收(已发货) + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + RecyclingApplication application1 = new RecyclingApplication(); + application1.setSerialNumber("201504280001"); + application1.setApplicant("吴启华"); + application1.setDepartCoding("3266"); + application1.setIncludeInvoiceItems(InvoicePlan.SIGNED_TRUE); + application1.setSettleAccountsDepartCoding("3266"); + application1.setDepart("外六科护士站18B"); + String applicationTime1 = "2015-04-28 09:00"; + try { + application1.setApplicationTime(new SimpleDateFormat( + "yyyy-MM-dd HH:mm").parse(applicationTime1)); + } catch (ParseException e) { + } + application1.setIncludeInvoiceItems(1); + application1.setCommittedStatus(true); + application1.setRecyclingStatus("待回收"); + application1.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + application1.setType(InvoicePlan.TYPE_COMBO_FORM); + application1.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); + application1.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); + List itemList1 = new ArrayList(); + TousseItem item1 = new TousseItem(); + item1.setTousseName("Test开胸包"); + item1.setAmount(2); + item1.setRecyclingAmount(null); + item1.setIsRecycling(TousseDefinition.STR_YES); + item1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item1.setDiposable("否"); + item1.setInvoicePlan(application1); + item1.setTousseDefinitionId(td.getId()); + itemList1.add(item1); + + TousseItem item2 = new TousseItem(); + item2.setTousseName("不回收的包"); + item2.setAmount(2); + item2.setRecyclingAmount(null); + item2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item2.setDiposable("否"); + item2.setSendOutAmount(2); + item2.setIsRecycling(TousseDefinition.STR_NO); + item2.setInvoicePlan(application1); + item2.setTousseDefinitionId(td.getId()); + itemList1.add(item2); + + application1.setApplicationItems(itemList1); +// objectDao.saveOrUpdate(application1); + + + invoicePlanManager.computeAndSetInvoiceStatus(application1); + + assertEquals(application1.getIncludeInvoiceItems().intValue(), 0); + } + + { + // 1个物品需要回收,1个不需要回收(部分发货) + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + RecyclingApplication application1 = new RecyclingApplication(); + application1.setSerialNumber("201504280001"); + application1.setApplicant("吴启华"); + application1.setDepartCoding("3266"); + application1.setIncludeInvoiceItems(InvoicePlan.SIGNED_TRUE); + application1.setSettleAccountsDepartCoding("3266"); + application1.setDepart("外六科护士站18B"); + String applicationTime1 = "2015-04-28 09:00"; + try { + application1.setApplicationTime(new SimpleDateFormat( + "yyyy-MM-dd HH:mm").parse(applicationTime1)); + } catch (ParseException e) { + } + application1.setIncludeInvoiceItems(1); + application1.setCommittedStatus(true); + application1.setRecyclingStatus("待回收"); + application1.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + application1.setType(InvoicePlan.TYPE_COMBO_FORM); + application1.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); + application1.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); + List itemList1 = new ArrayList(); + TousseItem item1 = new TousseItem(); + item1.setTousseName("Test开胸包"); + item1.setAmount(2); + item1.setRecyclingAmount(null); + item1.setIsRecycling(TousseDefinition.STR_YES); + item1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item1.setDiposable("否"); + item1.setInvoicePlan(application1); + item1.setTousseDefinitionId(td.getId()); + itemList1.add(item1); + + TousseItem item2 = new TousseItem(); + item2.setTousseName("不回收的包"); + item2.setAmount(2); + item2.setRecyclingAmount(null); + item2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item2.setDiposable("否"); + item2.setSendOutAmount(1); + item2.setIsRecycling(TousseDefinition.STR_NO); + item2.setInvoicePlan(application1); + item2.setTousseDefinitionId(td.getId()); + itemList1.add(item2); + + application1.setApplicationItems(itemList1); +// objectDao.saveOrUpdate(application1); + + + invoicePlanManager.computeAndSetInvoiceStatus(application1); + + assertEquals(application1.getIncludeInvoiceItems().intValue(), 1); + } + + { + // 1个物品需要回收,1个不需要回收(不需要发货) + TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + RecyclingApplication application1 = new RecyclingApplication(); + application1.setSerialNumber("201504280001"); + application1.setApplicant("吴启华"); + application1.setDepartCoding("3266"); + application1.setIncludeInvoiceItems(InvoicePlan.SIGNED_TRUE); + application1.setSettleAccountsDepartCoding("3266"); + application1.setDepart("外六科护士站18B"); + String applicationTime1 = "2015-04-28 09:00"; + try { + application1.setApplicationTime(new SimpleDateFormat( + "yyyy-MM-dd HH:mm").parse(applicationTime1)); + } catch (ParseException e) { + } + application1.setIncludeInvoiceItems(1); + application1.setCommittedStatus(true); + application1.setRecyclingStatus("待回收"); + application1.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + application1.setType(InvoicePlan.TYPE_COMBO_FORM); + application1.setHandleDepart(Constants.ORG_UNIT_NAME_CSSD); + application1.setHandleDepartCoding(Constants.ORG_UNIT_CODE_CSSD); + List itemList1 = new ArrayList(); + TousseItem item1 = new TousseItem(); + item1.setTousseName("Test开胸包"); + item1.setAmount(2); + item1.setRecyclingAmount(null); + item1.setIsRecycling(TousseDefinition.STR_YES); + item1.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item1.setDiposable("否"); + item1.setInvoicePlan(application1); + item1.setTousseDefinitionId(td.getId()); + itemList1.add(item1); + + TousseItem item2 = new TousseItem(); + item2.setTousseName("不回收的包"); + item2.setAmount(2); + item2.setRecyclingAmount(null); + item2.setTousseType(TousseDefinition.PACKAGE_TYPE_INSIDE); + item2.setDiposable("否"); + item2.setIsInvoice(TousseDefinition.STR_NO); + item2.setIsRecycling(TousseDefinition.STR_NO); + item2.setInvoicePlan(application1); + item2.setTousseDefinitionId(td.getId()); + itemList1.add(item2); + + application1.setApplicationItems(itemList1); +// objectDao.saveOrUpdate(application1); + + + invoicePlanManager.computeAndSetInvoiceStatus(application1); + + assertEquals(application1.getIncludeInvoiceItems().intValue(), 0); + } + + } + }