package com.fs.aiob.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fs.common.annotation.Excel;
import com.fs.common.core.domain.BaseEntity;
import com.fs.company.vo.RoboticWxVo;
import lombok.Data;
import lombok.EqualsAndHashCode;

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

/**
 * 百度AI外呼任务对象 aiob_baidu_task
 *
 * @author fs
 * @date 2025-03-20
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class AiobBaiduTask extends BaseEntity{

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

    /** 任务ID */
    @Excel(name = "1个微2企微")
    private Integer type;

    /** 任务ID */
    @Excel(name = "任务ID")
    private String taskId;

    /** 任务名称 */
    @Excel(name = "任务名称")
    private String taskName;

    /** 外呼机器人唯一标识 */
    @Excel(name = "外呼机器人唯一标识")
    private String robotId;

    /** 任务呼叫开始日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "任务呼叫开始日期", width = 30, dateFormat = "yyyy-MM-dd")
    private LocalDate dialStartDate;

    /** 任务呼叫结束日期,如：XXXXX，默认为空，表示不限制终止时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "任务呼叫结束日期,如：XXXXX，默认为空，表示不限制终止时间", width = 30, dateFormat = "yyyy-MM-dd")
    private LocalDate dialEndDate;

    /** 呼叫开始时间，时间范围为【09:00，20:00】 */
    @JsonFormat(pattern = "HH:mm")
    @Excel(name = "呼叫开始时间，时间范围为【09:00，20:00】", width = 30, dateFormat = "yyyy-MM-dd")
    private LocalTime dialStartTime;

    /** 呼叫结束时间，时间范围为【09:00，20:00】 */
    @JsonFormat(pattern = "HH:mm")
    @Excel(name = "呼叫结束时间，时间范围为【09:00，20:00】", width = 30, dateFormat = "yyyy-MM-dd")
    private LocalTime dialEndTime;

    /** 禁呼日期， 99-节假日；1-周一；2-周二；3-周三；4-周四；5-周五；6-周六；0-周日，默认为空，表示不限制禁呼日期 */
    @Excel(name = "禁呼日期， 99-节假日；1-周一；2-周二；3-周三；4-周四；5-周五；6-周六；0-周日，默认为空，表示不限制禁呼日期")
    private String forbidDialDate;

    /** 禁呼时间，默认为空，表示不限制禁呼时间 */
    @Excel(name = "禁呼时间，默认为空，表示不限制禁呼时间")
    private String forbidDialTime;

    /** 主叫号码，默认为空，表示将随机获取可用号码进行外呼 */
    @Excel(name = "主叫号码，默认为空，表示将随机获取可用号码进行外呼")
    private String callerNums;

    /** 保底主叫号码，默认为空，非空则开启了归属地匹配且在指定主叫中没找到匹配号码则默认用此外呼 */
    @Excel(name = "保底主叫号码，默认为空，非空则开启了归属地匹配且在指定主叫中没找到匹配号码则默认用此外呼")
    private String lastCallerNums;

    /** 1-触发黑名单后该号码组不再拨打；2-触发黑名单后该号码不再拨打；默认为空，即不过滤黑名单 */
    @Excel(name = "1-触发黑名单后该号码组不再拨打；2-触发黑名单后该号码不再拨打；默认为空，即不过滤黑名单")
    private Integer blackListStrategy;

    /** 终态策略，0-存在接通 1-全部接通 2-存在完成 3-全部完成，默认为0，即存在接通 */
    @Excel(name = "终态策略，0-存在接通 1-全部接通 2-存在完成 3-全部完成，默认为0，即存在接通")
    private Integer finalStrategy;

    /** 拨打策略：0-批量 1-逐个/轮流 2-逐个/顺序，默认为0，即批量 */
    @Excel(name = "拨打策略：0-批量 1-逐个/轮流 2-逐个/顺序，默认为0，即批量")
    private Integer callStrategy;

    /** 重试次数，整数，且 N ≤ 3，默认为空，表示不重试 */
    @Excel(name = "重试次数，整数，且 N ≤ 3，默认为空，表示不重试")
    private Integer retryTimes;

    /** 重试间隔时间，单位min，0≤ N ≤720 */
    @Excel(name = "重试间隔时间，单位min，0≤ N ≤720")
    private Integer retryInterval;

    /** 0：空闲通路弹性调节；1：最低保障通路数；2：固定通路数，默认为0 */
    @Excel(name = "0：空闲通路弹性调节；1：最低保障通路数；2：固定通路数，默认为0")
    private Integer isSetCapacity;

    /** 设置通路数大小，N为 整数，且 N ≤ 任务可用通路数和，默认为0，即空闲通路弹性调节 */
    @Excel(name = "设置通路数大小，N为 整数，且 N ≤ 任务可用通路数和，默认为0，即空闲通路弹性调节")
    private Integer taskCapacity;

    /** 是否开启24小时空号检测 */
    @Excel(name = "是否开启24小时空号检测")
    private Boolean isOpenEmptyNum = false;

    /** 是否开启12小时内停机检测 */
    @Excel(name = "是否开启12小时内停机检测")
    private Boolean isOpenPhoneDown = false;

    /** 是否开启重复号码过滤,true为开启，false为关闭 */
    @Excel(name = "是否开启重复号码过滤,true为开启，false为关闭")
    private Boolean isOpenRepeatFilter = true;

    /** 号码类型过滤 1-400号码；2-800号码；3-手机号码；4-固话；5-95号码；6-96号码；7-其他 */
    @Excel(name = "号码类型过滤 1-400号码；2-800号码；3-手机号码；4-固话；5-95号码；6-96号码；7-其他")
    private String numTypeFilterList;

    /** 发送短信策略集合，smsAutographId为短信签名ID，smsTemplateId为短信模板ID，smsStrategy为短信触发策略，1-接通后挂机触发；2-未接通后挂机触发 */
    @Excel(name = "发送短信策略集合，smsAutographId为短信签名ID，smsTemplateId为短信模板ID，smsStrategy为短信触发策略，1-接通后挂机触发；2-未接通后挂机触发")
    private String smsStrategyV1;

    /** 默认false 是否开启任务回调 */
    @Excel(name = "默认false 是否开启任务回调")
    private Boolean taskDataCallback;

    /** 任务级回调地址设置 */
    @Excel(name = "任务级回调地址设置")
    private String callBackUrl;

    /** 任务拨号完成后是否进入完成状态 */
    @Excel(name = "任务拨号完成后是否进入完成状态")
    private Integer callFinishTaskEnd;
    // 任务状态1-待启动 2-执行中 3-已暂停 4-已完成
    private Integer taskStatus;
    // 变更备注
    private String updateReason;
    // 变更备注
    private Integer addType;

    @TableField(exist = false)
    private List<String> userIds;
    @TableField(exist = false)
    private Integer num;

    @TableField(exist = false)
    private List<RoboticWxVo> qwUserList;

    @TableField(exist = false)
    private List<String> workUrl;

}
