Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoiceItemSummaryVo.java =================================================================== diff -u -r23427 -r37962 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoiceItemSummaryVo.java (.../InvoiceItemSummaryVo.java) (revision 23427) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoiceItemSummaryVo.java (.../InvoiceItemSummaryVo.java) (revision 37962) @@ -1,13 +1,15 @@ package com.forgon.disinfectsystem.invoicemanager.vo; import java.util.Collection; +import java.util.List; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.StringUtils; import com.forgon.Constants; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; +import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; @@ -189,4 +191,27 @@ }}); } + + /** + * 在集合中按一次性物品批次id及类型查找对象 + * @param items + * @param dgi + * @param tousseAncestorId + * @return + */ + public static InvoiceItemSummaryVo find(List items, DiposableGoodsItem dgi) { + return CollectionUtils.find(items, new Predicate(){ + @Override + public boolean evaluate(InvoiceItemSummaryVo object) { + if(object == null && dgi == null){ + return true; + } + if(object == null || dgi == null){ + return false; + } + return MathTools.valueEquals(object.goodsId, dgi.getDisposableGoodsBatchID()) + && StringUtils.equals(object.disposable, Constants.STR_YES); + + }}); + } } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java =================================================================== diff -u -r22859 -r37962 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java (.../InvoiceItemManagerImpl.java) (revision 22859) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java (.../InvoiceItemManagerImpl.java) (revision 37962) @@ -3,7 +3,9 @@ import java.math.RoundingMode; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -19,6 +21,7 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceItem; import com.forgon.disinfectsystem.idpredicate.IDOperators; import com.forgon.disinfectsystem.invoicemanager.vo.InvoiceItemSummaryVo; @@ -55,27 +58,22 @@ public List summaryInvoiceItem(String invoiceIds) { Collection idList = StringTools.parseToLongs(invoiceIds, Constants.IDS_SEPARATOR); List vos = new ArrayList<>(); + Map disposableGoodsInvoiceItemMap = new HashMap(); if(CollectionUtils.isNotEmpty(idList)){ List invoiceItems = getCollection("invoiceID", idList); if(CollectionUtils.isNotEmpty(invoiceItems)){ Set tdIds = invoiceItems.stream().filter(p->p.getTousseDefinitionId() != null).map( p->p.getTousseDefinitionId()).collect(Collectors.toSet()); - Set batchIds = invoiceItems.stream().filter(p->p.getDisposableGoodsBatchId() != null).map( - p->p.getDisposableGoodsBatchId()).collect(Collectors.toSet()); List tds = tousseDefinitionManager.getCollection(tdIds); - List batches = disposableGoodsBatchManager.getCollection(batchIds); + List disposableInvoiceIdList = new ArrayList(); for(InvoiceItem ii : invoiceItems){ InvoiceItemSummaryVo find = null; Long goodsId = null; - String batchNumber = null; - DisposableGoodsBatch batch = null; if(ii.disposable()){ - find = InvoiceItemSummaryVo.find(vos, ii,null); - goodsId = ii.getDisposableGoodsBatchId(); - batch = IDOperators.find(batches, goodsId); - if(batch != null){ - batchNumber = batch.getBatchNumber(); - } + //发货单上的一次性物品需要另外统计DiposableGoodsItem表 + disposableInvoiceIdList.add(ii.getInvoiceID()); + disposableGoodsInvoiceItemMap.put(ii.getId(), ii); + continue; }else{ if(DatabaseUtil.isPoIdValid(ii.getTousseDefinitionId())){ TousseDefinition td = IDOperators.find(tds, ii.getTousseDefinitionId()); @@ -97,35 +95,65 @@ } if(find == null){ find = new InvoiceItemSummaryVo(); - find.setBatchNumber(batchNumber); + find.setBatchNumber(null); find.setDisplayName(ii.getTousseName()); find.setDisposable(ii.getDiposable()); find.setGoodsId(goodsId); find.setTousseType(ii.getTousseType()); - if(batch != null){ - DisposableGoods diposableGoods = batch.getDiposableGoods(); - if(diposableGoods != null){ - find.setUnit(diposableGoods.getUnit()); - find.setMiddlePackageUnit(diposableGoods.getMiddlePackageUnit()); - find.setTransferScale(diposableGoods.getTransferScale()); - } - } vos.add(find); } find.setAmount(MathTools.add(find.getAmount(), ii.getAmount()).intValue()); } + + //一次性物品汇总 + if(CollectionUtils.isNotEmpty(disposableInvoiceIdList)){ + @SuppressWarnings("unchecked") + List diposableGoodsItemList = objectDao.getCollection(DiposableGoodsItem.class.getSimpleName(), "invoice.id", disposableInvoiceIdList); + if(CollectionUtils.isNotEmpty(diposableGoodsItemList)){ + Set batchIds = diposableGoodsItemList.stream().filter(p->p.getDisposableGoodsBatchID() != null).map( + p->p.getDisposableGoodsBatchID()).collect(Collectors.toSet()); + List batches = disposableGoodsBatchManager.getCollection(batchIds); + for (DiposableGoodsItem dgi : diposableGoodsItemList) { + Long goodsId = dgi.getDisposableGoodsBatchID(); + DisposableGoodsBatch batch = IDOperators.find(batches, goodsId); + DisposableGoods diposableGoods = null; + if(batch != null){ + diposableGoods = batch.getDiposableGoods(); + } + InvoiceItem invoiceItem = disposableGoodsInvoiceItemMap.get(dgi.getInvoiceItemID()); + Integer amount = dgi.getAmount(); + Integer transferScale = null; + if(invoiceItem != null){ + transferScale = invoiceItem.getTransferScale(); + } + Integer middlePackageUnitAmount = DisposableGoodsUtils.amountToAppAmountNotThrowException(transferScale, amount , RoundingMode.UP); + InvoiceItemSummaryVo find = InvoiceItemSummaryVo.find(vos, dgi); + if(find == null){ + find = new InvoiceItemSummaryVo(); + find.setBatchNumber(batch == null ? null : batch.getBatchNumber()); + find.setDisplayName(dgi.getName()); + find.setDisposable(Constants.STR_YES); + find.setGoodsId(goodsId); + find.setTousseType(DisposableGoods.TYPE_NAME); + if(diposableGoods != null){ + find.setUnit(diposableGoods.getUnit()); + } + if(invoiceItem != null){ + find.setMiddlePackageUnit(invoiceItem.getMiddlePackageUnit()); + find.setTransferScale(invoiceItem.getTransferScale()); + } + vos.add(find); + } + find.setAmount(MathTools.add(find.getAmount(), amount).intValue()); + find.setMiddlePackageUnitAmount(MathTools.add(find.getMiddlePackageUnitAmount(), middlePackageUnitAmount).intValue()); + } + } + } } } int index = 1; for(InvoiceItemSummaryVo vo : vos){ vo.setIndex(index++); - // 设置申领单位数量 - Integer transferScale = vo.getTransferScale(); - if(DisposableGoodsUtils.isMiddlePackageUnitEnabled(transferScale)){ - Integer amount = vo.getAmount(); - Integer appAmount = DisposableGoodsUtils.amountToAppAmountNotThrowException(transferScale, amount, RoundingMode.UP); - vo.setMiddlePackageUnitAmount(appAmount); - } } return vos; }