using Serein.Library.Api; using Serein.Library.Entity; using Serein.Library.Enums; using System; using System.Collections.Generic; using System.Linq; namespace Serein.Library.Base { /// /// 节点基类(数据):条件控件,动作控件,条件区域,动作区域 /// public abstract partial class NodeModelBase : IDynamicFlowNode { public NodeControlType ControlType { get; set; } /// /// 方法描述,对应DLL的方法 /// public MethodDetails MethodDetails { get; set; } /// /// 节点guid /// public string Guid { get; set; } /// /// 显示名称 /// public string DisplayName { get; set; } /// /// 是否为起点控件 /// public bool IsStart { get; set; } /// /// 运行时的上一节点 /// public NodeModelBase PreviousNode { get; set; } /// /// 上一节点集合 /// public List PreviousNodes { get; set; } = new List(); /// /// 下一节点集合(真分支) /// public List SucceedBranch { get; set; } = new List(); /// /// 下一节点集合(假分支) /// public List FailBranch { get; set; } = new List(); /// /// 异常分支 /// public List ErrorBranch { get; set; } = new List(); /// /// 上游分支 /// public List UpstreamBranch { get; set; } = new List(); /// /// 当前执行状态(进入真分支还是假分支,异常分支在异常中确定) /// public FlowStateType FlowState { get; set; } = FlowStateType.None; /// /// 运行时的异常信息(仅在 FlowState 为 Error 时存在对应值) /// public Exception RuningException { get; set; } = null; /// /// 当前传递数据(执行了节点对应的方法,才会存在值) /// public object FlowData { get; set; } = null; public abstract Parameterdata[] GetParameterdatas(); public virtual NodeInfo ToInfo() { if (MethodDetails == null) return null; var trueNodes = SucceedBranch.Select(item => item.Guid); // 真分支 var falseNodes = FailBranch.Select(item => item.Guid);// 假分支 var upstreamNodes = UpstreamBranch.Select(item => item.Guid);// 上游分支 var errorNodes = ErrorBranch.Select(item => item.Guid);// 异常分支 // 生成参数列表 Parameterdata[] parameterData = GetParameterdatas(); return new NodeInfo { Guid = Guid, MethodName = MethodDetails?.MethodName, Label = DisplayName ?? "", Type = this.GetType().ToString(), TrueNodes = trueNodes.ToArray(), FalseNodes = falseNodes.ToArray(), UpstreamNodes = upstreamNodes.ToArray(), ParameterData = parameterData.ToArray(), ErrorNodes = errorNodes.ToArray(), }; } } }