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

import cn.axzo.workflow.common.enums.BpmnCountersignTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;


/**
 * 统一的工作流中的人员模型,兼容不同的业务方,如安心筑"唯一"人的定义需要工作台+身份 ID+身份类型;而枢智业务则只需要简单的 userId 即可
 * <p>
 * 为了解决各种业务的差异,统一定义该模型,已大范围覆盖小范围的方式进行兼容.
 *
 * @author zuoqinbo
 */
@Data
@Accessors(chain = true)
public class BpmnTaskCountersignDTO implements Serializable {

    private static final long serialVersionUID = -8106887960942113552L;

    /**
     * 审批任务ID
     */
    @ApiModelProperty(value = "审批任务ID")
    @NotEmpty(message = "任务ID不能为空")
    private String taskId;

    /**
     * 加签类型
     * 向前加签、向后加签
     *
     * @see BpmnCountersignTypeEnum
     */
    @ApiModelProperty(value = "加签类型")
    @NotEmpty(message = "加签类型不能为空")
    private String countersignType = "SHARE_COUNTERSIGN";

    /**
     * 加签意见
     */
    @ApiModelProperty(value = "加签意见")
    private String advice;

    /**
     * 附件列表
     */
    @ApiModelProperty(value = "附件列表")
    private List<AttachmentDTO> attachmentList;

    /**
     * 加签任务转发给谁
     */
    @ApiModelProperty(value = "加签任务转发给谁")
    @NotEmpty(message = "加签任务接收人不能为空")
    private List<BpmnTaskDelegateAssigner> targetAssignerList;

    /**
     * 加签任务原发起人
     */
    @ApiModelProperty(value = "加签任务原发起人")
    @Valid
    @NotNull(message = "加签任务发起人不能为空")
    private BpmnTaskDelegateAssigner originAssigner;

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

}
