feat: 1.退款接口修改

This commit is contained in:
张松 2024-11-20 17:33:51 +08:00
parent 8b74c09559
commit 8a7c9d8e2e
1 changed files with 22 additions and 17 deletions

View File

@ -2736,41 +2736,46 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}
BigDecimal returnPackFee = packFee.multiply(returnNum);
orderDetail.setNum(returnNum);
orderDetail.setPriceAmount(returnNum.multiply(orderDetail.getPrice())
.add(returnPackFee));
orderDetail.setPackAmount(returnPackFee);
orderDetail.setRefundNumber(returnNum);
// orderDetail.setStatus(isOnline ? "refunding" : "refund");
orderDetail.setStatus("refund");
BigDecimal currentDetailAMount = BigDecimal.ZERO;
// 优惠券抵扣商品直接退券
if (StrUtil.isNotBlank(orderDetail.getUseCouponInfo())) {
data.put("isCouponDiscount", true);
TbActivateOutRecord outRecord = JSONObject.parseObject(orderDetail.getUseCouponInfo(), TbActivateOutRecord.class);
outRecord.setRefNum(returnNum.intValue());
shopCouponService.refund(CollUtil.newArrayList(outRecord));
currentDetailAMount = returnNum.multiply(orderDetail.getPrice())
.add(returnPackFee);
// 使用了满减或积分获取普通付款商品计算退款比例退部分现金
}else if (oldOrderInfo.getFullCouponDiscountAmount().compareTo(BigDecimal.ZERO) > 0 || oldOrderInfo.getPointsDiscountAmount().compareTo(BigDecimal.ZERO) > 0){
// 计算当前商品占比
BigDecimal ratio = calcDetailRatio(orderDetail);
BigDecimal realAmount = orderDetail.getPriceAmount().multiply(ratio);
returnAmount = returnAmount.add(realAmount
.divide(orderDetail.getNum(), 2, RoundingMode.DOWN)
.multiply(returnNum));
currentDetailAMount = realAmount
.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(), 2, RoundingMode.DOWN)
.multiply(returnNum));
.divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)
.multiply(returnNum)).setScale(2, RoundingMode.HALF_UP);
}else {
returnAmount = returnAmount.add(orderDetail.getPriceAmount()
.divide(orderDetail.getNum(), 2, RoundingMode.DOWN)
.multiply(returnNum));
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(), 2, RoundingMode.DOWN)
.multiply(returnNum));
.divide(orderDetail.getNum(), 8, RoundingMode.HALF_UP)
.multiply(returnNum)).setScale(2, RoundingMode.HALF_UP);
}
orderDetail.setNum(returnNum);
orderDetail.setPriceAmount(currentDetailAMount);
orderDetail.setPackAmount(returnPackFee);
orderDetail.setRefundNumber(returnNum);
// orderDetail.setStatus(isOnline ? "refunding" : "refund");
orderDetail.setStatus("refund");
}
if (returnAmount.compareTo(BigDecimal.ZERO) <= 0) {