package com.ruoyi.ems.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.huashe.common.annotation.Excel;
import com.huashe.common.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * 自定义报表-用户模板实体
 *
 * @author ruoyi
 * @date 2026-01-30
 */
@Data
@ApiModel("用户报表模板")
public class ReportTemplate extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    private Long id;

    /** 模板编码 */
    @ApiModelProperty("模板编码")
    @Excel(name = "模板编码")
    private String templateCode;

    /** 模板名称 */
    @ApiModelProperty("模板名称")
    @Excel(name = "模板名称")
    private String templateName;

    /** 模板描述 */
    @ApiModelProperty("模板描述")
    private String templateDesc;

    /** 数据源编码 */
    @ApiModelProperty("数据源编码")
    @Excel(name = "数据源")
    private String dsCode;

    /** 配置JSON */
    @ApiModelProperty("配置JSON")
    private String configJson;

    /** 是否公开 */
    @ApiModelProperty("是否公开(0-私有,1-公开)")
    private Integer isPublic;

    /** 是否系统模板 */
    @ApiModelProperty("是否系统模板(0-否,1-是)")
    private Integer isSystem;

    /** 使用次数 */
    @ApiModelProperty("使用次数")
    private Integer useCount;

    /** 用户ID */
    @ApiModelProperty("用户ID")
    private Long userId;

    /** 用户名 */
    @ApiModelProperty("用户名")
    @Excel(name = "创建人")
    private String userName;

    /** 部门ID */
    @ApiModelProperty("部门ID")
    private Long deptId;

    /** 状态 */
    @ApiModelProperty("状态(0-禁用,1-启用)")
    private Integer status;

    /** 创建者 */
    private String createBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "创建时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新者 */
    private String updateBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    // ==================== 扩展属性 ====================

    /** 数据源名称(非数据库字段) */
    private transient String dsName;

    /** 解析后的配置对象(非数据库字段) */
    private transient ReportQueryConfig queryConfig;
}