gongzuming
2024-09-14 83ad32e1e131711c5de03d7bc5eb325f66fd5097
src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -517,9 +517,15 @@
            BigDecimal couponAmount = calculateCoupon(memberCouponAmount, t.getTotal()
                    , flowerAmount, t.getNum(), t.getPrice(), isLastOne, usedCouponAmount);
            t.setCouponAmount(couponAmount);//每扎平摊的优惠券面值
            t.setRealPrice(t.getPrice().subtract(couponAmount));//退款时使用的真实成交价
            t.setRealPrice(t.getPrice().subtract(couponAmount));//退款时使用的真实成交单价
            usedCouponAmount = usedCouponAmount.add(couponAmount.multiply(BigDecimal.valueOf(t.getNum())));
            t.setCouponAmountTotal(couponAmount.multiply(BigDecimal.valueOf(t.getNum())));
            if(isLastOne){
                t.setCouponAmountTotal(memberCouponAmount.subtract(usedCouponAmount));
            } else {
                usedCouponAmount = usedCouponAmount.add(t.getCouponAmountTotal());
            }
            t.setRealTotal(t.getTotal().subtract(t.getCouponAmountTotal()));
            t.create(userId);
            orderItemMapper.insert(t);
@@ -581,9 +587,13 @@
            BigDecimal subCoupon = couponAmount.subtract(usedCouponAmount);//占有的优惠券面值
            return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP);
        }
        BigDecimal radio = itemTotalAmount.divide(totalAmount, 2, RoundingMode.HALF_UP);//计算该商品总价在订单中的占比
        /*BigDecimal radio = itemTotalAmount.divide(totalAmount, 2, RoundingMode.HALF_UP);//计算该商品总价在订单中的占比
        BigDecimal subCoupon = couponAmount.multiply(radio);//占有的优惠券面值
        return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP);
        return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP);*/
        //不能分步计算,分步计算会有精度问题
        return couponAmount.multiply(itemTotalAmount).divide(totalAmount.multiply(BigDecimal.valueOf(num)), 2, RoundingMode.HALF_UP);
    }
    private CouponRecordDO useCouponRecord(String orderId, BigDecimal amount, String couponRecordId){
@@ -802,10 +812,9 @@
                orderIds.add(o.getId());
            }
            List<OrderItem> itemList = orderItemMapper.selectList(
                    new QueryWrapper<OrderItem>().in("order_id", orderIds));
            List<OrderItemListDTO> itemList = orderItemMapper.getOrderItems(orderIds);
            Map<String, List<OrderItemListDTO>> map = new HashMap<>();
            for (OrderItem oi : itemList) {
            for (OrderItemListDTO oi : itemList) {
                String orderId = oi.getOrderId();
                List<OrderItemListDTO> ll = map.computeIfAbsent(orderId, k -> new ArrayList<>());
                OrderItemListDTO d = new OrderItemListDTO();
@@ -929,8 +938,9 @@
                if(llc == null){
                    llc = new OrderCheckLocationListDTO();
                    BeanUtils.copyProperties(c, llc);
                    rMap.put(locationId, llc);
                    llc.setTotalAmount(new BigDecimal(0));
                    rMap.put(locationId, llc);
                    result.add(llc);
                }