package com.xinelu.manage.domain.specialdiseasenode;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.annotation.Excel;
import com.xinelu.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 专病路径-管理节点信息对象 special_disease_node
 *
 * @author xinelu
 * @date 2024-03-13
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "专病路径-管理节点信息对象", description = "special_disease_node")
public class SpecialDiseaseNode extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    private Long id;

    /**
     * 专病路径表id
     */
    @ApiModelProperty(value = "专病路径表id")
    @Excel(name = "专病路径表id")
    private Long routeId;

    /**
     * 路径名称
     */
    @ApiModelProperty(value = "路径名称")
    @Excel(name = "路径名称")
    private String routeName;

    /**
     * 节点名称，出院后：AFTER_DISCHARGE，入院后：AFTER_ADMISSION，就诊后：AFTER_CONSULTATION，就诊/出院后：AFTER_VISIT_DISCHARGE，术前：PREOPERATIVE，术后：POSTOPERATIVE
     */
    @ApiModelProperty(value = "节点名称，出院后：AFTER_DISCHARGE，入院后：AFTER_ADMISSION，就诊后：AFTER_CONSULTATION，就诊/出院后：AFTER_VISIT_DISCHARGE，术前：PREOPERATIVE，术后：POSTOPERATIVE")
    @Excel(name = "节点名称，出院后：AFTER_DISCHARGE，入院后：AFTER_ADMISSION，就诊后：AFTER_CONSULTATION，就诊/出院后：AFTER_VISIT_DISCHARGE，术前：PREOPERATIVE，术后：POSTOPERATIVE")
    private String routeNodeName;

    /**
     * 节点天数，单位：天
     */
    @ApiModelProperty(value = "节点天数，单位：天")
    @Excel(name = "节点天数，单位：天")
    private Integer routeNodeDay;

    /**
     * 任务类型
     */
    @ApiModelProperty(value = "任务类型")
    @Excel(name = "任务类型")
    private String taskType;

    /**
     * 任务细分
     */
    @ApiModelProperty(value = "任务细分")
    @Excel(name = "任务细分")
    private String taskSubdivision;

    /**
     * 任务状态
     */
    @ApiModelProperty(value = "任务状态")
    @Excel(name = "任务状态")
    private String taskStatus;

    /**
     * 二级分类描述
     */
    @ApiModelProperty(value = "二级分类描述")
    @Excel(name = "二级分类描述")
    private String secondClassifyDescribe;

    /**
     * 执行时间，格式：HH:mm
     */
    @ApiModelProperty(value = "执行时间，格式：HH:mm")
    @JsonFormat(pattern = "HH:mm")
    @Excel(name = "执行时间，格式：HH:mm", width = 30, dateFormat = "HH:mm")
    private LocalTime executionTime;

    /**
     * 模板表id
     */
    @ApiModelProperty(value = "模板表id")
    @Excel(name = "模板表id")
    private Long templateId;

    /**
     * 模板名称
     */
    @ApiModelProperty(value = "模板名称")
    @Excel(name = "模板名称")
    private String templateName;

    /**
     * 模板类型，话术：SCRIPT，微信：WECHAT，短信：TEXT_MESSAGE，问卷：QUESTIONNAIRE，宣教：PROPAGANDA
     */
    @ApiModelProperty(value = "模板类型，话术：SCRIPT，微信：WECHAT，短信：TEXT_MESSAGE，问卷：QUESTIONNAIRE，宣教：PROPAGANDA")
    @Excel(name = "模板类型，话术：SCRIPT，微信：WECHAT，短信：TEXT_MESSAGE，问卷：QUESTIONNAIRE，宣教：PROPAGANDA")
    private String templateType;

    /**
     * 短信推送标识，0：未开启，1：已开启
     */
    @ApiModelProperty(value = "短信推送标识，0：未开启，1：已开启")
    @Excel(name = "短信推送标识，0：未开启，1：已开启")
    private Integer messagePushSign;

    /**
     * 短信模板表id
     */
    @ApiModelProperty(value = "短信模板表id")
    @Excel(name = "短信模板表id")
    private Long messageTemplateId;

    /**
     * 短信模板名称
     */
    @ApiModelProperty(value = "短信模板名称")
    @Excel(name = "短信模板名称")
    private String messageTemplateName;

    /**
     * 短信预览
     */
    @ApiModelProperty(value = "短信预览")
    @Excel(name = "短信预览")
    private String messagePreview;

    /**
     * 短信节点内容（富文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记）
     */
    @ApiModelProperty(value = "短信节点内容")
    @Excel(name = "短信节点内容", readConverterExp = "富=文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记")
    private String messageNodeContent;

    /**
     * 公众号推送标识，0：未开启，1：已开启
     */
    @ApiModelProperty(value = "公众号推送标识，0：未开启，1：已开启")
    @Excel(name = "公众号推送标识，0：未开启，1：已开启")
    private Integer officialPushSign;

    /**
     * 公众号模板表id
     */
    @ApiModelProperty(value = "公众号模板表id")
    @Excel(name = "公众号模板表id")
    private Long officialTemplateId;

    /**
     * 公众号模板名称
     */
    @ApiModelProperty(value = "公众号模板名称")
    @Excel(name = "公众号模板名称")
    private String officialTemplateName;

    /**
     * 公众号提醒内容
     */
    @ApiModelProperty(value = "公众号提醒内容")
    @Excel(name = "公众号提醒内容")
    private String officialRemindContent;

    /**
     * 公众号节点内容（富文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记）
     */
    @ApiModelProperty(value = "公众号节点内容")
    @Excel(name = "公众号节点内容", readConverterExp = "富=文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记")
    private String officialNodeContent;

    /**
     * 小程序推送标识，0：未开启，1：已开启
     */
    @ApiModelProperty(value = "小程序推送标识，0：未开启，1：已开启")
    @Excel(name = "小程序推送标识，0：未开启，1：已开启")
    private Integer appletPushSign;

    /**
     * 小程序模板表id
     */
    @ApiModelProperty(value = "小程序模板表id")
    @Excel(name = "小程序模板表id")
    private Long appletTemplateId;

    /**
     * 小程序模板名称
     */
    @ApiModelProperty(value = "小程序模板名称")
    @Excel(name = "小程序模板名称")
    private String appletTemplateName;

    /**
     * 小程序提醒内容
     */
    @ApiModelProperty(value = "小程序提醒内容")
    @Excel(name = "小程序提醒内容")
    private String appletRemindContent;

    /**
     * 小程序提示说明
     */
    @ApiModelProperty(value = "小程序提示说明")
    @Excel(name = "小程序提示说明")
    private String appletPromptDescription;

    /**
     * 小程序节点内容（富文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记）
     */
    @ApiModelProperty(value = "小程序节点内容")
    @Excel(name = "小程序节点内容", readConverterExp = "富=文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记")
    private String appletNodeContent;

    /**
     * AL电话推送标识，0：未开启，1：已开启
     */
    @ApiModelProperty(value = "AL电话推送标识，0：未开启，1：已开启")
    @Excel(name = "AL电话推送标识，0：未开启，1：已开启")
    private Integer phonePushSign;

    /**
     * AI：自动 或  COMMON：手动
     */
    @ApiModelProperty(value = "AI：自动 或  COMMON：手动")
    @Excel(name = "AI：自动 或  COMMON：手动")
    private String phoneDialMethod;

    /**
     * 话术表 ID
     */
    @ApiModelProperty(value = "话术表 ID")
    @Excel(name = "话术表 ID")
    private Long scriptInfoId;

    /**
     * AI电话模板id
     */
    @ApiModelProperty(value = "AI电话模板id")
    @Excel(name = "AI电话模板表id")
    private String phoneTemplateId;

    /**
     * AI电话模板名称
     */
    @ApiModelProperty(value = "AI电话模板名称")
    @Excel(name = "AI电话模板名称")
    private String phoneTemplateName;

    /**
     * AI电话短信提醒，不发送短信：NOT_SEND_MESSAGE，未接通发短信：NOT_CONNECTED_SEND_MESSAGE，接通后发短信：CONNECTED_SEND_MESSAGE，所有人发短信：EVERYONE_SEND_MESSAGE
     */
    @ApiModelProperty(value = "AI电话短信提醒，不发送短信：NOT_SEND_MESSAGE，未接通发短信：NOT_CONNECTED_SEND_MESSAGE，接通后发短信：CONNECTED_SEND_MESSAGE，所有人发短信：EVERYONE_SEND_MESSAGE")
    @Excel(name = "AI电话短信提醒，不发送短信：NOT_SEND_MESSAGE，未接通发短信：NOT_CONNECTED_SEND_MESSAGE，接通后发短信：CONNECTED_SEND_MESSAGE，所有人发短信：EVERYONE_SEND_MESSAGE")
    private String phoneMessageRemind;

    private String phoneRedialTimes;

    private Integer phoneTimeInterval;

    /**
     * AI电话短信模板表id
     */
    @ApiModelProperty(value = "AI电话短信模板表id")
    @Excel(name = "AI电话短信模板表id")
    private Long phoneMessageTemplateId;

    /**
     * AI电话短信模板名称
     */
    @ApiModelProperty(value = "AI电话短信模板名称")
    @Excel(name = "AI电话短信模板名称")
    private String phoneMessageTemplateName;

    /**
     * AI电话机构名称
     */
    @ApiModelProperty(value = "AI电话机构名称")
    @Excel(name = "AI电话机构名称")
    private String phoneAgencyName;

    /**
     * AI电话节点内容（富文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记）
     */
    @ApiModelProperty(value = "AI电话节点内容")
    @Excel(name = "AI电话节点内容", readConverterExp = "富=文本存放整个节点的信息，包含标签画像的名称以及其它，标签画像名称使用特殊符号进行标记")
    private String phoneNodeContent;

    /**
     * 节点审核状态，同意：AGREE，不同意：DISAGREE
     */
    @ApiModelProperty(value = "节点审核状态，同意：AGREE，不同意：DISAGREE")
    @Excel(name = "节点审核状态，同意：AGREE，不同意：DISAGREE")
    private String routeCheckStatus;

    /**
     * 节点审核人姓名
     */
    @ApiModelProperty(value = "节点审核人姓名")
    @Excel(name = "节点审核人姓名")
    private String routeCheckPerson;

    /**
     * 节点审核时间
     */
    @ApiModelProperty(value = "节点审核时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "节点审核时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime routeCheckDate;

    /**
     * 节点审核备注信息，存储审核备注信息以及审核不通过原因等信息
     */
    @ApiModelProperty(value = "节点审核备注信息，存储审核备注信息以及审核不通过原因等信息")
    @Excel(name = "节点审核备注信息，存储审核备注信息以及审核不通过原因等信息")
    private String routeCheckRemark;

    /**
     * 节点内容
     */
    @ApiModelProperty(value = "节点内容")
    @Excel(name = "节点内容")
    private String nodeContent;

    /**
     * 任务节点类型：PHONE_OUTBOUND：电话外呼(默认自动。人工或自动)；QUESTIONNAIRE_SCALE：问卷量表（消息推送或人工随访）；PROPAGANDA_ARTICLE：宣教文章；TEXT_REMIND：文字提醒（微信、短信、公众号）
     */
    @ApiModelProperty(value = "任务节点类型")
    @Excel(name = "任务节点类型")
    private String taskNodeType;


    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("routeId", getRouteId())
                .append("routeName", getRouteName())
                .append("routeNodeName", getRouteNodeName())
                .append("routeNodeDay", getRouteNodeDay())
                .append("taskType", getTaskType())
                .append("taskSubdivision", getTaskSubdivision())
                .append("taskStatus", getTaskStatus())
                .append("secondClassifyDescribe", getSecondClassifyDescribe())
                .append("executionTime", getExecutionTime())
                .append("templateId", getTemplateId())
                .append("templateName", getTemplateName())
                .append("templateType", getTemplateType())
                .append("messagePushSign", getMessagePushSign())
                .append("messageTemplateId", getMessageTemplateId())
                .append("messageTemplateName", getMessageTemplateName())
                .append("messagePreview", getMessagePreview())
                .append("messageNodeContent", getMessageNodeContent())
                .append("officialPushSign", getOfficialPushSign())
                .append("officialTemplateId", getOfficialTemplateId())
                .append("officialTemplateName", getOfficialTemplateName())
                .append("officialRemindContent", getOfficialRemindContent())
                .append("officialNodeContent", getOfficialNodeContent())
                .append("appletPushSign", getAppletPushSign())
                .append("appletTemplateId", getAppletTemplateId())
                .append("appletTemplateName", getAppletTemplateName())
                .append("appletRemindContent", getAppletRemindContent())
                .append("appletPromptDescription", getAppletPromptDescription())
                .append("appletNodeContent", getAppletNodeContent())
                .append("phonePushSign", getPhonePushSign())
                .append("phoneTemplateId", getPhoneTemplateId())
                .append("phoneTemplateName", getPhoneTemplateName())
                .append("phoneMessageRemind", getPhoneMessageRemind())
                .append("phoneMessageTemplateId", getPhoneMessageTemplateId())
                .append("phoneMessageTemplateName", getPhoneMessageTemplateName())
                .append("phoneAgencyName", getPhoneAgencyName())
                .append("phoneNodeContent", getPhoneNodeContent())
                .append("routeCheckStatus", getRouteCheckStatus())
                .append("routeCheckPerson", getRouteCheckPerson())
                .append("routeCheckDate", getRouteCheckDate())
                .append("routeCheckRemark", getRouteCheckRemark())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}
