Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/Invoice.java =================================================================== diff -u -r30615 -r30636 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/Invoice.java (.../Invoice.java) (revision 30615) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/Invoice.java (.../Invoice.java) (revision 30636) @@ -2,8 +2,10 @@ import java.text.SimpleDateFormat; import java.util.Date; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import javax.persistence.Column; @@ -640,6 +642,35 @@ returnAmount = dao.countBySql(sql); printedCount += returnAmount; + + // 多次退货重发后,器械包实例已经关联到新的发货单,和原来的发货单已经没有关联了 + if(printedCount < totalAmount){ + String tousseInstanceHql = String.format("select po from %s where ti.invoice_id = %s or ti.invoice2_id = %s", + TousseInstance.class.getSimpleName(), id, id); + @SuppressWarnings("unchecked") + List tousseInstanceList = dao.findByHql(tousseInstanceHql); + Map tousseAmountMap = new HashMap(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + for (TousseInstance tousseInstance : tousseInstanceList) { + Integer amount = tousseAmountMap.get(tousseInstance.getTousseDefinition().getId()); + if(amount == null){ + amount = 0; + } + tousseAmountMap.put(tousseInstance.getTousseDefinition().getId(), ++amount); + } + } + for(InvoiceItem item : getInvoiceItem()){ + if(!item.printed() && !item.disposable()){ + Long tousseDefinitionId = item.getTousseDefinitionId(); + int amount = item.getAmount() == null ? 0 : item.getAmount().intValue(); + if(!tousseAmountMap.containsKey(tousseDefinitionId)){ + printedCount += amount; + }else if(tousseAmountMap.get(tousseDefinitionId).intValue() != amount){ + printedCount += (amount - tousseAmountMap.get(tousseDefinitionId).intValue()); + } + } + } + } } if(printedCount == 0){