package cn.lili.modules.payment.kit; import cn.lili.common.utils.SnowFlake; import cn.lili.common.utils.SpringContextUtil; import cn.lili.modules.order.aftersale.entity.dos.AfterSale; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.order.order.service.StoreFlowService; import cn.lili.modules.payment.entity.RefundLog; import cn.lili.modules.payment.entity.enums.PaymentMethodEnum; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /** * 退款支持 * * @author Chopper * @since 2020-12-19 09:25 */ @Component @Slf4j public class RefundSupport { /** * 店铺流水 */ @Autowired private StoreFlowService storeFlowService; /** * 订单 */ @Autowired private OrderService orderService; /** * 售后退款 * * @param afterSale */ public void refund(AfterSale afterSale) { Order order = orderService.getBySn(afterSale.getOrderSn()); RefundLog refundLog = RefundLog.builder() .isRefund(false) .totalAmount(afterSale.getActualRefundPrice()) .payPrice(afterSale.getActualRefundPrice()) .memberId(afterSale.getMemberId()) .paymentName(order.getPaymentMethod()) .afterSaleNo(afterSale.getSn()) .paymentReceivableNo(order.getReceivableNo()) .outOrderNo("AF" + SnowFlake.getIdStr()) .orderSn(afterSale.getOrderSn()) .refundReason(afterSale.getReason()) .build(); PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.paymentNameOf(order.getPaymentMethod()); Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin()); payment.refund(refundLog); //记录退款流水 storeFlowService.refundOrder(afterSale); } /** * 退款通知 * * @param paymentMethodEnum 支付渠道 */ public void notify(PaymentMethodEnum paymentMethodEnum, HttpServletRequest request) { //获取支付插件 Payment payment = (Payment) SpringContextUtil.getBean(paymentMethodEnum.getPlugin()); payment.refundNotify(request); } }