From 8a7c9d8e2e2c9848109154950d39969248d68083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 20 Nov 2024 17:33:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=201.=E9=80=80=E6=AC=BE=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/shopimpl/TbShopTableServiceImpl.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 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 5bdc5a10..6f98aac9 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 @@ -2736,41 +2736,46 @@ public class TbShopTableServiceImpl implements TbShopTableService { } BigDecimal returnPackFee = packFee.multiply(returnNum); - orderDetail.setNum(returnNum); - orderDetail.setPriceAmount(returnNum.multiply(orderDetail.getPrice()) - .add(returnPackFee)); - orderDetail.setPackAmount(returnPackFee); - orderDetail.setRefundNumber(returnNum); -// orderDetail.setStatus(isOnline ? "refunding" : "refund"); - orderDetail.setStatus("refund"); + BigDecimal currentDetailAMount = BigDecimal.ZERO; // 优惠券抵扣商品直接退券 if (StrUtil.isNotBlank(orderDetail.getUseCouponInfo())) { data.put("isCouponDiscount", true); TbActivateOutRecord outRecord = JSONObject.parseObject(orderDetail.getUseCouponInfo(), TbActivateOutRecord.class); outRecord.setRefNum(returnNum.intValue()); shopCouponService.refund(CollUtil.newArrayList(outRecord)); + currentDetailAMount = returnNum.multiply(orderDetail.getPrice()) + .add(returnPackFee); // 使用了满减或积分,获取普通付款商品计算退款比例,退部分现金 }else if (oldOrderInfo.getFullCouponDiscountAmount().compareTo(BigDecimal.ZERO) > 0 || oldOrderInfo.getPointsDiscountAmount().compareTo(BigDecimal.ZERO) > 0){ // 计算当前商品占比 BigDecimal ratio = calcDetailRatio(orderDetail); BigDecimal realAmount = orderDetail.getPriceAmount().multiply(ratio); - returnAmount = returnAmount.add(realAmount - .divide(orderDetail.getNum(), 2, RoundingMode.DOWN) - .multiply(returnNum)); + currentDetailAMount = realAmount + .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(), 2, RoundingMode.DOWN) - .multiply(returnNum)); + .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) + .multiply(returnNum)).setScale(2, RoundingMode.HALF_UP); }else { - returnAmount = returnAmount.add(orderDetail.getPriceAmount() - .divide(orderDetail.getNum(), 2, RoundingMode.DOWN) - .multiply(returnNum)); + 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(), 2, RoundingMode.DOWN) - .multiply(returnNum)); + .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) + .multiply(returnNum)).setScale(2, RoundingMode.HALF_UP); } + + orderDetail.setNum(returnNum); + orderDetail.setPriceAmount(currentDetailAMount); + orderDetail.setPackAmount(returnPackFee); + orderDetail.setRefundNumber(returnNum); +// orderDetail.setStatus(isOnline ? "refunding" : "refund"); + orderDetail.setStatus("refund"); } if (returnAmount.compareTo(BigDecimal.ZERO) <= 0) {