Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r31329 -r31333 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 31329) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 31333) @@ -60,6 +60,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.TousseItemVo; import com.forgon.exception.SystemException; import com.forgon.log.model.Log; @@ -1708,21 +1709,50 @@ // 部分发货的申请单,还没发货的物品全部被拆分到新申请单时,发货状态为待发货; if(StringUtils.equals(ForeignTousseApplication.DELIVERSTATUS_PARTDELIVERED, splitApplication.getDeliverStatus())){ - int deliverAmount = 0; - List applicationItems = splitApplication.getApplicationItems(); - for (TousseItem tousseItem : applicationItems) { - if(tousseItem.getSendOutAmount() != null && tousseItem.getSendOutAmount().intValue() > 0){ - deliverAmount++; + + List tousseInstanceList = tousseInstanceManager + .getToussInstanceByForeignTousseApplicationIdForInvoice(splitApplication.getId()); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + boolean partDelivered = false; + for (TousseItem item : splitApplication.getApplicationItems()) { + if(item.terminated()){// 对终止状态的处理 + continue; + } + if(!TousseItemUtils.IsInvoice(item)){ + continue; + } + Integer sendOutAmount = item.getSendOutAmount(); + if(sendOutAmount != null && sendOutAmount == 1){// 不管已发货的 + continue; + } + int invoiceAmount = 0; + int waitingInvoiceAmount = 0; + for (TousseInstance tousseInstance : tousseInstanceList) { + if(!TousseItemUtils.IsForeignTousseItemMatchTousseInstance(item, tousseInstance)){ + continue; + } + if(tousseInstance.hasShipped()){ + ++invoiceAmount; + }else{ + ++waitingInvoiceAmount; + } + + } + if(invoiceAmount > 0){ + if(waitingInvoiceAmount > 0){ + partDelivered = true; + } + } } + if(partDelivered){ + splitApplication.setDeliverStatus(InvoicePlan.DELIVERSTATUS_PARTDELIVERED); + splitApplication.setOrderByFiled(InvoicePlan.DELIVER_PARTDELIVERED); + }else{ + splitApplication.setDeliverStatus(ForeignTousseApplication.DELIVERSTATUS_AWAITDELIVER); + } + }else{ + splitApplication.setDeliverStatus(ForeignTousseApplication.DELIVERSTATUS_AWAITDELIVER); } - if(deliverAmount == 0){ - deliverStatus = ForeignTousseApplication.DELIVERSTATUS_AWAITDELIVER; - }else if(deliverAmount == applicationItems.size()){ - deliverStatus = ForeignTousseApplication.DELIVERSTATUS_DELIVERED; - }else if(deliverAmount < applicationItems.size()){ - deliverStatus = ForeignTousseApplication.DELIVERSTATUS_PARTDELIVERED; - } - splitApplication.setDeliverStatus(deliverStatus); } // 计算加急数量和加急等级 Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r31331 -r31333 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 31331) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 31333) @@ -8131,6 +8131,10 @@ amountMap.put(tousseItemVo.getTousseDefinitionId(), tousseItemVo.getAmount()); } String sql = " where po.invoicePlanID = " + oldPlan.getId() + " and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tousseDefinitionIdList); + if(StringUtils.equals(oldPlan.getType(), InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION)){ + sql = " where po.foreignTousseApp_id = " + oldPlan.getId() + " and (" + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tousseDefinitionIdList) + + " or " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.parentID", tousseDefinitionIdList) + ")"; + } List tousseList = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql); if(CollectionUtils.isEmpty(tousseList)){ return; @@ -8139,14 +8143,21 @@ for (TousseInstance tousseInstance : tousseList) { TousseDefinition td = tousseInstance.getTousseDefinition(); Integer amount = amountMap.get(td.getId()); + if(amount == null){ + amount = amountMap.get(td.getParentID()); + } if(amount.intValue() > 0){ tousseInstance.setDepart(newPlan.getDepart()); tousseInstance.setDepartCoding(newPlan.getDepartCoding()); tousseInstance.setSettleAccountsDepartCode(newPlan.getSettleAccountsDepartCoding()); tousseInstance.setInvoicePlanID(newPlan.getId()); tousseInstance.setInvoicePlanSerialNum(newPlan.getSerialNumber()); tousseInstance.setRecyclingRecordId(newRecyclingRecord.getId()); - tousseInstance.setRecyclingItemId(itemMap.get(td.getId()).getId()); + RecyclingItem recyclingItem = itemMap.get(td.getId()); + if(recyclingItem == null){ + recyclingItem = itemMap.get(td.getParentID()); + } + tousseInstance.setRecyclingItemId(recyclingItem.getId()); if(DatabaseUtil.isPoIdValid(tousseInstance.getForeignTousseApp_id())){ tousseInstance.setForeignTousseApp_id(newPlan.getId()); }