Пример #1
0
        private static IEnumerable <WorkingCopyStep> FindSteps(WorkingCopy work, WorkingCopyStep startStep, string endStepCode)
        {
            List <WorkingCopyStep> steps = new List <WorkingCopyStep>();

            if (startStep.Code == endStepCode)
            {
                return(steps);
            }
            var nextSteps = work.Flows.Where(x => x.FromStep.Contains(startStep)).SelectMany(x => x.ToStep?.Steps).ToList().Distinct();

            steps.AddRange(nextSteps);
            if (nextSteps?.Any() == true)
            {
                steps.AddRange(nextSteps.SelectMany(x => FindSteps(work, x, endStepCode)));
            }
            return(steps);
        }
Пример #2
0
        /// <summary>
        /// build a group
        /// </summary>
        /// <param name="work"></param>
        /// <param name="workflow"></param>
        /// <param name="flow"></param>
        /// <param name="startStepId"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public static IEnumerable <WorkingCopyGroup> BuildGroup(WorkingCopy work, WorkFlowConfig workflow, WorkFlowConfigFlow flow, string startStepId, string user)
        {
            var startSteps = work.Steps.Where(x => x.Code == flow.GroupStartStepCode &&
                                              (string.IsNullOrEmpty(startStepId) || x.Id == startStepId))
                             .ToList();
            var groups = startSteps.Select(startStep =>
            {
                var group = new WorkingCopyGroup
                {
                    FLowId        = flow.Id,
                    StartStepCode = flow.GroupStartStepCode,
                    EndStepCode   = flow.CurrentStepCode,
                    UpdatedAt     = DateTime.UtcNow,
                    UpdatedBy     = user
                };
                group.Steps.Add(startStep);
                group.RefreshGroup(work, workflow);

                return(group);
            });

            return(groups);
        }