using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OpenAuth.App
{
    public class WFUnit
    {
        #region 节点原始属性
        /// <summary>
        /// 流程单元类型 
        /// 线条 myline 
        /// 开始节点 startEvent 
        /// 结束节点 endEvent 
        /// 并行网关 gatewayAnd 并行网关会等待所有分支汇入才往下执行，所有出口分支都会被执行
        /// 排他网关 gatewayXor 排他网关不会等待所有分支汇入才往下执行，只要有分支汇入就会往下执行，出口分支只会执行一条（条件为true，如果多条出口分支条件为true也执行一条）
        /// 包容网关 gatewayInclusive  包容网关会等待所有分支汇入才往下执行，出口分支能执行多条（条件为true）
        /// 审核节点 userTask 
        /// 脚本节点 scriptTask 
        /// 子流程节点 subprocess
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 流程单元id
        /// </summary>
        public string Id { get; set; }
        /// <summary>
        /// 节点名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 流出节点ID
        /// </summary>
        public string From { get; set; }
        /// <summary>
        /// 流入节点ID
        /// </summary>
        public string To { get; set; }
        #endregion
        /// <summary>
        /// 通知策略 1.短信 2.邮箱 3.微信 4.IM
        /// </summary>
        public string MessageType { get; set; }
        /// <summary>
        /// 条件节点执行条件
        /// </summary>
        public List<WFCondition> Conditions { get; set; }
        /// <summary>
        /// 是否允许加签
        /// </summary>
        public bool IsAddSign { get; set; }
        /// <summary>
        /// 是否允许单任务
        /// </summary>
        public bool IsSingleTask { get; set; }
        /// <summary>
        /// 是否允许批量审核
        /// </summary>
        public bool IsBatchAudit { get; set; }
        /// <summary>
        /// 自动同意规则 1.处理人就是提交人 2.处理人和上一步的处理人相同 3.处理人审批过
        /// </summary>
        public string AutoAgree { get; set; }
        /// <summary>
        /// 无对应处理人 1.超级管理员处理 2.跳过此步骤 3.不能提交
        /// </summary>
        public string NoAuditor { get; set; }
        /// <summary>
        /// 驳回策略 1.驳回节点固定 2.能驳回到任何执行过节点
        /// </summary>
        public string RejectType { get; set; }
        /// <summary>
        /// 审核人
        /// </summary>
        public List<WFAuditor> AuditUsers { get; set; }
        /// <summary>
        /// 传阅人
        /// </summary>
        public List<WFAuditor> LookUsers { get; set; }
        /// <summary>
        /// 是否会签
        /// </summary>
        public bool IsCountersign { get; set; }
        /// <summary>
        /// 是否等待所有人审核完
        /// </summary>
        public bool IsCountersignAll { get; set; }
        /// <summary>
        /// 通过百分比
        /// </summary>
        public int CountersignAllType { get; set; }
        /// <summary>
        /// 审核方式 1.并行 2.串行
        /// </summary>
        public string CountersignType { get; set; }
        /// <summary>
        /// 再次审核 1.已同意不需要审核 2.已同意需要审核
        /// </summary>
        public string CountersignAgian { get; set; }

        /// <summary>
        /// 是否超时通知
        /// </summary>
        public bool IsOvertimeMessage { get; set; }
        /// <summary>
        /// 第一次通知 单位（时）
        /// </summary>
        public int OvertimeMessageStart { get; set; }
        /// <summary>
        /// 间隔通知 单位（时）
        /// </summary>
        public int OvertimeMessageInterval { get; set; }
        /// <summary>
        /// 超时流转时间 单位（时）
        /// </summary>
        public int OvertimeGo { get; set; }

        /// <summary>
        /// 超时通知策略 1.短信 2.邮箱 3.微信 4.IM
        /// </summary>
        public string OvertimeMessageType { get; set; }
        /// <summary>
        /// 脚本执行类型 1SQL 2接口 3IOC
        /// </summary>
        public string ExecuteType { get; set; }
        /// <summary>
        /// 执行SQL数据库编码
        /// </summary>
        public string SqlDb { get; set; }
        /// <summary>
        /// 执行SQL语句
        /// </summary>
        public string SqlStr { get; set; }
        /// <summary>
        /// 撤回的时候执行SQL语句
        /// </summary>
        public string SqlStrRevoke { get; set; }
        /// <summary>
        /// 调用接口
        /// </summary>
        public string ApiUrl { get; set; }
        /// <summary>
        /// 撤回的时候调用接口
        /// </summary>
        public string ApiUrlRevoke { get; set; }
        /// <summary>
        /// 注入类名
        /// </summary>
        public string Ioc { get; set; }
        /// <summary>
        /// 撤回的时候注入类名
        /// </summary>
        public string IocRevoke { get; set; }
        /// <summary>
        /// 是否异步
        /// </summary>
        public bool IsAsync { get; set; }
        /// <summary>
        /// 流程模板ID
        /// </summary>
        public string WfschemeId { get; set; }
        /// <summary>
        /// 线条流转条件
        /// </summary>
        public string LineConditions { get; set; }

    }
}
