package cn.ppdxzz.domain;

import java.io.Serializable;

/**
 * Description:访客实体类
 * 用于表示访客信息，并实现Serializable接口以便于序列化，这样该类的对象就可以在网络传输、保存到文件等场景下进行序列化和反序列化操作。
 * @Date: 2020/2/18 16:29
 * @Author: PeiChen
 */
public class Visitor implements Serializable {
    // uuid 全球唯一id，用于唯一标识每个访客记录，在数据库操作等场景中可作为主键来区分不同访客
    private String id;
    // 访客姓名，用于记录访客的具体称呼，方便后续识别和查询访客相关信息
    private String name;
    // 访客学号，若访客是学生等有学号标识的群体，可通过该字段存储学号信息，便于按学号进行相关业务操作（如查询、统计等）
    private String sno;
    // 联系方式，存储访客的电话号码等联系信息，方便在需要时与访客进行沟通联系
    private String phone;
    // 访问地址，记录访客访问的具体地点，例如访问的具体校区、办公楼、房间号等信息
    private String place;
    // 来访时间，用于记录访客到达访问地点的具体时间，格式通常遵循一定的日期时间格式（如 yyyy-MM-dd HH:mm:ss）
    private String begin_date;
    // 离开时间，记录访客离开访问地点的时间，初始可能为空字符串，在访客离开时更新为实际离开时间，同样一般遵循日期时间格式
    private String end_date;
    // 到访原因，用于描述访客前来访问的事由，例如参加会议、拜访某人等具体原因说明
    private String visit_result;

    /**
     * 默认构造函数
     * 无参构造函数，当创建Visitor对象时若没有传入具体参数，会调用此构造函数创建一个默认的对象实例，
     * 常用于一些框架在初始化对象或者反射创建对象等场景下。
     */
    public Visitor() {
    }

    /**
     * 带参数的构造函数，用于创建一个完整的访客对象
     * 通过传入各个属性的值，一次性初始化访客对象的所有属性，方便在已知所有访客信息的情况下快速创建对象实例。
     *
     * @param id 访客的ID，传入唯一标识访客的ID值，赋值给对象的id属性，确保每个访客对象具有唯一的标识。
     * @param name 访客的姓名，传入访客的具体姓名信息，赋值给对象的name属性，用于后续对访客姓名相关的操作。
     * @param sno 访客的学号，传入访客对应的学号信息，赋值给对象的sno属性，便于按学号进行数据处理等操作。
     * @param phone 访客的联系方式，传入访客的联系电话等联系方式信息，赋值给对象的phone属性，方便后续沟通联系。
     * @param place 访客访问的地址，传入访客访问的具体地点信息，赋值给对象的place属性，用于记录访问位置相关操作。
     * @param begin_date 访客的来访时间，传入访客到达的具体时间信息，赋值给对象的begin_date属性，记录来访时间情况。
     * @param end_date 访客的离开时间，传入访客离开的时间信息（初始可能为空，后续更新），赋值给对象的end_date属性，记录离开时间情况。
     * @param visit_result 访客到访的原因或结果，传入访客前来访问的具体事由等信息，赋值给对象的visit_result属性，便于知晓访问目的。
     */
    public Visitor(String id, String name, String sno, String phone, String place, String begin_date, String end_date, String visit_result) {
        this.id = id;
        this.name = name;
        this.sno = sno;
        this.phone = phone;
        this.place = place;
        this.begin_date = begin_date;
        this.end_date = end_date;
        this.visit_result = visit_result;
    }

    // 以下是属性的getter和setter方法，用于获取和设置对象的各个属性值，遵循JavaBean规范，方便外部类对对象属性进行访问和修改操作。

    /**
     * 获取访客的ID
     *
     * @return 返回访客对象的ID属性值，供外部类获取该访客的唯一标识信息。
     */
    public String getId() {
        return id;
    }

    /**
     * 设置访客的ID
     *
     * @param id 传入要设置的访客ID值，用于更新访客对象的id属性，改变其唯一标识信息。
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取访客的姓名
     *
     * @return 返回访客对象的姓名属性值，供外部类获取该访客的姓名信息。
     */
    public String getName() {
        return name;
    }

    /**
     * 设置访客的姓名
     *
     * @param name 传入要设置的访客姓名值，用于更新访客对象的name属性，改变其姓名信息。
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取访客的学号
     *
     * @return 返回访客对象的学号属性值，供外部类获取该访客的学号信息。
     */
    public String getSno() {
        return sno;
    }

    /**
     * 设置访客的学号
     *
     * @param sno 传入要设置的访客学号值，用于更新访客对象的sno属性，改变其学号信息。
     */
    public void setSno(String sno) {
        this.sno = sno;
    }

    /**
     * 获取访客的联系方式
     *
     * @return 返回访客对象的联系方式属性值，供外部类获取该访客的联系方式信息。
     */
    public String getPhone() {
        return phone;
    }

    /**
     * 设置访客的联系方式
     *
     * @param phone 传入要设置的访客联系方式值，用于更新访客对象的phone属性，改变其联系方式信息。
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * 获取访客的访问地址
     *
     * @return 返回访客对象的访问地址属性值，供外部类获取该访客的访问地址信息。
     */
    public String getPlace() {
        return place;
    }

    /**
     * 设置访客的访问地址
     *
     * @param place 传入要设置的访客访问地址值，用于更新访客对象的place属性，改变其访问地址信息。
     */
    public void setPlace(String place) {
        this.place = place;
    }

    /**
     * 获取访客的来访时间
     *
     * @return 返回访客对象的来访时间属性值，供外部类获取该访客的来访时间信息。
     */
    public String getBegin_date() {
        return begin_date;
    }

    /**
     * 设置访客的来访时间
     *
     * @param begin_date 传入要设置的访客来访时间值，用于更新访客对象的begin_date属性，改变其来访时间信息。
     */
    public void setBegin_date(String begin_date) {
        this.begin_date = begin_date;
    }

    /**
     * 获取访客的离开时间
     *
     * @return 返回访客对象的离开时间属性值，供外部类获取该访客的离开时间信息。
     */
    public String getEnd_date() {
        return end_date;
    }

    /**
     * 设置访客的离开时间
     *
     * @param end_date 传入要设置的访客离开时间值，用于更新访客对象的end_date属性，改变其离开时间信息。
     */
    public void setEnd_date(String end_date) {
        this.end_date = end_date;
    }

    /**
     * 获取访客的到访原因
     *
     * @return 返回访客对象的到访原因属性值，供外部类获取该访客的到访原因信息。
     */
    public String getVisit_result() {
        return visit_result;
    }

    /**
     * 设置访客的到访原因
     *
     * @param visit_result 传入要设置的访客到访原因值，用于更新访客对象的visit_result属性，改变其到访原因信息。
     */
    public void setVisit_result(String visit_result) {
        this.visit_result = visit_result;
    }

    /**
     * 重写toString方法，返回访客对象的字符串表示形式
     * 当使用System.out.println等方式输出访客对象或者在需要以字符串形式展示访客对象信息的场景下，会调用此方法，
     * 方便查看访客对象各属性的具体值情况，按照指定格式返回包含所有属性值的字符串内容。
     *
     * @return 访客对象的字符串表示，格式为 "Visitor{" + 各属性名及对应值的字符串拼接 + '}'，清晰展示访客对象的详细信息。
     */
    @Override
    public String toString() {
        return "Visitor{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", sno='" + sno + '\'' +
                ", phone='" + phone + '\'' +
                ", place='" + place + '\'' +
                ", begin_date='" + begin_date + '\'' +
                ", end_date='" + end_date + '\'' +
                ", visit_result='" + visit_result + '\'' +
                '}';
    }
}