diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/OrderPriceDTO.java b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/OrderPriceDTO.java index b7b4249a..9f33b66d 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/OrderPriceDTO.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/dto/order/OrderPriceDTO.java @@ -12,6 +12,8 @@ public class OrderPriceDTO { private BigDecimal originAmount = BigDecimal.ZERO; private BigDecimal totalAmount = BigDecimal.ZERO; private BigDecimal packAmount = BigDecimal.ZERO; + // 打折折扣金额 + private BigDecimal discountAmount = BigDecimal.ZERO; private boolean hasNewInfo = false; private List newOrderDetailList = new ArrayList<>(); private List removeOrderDetailList = new ArrayList<>(); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java index caef29d2..35e4c816 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/pojo/order/TbCashierCart.java @@ -229,12 +229,15 @@ public class TbCashierCart implements Serializable { if (discountRadio == null) { discountRadio = new BigDecimal("1"); } - resetTotalAmount(discountRadio); if (num == null) { num = totalNumber; } - return totalAmount.divide(totalNumber, 9, RoundingMode.HALF_UP).multiply(num).setScale(2, RoundingMode.HALF_UP); + if (isMember != null && isMember == 1 && memberPrice != null && memberPrice.compareTo(BigDecimal.ZERO) > 0) { + return num.multiply(memberPrice).multiply(discountRadio).add(packFee).setScale(2, RoundingMode.HALF_UP); + }else { + return num.multiply(discountSaleAmount != null ? discountSaleAmount : salePrice).add(packFee).multiply(discountRadio).setScale(2, RoundingMode.HALF_UP); + } // if (isMember != null && isMember == 1 && memberPrice != null && memberPrice.compareTo(BigDecimal.ZERO) > 0) { // return num.multiply(memberPrice); // } else { 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 dd334f6a..e7d41e52 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 @@ -583,12 +583,12 @@ public class TbShopTableServiceImpl implements TbShopTableService { tbCashierCart.setNote(addCartDTO.getNote()); tbCashierCart.setPlatformType(OrderPlatformTypeEnum.PC.getValue()); tbCashierCart.setIsMember(shopEatTypeInfoDTO.isMemberPrice() && addCartDTO.getVipUserId() != null ? 1 : 0); - tbCashierCart.setIsMember(!shopEatTypeInfoDTO.isMemberPrice() ? 0 : addCartDTO.getVipUserId() == null ? 0 : 1); + tbCashierCart.setIsMember(!shopEatTypeInfoDTO.isMemberPrice() ? 0 : addCartDTO.getVipUserId() == null ? 0 : 1); tbCashierCart.setMemberPrice(productSku.getMemberPrice()); cashierCartRepository.save(tbCashierCart); } else { - tbCashierCart.setIsMember(!shopEatTypeInfoDTO.isMemberPrice() ? 0 : addCartDTO.getVipUserId() == null ? 0 : 1); + tbCashierCart.setIsMember(!shopEatTypeInfoDTO.isMemberPrice() ? 0 : addCartDTO.getVipUserId() == null ? 0 : 1); tbCashierCart.setNote(addCartDTO.getNote()); tbCashierCart.setTotalAmount(addCartDTO.getNum().multiply(productSku.getSalePrice())); @@ -1277,7 +1277,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { private BigDecimal reduceProCoupon(HashMap> couponMap, TbCashierCart cashierCart, HashMap> usedCouponMap, BigDecimal discountAmount, ArrayList balanceCartList, - ArrayList outRecords, Integer memberId) { + ArrayList outRecords, Integer memberId) { TbUserCouponVo couponVo = getCanUseCoupon(couponMap, cashierCart.getProductId()); if (couponVo != null && couponVo.getCurrentUseNum().compareTo(BigDecimal.ZERO) > 0) { BigDecimal currentUseNum; @@ -1291,7 +1291,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { couponVo.setCurrentUseNum(couponVo.getCurrentUseNum().subtract(cashierCart.getNumber())); currentUseNum = cashierCart.getNumber(); // 优惠券数量小于购物车数量,分割购物车数据 - }else if (cashierCart.getNumber().compareTo(couponVo.getCurrentUseNum()) > 0) { + } else if (cashierCart.getNumber().compareTo(couponVo.getCurrentUseNum()) > 0) { currentUseNum = couponVo.getCurrentUseNum(); BigDecimal cartNum = BigDecimal.valueOf(cashierCart.getNumber().intValue()); BigDecimal balanceNum = cashierCart.getTotalNumber().subtract(couponVo.getCurrentUseNum()); @@ -1307,7 +1307,6 @@ public class TbShopTableServiceImpl implements TbShopTableService { currentUseNum = cashierCart.getNumber(); - // 创建结余购物车 balanceCart = BeanUtil.copyProperties(cashierCart, TbCashierCart.class); balanceCart.setUserCouponId(null); @@ -1318,7 +1317,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { balanceCart.setTotalAmount(cashierCart.getTotalAmountByNum(balanceNum, null).add(singlePackFee.multiply(balanceNum))); balanceCartList.add(balanceCart); } else { - currentUseNum =cashierCart.getNumber(); + currentUseNum = cashierCart.getNumber(); discountAmount = discountAmount.add(cashierCart.getTotalAmount()); cashierCart.setUserCouponId(couponVo.getId()); couponVo.setCurrentUseNum(couponVo.getCurrentUseNum().subtract(cashierCart.getNumber())); @@ -1369,7 +1368,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { tbUserCouponVos = new ArrayList<>(); tbUserCouponVos.add(item); couponMap.put(item.getProId().toString(), tbUserCouponVos); - }else { + } else { tbUserCouponVos.add(item); } }); @@ -1409,7 +1408,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { couponInfoDTO.setOutRecordList(outRecords); couponInfoDTO.setCouponMap(usedCouponMap); - return discountAmount.multiply(orderInfo.getDiscountRatio()); + return discountAmount; } private OrderCouponInfoDTO getCouponInfo(Integer memberId, Integer shopId, List userCouponInfoDTOList, BigDecimal orderAmount, Set productIds) { @@ -1467,7 +1466,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { List allCashierCarts; if (orderId != null) { allCashierCarts = mpCashierCartService.selectByOrderIdAndState(orderId); - }else { + } else { allCashierCarts = mpCashierCartService.selectByShopEatType(shopEatTypeInfoDTO, masterId); } TbCashierCart seatCart = null; @@ -1586,11 +1585,13 @@ public class TbShopTableServiceImpl implements TbShopTableService { // 已经退款和使用优惠券的商品不进行统计金额 if (!"return".equals(cashierCart.getStatus()) && cashierCart.getUserCouponId() == null) { + BigDecimal originalTotal = cashierCart.getTotalAmountByNum(cashierCart.getTotalNumber(), BigDecimal.ONE); + priceDTO.setDiscountAmount(priceDTO.getDiscountAmount().add(originalTotal.subtract(cashierCart.getTotalAmount()))); priceDTO.setTotalAmount(priceDTO.getTotalAmount().add(cashierCart.getTotalAmount())); priceDTO.setPackAmount(priceDTO.getPackAmount().add(cashierCart.getPackFee())); } - if(!"return".equals(cashierCart.getStatus())) { + if (!"return".equals(cashierCart.getStatus())) { priceDTO.setOriginAmount(priceDTO.getOriginAmount().add(cashierCart.getTotalAmount())); } @@ -2116,6 +2117,8 @@ public class TbShopTableServiceImpl implements TbShopTableService { // 返还上次使用的券 returnCoupon(orderInfo, true); + // 设置折扣比例 + orderInfo.setDiscountRatio(payDTO.getDiscount()); Set productIdSet = new HashSet<>(); List cashierCarts = mpCashierCartService.selectByOrderIdAndState(orderInfo.getId()); @@ -2140,12 +2143,13 @@ public class TbShopTableServiceImpl implements TbShopTableService { // 更新订单信息 ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(orderInfo.getShopId(), orderInfo.getTableId()); OrderPriceDTO priceDTO = createOrderDetailWithCoupon(activateCartInfo, orderInfo, payDTO.getShopId(), false, shopEatTypeInfoDTO); - BigDecimal finalAmount = priceDTO.getTotalAmount().multiply(payDTO.getDiscount()).setScale(2, RoundingMode.HALF_UP); + BigDecimal finalAmount = priceDTO.getTotalAmount().setScale(2, RoundingMode.HALF_UP); orderInfo.setUpdatedAt(System.currentTimeMillis()); orderInfo.setSettlementAmount(finalAmount); orderInfo.setAmount(finalAmount); orderInfo.setOrderAmount(finalAmount); + orderInfo.setDiscountAmount(priceDTO.getDiscountAmount()); // 计算订单优惠 TbActivateOutRecord outRecord = calcOrderInfoDiscount(payDTO, orderInfo, couponInfo); @@ -2251,17 +2255,17 @@ public class TbShopTableServiceImpl implements TbShopTableService { } BigDecimal finalAmount = null; - // 计算订单折扣信息 - if (payDTO.getDiscount().compareTo(new BigDecimal("1")) != 0) { - finalAmount = resetAmountByDiscount(payDTO, orderInfo); - }else { - finalAmount = orderInfo.getOrderAmount(); - } // 计算优惠券积分折扣信息 if (payDTO.getVipUserId() != null) { // 计算商品券折扣 finalAmount = calcDiscountAndUpdateInfo(payDTO, orderInfo); + } else { + if (payDTO.getDiscount().compareTo(new BigDecimal("1")) != 0) { + finalAmount = resetAmountByDiscount(payDTO, orderInfo); + } else { + finalAmount = orderInfo.getOrderAmount(); + } } boolean isOnline = false; @@ -2414,7 +2418,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { CreateOrderDTO dto = null; if (orderId != null) { TbOrderInfo orderInfo = mpOrderInfoService.getById(orderId); - if(!TableConstant.OrderInfo.Status.UNPAID.equalsVals(orderInfo.getStatus())) { + if (!TableConstant.OrderInfo.Status.UNPAID.equalsVals(orderInfo.getStatus())) { throw new BadRequestException("订单状态异常"); } dto = new CreateOrderDTO(); @@ -2802,13 +2806,13 @@ public class TbShopTableServiceImpl implements TbShopTableService { .add(returnPackFee); // 移除使用的券 couponInfoDTO.getProductCoupon().forEach(item -> { - if (Objects.equals(item.getId(), outRecord.getGiveId())) { - item.setReturnNum(item.getReturnNum() + outRecord.getRefNum()); - } + if (Objects.equals(item.getId(), outRecord.getGiveId())) { + item.setReturnNum(item.getReturnNum() + outRecord.getRefNum()); + } }); // 使用了满减或积分,获取普通付款商品计算退款比例,退部分现金 - }else if (oldOrderInfo.getFullCouponDiscountAmount().compareTo(BigDecimal.ZERO) > 0 || oldOrderInfo.getPointsDiscountAmount().compareTo(BigDecimal.ZERO) > 0){ + } else if (oldOrderInfo.getFullCouponDiscountAmount().compareTo(BigDecimal.ZERO) > 0 || oldOrderInfo.getPointsDiscountAmount().compareTo(BigDecimal.ZERO) > 0) { hasNormalReturn = true; // 计算当前商品占比 BigDecimal ratio = calcDetailRatio(orderDetail, returnNum); @@ -2820,7 +2824,7 @@ public class TbShopTableServiceImpl implements TbShopTableService { .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP) .multiply(returnNum)).setScale(2, RoundingMode.HALF_UP); - }else { + } else { hasNormalReturn = true; currentDetailAMount = orderDetail.getPriceAmount() .divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)