package cn.axzo.workflow.common.model.request.bpmn.process;

import cn.axzo.workflow.common.model.dto.CooperationOrgDTO;
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.Map;

/**
 * 创建流程实例的入参模型
 */
@ApiModel("创建流程实例的入参模型")
@Data
public class BpmnProcessInstanceCreateDTO {

    /**
     * 流程定义的 id
     */
    private String processDefinitionId;
    /**
     * 流程定义的标识
     * <p>
     * [对应业务分类的 businessId]
     */
    @NotEmpty(message = "流程定义的标识不能为空")
    private String processDefinitionKey;

    /**
     * 模型归属租户 ID
     * <p>
     * 为空时,默认是编辑公共流程模型, 如果是代运营创建,则必填
     */
    @ApiModelProperty(value = "发起的模型是属于哪个租户")
    private String tenantId;

    /**
     * 流程实例关联的变量
     */
    private Map<String, Object> variables = new HashMap<>();

    /**
     * 组织关系
     */
    @ApiModelProperty(value = "组织关系")
    @NotNull(message = "组织关系不能为空")
    private CooperationOrgDTO cooperationOrg;

    /**
     * 业务的唯一标识
     * <p>
     * 例如说，请假申请的编号。通过它，可以查询到对应的实例
     */
    @NotEmpty(message = "业务的唯一标识")
    private String businessKey;

    @ApiModelProperty(value = "发起人信息")
    private BpmnTaskDelegateAssigner initiator;

    /**
     * 自定义的流程实例名称
     */
    @ApiModelProperty(value = "自定义的流程实例名称")
    private String customProcessInstanceName;

    /**
     * 下级审批人
     */
    @ApiModelProperty(value = "下级审批人", notes = "可为空,定义选择审批人,如果不为空,则覆盖下一级任务的审核人")
    private BpmnTaskDelegateAssigner nextApprover;

}
