package com.yida.data.common.core.entity.customform;

import java.util.Date;

import lombok.Data;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableLogic;
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 org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;
import java.util.Map;

import io.swagger.annotations.ApiModelProperty;

/**
 * 自定义表单 Entity
 *
 * @author wjm
 * @date 2021-08-11 20:55:19
 */
@Data
@TableName("core_custom_form")
public class CoreCustomForm {

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

    /**
     * 此处为学校ID
     */
    @TableField("org_id")
    private Long orgId;

    /**
     * 表单标题
     */
    @TableField("form_title")
    private String formTitle;

    /**
     * 表单类型
     */
    @TableField("form_type_id")
    private Long formTypeId;

    /**
     * 表单描述说明
     */
    @TableField("form_remark")
    private String formRemark;

    /**
     * 是否显示排序：1=是，0=否
     */
    @TableField("sorted")
    private String sorted;

    /**
     * 是否为模板表单1=是，0=否
     */
    @TableField("model")
    private String model;

    /**
     * 对应数据表
     */
    @TableField("table_name")
    private String tableName;

    /**
     * 有效期开始时间  为空则表示不限制
     */
    @TableField("start_date")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startDate;

    /**
     * 有效期结束时间       为空则表示不限制
     */
    @TableField("end_date")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endDate;

    /**
     * 是否公开，0=否，1=是    公开即不需要身份验证，比如分享朋友圈也可以提交、投票等等
     */
    @TableField("open")
    private String open;

    /**
     * 是否开启距离结束XXX小时提醒（0=否，1=是）
     */
    @TableField("remind")
    private Integer remind;

    /**
     * 提醒时间：小时为单位，表示距离结束时间还有几小时提醒
     */
    @TableField("remind_hour")
    private Integer remindHour;

    /**
     * 发布时是否提醒用户  0=否，1=是
     */
    @TableField("remind_user")
    private Integer remindUser;

    /**
     * 提醒填报人员模板（开始填报就提醒）
     */
    @TableField("remind_user_model")
    private String remindUserModel;

    /**
     * 是否提醒管理员 0=否，1=是
     */
    @TableField("remind_admin")
    private Integer remindAdmin;

    /**
     * 提醒管理人员模板（收到填报数据时提醒）
     */
    @TableField("remind_admin_model")
    private String remindAdminModel;

    /**
     * 0为填报中不能修改，1为填报中可以修改
     */
    @TableField("update_type")
    private Integer updateType;

    /**
     * 0为草稿，1为正式表单
     */
    @TableField("draft")
    private Integer draft;

    /**
     * 0为待发布，1为已发布，2已撤回
     */
    @TableField("status")
    private Integer status;

    /**
     * 0为未提交时不保存，1为提交时才保存
     */
    @TableField("save_form_type")
    private Integer saveFormType;

    /**
     * 0为手动发布，1为定时发布
     */
    @TableField("publish_type")
    private Integer publishType;

    /**
     * 定时发布的时间，null是不需要定时发布
     */
    @TableField("publish_date")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime publishDate;

    /**
     * 是否需要回执，0为需要，1为不需要
     */
    @TableField("receipt")
    private Integer receipt;

    /**
     * 0为不开启一页一题，1为开启一页一题
     */
    @TableField("page_one_question")
    private Integer pageOneQuestion;

    /**
     * 0为开启进度条，1为关闭进度条
     */
    @TableField("progress_bar")
    private Integer progressBar;

    /**
     * 分页最大停留时间（单位秒）
     */
    @TableField("stop_max_time")
    private Integer stopMaxTime;

    /**
     * 分页最小停留时间（单位秒）
     */
    @TableField("stop_min_time")
    private Integer stopMinTime;

    /**
     * 表单对应组别id
     */
    @TableField("group_id")
    private Long groupId;

    /**
     *  0为教职工，1为学生，2为家长
     */
    @TableField("recever")
    private Integer recever;

    /**
     *
     */
    @TableField(value = "create_date", fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createDate;

    /**
     *
     */
    @TableField(value = "update_date", fill = FieldFill.UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateDate;

    /**
     *
     */
    @TableField(value = "create_id", fill = FieldFill.INSERT)
    private Long createId;

    /**
     *
     */
    @TableField(value = "update_id", fill = FieldFill.UPDATE)
    private Long updateId;

    /**
     *
     */
    @TableField("del_flag")
    @TableLogic(value = "0", delval = "1")
    private Integer delFlag;

    /**
     *
     */
    @TableField("background_img_url")
    private String backgroundImgUrl;

    /**
     *
     */
    @TableField("header_img_url")
    private String headerImgUrl;


    @ApiModelProperty(value = "表单类型名称")
    @TableField(exist = false)
    private String typeName;

    @ApiModelProperty(value = "表单组件")
    @TableField(exist = false)
    private List<CoreCustomFormItems> coreCustomFormItemsList;

    @ApiModelProperty(value = "表单主题元素")
    @TableField(exist = false)
    private CoreCustomFormTopical coreCustomFormTopical;

    @ApiModelProperty(value = "已提交数量")
    @TableField(exist = false)
    private Integer submitNum;

    @TableField(exist = false)
    private List<CoreCustomFormRelationAdmin> formRelationAdmins;

    @TableField(exist = false)
    private List<CoreCustomFormRelationUser> formRelationUsers;

    @ApiModelProperty(value = "0未填报，1已填报")
    @TableField(exist = false)
    private Integer fill;

    @ApiModelProperty(value = "表对应填报数据")
    @TableField(exist = false)
    private Map data;

    @ApiModelProperty(value = "已填报数量")
    @TableField(exist = false)
    private Integer fillNum;

    @ApiModelProperty(value = "需填报数量")
    @TableField(exist = false)
    private Integer needFillNum;
}
