/// <summary>
        /// 发起流程
        /// </summary>
        /// wangpf  15.11.24
        /// <param name="action">当前流程行为实体</param>
        /// <param name="toDoWork">下一个任务实体</param>
        /// <param name="processUserId">当前用户ID</param>
        /// <param name="instanceData">关联的数据</param>
        /// <returns></returns>
        public bool Start(FlowAction action, ToDoWorkInfo toDoWork, int processUserId, string instanceData)
        {
            bool result = true;
            //1.新建流程实例
            InstanceInfo1 instance = new InstanceInfo1()
            {
                WorkFlowId  = toDoWork.nodeInfo.FlowId,
                ProcessUser = processUserId,
                ProcessTime = DateTime.Now,
                StartUser   = processUserId,
                StartTime   = DateTime.Now,
                Status      = (byte)FlowStatus.流转
            };
            int instanceId = (int)this.ProcessClass.NewFlowInstance(instance);
            //2.1 下一个处理者ID
            var nextUserId = this.IFindUserMechanism.FindUser();

            //3.更新流程实例
            result &= this.ContinueProcess(toDoWork, instanceId, nextUserId, processUserId);
            //4.节点通知处理
            result &= NewNodeMessage((int)toDoWork.action.ToNode, nextUserId, "", 1);
            //5.记录流程日志
            string content = string.Format("用户" + this.ProcessClass.GetUserByUserID(processUserId).Username + "发起了流程");

            result &= NewFlowLog(instanceId, (int)toDoWork.action.Node, (int)toDoWork.action.ID, processUserId, content);

            return(result);
        }
        /// <summary>
        /// 审批流程
        /// </summary>
        /// wangpf  15.11.25
        /// <param name="instanceId">流程实例ID</param>
        /// <param name="toDoWork">下一个任务</param>
        /// <param name="processUserId">处理者ID</param>
        /// <returns></returns>
        public bool Submit(int instanceId, ToDoWorkInfo toDoWork, int processUserId)
        {
            bool   result  = true;
            string content = string.Empty;
            int    nextUserId;

            //1.判断任务节点类型(流转节点,结束节点等)
            switch (toDoWork.nodeInfo.Type)
            {
            case (int)NodeType.发起节点:
                //查找下一个操作者
                nextUserId = this.IFindUserMechanism.FindUser();
                //流转流程
                result &= this.ContinueProcess(toDoWork, instanceId, nextUserId, processUserId);
                //处理通知消息
                result &= DealNodeMessage((int)toDoWork.action.Node, processUserId, (int)toDoWork.action.ToNode, nextUserId, "", 1);
                //日志内容
                content = string.Format("用户" + this.ProcessClass.GetUserByUserID(processUserId).Username + "执行了流程");
                break;

            case (int)NodeType.流转节点:
                //查找下一个操作者
                nextUserId = this.IFindUserMechanism.FindUser();
                //流转流程
                result &= this.ContinueProcess(toDoWork, instanceId, nextUserId, processUserId);
                //处理通知消息
                result &= DealNodeMessage((int)toDoWork.action.Node, processUserId, (int)toDoWork.action.ToNode, nextUserId, "", 1);
                //日志内容
                content = string.Format("用户" + this.ProcessClass.GetUserByUserID(processUserId).Username + "执行了流程");
                break;

            case (int)NodeType.结束节点:
                //结束流程
                result &= this.EndProcess(toDoWork, instanceId, processUserId);
                //处理消息通知
                result &= this.ProcessClass.DealMessageAlerts((int)toDoWork.action.Node, processUserId);
                //日志内容
                content = string.Format("用户" + this.ProcessClass.GetUserByUserID(processUserId).Username + "结束了流程");
                break;

            case (int)NodeType.中止节点:
                //中止流程
                result &= this.StopProcess(toDoWork, instanceId, processUserId);
                //处理消息通知
                result &= this.ProcessClass.DealMessageAlerts((int)toDoWork.action.Node, processUserId);
                //日志内容
                content = string.Format("用户" + this.ProcessClass.GetUserByUserID(processUserId).Username + "中止了流程");
                break;
            }
            ;
            //2.记录流程日志
            result &= NewFlowLog(instanceId, (int)toDoWork.action.Node, (int)toDoWork.action.ID, processUserId, content);

            return(result);
        }
Esempio n. 3
0
        /// <summary>
        /// 发起流程
        /// </summary>
        /// wangpf  15.11.25
        /// <param name="workFlowId">流程ID</param>
        /// <param name="userId">用户ID</param>
        /// <returns></returns>
        public bool StartProcess(int workFlowId, int userId, string instanceData)
        {
            bool result = false;

            FlowAction   action   = this.WorkFlowEngineCore.GetStartAction(workFlowId);
            ToDoWorkInfo toDoWork = this.WorkFlowEngineCore.GetToDoWork((int)action.ID);

            this.WorkFlowEngineCore.IFindUserMechanism = new FindOnlyUser(toDoWork.nodeInfo.RoleId);
            result = this.WorkFlowEngineCore.Start(action, toDoWork, userId, instanceData);

            return(result);
        }
        /// <summary>
        /// 继续流程流转
        /// </summary>
        /// wangpf  15.11.25
        /// <param name="toDoWork">下一个任务实体</param>
        /// <param name="instanceId">流程实例ID</param>
        /// <param name="nextUserId">下一个处理用户ID</param>
        /// <param name="currentUserId">当前用户ID</param>
        /// <returns></returns>
        private bool ContinueProcess(ToDoWorkInfo toDoWork, int instanceId, int nextUserId, int currentUserId)
        {
            //更新流程
            InstanceInfo1 instance = new InstanceInfo1()
            {
                InstanceId  = instanceId,
                CurrentNode = (int)toDoWork.nodeInfo.NodeId,
                CurrentUser = nextUserId,
                ProcessUser = currentUserId,
                ProcessTime = DateTime.Now
            };

            return(this.ProcessClass.UpdateFlowInstance(instance));
        }
        /// <summary>
        /// 中止流程流转
        /// </summary>
        /// wangpf  15.11.25
        /// <param name="toDoWork">下一个任务实体</param>
        /// <param name="instanceId">流程实例ID</param>
        /// <param name="currentUserId">当前用户ID</param>
        /// <returns></returns>
        private bool StopProcess(ToDoWorkInfo toDoWork, int instanceId, int currentUserId)
        {
            //更新流程为中止
            InstanceInfo1 instance = new InstanceInfo1()
            {
                InstanceId  = instanceId,
                CurrentNode = (int)toDoWork.nodeInfo.NodeId,
                CurrentUser = null,
                ProcessUser = currentUserId,
                ProcessTime = DateTime.Now,
                EndTime     = DateTime.Now,
                Status      = (byte)FlowStatus.中止
            };

            return(this.ProcessClass.EndFlowInstance(instance));
        }
Esempio n. 6
0
        /// <summary>
        /// 继续流程
        /// </summary>
        /// <param name="actionId">行为ID</param>
        /// <param name="instanceId">流程实例ID</param>
        /// <param name="processUserId">处理者ID</param>
        /// <param name="pointUserId">分配任务时指定的用户ID</param>
        /// <returns></returns>
        public bool ContinueProcess(int actionId, int instanceId, int processUserId, int pointUserId = 0)
        {
            ToDoWorkInfo toDoWork = this.WorkFlowEngineCore.GetToDoWork(actionId);

            switch (toDoWork.action.Type)
            {
            case (int)FlowFindType.角色:
                this.WorkFlowEngineCore.IFindUserMechanism = new FindOnlyUser((int)toDoWork.nodeInfo.RoleId);
                break;

            case (int)FlowFindType.分配:
                this.WorkFlowEngineCore.IFindUserMechanism = new FindUserByPoint(pointUserId);
                break;

            case (int)FlowFindType.记录:
                this.WorkFlowEngineCore.IFindUserMechanism = new FindUserByFlowLog(instanceId, (int)toDoWork.action.ToNode);
                break;

            case (int)FlowFindType.分配并处理过:
                this.WorkFlowEngineCore.IFindUserMechanism = new FindUserDone(instanceId, actionId);
                break;
            }
            return(this.WorkFlowEngineCore.Submit(instanceId, toDoWork, processUserId));
        }
        /// <summary>
        /// 根据行为ID获取下一步任务
        /// </summary>
        /// wangpf  15.11.26
        /// <param name="actionId">行为ID</param>
        /// <returns></returns>
        public ToDoWorkInfo GetToDoWork(int actionId)
        {
            ToDoWorkInfo toDoWork = this.ProcessClass.GetToDoWork(actionId);

            return(toDoWork);
        }