Example #1
0
        public Domain.WorkFlow.WorkFlow Create(Domain.WorkFlow.WorkFlow workFlow)
        {
            int version = _workFlowRepository.SelectCount(s => s.Name == workFlow.Name) + 1;

            workFlow.Id         = Guid.NewGuid().ToString();
            workFlow.CreateTime = DateTime.Now;
            workFlow.Version    = version;
            workFlow            = _workFlowRepository.Insert(workFlow);
            return(workFlow);
        }
Example #2
0
        /// <summary>
        /// 添加下一步处理流程
        /// </summary>
        /// <param name="workFlow"></param>
        /// <param name="workFlowNodes"></param>
        public void AddNextStep(Domain.WorkFlow.WorkFlow workFlow, IEnumerable <WorkFlowNode> workFlowNodes, string nowNodeId, string domainName, string domainId, Entity <string> domain)
        {
            IList <WorkFlowNode> nextNodes = workFlowNodes.Where(s => s.PreviousNodeList.Contains(nowNodeId)).ToList();

            if (nextNodes.Count > 1)
            {
                IList <WorkFlowNode> conditionNodes = nextNodes.Where(s => s.Type == WorkFlowNodeType.判断).ToList();
                if (conditionNodes.Count == 1)
                {
                    throw new WorkFlowException("只获取到一个判断节点");
                }
                if (conditionNodes.Count > 0)//后续节点是否有判断节点,如果有则处理判断逻辑
                {
                    foreach (var item in conditionNodes)
                    {
                        Assembly assembly = Assembly.Load("");

                        string   nodeProperty = item.NodeProperty;
                        string[] arr          = nodeProperty.Split("=");
                        string[] arr1         = arr[0].Split('.');
                        string   className    = arr1[0];
                        bool     flag         = JudgeFlowStep(domainName, arr1, className);
                        if (flag == Convert.ToBoolean(arr[1]))
                        {
                            WorkFlowStep workFlowStep = new WorkFlowStep();
                            workFlowStep.DomainName     = domainName;
                            workFlowStep.DomainId       = domainId;
                            workFlowStep.WorkFlowNodeId = item.Id;
                            workFlowStep.StepName       = item.NodeName;
                            _workFlowStepRepository.Insert(workFlowStep);
                            break;
                        }
                    }
                }
                else//多个后续节点且没有判断节点
                {
                    IList <WorkFlowStep> workFlowSteps = new List <WorkFlowStep>();
                    foreach (var item in nextNodes)
                    {
                        WorkFlowStep workFlowStep = GetNextStep(domainName, domainId, domain, item);
                        workFlowSteps.Add(workFlowStep);
                    }
                    _workFlowStepRepository.BatchInsert(workFlowSteps);
                }
            }
            else if (nextNodes.Count == 1)
            {
                WorkFlowStep workFlowStep = GetNextStep(domainName, domainId, domain, nextNodes[0]);
                _workFlowStepRepository.Insert(workFlowStep);
            }
        }
Example #3
0
        public void StartProcess(string domainName, string id, Func <string, Entity <string> > getDomain, Action onProcessStart = null)
        {
            Domain.WorkFlow.WorkFlow   workFlow      = _workFlowRepository.SelectSingle(s => s.DomainName == domainName, s => s.Version);
            IEnumerable <WorkFlowNode> workFlowNodes = _workFlowNodeRepository.Select(s => s.WorkFlowId == workFlow.Id);
            WorkFlowNode workFlowNode = workFlowNodes.FirstOrDefault(s => s.Type == WorkFlowNodeType.开始);
            WorkFlowStep workFlowStep = new WorkFlowStep();

            workFlowStep.DomainName     = domainName;
            workFlowStep.DomainId       = id;
            workFlowStep.WorkFlowNodeId = workFlowNode.Id;
            workFlowStep.StepName       = workFlowNode.NodeName;
            _workFlowStepRepository.Insert(workFlowStep);
            onProcessStart.Invoke();
            Entity <string> domain = getDomain(id);
        }
Example #4
0
 public IList <WorkFlowNode> GetByWorkFlow(Domain.WorkFlow.WorkFlow workFlow)
 {
     return(_workFlowNodeRepository.Select(s => s.WorkFlowId == workFlow.Id).ToList());
 }