package com.fs.task.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fs.common.annotation.Excel;
import com.fs.common.core.domain.BaseEntity;
import com.fs.doctor.domain.Doctor;
import com.fs.doctor.vo.DoctorVO;
import com.fs.task.dto.TaskDeliveryDto;
import com.fs.task.enums.TaskFinishStatusEnum;
import com.fs.task.vo.DoctorTaskVO;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 任务信息主对象 task_info
 *
 * @author fs
 * @date 2026-01-04
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class TaskInfo extends BaseEntity {
    private static final long serialVersionUID = 1L;

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

    /**
     * 任务编号
     */
    @Excel(name = "任务编号")
    private String taskNo;

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

    /**
     * 归属部门ID
     */
    private Long deptId;

    @Excel(name = "部门名称")
    @TableField(exist = false)
    private String deptName;

    /**
     * 归属项目ID
     */
    private Long projectId;

    /**
     * 项目名称（非表字段）
     */
    @Excel(name = "项目名称")
    @TableField(exist = false)
    private String projectName;
    /**
     * 费用分摊ID
     */
    private Long costShareId;

    @Excel(name = "费用分摊部门")
    @TableField(exist = false)
    private String costShareName;
    /**
     * 任务类型
     */
    private Long taskType;

    @Excel(name = "项目类型")
    @TableField(exist = false)
    private String taskTypeName;

    /**
     * 任务积分
     */
    @Excel(name = "任务积分")
    private BigDecimal taskIntegral;

    /**
     * 任务数量
     */
    @Excel(name = "任务数量")
    private Long taskCount;

    /**
     * 任务单位(字典ID)
     */
    private Long taskUnit;

    @Excel(name = "任务单位")
    private String taskUnitName;

    /**
     * 任务状态(字典ID)
     */
    private Integer taskStatus;

    @Excel(name = "任务状态")
    private String taskStatusName;

    /**
     * 归属产品ID
     */
    private Long productId;

    @Excel(name = "归属产品名称")
    @TableField(exist = false)
    private String productName;

    /**
     * 客户/讲者ID(关联医生表)
     */
    @Excel(name = "讲者")
    private Long doctorId;

    @Excel(name = "讲者姓名")
    @TableField(exist = false)
    private String doctorName;
    /**
     * 计划开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date planStartTime;

    /**
     * 计划结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date planEndTime;

    /**
     * 任务申请时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "任务申请时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date applyTime;

    /**
     * 任务创建审批时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "任务创建审批时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createAuditTime;

    /**
     * 交付物审核时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "交付物审核时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date deliveryAuditTime;

    /**
     * 服务确认单状态(字典ID)
     */
    private Long serviceConfirmStatus;

    @Excel(name = "服务确认单状态")
    private String serviceConfirmStatusName;

    /**
     * {@link TaskFinishStatusEnum}
     * 完结状态(字典ID)
     */
    private Long finishStatus;

    @Excel(name = "完结状态")
    private String finishStatusName;

    /**
     * 归属类型(字典ID)
     */
//    @Excel(name = "归属类型(字典ID)")
    private Long belongType;

    @Excel(name = "归属类型")
    @TableField(exist = false)
    private String belongTypeName;


    /**
     * 是否抽检(0-否 1-是)
     */
    @Excel(name = "是否抽检", readConverterExp = "0=否,1=是")
    private Long isSpotCheck;

    /**
     * 抽检人ID
     */
    private Long spotCheckUserId;
    /**
     * 抽检人姓名（非数据库字段）
     */
    @Excel(name = "抽检人名称")
    @TableField(exist = false)
    private String spotCheckUserName;

    /**
     * 抽检时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "抽检时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date spotCheckTime;

    /**
     * 审核状态(字典ID)
     */
    private Long auditStatus;


    /**
     * 是否申请补充直播间任务(0-否 1-是)
     */
    @Excel(name = "是否申请补充直播间任务", readConverterExp = "0=否,1=是")
    private Long isSupplementLive;

    /**
     * 补充直播任务直播间ID
     */
    @Excel(name = "补充直播任务直播间ID")
    private String supplementLiveTaskId;

    /**
     * 补充直播任务原因
     */
    @Excel(name = "补充直播任务原因")
    private String supplementLiveReason;

    /**
     * 删除标识(0-未删除 1-已删除)
     */
    private Long deleted;

    /**
     * 创建审核状态：0-待审核 1-审核通过 2-审核驳回
     */
    @Excel(name = "创建审核状态", readConverterExp = "0=待审核,1=审核通过,2=审核驳回")
    private Integer createAuditStatus;

    /**
     * 创建审核人ID
     */
    private Long createAuditUserId;

    /**
     * 创建审核人姓名（非数据库字段）
     */
    @Excel(name = "创建审核人姓名")
    @TableField(exist = false)
    private String createAuditUserName;

    /**
     * 创建审核意见
     */
    @Excel(name = "创建审核意见")
    private String createAuditRemark;

    /**
     * 完成审核状态：0-待审核 1-审核通过 2-审核驳回
     */
    @Excel(name = "完成审核状态：0-待审核 1-审核通过 2-审核驳回")
    private Integer finishAuditStatus;

    /**
     * 完成审核人ID
     */
    private Long finishAuditUserId;

    /**
     * 完成审核人姓名（非数据库字段）
     */
    @Excel(name = "完成审核人姓名")
    @TableField(exist = false)
    private String finishAuditUserName;

    /**
     * 完成审核时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "完成审核时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date finishAuditTime;

    /**
     * 完成审核意见
     */
    @Excel(name = "完成审核意见")
    private String finishAuditRemark;






    /**
     * 创建审核人类型 0客服(默认) 1系统用户
     */
    private Integer caUserType;

    /**
     * 公司id
     */
    private Long companyId;

    /**
     * 公司名字
     */
    @TableField(exist = false)
    private String companyName;

    /**
     * 创建审核实例id
     */
    private Long createAuditInstanceId;

    /**
     * 完成审核实例id
     */
    private Long finishAuditInstanceId;

    /**
     * 切换状态标签字段
     */
    @TableField(exist = false)
    private String auditTab;

    /**
     * 业务员
     */
    private Long companyUserId;


    /**
     * 多选讲者
     */
    @TableField(exist = false)
    private List<Long> doctorIds;

    @TableField(exist = false)
    private DoctorVO doctorVO;

    @TableField(exist = false)
    private TaskDeliveryDto taskDelivery;

    /**
     * 任务材料信息列表
     */
    @TableField(exist = false)
    private List<TaskMaterialInfo> materialInfoList;



    @TableField(exist = false)
    private String applyStartTime;
    @TableField(exist = false)
    private String applyEndTime;

    @TableField(exist = false)
    private String finishAuditTimeStart;
    @TableField(exist = false)
    private String finishAuditTimeEnd;

    @TableField(exist = false)
    private String taskFinishTimeStart;
    @TableField(exist = false)
    private String taskFinishTimeEnd;
    @TableField(exist = false)
    private String selectType;

    /**
     * 任务备注
     */
    private String remark;

    /**
     * 企业端app模糊查询专用
     */
    @TableField(exist = false)
    private  String keywords;

    @TableField(exist = false)
    private  String timeType;

    /**
     * 任务类别下分类id
     */
    private String targetId;



}
