package com.yiqi.order.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiqi.common.annotation.Excel;
import com.yiqi.common.core.domain.BaseEntity;
import com.yiqi.common.enums.DeleteStatus;
import com.yiqi.common.enums.OrderRechargeStatus;
import com.yiqi.common.utils.DateUtils;
import com.yiqi.recharge.domain.RechargePasswordCard;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

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

/**
 * 充值订单对象 order_recharge
 *
 * @author ruoyi
 * @date 2023-09-27
 */
@ApiModel("充值订单")
@TableName("order_recharge")
@Data
public class OrderRecharge extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @ApiModelProperty("主键ID")

    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 订单编号
     */
    @Excel(name = "订单编号")
    @ApiModelProperty("订单编号")
    private String orderNo;

    /**
     * 门店ID
     */
    @Excel(name = "门店ID")
    @ApiModelProperty("门店ID")
    private Long storeId;

    /**
     * 来源类型
     */
    @Excel(name = "来源类型")
    @ApiModelProperty("来源类型")
    private String sourceType;

    /**
     * 订单来源
     */
    @Excel(name = "订单来源")
    @ApiModelProperty("订单来源")
    private String source;

    /**
     * 客户ID
     */
    @Excel(name = "客户ID")
    @ApiModelProperty("客户ID")
    private Long appUserId;

    @ApiModelProperty("客户姓名")
    @TableField(exist = false)
    private String appUserName;

    @ApiModelProperty("手机号")
    @TableField(exist = false)
    private String appUserPhone;

    @ApiModelProperty("储值门店")
    @TableField(exist = false)
    private String storeName;

    /**
     * 支付时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty("支付时间")
    private Date payTime;

    /**
     * 支付金额
     */
    @Excel(name = "支付金额")
    @ApiModelProperty("支付金额")
    private BigDecimal payAmount;

    /**
     * 现金支付金额
     */
    @Excel(name = "现金支付金额")
    @ApiModelProperty("现金支付金额")
    private BigDecimal cashPayAmount;

    /**
     * 微信支付金额
     */
    @Excel(name = "微信支付金额")
    @ApiModelProperty("微信支付金额")
    private BigDecimal wxPayAmount;

    /**
     * 支付宝支付金额
     */
    @Excel(name = "支付宝支付金额")
    @ApiModelProperty("支付宝支付金额")
    private BigDecimal aliPayAmount;

    /**
     * 支付方式（0=微信，1=支付宝，2=现金，5=充值卡）
     */
    @Excel(name = "支付方式", readConverterExp = "0=微信，1=支付宝，2=现金，5=充值卡 9=组合支付")
    @ApiModelProperty("支付方式（0=微信，1=支付宝，2=现金，5=充值卡 9=组合支付）")
    private String payType;

    /**
     * 支付宝/微信支付订单号
     */
    @Excel(name = "支付宝/微信支付订单号")
    @ApiModelProperty("支付宝/微信支付订单号")
    private String outTradeOrderNo;

    /**
     * 充值金额
     */
    @Excel(name = "充值金额")
    @ApiModelProperty("充值金额")
    private BigDecimal rechargeAmount;

    /**
     * 赠送金额
     */
    @Excel(name = "赠送金额")
    @ApiModelProperty("赠送金额")
    private BigDecimal giveAmount;

    /**
     * 赠送积分
     */
    @Excel(name = "赠送积分")
    @ApiModelProperty("赠送积分")
    private Integer givePointAmount;



    @ApiModelProperty("福利金额")
    private BigDecimal welfareAmount;

    /**
     * 参与活动ID
     */
    @Excel(name = "参与活动ID")
    @ApiModelProperty("参与活动ID")
    private Long activityId;

    /**
     * 充值套餐ID
     */
    @Excel(name = "充值套餐ID")
    @ApiModelProperty("充值套餐ID")
    private Long rechargeTypeId;

    /**
     * 充值类型
     */
    @Excel(name = "充值类型")
    @ApiModelProperty("充值类型")
    private String rechargeType;

    /**
     * 订单状态（0=待付款，2=已付款，9=已退款，-1=已取消）
     */
    @Excel(name = "订单状态", readConverterExp = "0=待付款，2=已付款，9=已退款，-1=已取消")
    @ApiModelProperty("订单状态（-1=已取消，0=待付款，2=已付款，9=已退款）")
    private String orderStatus;

    /**
     * 退款状态（0=正常，1=退款申请中，2=退款同意，3=退款拒绝，4=退款取消）
     */
    @Excel(name = "退款状态", readConverterExp = "0==正常，1=退款申请中，2=退款同意处理中，3=退款拒绝，-1=退款取消，9=退款成功")
    @ApiModelProperty("退款状态（0=正常，1=退款申请中，2=退款同意处理中，9=退款成功 3=退款拒绝，-1=退款取消）")
    private String refundStatus;

    /**
     * 支付状态（0=待支付，1=支付成功，-1=支付失败）
     */
    @Excel(name = "支付状态", readConverterExp = "0=待支付，1=支付成功，-1=支付失败")
    @ApiModelProperty("退款状态（0=待支付，1=支付成功，-1=支付失败）")
    private String payStatus;

    /**
     * 退款申请时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @Excel(name = "退款申请时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty("退款申请时间")
    private Date refundApplyTime;

    /**
     * 退款时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @Excel(name = "退款时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty("退款时间")
    private Date refundTime;

    /**
     * 退款金额
     */
    @Excel(name = "退款金额")
    @ApiModelProperty("退款金额")
    private BigDecimal refundAmount;

    /**
     * 退款描述
     */
    @Excel(name = "退款描述")
    @ApiModelProperty("退款描述")
    private String refundDescribe;

    /**
     * 删除状态
     */
    @ApiModelProperty("删除状态")
    private String delFlag;

    /**
     * 订单描述标题
     */
    @Excel(name = "订单描述标题")
    @ApiModelProperty("订单描述标题")
    private String title;

    /**
     * 下单渠道（APP=APP，WXAPP=小程序）
     */
    @Excel(name = "下单渠道", readConverterExp = "APP=APP，WXAPP=小程序")
    @ApiModelProperty("下单渠道（APP=APP，WXAPP=小程序,HQ=系统）")
    private String orderSource;

    /**
     * 是否分段支付
     */
    @Excel(name = "是否分段支付")
    @ApiModelProperty("是否分段支付 N: 否  Y: 是")
    private String isInstalment;


    @ApiModelProperty("充值卡编号")
    private String rechargeCardNo;
    @ApiModelProperty("优惠券抵扣金额")
    private BigDecimal couponDeductAmount;

    @TableField(exist = false)
    private List<OrderRechargeInstalment> orderRechargeInstalments;

    @TableField(exist = false)
    private RechargePasswordCard rechargePasswordCard;
    /**
     * 卡密订单充值
     */
    private static OrderRecharge buildOrderRechargeByCardPassword(){
        OrderRecharge orderRecharge = new OrderRecharge();


        return orderRecharge;
    }

    /**
     * 套餐订单充值
     */
    private static OrderRecharge buildOrderRechargeByRechargeType(){
        OrderRecharge orderRecharge = new OrderRecharge();

        return orderRecharge;
    }

    /**
     * 现金直充订单
     */
    private static OrderRecharge buildOrderRechargeByCash(){
        OrderRecharge orderRecharge = new OrderRecharge();

        return orderRecharge;
    }
}
