fix: 比例计算根据可退金额计算

This commit is contained in:
张松 2024-11-22 15:42:21 +08:00
parent 1546b0ee60
commit c63f439a08
1 changed files with 26 additions and 20 deletions

View File

@ -2771,6 +2771,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
ArrayList<TbOrderDetail> remainOrderDetailList = new ArrayList<>();
boolean hasNormalReturn = false;
for (TbOrderDetail orderDetail : detailList) {
// 原始金额
BigDecimal originalAmount = orderDetail.getPriceAmount();
BigDecimal originalPackAmount = orderDetail.getPackAmount();
// 退款数量
BigDecimal returnNum = returnNumMap.get(orderDetail.getId().toString());
// 剩余数量
@ -2781,19 +2784,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 将未退款的剩余订单详情重新生成记录
BigDecimal packFee = orderDetail.getPackAmount().divide(orderDetail.getNum(), RoundingMode.HALF_UP);
if (remainNum.compareTo(BigDecimal.ZERO) > 0) {
// 单个打包费
BigDecimal remainPackFee = packFee.multiply(remainNum);
TbOrderDetail remainOrderDetail = BeanUtil.copyProperties(orderDetail, TbOrderDetail.class);
remainOrderDetail.setNum(remainNum);
remainOrderDetail.setPriceAmount(remainNum.multiply(orderDetail.getPriceAmount().divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP))
.add(remainPackFee).setScale(2, RoundingMode.HALF_UP));
remainOrderDetail.setPackAmount(remainPackFee);
remainOrderDetail.setReturnNum("0");
remainOrderDetail.setId(null);
remainOrderDetailList.add(remainOrderDetail);
}
BigDecimal returnPackFee = packFee.multiply(returnNum);
BigDecimal currentDetailAMount = BigDecimal.ZERO;
// 优惠券抵扣商品直接退券
@ -2834,17 +2824,33 @@ public class TbShopTableServiceImpl implements TbShopTableService {
} else {
hasNormalReturn = true;
currentDetailAMount = orderDetail.getPriceAmount()
.divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)
.multiply(returnNum).setScale(2, RoundingMode.HALF_UP);
returnAmount = returnAmount.add(currentDetailAMount);
saleAmount = saleAmount.add(orderDetail.getPrice());
packAMount = packAMount.add(orderDetail.getPackAmount()
.divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)
.multiply(returnNum)).setScale(2, RoundingMode.HALF_UP);
if (remainNum.compareTo(BigDecimal.ZERO) > 0) {
returnAmount = orderDetail.getPriceAmount();
packAMount = orderDetail.getPackAmount();
}else {
currentDetailAMount = orderDetail.getPriceAmount()
.divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)
.multiply(returnNum).setScale(2, RoundingMode.HALF_UP);
returnAmount = returnAmount.add(currentDetailAMount);
packAMount = packAMount.add(orderDetail.getPackAmount()
.divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)
.multiply(returnNum)).setScale(2, RoundingMode.HALF_UP);
}
}
returnAmount = returnAmount.setScale(2, RoundingMode.DOWN);
if (remainNum.compareTo(BigDecimal.ZERO) > 0) {
// 单个打包费
TbOrderDetail remainOrderDetail = BeanUtil.copyProperties(orderDetail, TbOrderDetail.class);
remainOrderDetail.setNum(remainNum);
remainOrderDetail.setPriceAmount(originalAmount.subtract(returnAmount));
remainOrderDetail.setPackAmount(originalPackAmount.subtract(returnPackFee));
remainOrderDetail.setReturnNum("0");
remainOrderDetail.setId(null);
remainOrderDetailList.add(remainOrderDetail);
}
orderDetail.setNum(returnNum);
orderDetail.setPriceAmount(currentDetailAMount);
orderDetail.setPackAmount(returnPackFee);