package com.engine.salary.report.entity.po;

import com.engine.hrmelog.annotation.ElogTransform;
import com.engine.salary.report.enums.UnitTypeEnum;
import lombok.*;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
//hrsa_salary_statistics_item
//薪酬报表统计子表自定义统计项
@ElogTransform(name = "统计项目")
public class SalaryStatisticsItemPO implements Serializable {

    private static final long serialVersionUID = 5335849418826222822L;

    //主键id
    @ElogTransform(name = "主键id")
    private Long id;

    //统计报表id
    @ElogTransform(name = "报表id")
    private Long statReportId;

    //统计项名称
    @ElogTransform(name = "统计项名称")
    private String itemName;

    //统计项集合
    @ElogTransform(name = "统计项集合")
    private String itemValue;

    /**
     * {
     * "totalValue":"1", 是否有合计列
     * "ratioValue":"1",是否有占比列
     * "m2mValue":"1",是否有环比列
     * "y2yValue":"1",是否有同比列
     * "m2mUpperLimit:",合计环比上限
     * "m2mLowerLimit",合计环比下限
     * "y2yUpperLimit:",合计同比上限
     * "y2yLowerLimit",合计同比下限
     * }
     * jsonToString
     */
    //计数规则
    @ElogTransform(name = "计数规则")
    private String countRule;

    /**
     * {
     * "totalValue":"1", 是否有合计列
     * "ratioValue":"1",是否有占比列
     * "m2mValue":"1",是否有环比列
     * "y2yValue":"1",是否有同比列
     * "m2mUpperLimit:",合计环比上限
     * "m2mLowerLimit",合计环比下限
     * "y2yUpperLimit:",合计同比上限
     * "y2yLowerLimit",合计同比下限
     * }
     * jsonToString
     */
    //求和规则
    @ElogTransform(name = "求和规则")
    private String sumRule;

    /**
     * {
     * "totalValue":"1", 是否有合计列
     * "ratioValue":"1",是否有占比列
     * "m2mValue":"1",是否有环比列
     * "y2yValue":"1",是否有同比列
     * "m2mUpperLimit:",合计环比上限
     * "m2mLowerLimit",合计环比下限
     * "y2yUpperLimit:",合计同比上限
     * "y2yLowerLimit",合计同比下限
     * }
     * jsonToString
     */
    //平均值规则
    @ElogTransform(name = "平均值规则")
    private String avgRule;

    /**
     * {
     * "totalValue":"1", 是否有合计列
     * "ratioValue":"1",是否有占比列
     * "m2mValue":"1",是否有环比列
     * "y2yValue":"1",是否有同比列
     * "m2mUpperLimit:",合计环比上限
     * "m2mLowerLimit",合计环比下限
     * "y2yUpperLimit:",合计同比上限
     * "y2yLowerLimit",合计同比下限
     * }
     * jsonToString
     */
    //最大值规则
    @ElogTransform(name = "最大值规则")
    private String maxRule;

    /**
     * {
     * "totalValue":"1", 是否有合计列
     * "ratioValue":"1",是否有占比列
     * "m2mValue":"1",是否有环比列
     * "y2yValue":"1",是否有同比列
     * "m2mUpperLimit:",合计环比上限
     * "m2mLowerLimit",合计环比下限
     * "y2yUpperLimit:",合计同比上限
     * "y2yLowerLimit",合计同比下限
     * }
     * jsonToString
     */
    //最小值规则
    @ElogTransform(name = "最小值规则")
    private String minRule;

    /**
     * {
     * "totalValue":"1", 是否有合计列
     * "ratioValue":"1",是否有占比列
     * "m2mValue":"1",是否有环比列
     * "y2yValue":"1",是否有同比列
     * "m2mUpperLimit:",合计环比上限
     * "m2mLowerLimit",合计环比下限
     * "y2yUpperLimit:",合计同比上限
     * "y2yLowerLimit",合计同比下限
     * }
     * jsonToString
     */
    //中位数规则
    @ElogTransform(name = "中位数规则")
    private String medianRule;


    /**
     * 最近值
     * <p>
     * "totalValue":"1", 是否使用
     */
    @ElogTransform(name = "最近值是否使用")
    private String lastRule;

    /**
     * 最早值
     * <p>
     * {
     * "totalValue":"1", 是否使用
     * }
     */
    @ElogTransform(name = "最早值是否使用")
    private String oldRule;

    /**
     * 出现最多
     * <p>
     * {
     * "totalValue":"1", 是否使用
     * }
     */
    @ElogTransform(name = "出现最多是否使用")
    private String frequentRule;

    /**
     * 平铺
     * <p>
     * {
     * "totalValue":"1", 是否使用
     * }
     */
    @ElogTransform(name = "平铺是否使用")
    private String tileRule;

    //顺序
    @ElogTransform(name = "顺序")
    private Integer indexValue;

    /**
     * 统计单位
     *
     * @see UnitTypeEnum
     */
    //统计单位
    @ElogTransform(name = "统计单位")
    private Integer unitType;

    //创建时间
    private Date createTime;

    //更新时间
    private Date updateTime;

    //创建人
    private Long creator;

    //是否删除
    private Integer deleteType;

    //租户key
    private String tenantKey;

    private Collection<Long> ids;
}
