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); }
/// <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); } }
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); }
public IList <WorkFlowNode> GetByWorkFlow(Domain.WorkFlow.WorkFlow workFlow) { return(_workFlowNodeRepository.Select(s => s.WorkFlowId == workFlow.Id).ToList()); }