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;
import java.util.List;

/**
 * 自定义报表-字段配置实体
 *
 * @author ruoyi
 * @date 2026-01-30
 */
@Data
@ApiModel("字段配置")
public class ReportField extends BaseEntity {
    private static final long serialVersionUID = 1L;

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

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

    /** 字段编码 */
    @ApiModelProperty("字段编码")
    @Excel(name = "字段编码")
    private String fieldCode;

    /** 字段显示名称 */
    @ApiModelProperty("字段显示名称")
    @Excel(name = "字段名称")
    private String fieldName;

    /** 字段别名 */
    @ApiModelProperty("字段别名")
    private String fieldAlias;

    /** 字段表达式 */
    @ApiModelProperty("字段表达式")
    private String fieldExpr;

    /** 字段类型 */
    @ApiModelProperty("字段类型(string/number/date/datetime/time)")
    @Excel(name = "字段类型")
    private String fieldType;

    /** 显示格式 */
    @ApiModelProperty("显示格式")
    private String fieldFormat;

    /** 小数位数 */
    @ApiModelProperty("小数位数")
    private Integer decimals;

    /** 单位 */
    @ApiModelProperty("单位")
    @Excel(name = "单位")
    private String unit;

    /** 字典类型 */
    @ApiModelProperty("字典类型")
    private String dictType;

    /** 是否默认显示 */
    @ApiModelProperty("是否默认显示")
    private Integer isDefault;

    /** 是否必选 */
    @ApiModelProperty("是否必选")
    private Integer isRequired;

    /** 是否可筛选 */
    @ApiModelProperty("是否可筛选")
    private Integer isFilterable;

    /** 是否可排序 */
    @ApiModelProperty("是否可排序")
    private Integer isSortable;

    /** 是否可聚合 */
    @ApiModelProperty("是否可聚合")
    private Integer isAggregatable;

    /** 默认聚合函数 */
    @ApiModelProperty("默认聚合函数")
    private String aggregateFunc;

    /** 字段分组名称 */
    @ApiModelProperty("字段分组名称")
    @Excel(name = "分组")
    private String groupName;

    /** 列宽度 */
    @ApiModelProperty("列宽度")
    private Integer width;

    /** 最小列宽度 */
    @ApiModelProperty("最小列宽度")
    private Integer minWidth;

    /** 排序号 */
    @ApiModelProperty("排序号")
    private Integer sortOrder;

    /** 状态 */
    @ApiModelProperty("状态")
    private Integer status;

    /** 备注 */
    private String remark;

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

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

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

    /** 支持的条件列表(非数据库字段) */
    private transient List<ReportFieldCondition> conditions;

    /** 需要的关联列表(非数据库字段) */
    private transient List<String> relationCodes;
}
