From c63f439a08dcc7e977afd9523e96777b01c088ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Fri, 22 Nov 2024 15:42:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=AF=94=E4=BE=8B=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=8F=AF=E9=80=80=E9=87=91=E9=A2=9D=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/shopimpl/TbShopTableServiceImpl.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java index 81ac385f..04249f8a 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/shopimpl/TbShopTableServiceImpl.java @@ -2771,6 +2771,9 @@ public class TbShopTableServiceImpl implements TbShopTableService { ArrayList remainOrderDetailList = new ArrayList<>(); boolean hasNormalReturn = false; for (TbOrderDetail orderDetail : detailList) { + // 原始金额 + BigDecimal originalAmount = orderDetail.getPriceAmount(); + BigDecimal originalPackAmount = orderDetail.getPackAmount(); // 退款数量 BigDecimal returnNum = returnNumMap.get(orderDetail.getId().toString()); // 剩余数量 @@ -2781,19 +2784,6 @@ public class TbShopTableServiceImpl implements TbShopTableService { // 将未退款的剩余订单详情重新生成记录 BigDecimal packFee = orderDetail.getPackAmount().divide(orderDetail.getNum(), RoundingMode.HALF_UP); - if (remainNum.compareTo(BigDecimal.ZERO) > 0) { - // 单个打包费 - BigDecimal remainPackFee = packFee.multiply(remainNum); - TbOrderDetail remainOrderDetail = BeanUtil.copyProperties(orderDetail, TbOrderDetail.class); - remainOrderDetail.setNum(remainNum); - remainOrderDetail.setPriceAmount(remainNum.multiply(orderDetail.getPriceAmount().divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)) - .add(remainPackFee).setScale(2, RoundingMode.HALF_UP)); - remainOrderDetail.setPackAmount(remainPackFee); - remainOrderDetail.setReturnNum("0"); - remainOrderDetail.setId(null); - remainOrderDetailList.add(remainOrderDetail); - } - BigDecimal returnPackFee = packFee.multiply(returnNum); BigDecimal currentDetailAMount = BigDecimal.ZERO; // 优惠券抵扣商品直接退券 @@ -2834,17 +2824,33 @@ public class TbShopTableServiceImpl implements TbShopTableService { } else { hasNormalReturn = true; - currentDetailAMount = orderDetail.getPriceAmount() - .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) - .multiply(returnNum).setScale(2, RoundingMode.HALF_UP); - returnAmount = returnAmount.add(currentDetailAMount); saleAmount = saleAmount.add(orderDetail.getPrice()); - packAMount = packAMount.add(orderDetail.getPackAmount() - .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) - .multiply(returnNum)).setScale(2, RoundingMode.HALF_UP); + if (remainNum.compareTo(BigDecimal.ZERO) > 0) { + returnAmount = orderDetail.getPriceAmount(); + packAMount = orderDetail.getPackAmount(); + }else { + currentDetailAMount = orderDetail.getPriceAmount() + .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) + .multiply(returnNum).setScale(2, RoundingMode.HALF_UP); + returnAmount = returnAmount.add(currentDetailAMount); + packAMount = packAMount.add(orderDetail.getPackAmount() + .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) + .multiply(returnNum)).setScale(2, RoundingMode.HALF_UP); + } } returnAmount = returnAmount.setScale(2, RoundingMode.DOWN); + if (remainNum.compareTo(BigDecimal.ZERO) > 0) { + // 单个打包费 + TbOrderDetail remainOrderDetail = BeanUtil.copyProperties(orderDetail, TbOrderDetail.class); + remainOrderDetail.setNum(remainNum); + remainOrderDetail.setPriceAmount(originalAmount.subtract(returnAmount)); + remainOrderDetail.setPackAmount(originalPackAmount.subtract(returnPackFee)); + remainOrderDetail.setReturnNum("0"); + remainOrderDetail.setId(null); + remainOrderDetailList.add(remainOrderDetail); + } + orderDetail.setNum(returnNum); orderDetail.setPriceAmount(currentDetailAMount); orderDetail.setPackAmount(returnPackFee);