Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoiceItem.java =================================================================== diff -u -r15734 -r15735 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoiceItem.java (.../InvoiceItem.java) (revision 15734) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoiceItem.java (.../InvoiceItem.java) (revision 15735) @@ -19,15 +19,17 @@ import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.idpredicate.IDAble; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ForgonIntegerUtils; /** * @author WangYi 2012-3-5 */ @Entity @Table(name = "InvoiceItem") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) -public class InvoiceItem { +public class InvoiceItem implements IDAble { public static final String TYPE_APPLICATION = "科室申领"; public static final String TYPE_AUTO_DEDUCTION = "自动扣减"; @@ -337,5 +339,22 @@ public void setTransferScale(Integer transferScale) { this.transferScale = transferScale; } - + /** + * 判断是否是一次性物品,是一次性物品返回true,否则 返回false + * @return + */ + public boolean disposable(){ + return StringTools.equals(DIPOSABLE_YES, diposable); + } + /** + * 检查是否使用中包装的单位及数量。如果是一次性物品,并且中包装单位非空和中包装数量不为null + * @return + */ + public boolean middlePackageValide(){ + if(disposable() && StringTools.isNotBlank(middlePackageUnit) + && ForgonIntegerUtils.isPositive(middlePackageAmount)){ + return true; + } + return false; + } } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r15734 -r15735 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 15734) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 15735) @@ -91,6 +91,7 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.idpredicate.IDPredicate; import com.forgon.disinfectsystem.inventorymanagement.dao.WriteBackInventoryDao; import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper; import com.forgon.disinfectsystem.invoice.service.SubmitInvoiceContext; @@ -6634,6 +6635,68 @@ return getDisinfectGoodsPrintData(list,loadInvoiceTousseInstance(toussesql),null); } /** + * 在集合中根据发货项id查找发货项 + * @param invoiceItems 发货项集合 + * @param invoiceItemId 发货项id + * @return + */ + private InvoiceItem find(Collection invoiceItems,Long invoiceItemId){ + if(CollectionUtils.isEmpty(invoiceItems) || !DatabaseUtil.isPoIdValid(invoiceItemId)){ + return null; + } + List list = invoiceItems.stream().filter(new IDPredicate(invoiceItemId)) + .collect(Collectors.toList()); + if(CollectionUtils.isNotEmpty(list)){ + return list.get(0); + } + return null; + } + /** + * 获取显示的数量,如果发货项中包装单位及数量有效,返回中包装数量 + * @param invoiceItem + * @param disposableGoodsItem + * @return + */ + private Integer getDisplayAmout(InvoiceItem invoiceItem,DiposableGoodsItem disposableGoodsItem){ + if(disposableGoodsItem == null){ + return 0; + } + if(invoiceItem != null && invoiceItem.middlePackageValide()){ + return disposableGoodsItem.getAmount()/invoiceItem.getTransferScale(); + } + return disposableGoodsItem.getAmount(); + } + /** + * 获取显示的单价。如果中包装单位及数量有效,则为乘以转换系数后的价格 + * @param invoiceItem + * @param DisposableGoodsItem + * @return + */ + private Double getDisplayPrice(InvoiceItem invoiceItem,DiposableGoodsItem DisposableGoodsItem){ + if(DisposableGoodsItem == null){ + return 0.0; + } + if(invoiceItem != null && invoiceItem.middlePackageValide()){ + return MathTools.mul(DisposableGoodsItem.getFluctuationPrice(), invoiceItem.getTransferScale()).doubleValue(); + } + return DisposableGoodsItem.getFluctuationPrice(); + } + /** + * 获取显示的单位。如果发货项中包装单位及数量有效,则使用中包装单位,否则为最小单位 + * @param invoiceItem + * @param disposableGoodsStock + * @return + */ + private String getDisplayUnit(InvoiceItem invoiceItem,DisposableGoodsStock disposableGoodsStock){ + if(disposableGoodsStock == null){ + return ""; + } + if(invoiceItem != null && invoiceItem.middlePackageValide()){ + return invoiceItem.getMiddlePackageUnit(); + } + return disposableGoodsStock.getUnit(); + } + /** * 获取一次性物品发货单打印数据 * * @param departCoding @@ -6649,6 +6712,8 @@ .getDiposableGoodsItems(); Long sourceWarehouseId = invoice.getSourceWarehouseId(); for (DiposableGoodsItem goodsItem : diposableGoodsList) { + InvoiceItem invoiceItem = find(invoice.getInvoiceItem(),goodsItem.getInvoiceItemID()); + String batchNumber = goodsItem.getBatch();// 批次 String specification = "";// 规格 String goodsName = goodsItem.getName(); @@ -6681,7 +6746,7 @@ if (vo.getBatchNumber().equals(batchNumber) && vo.getDiposableGoodsPrice() .toString() - .equals(goodsItem.getFluctuationPrice().toString()) + .equals(getDisplayPrice(invoiceItem,goodsItem).toString()) && vo.getSpecification().equals(specification)) { tempVo = vo; break; @@ -6690,19 +6755,19 @@ if (tempVo != null) { tempVo.setDiposableGoodsAmount(tempVo .getDiposableGoodsAmount() - + goodsItem.getAmount()); + + getDisplayAmout(invoiceItem, goodsItem)); tempVo.setAmount(tempVo.getDiposableGoodsAmount()); tempVo.setDiposableGoodsTotalPrice(tempVo .getDiposableGoodsTotalPrice() + totalPrice); } else { tempVo = new InvoicePrintVo(); tempVo.setName(goodsName); - tempVo.setDiposableGoodsAmount(goodsItem.getAmount()); - tempVo.setAmount(goodsItem.getAmount()); + tempVo.setDiposableGoodsAmount(getDisplayAmout(invoiceItem, goodsItem)); + tempVo.setAmount(getDisplayAmout(invoiceItem, goodsItem)); tempVo.setDiposableGoodsName(goodsName); - tempVo.setDiposableGoodsPrice(goodsItem.getFluctuationPrice()); + tempVo.setDiposableGoodsPrice(getDisplayPrice(invoiceItem,goodsItem)); tempVo.setDiposableGoodsTotalPrice(totalPrice); - tempVo.setPrice(goodsItem.getFluctuationPrice()); + tempVo.setPrice(getDisplayPrice(invoiceItem,goodsItem)); tempVo.setTotalPrice(totalPrice); tempVo.setBatchNumber(goodsItem.getBatch()); @@ -6715,7 +6780,7 @@ DisposableGoodsStock disposableGoodsStock = disposableGoodsBatchStock.getDiposableGoods(); if(disposableGoodsStock != null){ tempVo.setExternalCode(disposableGoodsStock.getExternalCode()); - tempVo.setUnit(disposableGoodsStock.getUnit()); + tempVo.setUnit(getDisplayUnit(invoiceItem,disposableGoodsStock)); }else{ tempVo.setExternalCode(""); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/idpredicate/IDPredicate.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/idpredicate/IDPredicate.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/idpredicate/IDPredicate.java (revision 15735) @@ -0,0 +1,26 @@ +package com.forgon.disinfectsystem.idpredicate; + +import java.util.function.Predicate; + +import com.forgon.tools.db.DatabaseUtil; + +/** + * 根据id查找对象 + * @author kzh + * + */ +public class IDPredicate implements Predicate { + private Long id; + public IDPredicate(Long idToFind){ + id = idToFind; + } + @Override + public boolean test(T t) { + if(DatabaseUtil.isPoIdValid(id)){ + if(id.equals(t.getId())){ + return true; + } + } + return false; + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/idpredicate/IDAble.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/idpredicate/IDAble.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/idpredicate/IDAble.java (revision 15735) @@ -0,0 +1,10 @@ +package com.forgon.disinfectsystem.idpredicate; + +/** + * 有id的对象。实体类都可以 + * @author kzh + * + */ +public interface IDAble { + public Long getId(); +}