Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java =================================================================== diff -u -r37964 -r37999 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java (.../InvoiceItemManagerImpl.java) (revision 37964) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceItemManagerImpl.java (.../InvoiceItemManagerImpl.java) (revision 37999) @@ -58,22 +58,38 @@ 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 disposableInvoiceIdList = new ArrayList(); + List batches = disposableGoodsBatchManager.getCollection(batchIds); + //InvoiceItem关联的DisposableGoodsBatch + Map> invoiceItemBatcheMap = getInvoiceItemDisposableGoodsBatchMap(idList); for(InvoiceItem ii : invoiceItems){ InvoiceItemSummaryVo find = null; Long goodsId = null; + String batchNumber = null; + DisposableGoodsBatch batch = null; if(ii.disposable()){ - //发货单上的一次性物品需要另外统计DiposableGoodsItem表 - disposableInvoiceIdList.add(ii.getInvoiceID()); - disposableGoodsInvoiceItemMap.put(ii.getId(), ii); - continue; + goodsId = ii.getDisposableGoodsBatchId(); + batch = IDOperators.find(batches, goodsId); + if(batch != null){ + batchNumber = batch.getBatchNumber(); + }else{ + List batchList = invoiceItemBatcheMap.get(ii.getId()); + if(CollectionUtils.isNotEmpty(batchList)){ + //发货物品记录有多个批次的一次性物品,汇总计算时,合并多个批次的物品进行统计,字段“批次”不需要显示批次条码,显示为空即可 + if(batchList.size() == 1){ + batch = batchList.get(0); + batchNumber = batch.getBatchNumber(); + } + } + } + find = InvoiceItemSummaryVo.find(vos, batch); }else{ if(DatabaseUtil.isPoIdValid(ii.getTousseDefinitionId())){ TousseDefinition td = IDOperators.find(tds, ii.getTousseDefinitionId()); @@ -95,58 +111,24 @@ } if(find == null){ find = new InvoiceItemSummaryVo(); - find.setBatchNumber(null); + find.setBatchNumber(batchNumber); 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()); - } + if(DisposableGoodsUtils.isMiddlePackageUnitEnabled(find.getTransferScale())){ + find.setMiddlePackageUnitAmount(MathTools.add(find.getMiddlePackageUnitAmount(), ii.getMiddlePackageAmount()).intValue()); } } } @@ -155,14 +137,52 @@ 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); - } + //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; } + /** + * 查询一次性物品发货单的一次性物品批次 + * @param disposableInvoiceIdColl + * @return + */ + @SuppressWarnings("unchecked") + private Map> getInvoiceItemDisposableGoodsBatchMap(Collection disposableInvoiceIdColl) { + Map> batchMap = new HashMap>(); + if(CollectionUtils.isEmpty(disposableInvoiceIdColl)){ + return batchMap; + } + List disposableInvoiceIdList = new ArrayList(); + disposableInvoiceIdList.addAll(disposableInvoiceIdColl); + List diposableGoodsItemList = objectDao.getCollection(DiposableGoodsItem.class.getSimpleName(), "invoice.id", disposableInvoiceIdList); + if(CollectionUtils.isEmpty(diposableGoodsItemList)){ + return batchMap; + } + 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); + if(batch == null){ + continue; + } + List batchList = batchMap.get(dgi.getInvoiceItemID()); + if(batchList == null){ + batchList = new ArrayList(); + } + if(IDOperators.find(batchList, batch.getId()) == null){ + batchList.add(batch); + batchMap.put(dgi.getInvoiceItemID(), batchList); + } + } + return batchMap; + } + } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoiceItemSummaryVo.java =================================================================== diff -u -r37962 -r37999 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoiceItemSummaryVo.java (.../InvoiceItemSummaryVo.java) (revision 37962) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/vo/InvoiceItemSummaryVo.java (.../InvoiceItemSummaryVo.java) (revision 37999) @@ -8,8 +8,8 @@ import org.apache.commons.lang3.StringUtils; import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; 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; @@ -195,21 +195,20 @@ /** * 在集合中按一次性物品批次id及类型查找对象 * @param items - * @param dgi - * @param tousseAncestorId + * @param batch * @return */ - public static InvoiceItemSummaryVo find(List items, DiposableGoodsItem dgi) { + public static InvoiceItemSummaryVo find(List items, DisposableGoodsBatch batch) { return CollectionUtils.find(items, new Predicate(){ @Override public boolean evaluate(InvoiceItemSummaryVo object) { - if(object == null && dgi == null){ + if(object == null && batch == null){ return true; } - if(object == null || dgi == null){ + if(object == null || batch == null){ return false; } - return MathTools.valueEquals(object.goodsId, dgi.getDisposableGoodsBatchID()) + return MathTools.valueEquals(object.goodsId, batch.getId()) && StringUtils.equals(object.disposable, Constants.STR_YES); }});