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 6083494f..01baf902 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 @@ -47,7 +47,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 d6010748..0e49896a 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; @@ -50,10 +51,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);