package com.openhis.web.nenu.dto;

import java.util.Date;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.annotation.Dict;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 公费医疗-学生名单Dto
 *
 * @author Thanking
 * @date 2025-10-21
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class GfStudentListDto {

    /** ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /** 姓名 */
    @NotBlank(message = "姓名不能为空")
    private String name;

    /** 拼音码 */
    private String pyStr;

    /** 五笔码 */
    private String wbStr;

    /** 性别 */
    @Dict(dictCode = "sys_user_sex")
    @NotNull(message = "性别不能为空")
    private Integer gender;
    private String gender_dictText;

    /** 年龄 */
    private Integer age;

    /** 学号 */
    @NotBlank(message = "学号不能为空")
    private String studentId;

    /** 身份证号 */
    @NotBlank(message = "身份证号不能为空")
    private String idNumber;

    /** 电话 */
    @NotBlank(message = "电话不能为空")
    private String phone;

    /** 学院 */
    @NotBlank(message = "学院不能为空")
    private String college;

    /** 专业 */
    @NotBlank(message = "专业不能为空")
    private String major;

    /** 学历层次（0预科生1本科生2硕士研究生3博士研究生） */
    @Dict(dictCode = "education_level")
    @NotNull(message = "学历层次不能为空")
    private Integer educationLevel;
    private String educationLevel_dictText;

    /** 入校时间 */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @NotNull(message = "入校时间不能为空")
    private Date enrollmentDate;

    /** 离校时间 */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @NotNull(message = "离校时间不能为空")
    private Date graduationDate;

    /** 年级 */
    @NotBlank(message = "年级不能为空")
    private String grade;

    /** 学习形式（1全日制2非全日制） */
    @Dict(dictCode = "study_mode")
    @NotNull(message = "学习形式不能为空")
    private Integer studyMode;
    private String studyMode_dictText;

    /** 在校状态（0在校1休学2离校） */
    @Dict(dictCode = "student_status")
    private Integer studentStatus;
    private String studentStatus_dictText;

    /** 体检结果（0未体检1体检不合格2体检合格） */
    @Dict(dictCode = "physical_exam_result")
    private Integer physicalExamResult;
    private String physicalExamResult_dictText;

    /** 辅导员 */
    private String counselor;

    /** 辅导员电话 */
    private String counselorPhone;

    /** 患者ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long patientId;
}
