/// <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); }
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); }
/// <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()); }
/// <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); }
public WorkFlowBase(WorkFlowConfig cfg) { CmdParaQueue = new Queue <CmdArgsBase>(); this.cfg = cfg; }
public WorkTemplate1(WorkFlowConfig cfg) : base(cfg) { }
public WorkFlowBase(WorkFlowConfig cfg) { this.cfg = cfg; }
public WF_Aligner(WorkFlowConfig cfg) : base(cfg) { }
public WorkCalib(WorkFlowConfig cfg) : base(cfg) { }
public WF_Camera(WorkFlowConfig cfg) : base(cfg) { }
public WorkTune2(WorkFlowConfig cfg) : base(cfg) { }
public WorkRecord(WorkFlowConfig cfg) : base(cfg) { #region >>>> #endregion }