退款
This commit is contained in:
@@ -483,10 +483,6 @@ public class PayServiceImpl implements PayService {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public CzgResult<Object> refundOrderBefore(OrderInfoRefundDTO param) {
|
public CzgResult<Object> refundOrderBefore(OrderInfoRefundDTO param) {
|
||||||
OrderInfo orderInfo = orderInfoService.getById(param.getOrderId());
|
OrderInfo orderInfo = orderInfoService.getById(param.getOrderId());
|
||||||
//退款总额
|
|
||||||
BigDecimal refundAmountTotal = BigDecimal.ZERO;
|
|
||||||
//退优惠券数量 <商品id,数量>
|
|
||||||
Map<Long, Integer> returnCouponMap = new HashMap<>();
|
|
||||||
Map<Long, BigDecimal> returnProMap = new HashMap<>();
|
Map<Long, BigDecimal> returnProMap = new HashMap<>();
|
||||||
boolean isPay = true;
|
boolean isPay = true;
|
||||||
String refPayOrderNo = "REFO" + IdUtil.getSnowflakeNextId();
|
String refPayOrderNo = "REFO" + IdUtil.getSnowflakeNextId();
|
||||||
@@ -494,51 +490,32 @@ public class PayServiceImpl implements PayService {
|
|||||||
isPay = false;
|
isPay = false;
|
||||||
refPayOrderNo = "";
|
refPayOrderNo = "";
|
||||||
}
|
}
|
||||||
|
if (isPay) {
|
||||||
|
orderInfo.setRefundAmount(orderInfo.getRefundAmount().add(param.getRefundAmount()));
|
||||||
|
if (orderInfo.getRefundAmount().compareTo(orderInfo.getPayAmount()) < 0) {
|
||||||
|
throw new ValidateException("退单失败,可退金额不足");
|
||||||
|
}
|
||||||
|
}
|
||||||
if (CollUtil.isNotEmpty(param.getRefundDetails())) {
|
if (CollUtil.isNotEmpty(param.getRefundDetails())) {
|
||||||
for (OrderDetail refundDetail : param.getRefundDetails()) {
|
for (OrderDetail refundDetail : param.getRefundDetails()) {
|
||||||
AssertUtil.isNull(refundDetail.getNum(), "退单数量不能为空");
|
AssertUtil.isNull(refundDetail.getNum(), "退单数量不能为空");
|
||||||
//退款金额
|
|
||||||
BigDecimal refundAmount = BigDecimal.ZERO;
|
|
||||||
//退款数量
|
//退款数量
|
||||||
BigDecimal refNum;
|
BigDecimal refNum = refundDetail.getNum();
|
||||||
OrderDetail orderDetail = orderDetailService.getById(refundDetail.getId());
|
OrderDetail orderDetail = orderDetailService.getById(refundDetail.getId());
|
||||||
//可退数量=订单数量-退单数量-退菜数量
|
//可退数量=订单数量-退单数量-退菜数量
|
||||||
BigDecimal returnNum = orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum());
|
BigDecimal returnNum = orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum());
|
||||||
if (returnNum.compareTo(BigDecimal.ZERO) <= 0 || returnNum.compareTo(refundDetail.getNum()) < 0) {
|
if (returnNum.compareTo(BigDecimal.ZERO) <= 0 || returnNum.compareTo(refundDetail.getNum()) < 0) {
|
||||||
throw new ValidateException("退单失败," + orderDetail.getProductName() + "可退数量不足");
|
throw new ValidateException("退单失败," + orderDetail.getProductName() + "可退数量不足");
|
||||||
}
|
}
|
||||||
//可退数量 大于优惠券数量
|
|
||||||
if (returnNum.compareTo(orderDetail.getCouponNum()) > 0) {
|
|
||||||
//实际计算金额的数量
|
|
||||||
refNum = returnNum.subtract(orderDetail.getCouponNum());
|
|
||||||
//退单数量 大于 实际计算金额的数量
|
|
||||||
if (refundDetail.getNum().compareTo(refNum) > 0) {
|
|
||||||
refundAmount = refNum.multiply(orderDetail.getUnitPrice());
|
|
||||||
returnCouponMap.put(orderDetail.getProductId(), refundDetail.getNum().subtract(refNum).intValue());
|
|
||||||
} else {
|
|
||||||
refundAmount = refundDetail.getNum().multiply(orderDetail.getUnitPrice());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (refundAmount.compareTo(refundDetail.getReturnAmount()) != 0) {
|
|
||||||
throw new ValidateException("退单失败," + orderDetail.getProductName() + "退单金额不正确");
|
|
||||||
}
|
|
||||||
refNum = refundDetail.getNum();
|
|
||||||
refundAmountTotal = refundAmountTotal.add(refundAmount);
|
|
||||||
if (isPay) {
|
if (isPay) {
|
||||||
orderDetail.setRefundNum(orderDetail.getRefundNum().add(refNum));
|
orderDetail.setRefundNum(orderDetail.getRefundNum().add(refNum));
|
||||||
orderDetail.setReturnAmount(orderDetail.getReturnAmount().add(refundDetail.getReturnAmount()));
|
|
||||||
if (orderDetail.getReturnAmount().compareTo(orderDetail.getPayAmount()) > 0) {
|
|
||||||
throw new ValidateException("退单失败," + orderDetail.getProductName() + "退单金额不正确");
|
|
||||||
}
|
|
||||||
if (orderDetail.getNum().compareTo(orderDetail.getRefundNum().add(orderDetail.getReturnNum())) == 0) {
|
if (orderDetail.getNum().compareTo(orderDetail.getRefundNum().add(orderDetail.getReturnNum())) == 0) {
|
||||||
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
|
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
|
||||||
} else {
|
} else {
|
||||||
orderDetail.setStatus(OrderStatusEnums.PART_REFUND.getCode());
|
orderDetail.setStatus(OrderStatusEnums.PART_REFUND.getCode());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
orderDetail.setReturnNum(orderDetail.getRefundNum().add(refNum));
|
orderDetail.setReturnNum(orderDetail.getReturnNum().add(refNum));
|
||||||
orderDetail.setPayAmount((orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum())
|
|
||||||
.subtract(orderDetail.getCouponNum())).multiply(orderDetail.getUnitPrice()));
|
|
||||||
}
|
}
|
||||||
orderDetail.setRefundNo(refPayOrderNo);
|
orderDetail.setRefundNo(refPayOrderNo);
|
||||||
orderDetail.setRefundRemark(orderDetail.getRefundRemark() + param.getRefundReason());
|
orderDetail.setRefundRemark(orderDetail.getRefundRemark() + param.getRefundReason());
|
||||||
@@ -554,7 +531,6 @@ public class PayServiceImpl implements PayService {
|
|||||||
orderInfo.setStatus(OrderStatusEnums.REFUND.getCode());
|
orderInfo.setStatus(OrderStatusEnums.REFUND.getCode());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
refundAmountTotal = param.getRefundAmount();
|
|
||||||
orderInfo.setStatus(OrderStatusEnums.REFUND.getCode());
|
orderInfo.setStatus(OrderStatusEnums.REFUND.getCode());
|
||||||
List<OrderDetail> orderDetails = orderDetailService.queryChain()
|
List<OrderDetail> orderDetails = orderDetailService.queryChain()
|
||||||
.select(OrderDetail::getId, OrderDetail::getNum, OrderDetail::getReturnNum, OrderDetail::getReturnNum)
|
.select(OrderDetail::getId, OrderDetail::getNum, OrderDetail::getReturnNum, OrderDetail::getReturnNum)
|
||||||
@@ -564,7 +540,6 @@ public class PayServiceImpl implements PayService {
|
|||||||
if (isPay) {
|
if (isPay) {
|
||||||
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()).subtract(orderDetail.getRefundNum()));
|
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()).subtract(orderDetail.getRefundNum()));
|
||||||
orderDetail.setRefundNum(orderDetail.getNum().subtract(orderDetail.getReturnNum()));
|
orderDetail.setRefundNum(orderDetail.getNum().subtract(orderDetail.getReturnNum()));
|
||||||
orderDetail.setReturnAmount(orderDetail.getPayAmount());
|
|
||||||
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
|
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
|
||||||
} else {
|
} else {
|
||||||
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()));
|
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()));
|
||||||
@@ -578,10 +553,6 @@ public class PayServiceImpl implements PayService {
|
|||||||
//TODO 退款 券 未处理
|
//TODO 退款 券 未处理
|
||||||
if (isPay) {
|
if (isPay) {
|
||||||
if (param.isModify()) {
|
if (param.isModify()) {
|
||||||
orderInfo.setRefundAmount(orderInfo.getRefundAmount().add(param.getRefundAmount()));
|
|
||||||
if (orderInfo.getRefundAmount().compareTo(orderInfo.getPayAmount()) < 0) {
|
|
||||||
throw new ValidateException("退单失败,可退金额不足");
|
|
||||||
}
|
|
||||||
//非现金退款
|
//非现金退款
|
||||||
if (!param.isCash()) {
|
if (!param.isCash()) {
|
||||||
if (orderInfo.getPayType().equals(PayEnums.VIP_PAY.getValue())) {
|
if (orderInfo.getPayType().equals(PayEnums.VIP_PAY.getValue())) {
|
||||||
@@ -602,13 +573,6 @@ public class PayServiceImpl implements PayService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (refundAmountTotal.compareTo(param.getRefundAmount()) != 0) {
|
|
||||||
throw new ValidateException("退单失败,退款金额不正确");
|
|
||||||
}
|
|
||||||
orderInfo.setRefundAmount(orderInfo.getRefundAmount().add(refundAmountTotal));
|
|
||||||
if (orderInfo.getRefundAmount().compareTo(orderInfo.getPayAmount()) < 0) {
|
|
||||||
throw new ValidateException("退单失败,可退金额不足");
|
|
||||||
}
|
|
||||||
//非现金退款
|
//非现金退款
|
||||||
if (!param.isCash()) {
|
if (!param.isCash()) {
|
||||||
if (orderInfo.getPayType().equals(PayEnums.VIP_PAY.getValue())) {
|
if (orderInfo.getPayType().equals(PayEnums.VIP_PAY.getValue())) {
|
||||||
@@ -630,7 +594,7 @@ public class PayServiceImpl implements PayService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
orderInfo.setOrderAmount(orderInfo.getOrderAmount().subtract(refundAmountTotal));
|
orderInfo.setOrderAmount(orderInfo.getOrderAmount().subtract(param.getRefundAmount()));
|
||||||
}
|
}
|
||||||
orderInfo.setRefundRemark(orderInfo.getRefundRemark() + param.getRefundReason());
|
orderInfo.setRefundRemark(orderInfo.getRefundRemark() + param.getRefundReason());
|
||||||
orderInfoService.updateById(orderInfo);
|
orderInfoService.updateById(orderInfo);
|
||||||
|
|||||||
Reference in New Issue
Block a user