From 35a8d2212246b095c70d88b71f9b7ce0acc2381b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Thu, 21 Nov 2024 11:24:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=80=E6=AC=BE=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=AF=94=E4=BE=8B=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/service/MpOrderDetailService.java | 2 +- .../impl/MpOrderDetailServiceImpl.java | 12 ++++++++---- .../impl/shopimpl/TbShopTableServiceImpl.java | 19 ++++++++++--------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java index 4c1b57ab..b59cf340 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/MpOrderDetailService.java @@ -46,7 +46,7 @@ public interface MpOrderDetailService extends IService { /** * 根据订单id和状态获取订单详情 */ - List selectByOrderIdAndState(Integer orderId, TableConstant.OrderInfo.Status state); + List selectByOrderIdAndState(Integer orderId, TableConstant.OrderInfo.Status... states); /** * 根据购物车id和订单id查询订单详情 diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java index 9faa520a..bb1a8502 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/service/impl/MpOrderDetailServiceImpl.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.mybatis.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.ysk.cashier.cons.TableConstant; import cn.ysk.cashier.dto.shoptable.ReturnOrderDTO; import cn.ysk.cashier.enums.OrderStatusEnums; @@ -49,10 +50,13 @@ public class MpOrderDetailServiceImpl extends ServiceImpl selectByOrderIdAndState(Integer orderId, TableConstant.OrderInfo.Status state) { - return list(new LambdaQueryWrapper() - .eq(TbOrderDetail::getStatus, state.getValue()) - .eq(TbOrderDetail::getOrderId, orderId)); + public List selectByOrderIdAndState(Integer orderId, TableConstant.OrderInfo.Status... statuses) { + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(TbOrderDetail::getOrderId, orderId); + if (statuses.length != 0) { + query.in(TbOrderDetail::getStatus, CollUtil.newArrayList(statuses)); + } + return list(query); } @Override 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 da2a29e6..fc3bf24a 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 @@ -2795,12 +2795,10 @@ public class TbShopTableServiceImpl implements TbShopTableService { }else if (oldOrderInfo.getFullCouponDiscountAmount().compareTo(BigDecimal.ZERO) > 0 || oldOrderInfo.getPointsDiscountAmount().compareTo(BigDecimal.ZERO) > 0){ hasNormalReturn = true; // 计算当前商品占比 - BigDecimal ratio = calcDetailRatio(orderDetail); - BigDecimal realAmount = orderDetail.getPriceAmount().multiply(ratio); - currentDetailAMount = realAmount - .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) + BigDecimal ratio = calcDetailRatio(orderDetail, returnNum); + currentDetailAMount = orderDetail.getPriceAmount().divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) .multiply(returnNum).setScale(2, RoundingMode.HALF_UP); - returnAmount = returnAmount.add(currentDetailAMount); + returnAmount = returnAmount.add(oldOrderInfo.getPayAmount().multiply(ratio)); saleAmount = saleAmount.add(orderDetail.getPrice()); packAMount = packAMount.add(orderDetail.getPackAmount() .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) @@ -2869,11 +2867,12 @@ public class TbShopTableServiceImpl implements TbShopTableService { mpOrderDetailService.updateBatchById(detailList); data.put("returnOrder", returnOrder); data.put("returnAmount", returnAmount); + data.put("hasNormalReturn", hasNormalReturn); return data; } - private BigDecimal calcDetailRatio(TbOrderDetail orderDetail) { - List detailList = mpOrderDetailService.selectByOrderIdAndState(orderDetail.getId(), TableConstant.OrderInfo.Status.CLOSED); + private BigDecimal calcDetailRatio(TbOrderDetail orderDetail, BigDecimal returnNum) { + List detailList = mpOrderDetailService.selectByOrderIdAndState(orderDetail.getOrderId(), TableConstant.OrderInfo.Status.CLOSED, TableConstant.OrderInfo.Status.REFUND); BigDecimal totalAmount = BigDecimal.ZERO; for (TbOrderDetail item : detailList) { if (item.getUserCouponId() == null) { @@ -2881,7 +2880,8 @@ public class TbShopTableServiceImpl implements TbShopTableService { } } - return orderDetail.getPriceAmount().divide(totalAmount, 2, RoundingMode.HALF_UP); + return orderDetail.getPriceAmount().divide(totalAmount, 8, RoundingMode.HALF_UP) + .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP).multiply(returnNum).setScale(2, RoundingMode.HALF_UP); } private void updateStockAndRecord(List orderDetailList) { @@ -2944,12 +2944,13 @@ public class TbShopTableServiceImpl implements TbShopTableService { HashMap returnInfoData = updateReturnOrderInfo(returnOrderDTO, orderInfo, "scanCode".equals(payType) || "wx_lite".equals(payType)); TbOrderInfo returnOrderInfo = (TbOrderInfo) returnInfoData.get("returnOrder"); BigDecimal returnAmount = (BigDecimal) returnInfoData.get("returnAmount"); + boolean hasNormalReturn = (boolean) returnInfoData.get("hasNormalReturn"); String shopId = orderInfo.getShopId(); // // 线上退款 orderInfo.setRefundAmount(orderInfo.getRefundAmount().add(returnOrderInfo.getRefundAmount())); orderInfo.setRefundRemark(returnOrderDTO.getNote()); - if ("scanCode".equals(payType) || "wx_lite".equals(payType)) { + if (hasNormalReturn && ("scanCode".equals(payType) || "wx_lite".equals(payType))) { payService.returnOrder(Integer.valueOf(shopId), orderInfo, returnOrderInfo); returnOrderInfo.setStatus("refund"); mpOrderInfoService.updateById(returnOrderInfo);