From d80d3b0fc4e12eea292935ceaacbeb2ea2d85191 Mon Sep 17 00:00:00 2001 From: jishenghua <752718920@qq.com> Date: Thu, 7 Nov 2024 18:09:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=A7=BB=E5=8A=A8=E5=B9=B3?= =?UTF-8?q?=E5=9D=87=E4=BB=B7=E9=81=87=E5=88=B0=E8=B4=9F=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/depotItem/DepotItemService.java | 72 ++++++++++--------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java index a7b4e5194..bc9cf7f82 100644 --- a/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java +++ b/jshERP-boot/src/main/java/com/jsh/erp/service/depotItem/DepotItemService.java @@ -1077,43 +1077,49 @@ public class DepotItemService { BigDecimal currentAllPrice = BigDecimal.ZERO; for(DepotItemVo4DetailByTypeAndMId item: itemList) { BigDecimal basicNumber = item.getBnum()!=null?item.getBnum():BigDecimal.ZERO; - //入库 - if(BusinessConstants.DEPOTHEAD_TYPE_IN.equals(item.getType())) { - //零售退货、销售退货 - if(BusinessConstants.SUB_TYPE_RETAIL_RETURN.equals(item.getSubType())||BusinessConstants.SUB_TYPE_SALES_RETURN.equals(item.getSubType())) { - //数量*当前的成本单价 - currentNumber = currentNumber.add(basicNumber); - currentAllPrice = currentAllPrice.add(basicNumber.multiply(currentUnitPrice)); - } else { - //数量*单价 另外计算新的成本价 - BigDecimal allPrice = unitService.parseAllPriceByUnit(item.getAllPrice(), unitInfo, item.getMaterialUnit()); - currentAllPrice = currentAllPrice.add(allPrice); - currentNumber = currentNumber.add(basicNumber); - if(currentNumber.compareTo(BigDecimal.ZERO)!=0) { - currentUnitPrice = currentAllPrice.divide(currentNumber, 2, BigDecimal.ROUND_HALF_UP); + //数量*单价 另外计算新的成本价 + BigDecimal allPrice = unitService.parseAllPriceByUnit(item.getAllPrice()!=null?item.getAllPrice():BigDecimal.ZERO, unitInfo, item.getMaterialUnit()); + if(basicNumber.compareTo(BigDecimal.ZERO)!=0 && allPrice.compareTo(BigDecimal.ZERO)!=0) { + //入库 + if (BusinessConstants.DEPOTHEAD_TYPE_IN.equals(item.getType())) { + //零售退货、销售退货 + if (BusinessConstants.SUB_TYPE_RETAIL_RETURN.equals(item.getSubType()) || BusinessConstants.SUB_TYPE_SALES_RETURN.equals(item.getSubType())) { + //数量*当前的成本单价 + currentNumber = currentNumber.add(basicNumber); + currentAllPrice = currentAllPrice.add(basicNumber.multiply(currentUnitPrice)); + } else { + currentAllPrice = currentAllPrice.add(allPrice); + currentNumber = currentNumber.add(basicNumber); + //只有当前库存总金额和当前库存数量都大于0才计算移动平均价 + if (currentAllPrice.compareTo(BigDecimal.ZERO) > 0 && currentNumber.compareTo(BigDecimal.ZERO) > 0) { + currentUnitPrice = currentAllPrice.divide(currentNumber, 2, BigDecimal.ROUND_HALF_UP); + } else { + currentUnitPrice = item.getUnitPrice(); + } } } - } - //出库 - if(BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(item.getType())) { - //采购退货 - if(BusinessConstants.SUB_TYPE_PURCHASE_RETURN.equals(item.getSubType())) { - //数量*单价 另外计算新的成本价 - BigDecimal allPrice = unitService.parseAllPriceByUnit(item.getAllPrice(), unitInfo, item.getMaterialUnit()); - currentAllPrice = currentAllPrice.add(allPrice); - currentNumber = currentNumber.add(basicNumber); - if(currentNumber.compareTo(BigDecimal.ZERO)!=0) { - currentUnitPrice = currentAllPrice.divide(currentNumber, 2, BigDecimal.ROUND_HALF_UP); + //出库 + if (BusinessConstants.DEPOTHEAD_TYPE_OUT.equals(item.getType())) { + //采购退货 + if (BusinessConstants.SUB_TYPE_PURCHASE_RETURN.equals(item.getSubType())) { + currentAllPrice = currentAllPrice.add(allPrice); + currentNumber = currentNumber.add(basicNumber); + //只有当前库存总金额和当前库存数量都大于0才计算移动平均价 + if (currentAllPrice.compareTo(BigDecimal.ZERO) > 0 && currentNumber.compareTo(BigDecimal.ZERO) > 0) { + currentUnitPrice = currentAllPrice.divide(currentNumber, 2, BigDecimal.ROUND_HALF_UP); + } else { + currentUnitPrice = item.getUnitPrice(); + } + } else { + currentNumber = currentNumber.add(basicNumber); + //数量*当前的成本单价 + currentAllPrice = currentAllPrice.add(basicNumber.multiply(currentUnitPrice)); } - } else { - currentNumber = currentNumber.add(basicNumber); - //数量*当前的成本单价 - currentAllPrice = currentAllPrice.add(basicNumber.multiply(currentUnitPrice)); } - } - //防止单价金额溢出 - if(currentUnitPrice.compareTo(BigDecimal.valueOf(100000000))>0 || currentUnitPrice.compareTo(BigDecimal.valueOf(-100000000))<0) { - currentUnitPrice = BigDecimal.ZERO; + //防止单价金额溢出 + if(currentUnitPrice.compareTo(BigDecimal.valueOf(100000000))>0 || currentUnitPrice.compareTo(BigDecimal.valueOf(-100000000))<0) { + currentUnitPrice = BigDecimal.ZERO; + } } } //更新实时库存中的当前单价