Beispiel #1
0
        /// <summary>
        /// refresh group
        /// </summary>
        /// <param name="work"></param>
        /// <param name="workflow"></param>
        /// <returns></returns>
        public WorkingCopyGroup RefreshGroup(WorkingCopy work, WorkFlowConfig workflow)
        {
            var currentSteps = Steps.ToList();

            currentSteps.ForEach(startStep =>
                                 Steps.AddRange(
                                     FindSteps(work, startStep, EndStepCode)
                                     .Where(newStep => !Steps.Any(step => step.Id == newStep.Id))
                                     )
                                 );

            // find all sub-groups(which end step belongs to this group)
            var currentGroups = Groups.ToList();

            Groups.AddRange(work.Groups
                            .Where(x => !string.Equals(x.Id, Id))
                            .Where(x => !currentGroups.Contains(x))
                            .Where(x => !(x?.BeginSteps?.Any(x1 => BeginSteps.Contains(x1)) == true &&
                                          x?.EndStepCode == EndStepCode)) // except groups which beginstep and endstep are equal to this
                            .Where(x =>
                                   x.EndSteps.Any(y => Steps.Contains(y))
                                   )
                            );

            Fulfilled = (Steps?.Any(x => !x.Cancelled && string.Equals(x.Code, EndStepCode, System.StringComparison.CurrentCultureIgnoreCase)) ?? false) &&
                        (Steps?.Where(x => !x.Cancelled).All(x => x.ActionFinished && (x.PostedNext || string.Equals(x.Code, EndStepCode, System.StringComparison.CurrentCultureIgnoreCase))) ?? false) &&
                        (Groups?.All(x => x.Finished) == true);

            return(this);
        }
Beispiel #2
0
        public void TestBuildGroup_NotFulfilled()
        {
            var startStep = new WorkingCopyStep
            {
                Code           = "start",
                StatusId       = "all",
                ActionFinished = true,
                Success        = true,
                PostedNext     = false
            };
            var work = new WorkingCopy();

            work.Steps.Add(startStep);
            var workflow = new WorkFlowConfig
            {
                Flows = new List <WorkFlowConfigFlow>
                {
                    new WorkFlowConfigFlow
                    {
                        CurrentStepCode = "start",
                        NextStepCode    = "step1",
                        NextOn          = FlowNextType.OnSuccess
                    },
                    new WorkFlowConfigFlow
                    {
                        CurrentStepCode    = "step1",
                        NextStepCode       = "step2",
                        NextOn             = FlowNextType.OnGroupAnySuccess,
                        GroupStartStepCode = "start"
                    },
                    new WorkFlowConfigFlow
                    {
                        CurrentStepCode    = "step1",
                        NextStepCode       = "step3",
                        NextOn             = FlowNextType.OnGroupAllSuccess,
                        GroupStartStepCode = "start"
                    },
                }
            };
            var flow   = workflow.Flows.FirstOrDefault(x => x.CurrentStepCode == "step1" && x.NextStepCode == "step2");
            var groups = WorkingCopyGroup.BuildGroup(work, workflow, flow, string.Empty, "ut");

            Assert.IsNotNull(groups);
            Assert.AreEqual(1, groups.Count());
            var group = groups.First();

            Assert.IsNotNull(group);
            Assert.AreEqual(flow.Id, group.FLowId);
            Assert.AreEqual(flow.GroupStartStepCode, group.StartStepCode);
            Assert.AreEqual(flow.CurrentStepCode, group.EndStepCode);
            Assert.IsFalse(group.Fulfilled);
            Assert.IsFalse(group.AnySuccess);
            Assert.IsFalse(group.AnyFail);
            Assert.IsFalse(group.AllSuccess);
            Assert.IsFalse(group.AllFail);
            Assert.IsFalse(group.PostedNext);
            Assert.IsNotNull(group.Steps);
            Assert.AreEqual(1, group.Steps.Count);
        }
Beispiel #3
0
        /// <summary>
        /// start a new working copy by workflow and input
        /// </summary>
        /// <param name="workflow"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        public static WorkingCopy StartNew(this WorkFlowConfig workflow, WorkFlowExecutionProvider provider, Dictionary <string, object> input, string duplicateReceipt)
        {
            var res = provider.StartNew(new List <WorkFlowConfig> {
                workflow
            }, input, duplicateReceipt);

            return(res.Result?.Data?.FirstOrDefault());
        }
Beispiel #4
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);
        }
Beispiel #5
0
 public WorkFlowBase(WorkFlowConfig cfg)
 {
     CmdParaQueue = new Queue <CmdArgsBase>();
     this.cfg     = cfg;
 }
Beispiel #6
0
 public WorkTemplate1(WorkFlowConfig cfg) : base(cfg)
 {
 }
Beispiel #7
0
 public WorkFlowBase(WorkFlowConfig cfg)
 {
     this.cfg = cfg;
 }
Beispiel #8
0
 public WF_Aligner(WorkFlowConfig cfg) : base(cfg)
 {
 }
Beispiel #9
0
 public WorkCalib(WorkFlowConfig cfg) : base(cfg)
 {
 }
Beispiel #10
0
 public WF_Camera(WorkFlowConfig cfg) : base(cfg)
 {
 }
Beispiel #11
0
 public WorkTune2(WorkFlowConfig cfg) : base(cfg)
 {
 }
Beispiel #12
0
        public WorkRecord(WorkFlowConfig cfg) : base(cfg)
        {
            #region >>>>

            #endregion
        }