Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r40348 -r40352 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 40348) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 40352) @@ -940,6 +940,11 @@ tousseItem = new TousseItem(); //外来器械包初始回收状态为“待接收”; tousseItem.setPackageStatus(TousseItem.PACKAGE_STATUS_AWAITRECEIVE); + //关联翻包申请的申请项 + Long usedAgainTousseItemId = obj.optLong("usedAgainTousseItemId"); + if(DatabaseUtil.isPoIdValid(usedAgainTousseItemId)){ + tousseItem.setUsedAgainTousseItemId(usedAgainTousseItemId); + } } if(obj.optInt("amount") <= 0){ throw new RuntimeException("外来器械数量错误!"); @@ -4269,17 +4274,32 @@ if(!DatabaseUtil.isPoIdValid(usedAgainForeignTousseApplicationId)){ throw new SystemException("进行翻包申请的申请单id无效!"); } + //翻包申请的申请项 + JSONArray foreignTousseTreeDataArray = JSONArray.fromObject(foreignTousseTreeData); + if(foreignTousseTreeDataArray == null || foreignTousseTreeDataArray.size() == 0){ + throw new SystemException("申请单申请物品不能为空!"); + } + for(int i=0; i applicationItems = usedAgainForeignTousseApplication.getApplicationItems(); if(CollectionUtils.isEmpty(applicationItems)){ throw new SystemException("进行翻包申请的申请单申请物品不能为空!"); } + //启用外来器械包发货后可直接二次回收的功能 + boolean enableSecondRecyclingAfterInvoiceFunction = ConfigUtils.getSystemSetConfigByNameBool("enableSecondRecyclingAfterInvoiceFunction"); //申请了多套外来器械包,无法进行再次翻包申请 - if(applicationItems.size() > 1){ + /*if(applicationItems.size() > 1){ throw new SystemException(String.format("操作失败,外来器械申请单(%s)中申请了多套外来器械包,无法进行再次翻包申请。", usedAgainForeignTousseApplication.getSerialNumber())); + }*/ + //外来器械单的“回收状态”为“待回收”、“已接收”、“部分接收”,才能够进行翻包申请 + List recyclingStatusList = new ArrayList(); + recyclingStatusList.add(InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE); + recyclingStatusList.add(InvoicePlan.RECYCLINGSTATUS_PARTRECYCLE); + recyclingStatusList.add(InvoicePlan.RECYCLINGSTATUS_PARTAWAITRECEIVE); + if(enableSecondRecyclingAfterInvoiceFunction){ + recyclingStatusList.add(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVED); } - //外来器械单的“回收状态”为“待回收”、“已接收”,才能够进行翻包申请 - if(!StringUtils.equals(usedAgainForeignTousseApplication.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVED) - && !StringUtils.equals(usedAgainForeignTousseApplication.getRecyclingStatus(), InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE)){ + if(!recyclingStatusList.contains(usedAgainForeignTousseApplication.getRecyclingStatus())){ throw new SystemException("外来器械申请单的“回收状态”为“" + usedAgainForeignTousseApplication.getRecyclingStatus() + "”,无法进行再次翻包申请操作。"); } //发货后就可以进行再次翻包的操作 - if(!StringUtils.equals(usedAgainForeignTousseApplication.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_DELIVERED)){ + if(!StringUtils.equals(usedAgainForeignTousseApplication.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_DELIVERED) + && !StringUtils.equals(usedAgainForeignTousseApplication.getDeliverStatus(), InvoicePlan.DELIVERSTATUS_PARTDELIVERED)){ throw new SystemException("外来器械申请单的“发货状态”为“" + usedAgainForeignTousseApplication.getDeliverStatus() + "”,不能进行再次翻包申请。"); } - List tousseInstanceList = usedAgainForeignTousseApplication.getTousseInstanceList(objectDao); - if(CollectionUtils.isEmpty(tousseInstanceList)){ - throw new SystemException("进行翻包申请的申请单器械包实例不能为空!"); + //申请项的包状态 + Map tousseItemIdPackageStatusMap = invoicePlanManager.buildTousseItemForeignTousseIdPackageStatusMap(applicationItems); + + if(foreignTousseTreeDataArray == null || foreignTousseTreeDataArray.size() == 0){ + throw new SystemException("申请单申请物品不能为空!"); } - //已经装配的材料数量 - Map tousseDefinitionIdPackedMaterialAmountMap = new HashMap(); - Map> tousseInstanceMap = new HashMap>(); - for (TousseInstance tousseInstance : tousseInstanceList) { - TousseDefinition td = tousseInstance.getTousseDefinition(); - Long tousseDefinitionId = td.getId(); - if(td.isSplit()){ - tousseDefinitionId = td.getParentID(); - } - List tempTousseInstanceList = tousseInstanceMap.get(tousseDefinitionId); - if(tempTousseInstanceList == null){ - tempTousseInstanceList = new ArrayList(); - } - tempTousseInstanceList.add(tousseInstance); - tousseInstanceMap.put(tousseDefinitionId, tempTousseInstanceList); - Integer materialAmount = td.getMaterialAmount(); - if(materialAmount == null){ - materialAmount = 0; - } - Integer packedMaterialAmount = tousseDefinitionIdPackedMaterialAmountMap.get(tousseDefinitionId); - if(packedMaterialAmount == null){ - packedMaterialAmount = 0; - } - packedMaterialAmount += materialAmount; - tousseDefinitionIdPackedMaterialAmountMap.put(tousseDefinitionId, packedMaterialAmount); + //允许翻包申请的包状态:待二次回收、已发货、已签收、已使用 + List useAgainPackageStatusList = new ArrayList(); + useAgainPackageStatusList.add(TousseItem.PACKAGE_STATUS_AWAIT_SECOND_RECEIVE); + if(enableSecondRecyclingAfterInvoiceFunction){ + useAgainPackageStatusList.add(TousseInstance.STATUS_SHIPPED); + useAgainPackageStatusList.add(TousseInstance.STATUS_SIGNED); + useAgainPackageStatusList.add(TousseInstance.STATUS_USED); } - JSONArray jsonArray = JSONArray.fromObject(foreignTousseTreeData); - if(jsonArray == null || jsonArray.size() == 0){ - throw new SystemException("申请单申请物品不能为空!"); - } - for(int i=0; i tempTousseInstanceList = tousseInstanceMap.get(usedAgainTousseItem.getTousseDefinitionId()); - if(CollectionUtils.isEmpty(tempTousseInstanceList)){ - throw new SystemException("进行翻包申请的申请单器械包实例不能为空!"); + + Collection packageStatusColl = StringTools.toCollectionIgnoreNullAndBlank(packageStatus, ";"); + for (String splitPackageStatus : packageStatusColl) { + if(!useAgainPackageStatusList.contains(splitPackageStatus)){ + throw new SystemException(usedAgainTousseItem.getTousseName() + "的包状态为“" + packageStatus + "”,不能进行再次翻包申请。"); } - for (TousseInstance ti : tempTousseInstanceList) { - if(!ti.isShipped() && !ti.isSigned()){ - throw new SystemException(ti.getTousseName() + "的状态为“" + ti.getStatus() + "”,不能进行再次翻包申请。"); - } - } } - //拆分回收,而且只装配了其中一个篮筐的物品时,装配状态为“部分装配”,不能进行再次翻包申请。 - Integer packedMaterialAmount = tousseDefinitionIdPackedMaterialAmountMap.get(usedAgainTousseItem.getTousseDefinitionId()); - if(packedMaterialAmount == null){ - packedMaterialAmount = 0; - } - Integer totalMaterialAmount = usedAgainTousseItem.getMaterialAmount(); - if(totalMaterialAmount == null){ - totalMaterialAmount = 0; - } - if(totalMaterialAmount.intValue() > packedMaterialAmount.intValue()){ - throw new SystemException(usedAgainTousseItem.getTousseName() + "的装配状态为“部分装配”,不能进行再次翻包申请。"); - } } } @@ -4423,10 +4417,11 @@ * 2、修改申请单回收状态; * 3、外来器械包“是否翻包申请”修改为“是”; * 4、增加备注:通过再次翻包申请转换为了外来器械单(新的申请单流水号); - * @param usedAgainForeignTousseApplication - * @param foreignTousseApplication + * @param usedAgainForeignTousseApplication 进行翻包申请的外来器械申请 + * @param foreignTousseApplication 翻包申请后产生的新申请单 + * @param foreignTousseTreeDataArray 进行翻包申请的物品 */ - private void updateForeignTousseApplicationUsedAgainInfo(ForeignTousseApplication usedAgainForeignTousseApplication, ForeignTousseApplication foreignTousseApplication) { + private void updateForeignTousseApplicationUsedAgainInfo(ForeignTousseApplication usedAgainForeignTousseApplication, ForeignTousseApplication foreignTousseApplication, JSONArray foreignTousseTreeDataArray) { if(usedAgainForeignTousseApplication == null || foreignTousseApplication == null){ throw new SystemException("外来器械包申请单不能为空!"); @@ -4441,9 +4436,26 @@ throw new SystemException("翻包申请的申请单申请物品不能为空!"); } + //翻包申请的申请项id + List useAgainTousseItemIdList = new ArrayList(); + if(foreignTousseTreeDataArray == null || foreignTousseTreeDataArray.size() == 0){ + throw new SystemException("申请单申请物品不能为空!"); + } + for(int i=0; i recycledPredOfAmount = new Predicate() { @@ -4568,7 +4585,7 @@ } } else { // 其他情况为部分接收 - recyclingStatus = InvoicePlan.RECYCLINGSTATUS_PARTRECYCLE; + recyclingStatus = InvoicePlan.RECYCLINGSTATUS_PARTAWAITRECEIVE; } application.setRecyclingStatus(recyclingStatus); }