package com.ruoyi.system.domain;

import java.util.Date;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.xss.Xss;

/**
 * 项目管理对象 risk_project
 */
public class RiskProject extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 项目ID */
    @Excel(name = "项目ID", cellType = ColumnType.NUMERIC)
    private Long projectId;

    /** 项目编号 */
    @Excel(name = "项目编号")
    private String projectCode;

    /** 项目名称 */
    @Excel(name = "项目名称")
    private String projectName;

    /** 项目类型 */
    @Excel(name = "项目类型", readConverterExp = "1=股权投资,2=债权投资,3=并购重组,4=基金投后")
    private String projectType;

    /** 所属机构 */
    @Excel(name = "所属机构")
    private String orgName;

    /** 客户名称 */
    @Excel(name = "客户名称")
    private String clientName;

    /** 项目经理 */
    @Excel(name = "项目经理")
    private String projectManager;

    /** 评估师 */
    @Excel(name = "评估师")
    private String assessor;

    /** 风险等级 */
    @Excel(name = "风险等级", readConverterExp = "1=低,2=中,3=高")
    private String riskLevel;

    /** 项目状态 */
    @Excel(name = "项目状态", readConverterExp = "0=立项中,1=评估中,2=复核中,3=已完成")
    private String projectStatus;

    /** 截止日期 */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @Excel(name = "截止日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date dueDate;

    public Long getProjectId()
    {
        return projectId;
    }

    public void setProjectId(Long projectId)
    {
        this.projectId = projectId;
    }

    @Xss(message = "项目编号不能包含脚本字符")
    @NotBlank(message = "项目编号不能为空")
    @Size(min = 0, max = 64, message = "项目编号长度不能超过64个字符")
    public String getProjectCode()
    {
        return projectCode;
    }

    public void setProjectCode(String projectCode)
    {
        this.projectCode = projectCode;
    }

    @Xss(message = "项目名称不能包含脚本字符")
    @NotBlank(message = "项目名称不能为空")
    @Size(min = 0, max = 100, message = "项目名称长度不能超过100个字符")
    public String getProjectName()
    {
        return projectName;
    }

    public void setProjectName(String projectName)
    {
        this.projectName = projectName;
    }

    @NotBlank(message = "项目类型不能为空")
    public String getProjectType()
    {
        return projectType;
    }

    public void setProjectType(String projectType)
    {
        this.projectType = projectType;
    }

    @Xss(message = "所属机构不能包含脚本字符")
    @Size(min = 0, max = 64, message = "所属机构长度不能超过64个字符")
    public String getOrgName()
    {
        return orgName;
    }

    public void setOrgName(String orgName)
    {
        this.orgName = orgName;
    }

    @Xss(message = "客户名称不能包含脚本字符")
    @Size(min = 0, max = 64, message = "客户名称长度不能超过64个字符")
    public String getClientName()
    {
        return clientName;
    }

    public void setClientName(String clientName)
    {
        this.clientName = clientName;
    }

    @Xss(message = "项目经理不能包含脚本字符")
    @Size(min = 0, max = 32, message = "项目经理长度不能超过32个字符")
    public String getProjectManager()
    {
        return projectManager;
    }

    public void setProjectManager(String projectManager)
    {
        this.projectManager = projectManager;
    }

    @Xss(message = "评估师不能包含脚本字符")
    @Size(min = 0, max = 32, message = "评估师长度不能超过32个字符")
    public String getAssessor()
    {
        return assessor;
    }

    public void setAssessor(String assessor)
    {
        this.assessor = assessor;
    }

    public String getRiskLevel()
    {
        return riskLevel;
    }

    public void setRiskLevel(String riskLevel)
    {
        this.riskLevel = riskLevel;
    }

    public String getProjectStatus()
    {
        return projectStatus;
    }

    public void setProjectStatus(String projectStatus)
    {
        this.projectStatus = projectStatus;
    }

    public Date getDueDate()
    {
        return dueDate;
    }

    public void setDueDate(Date dueDate)
    {
        this.dueDate = dueDate;
    }

    @Override
    public String toString()
    {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
            .append("projectId", getProjectId())
            .append("projectCode", getProjectCode())
            .append("projectName", getProjectName())
            .append("projectType", getProjectType())
            .append("orgName", getOrgName())
            .append("clientName", getClientName())
            .append("projectManager", getProjectManager())
            .append("assessor", getAssessor())
            .append("riskLevel", getRiskLevel())
            .append("projectStatus", getProjectStatus())
            .append("dueDate", getDueDate())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("remark", getRemark())
            .toString();
    }
}
