package cn.axzo.workflow.es.model;

import lombok.Data;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;

import java.util.Date;

/**
 * 流程任务文档模型
 *
 * @author wangli
 * @since 2024-09-25 20:32
 */
@Data
//@IndexName("process_task_document")
public class ProcessTaskDocument {

    /**
     * 任务 ID
     */
    @IndexId(type = IdType.CUSTOMIZE)
    private String taskId;

    /**
     * 任务归属的实例 ID
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String processInstanceId;

    /**
     * 任务定义 KEY,对应节点 ID
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String taskDefinitionKey;

    /**
     * 任务名称
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String taskName;

    /**
     * 任务状态:审批中/通过/驳回/转交/加签...
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String taskStatus;

    /**
     * 操作建议
     */
    private String advice;

    /**
     * 操作描述
     */
    private String operationDesc;

    /**
     * 流程实例的发起时间
     */
    @IndexField(dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date taskStartTime;

    /**
     * 流程实例的结束时间
     */
    @IndexField(dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date taskEndTime;

    /**
     * 流程实例的持续时间 ms
     */
    private Long duration;

    /**
     * 归属租户,与 processInstance#tenantId 一致
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String taskTenantId;

    /**
     * 审批人姓名
     */
    @IndexField(fieldType = FieldType.KEYWORD_TEXT, analyzer = "ngram_analyzer", searchAnalyzer = "ngram_analyzer")
    private String assigneeName;

    /**
     * 审批人自然人 ID
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String assigneePersonId;

    /**
     * 审批人所属单位 ID
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String assigneeOuId;

    /**
     * 审批人所属租户 ID
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String assigneeTenantId;

    /**
     * 任务关联的附件(含文件,图片,签名)
     */
//    @IndexField(fieldType = FieldType.NESTED, nestedClass = AttachmentDTO.class)
//    private List<AttachmentDTO> attachments;

    /**
     * 审批方式:配置审批人/业务指定/业务触发(不含人)
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String approvalMethod;

    /**
     * 节点类型:审批节点/业务节点/评论节点/抄送节点
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String nodeType;

    /**
     * 节点模式:会签/或签
     */
    @IndexField(fieldType = FieldType.KEYWORD)
    private String nodeMode;

}
