MallBizRefund.java 7.95 KB
package com.diligrp.cashier.mall.model;

import com.diligrp.cashier.mall.domain.rtmall.co.RefundCO;
import com.diligrp.cashier.mall.domain.rtmall.vo.RefundVO;
import com.diligrp.cashier.mall.property.RtMallDynamicProperty;
import com.diligrp.cashier.mall.type.RefundState;
import com.diligrp.cashier.mall.util.MallSnowflakeKeyManager;
import com.diligrp.cashier.shared.domain.BaseDO;
import com.diligrp.cashier.shared.util.SpringContextUtils;
import com.diligrp.cashier.trade.type.SnowflakeKey;
import org.springframework.beans.BeanUtils;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

/**
 * MallBizRefund
 * 退款数据量应该不会太大 主键自增即可
 * @author dengwei
 */
public class MallBizRefund extends BaseDO {
    /**
     * 退款单号-系统生成
     */
    private String refundTradeNo;

    /**
     * 支付单号(biz_payment)
     */
    private String payTradeNo;

    /**
     * 业务侧退款单号
     */
    private String refundBn;

    /**
     * 业务侧订单号
     */
    private String orderId;

    /**
     * 业务侧流水号
     */
    private String tradeId;

    /**
     * dili退款流水号
     */
    private String refundTradeId;

    /**
     * dili交易流水号
     */
    private String payTradeId;

    /**
     * dili客户卡号
     */
    private String refundCardNo;

    /**
     * dili客户id
     */
    private Long refundUserId;

    /**
     * dili客户名称
     */
    private String refundUsername;

    /**
     * dili账号id
     */
    private Long refundAccountId;

    /**
     * dili退款成功时间
     */
    private LocalDateTime refundTime;

    /**
     * 退款金额分
     */
    private Long refundFee;

    /**
     * 退运费分
     */
    private Long freightFee;

    /**
     * 退款状态
     * @see RefundState
     */
    private Integer refundState;

    /**
     * 退款原因
     */
    private String refundReason;

    /**
     * 退款回调地址
     */
    private String refundCallback;

    /**
     * 创建人名称
     */
    private String createrName;

    /**
     * 拒绝原因
     */
    private String refuseReason;

    /**
     * 退款商品列表
     */
    private List<MallBizRefundItem> refundItemList;

    public String getRefundTradeNo() {
        return refundTradeNo;
    }

    public void setRefundTradeNo(String refundTradeNo) {
        this.refundTradeNo = refundTradeNo;
    }

    public String getPayTradeNo() {
        return payTradeNo;
    }

    public void setPayTradeNo(String payTradeNo) {
        this.payTradeNo = payTradeNo;
    }

    public String getRefundBn() {
        return refundBn;
    }

    public void setRefundBn(String refundBn) {
        this.refundBn = refundBn;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public String getTradeId() {
        return tradeId;
    }

    public void setTradeId(String tradeId) {
        this.tradeId = tradeId;
    }

    public String getRefundTradeId() {
        return refundTradeId;
    }

    public void setRefundTradeId(String refundTradeId) {
        this.refundTradeId = refundTradeId;
    }

    public String getPayTradeId() {
        return payTradeId;
    }

    public void setPayTradeId(String payTradeId) {
        this.payTradeId = payTradeId;
    }

    public String getRefundCardNo() {
        return refundCardNo;
    }

    public void setRefundCardNo(String refundCardNo) {
        this.refundCardNo = refundCardNo;
    }

    public Long getRefundUserId() {
        return refundUserId;
    }

    public void setRefundUserId(Long refundUserId) {
        this.refundUserId = refundUserId;
    }

    public String getRefundUsername() {
        return refundUsername;
    }

    public void setRefundUsername(String refundUsername) {
        this.refundUsername = refundUsername;
    }

    public Long getRefundAccountId() {
        return refundAccountId;
    }

    public void setRefundAccountId(Long refundAccountId) {
        this.refundAccountId = refundAccountId;
    }

    public LocalDateTime getRefundTime() {
        return refundTime;
    }

    public void setRefundTime(LocalDateTime refundTime) {
        this.refundTime = refundTime;
    }

    public Long getRefundFee() {
        return refundFee;
    }

    public void setRefundFee(Long refundFee) {
        this.refundFee = refundFee;
    }

    public Long getFreightFee() {
        return freightFee;
    }

    public void setFreightFee(Long freightFee) {
        this.freightFee = freightFee;
    }

    public Integer getRefundState() {
        return refundState;
    }

    public void setRefundState(Integer refundState) {
        this.refundState = refundState;
    }

    public String getRefundReason() {
        return refundReason;
    }

    public void setRefundReason(String refundReason) {
        this.refundReason = refundReason;
    }

    public String getRefundCallback() {
        return refundCallback;
    }

    public void setRefundCallback(String refundCallback) {
        this.refundCallback = refundCallback;
    }

    public String getCreaterName() {
        return createrName;
    }

    public void setCreaterName(String createrName) {
        this.createrName = createrName;
    }

    public String getRefuseReason() {
        return refuseReason;
    }

    public void setRefuseReason(String refuseReason) {
        this.refuseReason = refuseReason;
    }

    public List<MallBizRefundItem> getRefundItemList() {
        return refundItemList;
    }

    public void setRefundItemList(List<MallBizRefundItem> refundItemList) {
        this.refundItemList = refundItemList;
    }

    /**
     * of
     */
    public static MallBizRefund of(final RefundCO refundCo,
                                   final MallBizOrder mallBizOrder,
                                   final MallBizPaymentOrder mallBizPaymentOrder) {
        MallSnowflakeKeyManager snowflakeKeyManager = SpringContextUtils.getBean(MallSnowflakeKeyManager.class);

        MallBizRefund mallBizRefund = new MallBizRefund();
        BeanUtils.copyProperties(refundCo, mallBizRefund);

        mallBizRefund.setOrderId(mallBizOrder.getOrderId());
        mallBizRefund.setRefundTradeNo(snowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_REFUND_ID).toString());
        mallBizRefund.setTradeId(mallBizPaymentOrder.getTradeId());
        mallBizRefund.setPayTradeNo(mallBizPaymentOrder.getPayTradeNo());
        mallBizRefund.setPayTradeId(mallBizPaymentOrder.getPayTradeId());
        mallBizRefund.setCreaterName(refundCo.getUserCode());

        // 回调地址
        RtMallDynamicProperty rtMallDynamicProperty = SpringContextUtils.getBean(RtMallDynamicProperty.class);
        RtMallDynamicProperty.AppSecretDynamicProperty property = rtMallDynamicProperty.getBySourceAndType(mallBizOrder.getSource(), mallBizOrder.getOrderType());
        mallBizRefund.setRefundCallback(property.getCallbackDomain());

        // 退款商品明细
        Optional.ofNullable(refundCo.getReturnItemList())
                .ifPresent(items -> {
                    List<MallBizRefundItem> list = items.stream().map(item -> {
                        MallBizRefundItem mallBizRefundItem = new MallBizRefundItem();
                        BeanUtils.copyProperties(item, mallBizRefundItem);
                        return mallBizRefundItem;
                    }).toList();
                    mallBizRefund.setRefundItemList(list);
                });
        return mallBizRefund;
    }

    /**
     * ofRefundStatusVO VO
     *
     */
    public RefundVO ofRefundVO() {
        RefundVO refundVO = new RefundVO();
        refundVO.setOutRefundNo(this.getRefundTradeNo());
        refundVO.setOutTradeNo(this.getPayTradeNo());
        refundVO.setRefundFee(this.getRefundFee());
        refundVO.setRefundStatus(this.getRefundState());
        refundVO.setRefundTime(this.getRefundTime());
        refundVO.setRefuseReason(this.getRefuseReason());
        return refundVO;
    }
}