package com.ruoyi.credit.domain;

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

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.credit.annotation.EncryptedField;

/**
 * 员工信息对象 dc_employee_info
 * 
 * @author ruoyi
 * @date 2025-12-22
 */
public class EmployeeInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 员工ID */
    private Long employeeId;

    /** 员工工号 */
    @Excel(name = "员工工号")
    private String employeeNumber;

    /** 员工姓名(加密) */
    @Excel(name = "员工姓名")
    @EncryptedField(algorithm = "AES-256-GCM")
    private String employeeName;

    /** 身份证号(加密) */
    @Excel(name = "身份证号")
    @EncryptedField(algorithm = "AES-256-GCM")
    private String idCardNumber;

    /** 岗位 */
    @Excel(name = "岗位")
    private String position;

    /** 部门 */
    @Excel(name = "部门")
    private String department;

    /** 薪资单位 */
    @Excel(name = "薪资单位")
    private String salaryUnit;

    /** 小时薪资(加密) */
    @Excel(name = "小时薪资")
    @EncryptedField(algorithm = "AES-256-GCM")
    private BigDecimal hourlySalary;

    /** 日薪标准(加密) */
    @Excel(name = "日薪标准")
    @EncryptedField(algorithm = "AES-256-GCM")
    private BigDecimal dailySalary;

    /** 月薪标准(加密) */
    @Excel(name = "月薪标准")
    @EncryptedField(algorithm = "AES-256-GCM")
    private BigDecimal monthlySalary;

    /** 员工状态 */
    @Excel(name = "员工状态")
    private String employeeStatus;

    /** 入职日期 */
    @Excel(name = "入职日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date hireDate;

    /** 联系电话(加密) */
    @Excel(name = "联系电话")
    @EncryptedField(algorithm = "AES-256-GCM")
    private String contactPhone;

    /** 所属员工库ID */
    @Excel(name = "所属员工库ID")
    private Long libraryId;

    /** 是否临时员工 */
    @Excel(name = "是否临时员工")
    private Boolean isTemporary;

    /** 部门ID */
    @Excel(name = "部门ID")
    private Long deptId;

    // 薪资单位常量
    public static final String SALARY_UNIT_HOURLY = "HOURLY";
    public static final String SALARY_UNIT_DAILY = "DAILY";
    public static final String SALARY_UNIT_MONTHLY = "MONTHLY";

    // 员工状态常量
    public static final String STATUS_ACTIVE = "ACTIVE";
    public static final String STATUS_INACTIVE = "INACTIVE";
    public static final String STATUS_ON_LEAVE = "ON_LEAVE";
    public static final String STATUS_TERMINATED = "TERMINATED";

    public void setEmployeeId(Long employeeId) 
    {
        this.employeeId = employeeId;
    }

    public Long getEmployeeId() 
    {
        return employeeId;
    }

    public void setEmployeeNumber(String employeeNumber) 
    {
        this.employeeNumber = employeeNumber;
    }

    public String getEmployeeNumber() 
    {
        return employeeNumber;
    }

    public void setEmployeeName(String employeeName) 
    {
        this.employeeName = employeeName;
    }

    public String getEmployeeName() 
    {
        return employeeName;
    }

    public void setIdCardNumber(String idCardNumber) 
    {
        this.idCardNumber = idCardNumber;
    }

    public String getIdCardNumber() 
    {
        return idCardNumber;
    }

    public void setPosition(String position) 
    {
        this.position = position;
    }

    public String getPosition() 
    {
        return position;
    }

    public void setDepartment(String department) 
    {
        this.department = department;
    }

    public String getDepartment() 
    {
        return department;
    }

    public void setSalaryUnit(String salaryUnit) 
    {
        this.salaryUnit = salaryUnit;
    }

    public String getSalaryUnit() 
    {
        return salaryUnit;
    }

    public void setHourlySalary(BigDecimal hourlySalary) 
    {
        this.hourlySalary = hourlySalary;
    }

    public BigDecimal getHourlySalary() 
    {
        return hourlySalary;
    }

    public void setDailySalary(BigDecimal dailySalary) 
    {
        this.dailySalary = dailySalary;
    }

    public BigDecimal getDailySalary() 
    {
        return dailySalary;
    }

    public void setMonthlySalary(BigDecimal monthlySalary) 
    {
        this.monthlySalary = monthlySalary;
    }

    public BigDecimal getMonthlySalary() 
    {
        return monthlySalary;
    }

    public void setEmployeeStatus(String employeeStatus) 
    {
        this.employeeStatus = employeeStatus;
    }

    public String getEmployeeStatus() 
    {
        return employeeStatus;
    }

    public void setHireDate(Date hireDate) 
    {
        this.hireDate = hireDate;
    }

    public Date getHireDate() 
    {
        return hireDate;
    }

    public void setContactPhone(String contactPhone) 
    {
        this.contactPhone = contactPhone;
    }

    public String getContactPhone() 
    {
        return contactPhone;
    }

    public void setLibraryId(Long libraryId) 
    {
        this.libraryId = libraryId;
    }

    public Long getLibraryId() 
    {
        return libraryId;
    }

    public void setIsTemporary(Boolean isTemporary) 
    {
        this.isTemporary = isTemporary;
    }

    public Boolean getIsTemporary() 
    {
        return isTemporary;
    }

    public void setDeptId(Long deptId) 
    {
        this.deptId = deptId;
    }

    public Long getDeptId() 
    {
        return deptId;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("employeeId", getEmployeeId())
            .append("employeeNumber", getEmployeeNumber())
            .append("employeeName", getEmployeeName())
            .append("idCardNumber", getIdCardNumber())
            .append("position", getPosition())
            .append("department", getDepartment())
            .append("salaryUnit", getSalaryUnit())
            .append("hourlySalary", getHourlySalary())
            .append("dailySalary", getDailySalary())
            .append("monthlySalary", getMonthlySalary())
            .append("employeeStatus", getEmployeeStatus())
            .append("hireDate", getHireDate())
            .append("contactPhone", getContactPhone())
            .append("libraryId", getLibraryId())
            .append("isTemporary", getIsTemporary())
            .append("createTime", getCreateTime())
            .append("updateTime", getUpdateTime())
            .append("deptId", getDeptId())
            .toString();
    }
}