package com.srs.flowable.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.srs.common.annotation.Excel;
import com.srs.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

import java.util.Date;


/**
 * 外宿申请对象 dms_outside_accommodation_apply
 *
 * @author srs
 * @date 2025-12-06
 */
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ApiModel(value = "DmsOutsideAccommodationApply对象", description = "外宿申请表")
@TableName("dms_outside_accommodation_apply")
public class OutsideAccommodationApply extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @ApiModelProperty("主键ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 申请编号（唯一，如WS20240001）
     */
    @ApiModelProperty("申请编号（唯一，如WS20240001）")
    @TableField("apply_no")
    @Excel(name = "申请编号", readConverterExp = "唯=一，如WS20240001")
    private String applyNo;

    /**
     * 学生ID（关联学生表）
     */
    @ApiModelProperty("学生ID（关联学生表）")
    @TableField("student_id")
    @Excel(name = "学生ID", readConverterExp = "关=联学生表")
    private Long studentId;

    /**
     * 学号
     */
    @ApiModelProperty("学号")
    @TableField("student_no")
    @Excel(name = "学号")
    private String studentNo;

    /**
     * 学生姓名
     */
    @ApiModelProperty("学生姓名")
    @TableField("student_name")
    @Excel(name = "学生姓名")
    private String studentName;

    /**
     * 性别（男/女）
     */
    @ApiModelProperty("性别（男/女）")
    @TableField("gender")
    @Excel(name = "性别", readConverterExp = "男=/女")
    private String gender;

    /**
     * 出生年月
     */
    @ApiModelProperty("出生年月")
    @TableField("birth_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "出生年月", width = 30, dateFormat = "yyyy-MM-dd")
    private Date birthDate;

    /**
     * 学院ID
     */
    @ApiModelProperty("学院ID")
    @TableField("dept_id")
    @Excel(name = "学院ID")
    private Long deptId;

    /**
     * 学院名称
     */
    @ApiModelProperty("学院名称")
    @TableField("dept_name")
    @Excel(name = "学院名称")
    private String deptName;

    /**
     * 专业ID
     */
    @ApiModelProperty("专业ID")
    @TableField("major_id")
    @Excel(name = "专业ID")
    private Long majorId;

    /**
     * 专业名称
     */
    @ApiModelProperty("专业名称")
    @TableField("major_name")
    @Excel(name = "专业名称")
    private String majorName;

    /**
     * 班级ID
     */
    @ApiModelProperty("班级ID")
    @TableField("class_id")
    @Excel(name = "班级ID")
    private Long classId;

    /**
     * 班级名称
     */
    @ApiModelProperty("班级名称")
    @TableField("class_name")
    @Excel(name = "班级名称")
    private String className;

    /**
     * 原宿舍号（如：1栋302）
     */
    @ApiModelProperty("原宿舍号（如：1栋302）")
    @TableField("original_dormitory")
    @Excel(name = "原宿舍号", readConverterExp = "如=：1栋302")
    private String originalDormitory;

    /**
     * 住宿费缴纳
     */
    @ApiModelProperty("住宿费缴纳")
    @TableField("accommodation_fee")
    @Excel(name = "住宿费缴纳")
    private String accommodationFee;

    /**
     * 住宿费缴纳状态（1=已交，0=未交）
     */
    @ApiModelProperty("住宿费缴纳状态（1=已交，0=未交）")
    @TableField("accommodation_fee_status")
    @Excel(name = "住宿费缴纳状态", readConverterExp = "1==已交，0=未交")
    private Long accommodationFeeStatus;

    /**
     * 外宿原因
     */
    @ApiModelProperty("外宿原因")
    @TableField("apply_reason")
    @Excel(name = "外宿原因")
    private String applyReason;

    /**
     * 外宿详细地址（精确至门牌号）
     */
    @ApiModelProperty("外宿详细地址（精确至门牌号）")
    @TableField("outside_address")
    @Excel(name = "外宿详细地址", readConverterExp = "精=确至门牌号")
    private String outsideAddress;

    /**
     * 外宿地址-省市区/县
     */
    @ApiModelProperty("外宿地址-省市区/县")
    @TableField("address")
    @Excel(name = "外宿地址-省市区/县")
    private String address;

    /**
     * 紧急联系人电话
     */
    @ApiModelProperty("紧急联系人电话")
    @TableField("emergency_phone")
    @Excel(name = "紧急联系人电话")
    private String emergencyPhone;

    /**
     * 外宿紧急联系人
     */
    @ApiModelProperty("外宿紧急联系人")
    @TableField("emergency_contact")
    @Excel(name = "外宿紧急联系人")
    private String emergencyContact;

    /**
     * 家长意见（1=同意，0=不同意）
     */
    @ApiModelProperty("家长意见（1=同意，0=不同意）")
    @TableField("parent_opinion")
    @Excel(name = "家长意见", readConverterExp = "1==同意，0=不同意")
    private Long parentOpinion;

    /**
     * 家长签字附件URL
     */
    @ApiModelProperty("家长签字附件URL")
    @TableField("parent_sign_attachment")
    @Excel(name = "家长签字附件URL")
    private String parentSignAttachment;

    /**
     * 家长联系电话
     */
    @ApiModelProperty("家长联系电话")
    @TableField("parent_phone")
    @Excel(name = "家长联系电话")
    private String parentPhone;

    /**
     * 家长通讯地址-省市区/县
     */
    @ApiModelProperty("家长通讯地址-省市区/县")
    @TableField("parent_address")
    @Excel(name = "家长通讯地址-省市区/县")
    private String parentAddress;

    /**
     * 家长通讯地址-详细地址
     */
    @ApiModelProperty("家长通讯地址-详细地址")
    @TableField("parent_detail_address")
    @Excel(name = "家长通讯地址-详细地址")
    private String parentDetailAddress;

    /**
     * 学生承诺电子签URL
     */
    @ApiModelProperty("学生承诺电子签URL")
    @TableField("student_promise_sign")
    @Excel(name = "学生承诺电子签URL")
    private String studentPromiseSign;

    /**
     * 承诺签署日期
     */
    @ApiModelProperty("承诺签署日期")
    @TableField("promise_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "承诺签署日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date promiseDate;

    /**
     * 外宿开始时间
     */
    @ApiModelProperty("外宿开始时间")
    @TableField("start_date")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "外宿开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date startDate;

    /**
     * 外宿结束时间（默认次年8月31日）
     */
    @ApiModelProperty("外宿结束时间（默认次年8月31日）")
    @TableField("end_date")
    @Excel(name = "外宿结束时间", readConverterExp = "默=认次年8月31日")
    private Date endDate;

    /**
     * 申请状态（0=草稿，1=待辅导员审批，2=待学院书记审批，3=待学工处审批，4=待学校领导审批，5=审批通过，6=审批驳回）
     */
    @ApiModelProperty("申请状态（0=草稿，1=待辅导员审批，2=待学院书记审批，3=待学工处审批，4=待学校领导审批，5=审批通过，6=审批驳回）")
    @TableField("status")
    @Excel(name = "申请状态", readConverterExp = "0==草稿，1=待辅导员审批，2=待学院书记审批，3=待学工处审批，4=待学校领导审批，5=审批通过，6=审批驳回")
    private Long status;

    /**
     * 驳回原因
     */
    @ApiModelProperty("驳回原因")
    @TableField("reject_reason")
    @Excel(name = "驳回原因")
    private String rejectReason;

    /**
     * 是否有效（1=有效，0=失效/到期）
     */
    @ApiModelProperty("是否有效（1=有效，0=失效/到期）")
    @TableField("is_valid")
    @Excel(name = "是否有效", readConverterExp = "1==有效，0=失效/到期")
    private Long isValid;

    /**
     * 辅导员姓名
     */
    @ApiModelProperty("辅导员姓名")
    @TableField("teacher_name")
    @Excel(name = "辅导员姓名")
    private String teacherName;

    /**
     * 附件id
     */
    @ApiModelProperty("附件id")
    @TableField("affix_id")
    @Excel(name = "附件id")
    private String affixId;

    /**
     * 流程部署编号
     */
    @ApiModelProperty("流程部署编号")
    @TableField("deploy_id")
    @Excel(name = "流程部署编号")
    private String deployId;

    /**
     * Flowable流程实例ID
     */
    @ApiModelProperty("Flowable流程实例ID")
    @TableField("process_instance_id")
    @Excel(name = "Flowable流程实例ID")
    private String processInstanceId;

    /**
     * 身份证号码
     */
    @ApiModelProperty("身份证号码")
    @TableField("idCard")
    @Excel(name = "身份证号码")
    private String idCard;

    /**
     * 学生手机号码
     */
    @ApiModelProperty("学生手机号码")
    @TableField("studentPhone")
    @Excel(name = "学生手机号码")
    private String studentPhone;

    /**
     * 外宿原因学生签名URL
     */
    @ApiModelProperty("外宿原因学生签名URL")
    @TableField("student_signature")
    @Excel(name = "外宿原因学生签名URL")
    private String studentSignature;


}
