Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java =================================================================== diff -u -r38009 -r38010 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java (.../InvoiceItemManagerImpl.java) (revision 38009) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java (.../InvoiceItemManagerImpl.java) (revision 38010) @@ -4,8 +4,10 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.stream.Collectors; @@ -70,8 +72,6 @@ //InvoiceItem关联的DisposableGoodsBatch Map> invoiceItemBatcheMap = getInvoiceItemDisposableGoodsBatchMap(idList); Map invoiceItemDisposableGoodsMap = getInvoiceItemDisposableGoods(invoiceItems); - //同一个发货单明细包含多个批次时,按照一次性物品定义汇总显示 - boolean mergeByDisposableGoods = false; for(InvoiceItem ii : invoiceItems){ InvoiceItemSummaryVo find = null; Long goodsId = null; @@ -95,13 +95,12 @@ } } } - if(batch != null && !mergeByDisposableGoods){ + if(batch != null){ //按照批次合并 find = InvoiceItemSummaryVo.find(vos, batch); }else{ //按照一次性物品定义合并 find = InvoiceItemSummaryVo.find(vos, diposableGoods); - mergeByDisposableGoods = true; if(find != null){ //不显示批次号 find.setBatchNumber(null); @@ -158,6 +157,8 @@ } } int index = 1; + + vos = mergeInvoiceItemSummaryVo(vos); for(InvoiceItemSummaryVo vo : vos){ vo.setIndex(index++); // 设置申领单位数量 @@ -172,6 +173,47 @@ } /** + * 合并显示 + * @param vos + * @return + */ + private List mergeInvoiceItemSummaryVo(List vos) { + List mergeVos = new ArrayList(); + boolean merge = false; + Map> voMap = new LinkedHashMap>(); + for (InvoiceItemSummaryVo vo : vos) { + if(DatabaseUtil.isPoIdValid(vo.getDisposableGoodsId())){ + List list = voMap.get(vo.getDisposableGoodsId()); + if(list == null){ + list = new ArrayList(); + } + list.add(vo); + voMap.put(vo.getDisposableGoodsId(), list); + if(!DatabaseUtil.isPoIdValid(vo.getGoodsId())){ + merge = true; + } + } + } + if(!merge){ + return vos; + } + + for (Entry> entry : voMap.entrySet()) { + List values = entry.getValue(); + InvoiceItemSummaryVo vo = values.get(0); + for(int i=1;i