src/main/java/com/mzl/flower/entity/payment/OrderItem.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/payment/OrderService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/表设计.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/mzl/flower/entity/payment/OrderItem.java
@@ -93,4 +93,10 @@ @TableField("real_price") private BigDecimal realPrice;//真实成交价格/每扎 @TableField("coupon_amount_total") private BigDecimal couponAmountTotal;//优惠券总金额 @TableField("real_total") private BigDecimal realTotal;//真实成交总价格 } src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
@@ -663,13 +663,19 @@ deduct = oi.getSupplierPrice().multiply(new BigDecimal(dto.getNum())); } else if(Constants.CHECK_TYPE.lack.name().equals(dto.getType())){ deduct = realPrice.multiply(new BigDecimal(dto.getNum())); //质检退款,按照这个单价扣,如果3扎都缺货,按照总的金额退 //缺货数量等于商品总数时按真实总价退款 if(dto.getNum().intValue() == oi.getNum() && oi.getRealTotal() != null){ deduct = oi.getRealTotal(); } } else if (Constants.CHECK_TYPE.reduce.name().equals(dto.getType())) { if(deductAmount == null){ throw new ValidationException("降级金额不能为空"); } deduct = deductAmount.multiply(new BigDecimal(dto.getNum())); BigDecimal dt = realPrice.multiply(new BigDecimal(dto.getNum())); if(deduct.doubleValue() > dt.doubleValue()){ if(deduct.doubleValue() > dt.doubleValue() || (oi.getRealTotal() != null && deduct.doubleValue() > oi.getRealTotal().doubleValue())){ throw new ValidationException("降级金额不能大于商品处理数量金额"); } } 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){ src/main/表设计.xlsxBinary files differ