package com.ghy.order.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ghy.common.annotation.Excel;
import com.ghy.common.core.domain.BaseEntity;

/**
 * 售后记录对象 after_service_record
 *
 * @author clunt
 * @date 2022-09-25
 */
@Data
public class AfterServiceRecord extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** $column.columnComment */
    private String id;

    /** 客户原因类型 */
    @Excel(name = "客户原因类型")
    private Long customerReasonType;

    /** 客户具体原因 */
    @Excel(name = "客户具体原因")
    private String customerReason;

    /** 子单id */
    @Excel(name = "子单id")
    private Long orderDetailId;

    /** 操作原因：1为申请退款，2为发起售后 */
    @Excel(name = "操作原因：1为申请退款，2为发起售后")
    private Long operType;

    /** 师傅反馈结果：0为拒绝，1为同意，2为上门补做/重做，3重做/补做完成 */
    @Excel(name = "师傅反馈结果：0为拒绝，1为同意，2为上门补做/重做，3重做/补做完成")
    private Long workerFeedbackResult;

    /** 师傅反馈原因类型：1为客户原因，2为师傅原因，3为其他 */
    @Excel(name = "师傅反馈原因类型：1为客户原因，2为师傅原因，3为其他")
    private Long workerFeedbackReasonType;

    /** 师傅反馈原因描述 */
    @Excel(name = "师傅反馈原因描述")
    private String workerFeedbackReason;

    /** 师傅反馈图片 */
    @Excel(name = "师傅反馈图片")
    private String workerFeedbackImages;

    /** 本单退款金额 */
    @Excel(name = "本单退款金额")
    private BigDecimal refund;

    public BigDecimal getRefund() {
        return refund;
    }

    public void setRefund(BigDecimal refund) {
        this.refund = refund;
    }

    /** 售后状态：0-进行中，1-已完成，2-已取消，3-已超时 */
    @Excel(name = "售后状态：0-进行中，1-已完成，2-已取消，3-已超时")
    private Integer afterServiceStatus;


    /** 协商后的退款金额 */
    @Excel(name = "协商后的退款金额")
    private BigDecimal agreedRefund;

    /** 平台退款金额 */
    @Excel(name = "平台退款金额")
    private BigDecimal platformRefund;

    /** 客户最终确认：0为不同意，1为同意 */
    @Excel(name = "客户最终确认：0为不同意，1为同意，2为取消")
    private Long customerFinalCheck;

    @Excel(name = "最终原路返还的金额")
    private BigDecimal originalRefund;

    private Date refundApplyTime;

    /** 客户是否同意上门重做方案：0-未处理，1-同意，2-不同意 */
    @Excel(name = "客户是否同意上门重做方案：0-未处理，1-同意，2-不同意")
    private Integer customerAgreeRedo;

    /** 客户操作时间 */
    @Excel(name = "客户操作时间")
    private Date customerOperationTime;

    /** 重做/补做完成时间 */
    @Excel(name = "重做/补做完成时间")
    private Date redoCompleteTime;

    /** 重做/补做完成备注 */
    @Excel(name = "重做/补做完成备注")
    private String redoCompleteRemark;

    /** 重做/补做完成图片 */
    @Excel(name = "重做/补做完成图片")
    private String redoCompleteImages;

    /** 是否自动处理：0-否，1-是（用于防止重复处理） */
    @Excel(name = "是否自动处理：0-否，1-是")
    private Integer isAutoProcessed;

    /** 售后大类：1-商品售后，2-服务售后 */
    @Excel(name = "售后大类：1-服务售后，2-商品售后")
    private Integer afterServiceCategory;

    /** 售后类型：1-未收到货退单退款，2-未收到货退款，3-已收到货退款退货 */
    @Excel(name = "售后类型：1-未收到货退单退款，2-未收到货退款，3-已收到货退款退货")
    private Integer afterServiceType;

    /** 退货状态：0-待处理，1-同意退货，2-拒绝退货，3-客户已发货，4-商家已收货，5-退款完成 */
    @Excel(name = "退货状态：0-待处理，1-同意退货，2-拒绝退货，3-客户已发货，4-商家已收货，5-退款完成")
    private Integer returnStatus;

    /** 退货地址 */
    @Excel(name = "退货地址")
    private String returnAddress;

    /** 退货联系人 */
    @Excel(name = "退货联系人")
    private String returnContact;

    /** 退货联系电话 */
    @Excel(name = "退货联系电话")
    private String returnPhone;

    /** 退货类型：1=发快递/物流，2=送货上门，3=自提 */
    @Excel(name = "退货类型：1=发快递/物流，2=送货上门，3=自提")
    private Integer returnType;

    /** 退货备注 */
    @Excel(name = "退货备注")
    private String returnRemark;

    /** 退货图片 */
    @Excel(name = "退货图片")
    private String returnImages;

    /** 退货物流单号 */
    @Excel(name = "退货物流单号")
    private String returnTrackingNumber;

    /** 退货发货时间 */
    @Excel(name = "退货发货时间")
    private Date returnShipTime;

    /** 商家收货时间 */
    @Excel(name = "商家收货时间")
    private Date merchantReceiveTime;

    /** 师傅重发/补发方案：1-重发/补发，您无需退货，2-重发/补发前，您需先退货，3-请您退回商品，给您换货，4-请退回商品，为您售后换货 */
    @Excel(name = "师傅重发/补发方案")
    private Integer workerResendPlan;

    /** 师傅选择重发/补发方案时间 */
    @Excel(name = "师傅选择重发/补发方案时间")
    private Date workerResendPlanTime;

    /** 师傅重发/补发时间 */
    @Excel(name = "师傅重发/补发时间", cellType = Excel.ColumnType.STRING)
    private Date workerResendTime;

    /** 师傅重发/补发方式：1-快递/物流，2-送货上门，3-自提 */
    @Excel(name = "师傅重发/补发方式：1-快递/物流，2-送货上门，3-自提")
    private Integer workerResendType;

    /** 师傅重发/补发物流单号（快递/物流时必填） */
    @Excel(name = "师傅重发/补发物流单号")
    private String workerResendTrackingNumber;

    /** 师傅收货状态：1-未发货，2-已发货在途，3-已收货，4-售后保障期 */
    @Excel(name = "师傅收货状态：1-未发货，2-已发货在途，3-已收货，4-售后保障期")
    private Integer workerReceiveStatus;

    /** 师傅同意处理方式：1-即时退单退款，2-货物拦截后退单退款，3-快递返回货物后退单退款，4-退回货物后退单退款 */
    @Excel(name = "师傅同意处理方式：1-即时退单退款，2-货物拦截后退单退款，3-快递返回货物后退单退款，4-退回货物后退单退款")
    private Integer workerAgreeType;

    /** 师傅收货确认：0-未收货，1-已收货 */
    @Excel(name = "师傅收货确认：0-未收货，1-已收货")
    private Integer workerReceiveConfirm;

    /** 师傅重发/补发备注 */
    @Excel(name = "师傅重发/补发备注")
    private String workerResendRemark;

    /** 师傅重发/补发图片 */
    @Excel(name = "师傅重发/补发图片")
    private String workerResendImages;

    /** 客户不同意图片 */
    @Excel(name = "客户不同意图片")
    private String customerDisagreeImages;

    /** 客户不同意理由 */
    @Excel(name = "客户不同意理由")
    private String customerDisagreeReason;

    /** 售后纠纷平台处理原因 */
    @Excel(name = "售后纠纷平台处理原因")
    private String platformHandleReason;

    /** 子单号（用于显示，非数据库字段） */
    private String orderDetailCode;

    /** 子单ID列表（用于IN查询，非数据库字段） */
    private String orderDetailIds;

    private boolean excludeAfterServiceFinished;

    private List<AfterServiceImgs> imgsList;

    private Boolean needImgs = true;
}
