package com.game.business.domain;

import java.util.Date;

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.game.common.annotation.Excel;
import com.game.common.constant.finance.FinTranAddedInfo;
import com.game.common.constant.finance.FinTranType1;
import com.game.common.constant.finance.FinTranType3;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiModel;
import lombok.Data;

/**
 * 消费记录对象 fin_tran_record
 *
 * @author game
 * @date 2024-06-18
 */
@ApiModel(value = "fin_tran_record", description = "消费记录")
@TableName(value= "fin_tran_record")
@Data
public class FinTranRecord
        {
private static final long serialVersionUID=1L;

    /** $column.columnComment */
    @ApiModelProperty(value = "$column.columnComment")
    @TableId(value = "id" , type = IdType.NONE)
    private Long id;

    /** 当前剩余金币 */
    @ApiModelProperty(value = "当前剩余金币")
    @Excel(name = "当前剩余金币")
    @TableField(value = "after_coin")
    private Double afterCoin;

    /** 当前剩余人民币 */
    @ApiModelProperty(value = "当前剩余人民币")
    @Excel(name = "当前剩余人民币")
    @TableField(value = "after_money")
    private Double afterMoney;

    /** 当前剩余映票 */
    @ApiModelProperty(value = "当前剩余映票")
    @Excel(name = "当前剩余映票")
    @TableField(value = "after_ticket")
    private Double afterTicket;

    /** 当前剩余余额 */
    @ApiModelProperty(value = "当前剩余余额")
    @Excel(name = "当前剩余余额")
    @TableField(value = "after_diamond_coin")
    private Double afterDiamondCoin;

    /** 直属上级代理（后台管理员） */
    @ApiModelProperty(value = "直属上级代理（后台管理员）")
    @Excel(name = "直属上级代理" , readConverterExp = "后=台管理员")
    @TableField(value = "agent_id")
    private Long agentId;

    /** 交易金币 */
    @ApiModelProperty(value = "交易金币")
    @Excel(name = "交易金币")
    @TableField(value = "coin_change")
    private Double coinChange;

    /** 变动余额 */
    @ApiModelProperty(value = "变动余额")
    @Excel(name = "变动余额")
    @TableField(value = "diamond_coin_change")
    private Double diamondCoinChange;

    /**  佣金关系人 */
    @ApiModelProperty(value = " 佣金关系人")
    @Excel(name = " 佣金关系人")
    @TableField(value = "commission_related_uid")
    private Long commissionRelatedUid;

    /** 消费金额,基于此字段分佣（值如：礼物的价格*数量） */
    @ApiModelProperty(value = "消费金额,基于此字段分佣（值如：礼物的价格*数量）")
    @Excel(name = "消费金额,基于此字段分佣" , readConverterExp = "值=如：礼物的价格*数量")
    @TableField(value = "consumption_coin")
    private Double consumptionCoin;

    /** 消费人民币,基于此字段分佣（如：充值人民币） */
    @ApiModelProperty(value = "消费人民币,基于此字段分佣（如：充值人民币）")
    @Excel(name = "消费人民币,基于此字段分佣" , readConverterExp = "如=：充值人民币")
    @TableField(value = "consumption_money")
    private Double consumptionMoney;

    /** 创建时间 */
    @ApiModelProperty(value = "创建时间")
    @TableField(value = "create_time")
    private Date createTime;

    /** 货币类型 1:人民币 2:金币 3:映票 4：余额 */
    @ApiModelProperty(value = "货币类型 1:人民币 2:金币 3:映票 4：余额")
    @Excel(name = "货币类型 1:人民币 2:金币 3:映票 4：余额")
    @TableField(value = "currency_type")
    private Integer currencyType;

    /**  送礼人ID */
    @ApiModelProperty(value = " 送礼人ID")
    @Excel(name = " 送礼人ID")
    @TableField(value = "from_uid")
    private Long fromUid;

    /** 此记录关联的购买的商品的ID */
    @ApiModelProperty(value = "此记录关联的购买的商品的ID")
    @Excel(name = "此记录关联的购买的商品的ID")
    @TableField(value = "goods_id")
    private Long goodsId;

    /** 家族ID */
    @ApiModelProperty(value = "家族ID")
    @Excel(name = "家族ID")
    @TableField(value = "guild_id")
    private Long guildId;

    /** 上级经纪人ID，对应AdminUser表 */
    @ApiModelProperty(value = "上级经纪人ID，对应AdminUser表")
    @Excel(name = "上级经纪人ID，对应AdminUser表")
    @TableField(value = "manager_co_id")
    private Long managerCoId;

    /** 上级经纪人ID，对应AdminUser表 */
    @ApiModelProperty(value = "上级经纪人ID，对应AdminUser表")
    @Excel(name = "上级经纪人ID，对应AdminUser表")
    @TableField(value = "manager_id")
    private Long managerId;

    /** 人民币变动 */
    @ApiModelProperty(value = "人民币变动")
    @Excel(name = "人民币变动")
    @TableField(value = "money_change")
    private Double moneyChange;

    /**  第三表记录id（如：支付记录表id，提现记录表id，游戏记录id） */
    @ApiModelProperty(value = " 第三表记录id（如：支付记录表id，提现记录表id，游戏记录id）")
    @Excel(name = " 第三表记录id" , readConverterExp = "如=：支付记录表id，提现记录表id，游戏记录id")
    @TableField(value = "order_id")
    private Long orderId;

    /** 收益比例 */
    @ApiModelProperty(value = "收益比例")
    @Excel(name = "收益比例")
    @TableField(value = "perc")
    private Double perc;

    /**  (礼物、守护、坐骑、靓号、短视频、动态、svpi、贵族、游戏)数量 */
    @ApiModelProperty(value = " (礼物、守护、坐骑、靓号、短视频、动态、svpi、贵族、游戏)数量")
    @Excel(name = " (礼物、守护、坐骑、靓号、短视频、动态、svpi、贵族、游戏)数量")
    @TableField(value = "pro_count")
    private Long proCount;

    /**  (礼物、守护、坐骑、靓号、短视频、动态、svpi、贵族、游戏、充值)ID */
    @ApiModelProperty(value = " (礼物、守护、坐骑、靓号、短视频、动态、svpi、贵族、游戏、充值)ID")
    @Excel(name = " (礼物、守护、坐骑、靓号、短视频、动态、svpi、贵族、游戏、充值)ID")
    @TableField(value = "pro_id")
    private Long proId;

    /** 备注 */
    @ApiModelProperty(value = "备注")
    @Excel(name = "备注")
    @TableField(value = "remarks")
    private String remarks;

    /**  场景id（视频直播房间id，语音直播房间id，一对一直播房间id） */
    @ApiModelProperty(value = " 场景id（视频直播房间id，语音直播房间id，一对一直播房间id）")
    @Excel(name = " 场景id" , readConverterExp = "视=频直播房间id，语音直播房间id，一对一直播房间id")
    @TableField(value = "scene_id1")
    private Long sceneId1;

    /**  某次直播时间段内的一个标识 */
    @ApiModelProperty(value = " 某次直播时间段内的一个标识")
    @Excel(name = " 某次直播时间段内的一个标识")
    @TableField(value = "scene_id2")
    private String sceneId2;

    /**  直播房间类型(1.视频直播房间，2.语音直播房间，3.一对一直播房间，7.私聊，8.群聊，9.短视频) */
    @ApiModelProperty(value = " 直播房间类型(1.视频直播房间，2.语音直播房间，3.一对一直播房间，7.私聊，8.群聊，9.短视频)")
    @Excel(name = " 直播房间类型(1.视频直播房间，2.语音直播房间，3.一对一直播房间，7.私聊，8.群聊，9.短视频)")
    @TableField(value = "scene_type")
    private Long sceneType;

    /** 映票变动 */
    @ApiModelProperty(value = "映票变动")
    @Excel(name = "映票变动")
    @TableField(value = "ticket_change")
    private Double ticketChange;

    /**  受益的人ID */
    @ApiModelProperty(value = " 受益的人ID")
    @Excel(name = " 受益的人ID")
    @TableField(value = "to_uid")
    private Long toUid;

    /** 交易组ID，ID相同说明是一次交易产生的 */
    @ApiModelProperty(value = "交易组ID，ID相同说明是一次交易产生的")
    @Excel(name = "交易组ID，ID相同说明是一次交易产生的")
    @TableField(value = "tran_group_id")
    private Long tranGroupId;

    /**  1级交易类型 */
    @ApiModelProperty(value = " 1级交易类型")
    @Excel(name = " 1级交易类型")
    @TableField(value = "tran_type1")
    private Integer tranType1;

    /**  2级交易类型 FinTranType2 */
    @ApiModelProperty(value = " 2级交易类型 FinTranType2")
    @Excel(name = " 2级交易类型 FinTranType2")
    @TableField(value = "tran_type2")
    private Integer tranType2;

    /**  3级交易类型 FinTranType3 */
    @ApiModelProperty(value = " 3级交易类型 FinTranType3")
    @Excel(name = " 3级交易类型 FinTranType3")
    @TableField(value = "tran_type3")
    private Integer tranType3;

    /**  用户ID */
    @ApiModelProperty(value = " 用户ID")
    @Excel(name = " 用户ID")
    @TableField(value = "uid")
    private Long uid;

    /**  是否已满足提现 */
    @ApiModelProperty(value = " 是否已满足提现 0：未满足  1：已满足")
    @Excel(name = " 是否已满足提现")
    @TableField(value = "withdraw_flag")
    private Integer withdrawFlag;

    /**
     * 初始化 基本信息
     *
     * @param info      记录的基础信息
     * @param tranType3 记录三级类型
     * @param tranType1 记录一级类型
     * @return
     */
    public static FinTranRecord initFinTranRecordSomeParams(FinTranAddedInfo info, FinTranType3 tranType3, FinTranType1 tranType1, AppUser user) {
        FinTranRecord tran = new FinTranRecord();
        tran.proId = info.proId;
        tran.proCount = info.proCount.longValue();
        tran.goodsId = info.goodsId;
        tran.orderId = info.orderId;
        tran.sceneId1 = info.sceneId1;
        tran.sceneType = info.sceneType.longValue();
        tran.sceneId2 = info.sceneId2;
        tran.remarks = info.remarks;
        tran.tranType3 = tranType3.getType();
        tran.tranType2 = tranType3.getTranType2().getType();
        tran.tranType1 = tranType1.getType();
        tran.uid = user.getUserid();
        tran.agentId = user.getAgentId();
        tran.guildId = user.getGuildId();
        tran.managerId = user.getManagerId();
        tran.managerCoId = user.getManagerCoId();
        tran.afterMoney = user.getAmount();
        tran.afterCoin = user.getCoin();
        tran.afterTicket = user.getVotes();
        tran.afterDiamondCoin = user.getDiamondCoin();
        tran.createTime = new Date();
        tran.fromUid = user.getUserid();
        tran.toUid = user.getUserid();
        return tran;
    }

}