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

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;

/**
 * 业务节点设置审批人
 *
 * @author wangli
 * @since 2023/12/21 13:57
 */
@ApiModel("业务节点设置审批人")
@Data
public class BpmnActivitySetAssigneeDTO {
    /**
     * PROCESS_ACTIVITY_WAIT_ASSIGNEE 事件中的触发 ID
     */
    @ApiModelProperty(value = "等待业务推送审批的事件中的触发 ID", notes = "参考 PROCESS_ACTIVITY_WAIT_ASSIGNEE 事件", hidden = true)
    @NotBlank(message = "节点的触发 ID 不能为空")
    private String triggerId;

    /**
     * 暂时无用的参数
     * 指定的活动节点 ID
     */
    @ApiModelProperty(value = "指定的活动节点 ID", notes = "流程定义中节点的 ID", hidden = true)
    @Deprecated
    private String activityId;

    /**
     * 暂时无用的参数
     * 实例 ID
     */
    @ApiModelProperty(value = "实例 ID", hidden = true)
    @Deprecated
    private String processInstanceId;

    /**
     * 需要设置的审批人, 业务侧自行去重, 请根据 personId 进行去重, 如果发现有重复, 并抛出异常
     */
    @ApiModelProperty(value = "审批人集合信息", notes = "业务传参时,需要注意去重")
    @Valid
    @NotEmpty(message = "审批人不能为空")
    private List<BpmnTaskDelegateAssigner> assigners;

    /**
     * 是否在服务端去重
     * 为 true 时,由流程引擎根据引擎规则去重, 但目前服务端去重具有随机性, 只根据 personId 去重.
     * <p>
     * 如果业务不能接受,请自己主动去重后提交.
     */
    private Boolean serverSideDeduplication = false;

    /**
     * 是否异步执行
     */
    @ApiModelProperty(value = "是否异步", notes = "异步时,只接收请求便返回数据")
    private Boolean async = false;

}
