using Serein.Library; using Serein.Library.Api; using Serein.Library.Utils; using Serein.Library.Utils.SereinExpression; using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Text; namespace Serein.Library { /// /// 基础功能 /// [DynamicFlow(Name ="[基础功能]")] public class SereinBaseFunction { //[NodeAction(NodeType.Action,"条件节点")] //private bool SereinConditionNode(IDynamicContext context, // object targetObject, // string exp = "ISPASS") //{ // var isPass = SereinConditionParser.To(targetObject, exp); // context.NextOrientation = isPass ? ConnectionInvokeType.IsSucceed : ConnectionInvokeType.IsFail; // return isPass; //} //[NodeAction(NodeType.Action, "表达式节点")] //private object SereinExpNode(IDynamicContext context, // object targetObject, // string exp) //{ // exp = "@" + exp; // var newData = SerinExpressionEvaluator.Evaluate(exp, targetObject, out bool isChange); // object result; // if (isChange || exp.StartsWith("@GET",System.StringComparison.OrdinalIgnoreCase)) // { // result = newData; // } // else // { // result = targetObject; // } // context.NextOrientation = ConnectionInvokeType.IsSucceed; // return result; //} [NodeAction(NodeType.Action, "键值对组装")] private Dictionary SereinKvDataCollectionNode(/*NodeModelBase nodeModel, */ string argName, params object[] value) { //var paramsArgIndex = nodeModel.MethodDetails.ParamsArgIndex; //var pds = nodeModel.MethodDetails.ParameterDetailss; //var length = pds.Length - paramsArgIndex; //for(int i = paramsArgIndex; i < pds.Length; i++) //{ // var pd = pds[i]; //} var names = argName.Split(';'); var count = Math.Min(value.Length, names.Length); var dict = new Dictionary(); for (int i = 0; i < count; i++) { dict[names[i]] = value[i]; } return dict; } [NodeAction(NodeType.Action, "数组组装")] private object[] SereinListDataCollectionNode(params object[] value) { return value; } [NodeAction(NodeType.Action, "输出")] private object[] SereinConsoleNode(params object[] value) { foreach (var item in value) { SereinEnv.WriteLine(InfoType.INFO, item.ToString()); } return value; } [NodeAction(NodeType.Action, "逻辑分支")] private object SereinLogicalBranch(bool @bool, object t_value,object f_value) { return @bool ? t_value : f_value; } [NodeAction(NodeType.Action, "文本拼接")] private string SereinTextJoin(params object[] value) { StringBuilder sb = new StringBuilder(); foreach (var item in value) { var tmp = item.ToString(); if (tmp == "\\n") { sb.Append(Environment.NewLine); } else if (tmp == "\\t") { sb.Append('\t'); } else { sb.Append(tmp); } } return sb.ToString(); } [NodeAction(NodeType.Action, "键值对动态构建对象")] private object SereinKvDataToObject(Dictionary dict, string classTypeName = "newClass_dynamic", bool IsPrint = false) { if (!DynamicObjectHelper.TryResolve(dict, classTypeName, out var result)) { Console.WriteLine("赋值过程中有错误,请检查属性名和类型!"); } else { if (IsPrint) { Console.WriteLine("创建完成,正在打印结果"); DynamicObjectHelper.PrintObjectProperties(result); } } return result; } [NodeAction(NodeType.Action, "设置/更新全局数据")] private object SereinAddOrUpdateFlowGlobalData(string name,object data) { SereinEnv.AddOrUpdateFlowGlobalData(name, data); return data; } } }