فهرست منبع

ifelse逻辑开发

lichunlei 4 ماه پیش
والد
کامیت
b2949db38e
9فایلهای تغییر یافته به همراه1127 افزوده شده و 134 حذف شده
  1. 5 0
      Model/Custom/EdgeList.cs
  2. 236 0
      Model/Source/DatabaseField.cs
  3. 127 0
      Model/Source/DatabaseInfo.cs
  4. 121 0
      Model/Source/DatabaseTable.cs
  5. 13 2
      Util/LogicHelper.cs
  6. 323 20
      Util/LogicNodeHelper.cs
  7. 49 0
      Util/PublicFunction.cs
  8. 25 1
      Util/Utils.cs
  9. 228 111
      node.json

+ 5 - 0
Model/Custom/EdgeList.cs

@@ -53,6 +53,11 @@ namespace Model.Custom
 
     public class ParamList
     {
+        /// <summary>
+        /// 节点ID
+        /// </summary>
+        public string nodeId { get; set; } = string.Empty;
+
         /// <summary>
         /// 参数名称
         /// </summary>

+ 236 - 0
Model/Source/DatabaseField.cs

@@ -0,0 +1,236 @@
+using Mapster;
+using Util;
+
+
+namespace Model.Source
+{
+    /// <summary>
+    /// 数据字段 database_field
+    /// </summary>
+    public class DatabaseField
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        public int id { get; set; }
+
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        public int version { get; set; }
+
+
+        /// <summary>
+        /// 删除标记
+        /// </summary>
+        public int delFlag { get; set; }
+
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime? createTime { get; set; }
+
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        public DateTime? updateTime { get; set; }
+
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? createBy { get; set; }
+
+
+        /// <summary>
+        /// 更新人
+        /// </summary>
+        public string? updateBy { get; set; }
+
+
+        /// <summary>
+        /// 数据库
+        /// </summary>
+        public int databaseId { get; set; }
+
+
+        /// <summary>
+        /// 数据表
+        /// </summary>
+        public int tableId { get; set; }
+
+
+        /// <summary>
+        /// 选项卡
+        /// </summary>
+        public int tabId { get; set; }
+
+
+        /// <summary>
+        /// 字段标题
+        /// </summary>
+        public string? fieldTitle { get; set; }
+
+
+        /// <summary>
+        /// 字段名
+        /// </summary>
+        public string? fieldName { get; set; }
+        public string? fieldNameUpper 
+        {
+            get
+            {
+                return PublicFunction.transferName(fieldName);
+            }
+        }
+
+
+        /// <summary>
+        /// 字段类型
+        /// </summary>
+        public string? fieldType { get; set; }
+        public bool notNull 
+        {
+            get
+            {
+                if (fieldType == "int" || fieldType == "bigint" || fieldType == "bit" || fieldType == "numeric")
+                {
+                    return true;
+                }
+                return false;
+            }
+        }
+
+
+        /// <summary>
+        /// 字段长度
+        /// </summary>
+        public string? fieldLength { get; set; }
+
+
+        /// <summary>
+        /// 字段默认值
+        /// </summary>
+        public string? fieldDefaultValue { get; set; }
+
+
+        /// <summary>
+        /// 字段说明
+        /// </summary>
+        public string? fieldDetail { get; set; }
+
+
+        /// <summary>
+        /// 编辑类型
+        /// </summary>
+        public string? editType { get; set; }
+
+
+        /// <summary>
+        /// 验证属性
+        /// </summary>
+        public string? validateAttribute { get; set; }
+
+
+        /// <summary>
+        /// 主键
+        /// </summary>
+        public bool primaryKey { get; set; }
+
+
+        /// <summary>
+        /// 自动增长
+        /// </summary>
+        public bool autoIncrement { get; set; }
+
+
+        /// <summary>
+        /// 分表字段
+        /// </summary>
+        public bool splitFlag { get; set; }
+
+
+        /// <summary>
+        /// 列表显示
+        /// </summary>
+        public bool showList { get; set; }
+
+
+        /// <summary>
+        /// 查询条件
+        /// </summary>
+        public bool showQuery { get; set; }
+
+
+        /// <summary>
+        /// 是否编辑
+        /// </summary>
+        public bool showEdit { get; set; }
+
+
+        /// <summary>
+        /// 检查重复
+        /// </summary>
+        public bool checkRepeat { get; set; }
+
+
+        /// <summary>
+        /// 导出标记
+        /// </summary>
+        public bool exportFlag { get; set; }
+
+
+        /// <summary>
+        /// 导入标记
+        /// </summary>
+        public bool importFlag { get; set; }
+
+
+        /// <summary>
+        /// 列表编辑
+        /// </summary>
+        public bool listEditFlag { get; set; }
+
+
+        /// <summary>
+        /// 列表编辑提示文字
+        /// </summary>
+        public string? listEditPlaceholder { get; set; }
+
+
+        /// <summary>
+        /// 统计条件字段
+        /// </summary>
+        public bool statCondition { get; set; }
+
+
+        /// <summary>
+        /// 统计数据字段
+        /// </summary>
+        public bool statData { get; set; }
+
+
+        /// <summary>
+        /// 关联数据表
+        /// </summary>
+        public int linkTableId { get; set; }
+
+
+        /// <summary>
+        /// 关联数据字段
+        /// </summary>
+        public int linkFieldId { get; set; }
+
+
+        /// <summary>
+        /// 关联数据源ID
+        /// </summary>
+        public int apiId { get; set; }
+
+
+
+    }
+}

+ 127 - 0
Model/Source/DatabaseInfo.cs

@@ -0,0 +1,127 @@
+using Mapster;
+
+
+namespace Model.Source
+{
+    /// <summary>
+    /// 数据库配置 database_info
+    /// </summary>
+    public class DatabaseInfo
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        public int id { get; set; }
+
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        public int version { get; set; }
+
+
+        /// <summary>
+        /// 删除标记
+        /// </summary>
+        public int delFlag { get; set; }
+
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime? createTime { get; set; }
+
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        public DateTime? updateTime { get; set; }
+
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? createBy { get; set; }
+
+
+        /// <summary>
+        /// 更新人
+        /// </summary>
+        public string? updateBy { get; set; }
+
+
+        /// <summary>
+        /// 数据库名称
+        /// </summary>
+        public string? dbTitle { get; set; }
+
+
+        /// <summary>
+        /// 数据库名
+        /// </summary>
+        public string? dbName { get; set; }
+
+
+        /// <summary>
+        /// 服务器ID
+        /// </summary>
+        public int serverId { get; set; }
+
+
+        /// <summary>
+        /// 应用环境ID
+        /// </summary>
+        public int envId { get; set; }
+
+
+        /// <summary>
+        /// 地址
+        /// </summary>
+        public string? hostAddress { get; set; }
+
+
+        /// <summary>
+        /// 外部地址
+        /// </summary>
+        public string? netHostAddress { get; set; }
+
+
+        /// <summary>
+        /// 端口
+        /// </summary>
+        public int port { get; set; }
+
+
+        /// <summary>
+        /// 账号
+        /// </summary>
+        public string? username { get; set; }
+
+
+        /// <summary>
+        /// 密码
+        /// </summary>
+        public string? pwd { get; set; }
+
+
+        /// <summary>
+        /// 项目ID
+        /// </summary>
+        public int projectId { get; set; }
+
+
+        /// <summary>
+        /// 外网端口
+        /// </summary>
+        public int netPort { get; set; }
+
+
+        /// <summary>
+        /// 数据库类型
+        /// </summary>
+        public string? dbType { get; set; }
+
+
+
+    }
+}

+ 121 - 0
Model/Source/DatabaseTable.cs

@@ -0,0 +1,121 @@
+using Mapster;
+using Util;
+
+
+namespace Model.Source
+{
+    /// <summary>
+    /// 数据表 database_table
+    /// </summary>
+    public class DatabaseTable
+    {
+        /// <summary>
+        /// ID
+        /// </summary>
+        public int id { get; set; }
+
+
+        /// <summary>
+        /// 版本号
+        /// </summary>
+        public int version { get; set; }
+
+
+        /// <summary>
+        /// 删除标记
+        /// </summary>
+        public int delFlag { get; set; }
+
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        public DateTime? createTime { get; set; }
+
+
+        /// <summary>
+        /// 更新时间
+        /// </summary>
+        public DateTime? updateTime { get; set; }
+
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        public string? createBy { get; set; }
+
+
+        /// <summary>
+        /// 更新人
+        /// </summary>
+        public string? updateBy { get; set; }
+
+
+        /// <summary>
+        /// 数据库
+        /// </summary>
+        public int databaseId { get; set; }
+
+
+        /// <summary>
+        /// 表标题
+        /// </summary>
+        public string? tableTitle { get; set; }
+
+
+        /// <summary>
+        /// 表名
+        /// </summary>
+        public string? tableName { get; set; }
+        public string? tableNameUpper 
+        {
+            get
+            {
+                return PublicFunction.transferName(tableName);
+            }
+        }
+        public string? tableNameFirstUpper 
+        {
+            get
+            {
+                return PublicFunction.transferName(tableName, 1);
+            }
+        }
+
+
+        /// <summary>
+        /// 默认字段
+        /// </summary>
+        public bool defaultField { get; set; }
+
+
+        /// <summary>
+        /// 导出功能
+        /// </summary>
+        public bool exportModule { get; set; }
+
+
+        /// <summary>
+        /// 导入功能
+        /// </summary>
+        public bool importModule { get; set; }
+
+
+        /// <summary>
+        /// 统计功能
+        /// </summary>
+        public bool statModule { get; set; }
+
+
+        /// <summary>
+        /// 分表类型
+        /// </summary>
+        public int splitKind { get; set; }
+
+
+        public List<DatabaseField> fields { get; set; }
+
+
+
+    }
+}

+ 13 - 2
Util/LogicHelper.cs

@@ -65,6 +65,7 @@ namespace Util
                 string paramType = item["type"][0].ToString();
                 string paramValue = item["value"].ToString();
                 ParamList paramListObj = new ParamList();
+                paramListObj.nodeId = startNodeId;
                 paramListObj.paramName = paramName;
                 paramListObj.paramType = paramType;
                 paramListObj.paramValue = paramValue;
@@ -90,7 +91,18 @@ namespace Util
                     switch(node.nodeType)
                     {
                         case "ifelse": // 如果-否则节点
-                            LogicNodeHelper.ifElse(node, paramList);
+                            var ifElseResult = LogicNodeHelper.ifElse(node, paramList);
+                            if(ifElseResult.Count > 0)
+                            {
+                                foreach(bool result in ifElseResult)
+                                {
+                                    if(result)
+                                    {
+                                        sortEdge(edgeList, nodeList, paramList, item.target);
+                                        break;
+                                    }
+                                }
+                            }
                             break;                            
                         case "iteration": // 迭代节点
                             break;
@@ -113,7 +125,6 @@ namespace Util
                         default:
                             break;
                     }
-                    sortEdge(edgeList, nodeList, paramList, item.target);
                 }
             }
         }

+ 323 - 20
Util/LogicNodeHelper.cs

@@ -1,6 +1,8 @@
 using Infrastructure;
 using LitJson;
+using Model;
 using Model.Custom;
+using Model.Source;
 
 namespace Util
 {
@@ -11,10 +13,12 @@ namespace Util
         /// </summary>
         /// <param name="node">节点数据</param>
         /// <param name="paramList">参数列表</param>
-        public static void ifElse(NodeList node, List<ParamList> paramList)
+        public static List<bool> ifElse(NodeList node, List<ParamList> paramList)
         {
+            List<bool> ifElseResult = new List<bool>(); // 如果-否则节点结果
             JsonData nodeData = node.nodeData;
             JsonData ifCondition = nodeData["data"]["formData"]["ifelse"]["value"]; // 如果条件
+            int ifIndex = 0; // 如果条件索引
             foreach (JsonData item in ifCondition)
             {
                 string conditionExpression = ""; // 条件表达式
@@ -45,7 +49,147 @@ namespace Util
                         }
                     }
                 }
+                if (conditionExpression.EndsWith(" && ") || conditionExpression.EndsWith(" || "))
+                {
+                    conditionExpression = conditionExpression.Substring(0, conditionExpression.Length - 4);
+                }
+                ifElseResult.Add(Utils.EvaluateBoolean(conditionExpression));
+                ifIndex += 1;
             }
+            return ifElseResult;
+        }
+
+        /// <summary>
+        /// 数据库查询节点
+        /// </summary>
+        /// <param name="node">节点数据</param>
+        /// <param name="paramList">参数列表</param>
+        public static void dbQuery(NodeList node, DatabaseInfo dbData, List<DatabaseTable> tables, List<ParamList> paramList)
+        { 
+            JsonData nodeData = node.nodeData;
+            JsonData dbInfo = nodeData["data"]["formData"]["dbLabel"]["value"]; // 数据库查询信息
+            JsonData queryField = nodeData["data"]["formData"]["output"]["value"]; // 查询字段
+            JsonData conditions = nodeData["data"]["formData"]["ifelse"]["value"][0]["conditions"]; // 条件
+            JsonData sortConditions = nodeData["data"]["formData"]["sort"]["value"]; // 条件
+            string queryLimit = nodeData["data"]["formData"]["queryLimit"]["value"].ToString(); // 查询上限
+            string logicTag = nodeData["data"]["formData"]["ifelse"]["value"][0]["logic"].ToString(); // 逻辑
+            string queryFieldString = "";
+            foreach (JsonData field in queryField)
+            {
+                string fieldName = field["label"].ToString(); // 字段名
+                queryFieldString += fieldName + ",";
+            }
+            if(string.IsNullOrEmpty(queryFieldString)) queryFieldString = "*";
+            int dbTableId = int.Parse(dbInfo["dbTableId"].ToString()); // 数据库表ID
+            var queryTable = tables.FirstOrDefault(x => x.id == dbTableId);
+            if (queryTable != null)
+            {
+                string tableName = queryTable.tableName; // 数据库表名
+                string sql = "select " + queryFieldString.TrimEnd(',') + " from " + tableName;
+                if (conditions.Count > 0)
+                {
+                    sql += " where ";
+                }
+                foreach (JsonData condition in conditions)
+                {
+                    string oper = condition["operator"].ToString(); // 运算符
+                    string value = condition["value"].ToString(); // 值
+                    string variable = condition["variable"].ToString(); // 变量
+                    if (variable.Contains(".") && variable.Contains("output"))
+                    {
+                        variable = variable.Substring(variable.LastIndexOf(".") + 1);
+                        var param = paramList.FirstOrDefault(x => x.paramName == variable) ?? new ParamList();
+                        string paramValue = param.paramValue;
+                        sql += operatorTransferForSql(param, oper, paramValue, variable);
+                        sql += " " + logicTag + " ";
+                    }
+                }
+                if (sql.EndsWith(" " + logicTag + " "))
+                {
+                    sql = sql.Substring(0, sql.Length - logicTag.Length - 2);
+                }
+                if (sortConditions.Count > 0)
+                {
+                    sql += " order by ";
+                    foreach (JsonData sortCondition in sortConditions)
+                    {
+                        string variable = sortCondition["variable"].ToString(); // 变量
+                        if (variable.Contains("."))
+                        {
+                            variable = variable.Substring(variable.LastIndexOf(".") + 1);
+                        }
+                        string sort = sortCondition["sort"].ToString(); // 排序
+                        sql += variable + " " + sort + ",";
+                    }
+                    sql = sql.TrimEnd(',');
+                }
+                if (!string.IsNullOrEmpty(queryLimit))
+                {
+                    sql += " limit " + queryLimit;
+                }
+                SqlSugarClient db = initDb(dbData);
+                var items = db.Ado.GetDataTable(sql);
+                if (items.Rows.Count > 0)
+                { 
+                    foreach (JsonData field in queryField)
+                    {
+                        string fieldName = field["label"].ToString(); // 字段名
+                        paramList.Add(new ParamList()
+                        {
+                            nodeId = node.nodeId,
+                            paramName = fieldName,
+                            paramValue = items.Rows[0][fieldName].ToString(),
+                            paramType = field["type"][0].ToString(),
+                        });
+                    }
+                }
+            }
+        }
+
+        /// <summary>
+        /// 数据库SQL查询节点
+        /// </summary>
+        /// <param name="node">节点数据</param>
+        /// <param name="paramList">参数列表</param>
+        public static void dbSqlQuery(NodeList node, DatabaseInfo dbData, List<ParamList> paramList)
+        { 
+            JsonData nodeData = node.nodeData;
+            JsonData dbInfo = nodeData["data"]["formData"]["dbLabel"]["value"]; // 数据库查询信息
+            JsonData queryField = nodeData["data"]["formData"]["output"]["value"]; // 查询字段
+            string sql = nodeData["data"]["formData"]["sql"]["value"]["code"]["content"].ToString(); // SQL查询语句
+            SqlSugarClient db = initDb(dbData);
+            var items = db.Ado.GetDataTable(sql);
+            if (items.Rows.Count > 0)
+            { 
+                foreach (JsonData field in queryField)
+                {
+                    string fieldName = field["label"].ToString(); // 字段名
+                    paramList.Add(new ParamList()
+                    {
+                        nodeId = node.nodeId,
+                        paramName = fieldName,
+                        paramValue = items.Rows[0][fieldName].ToString(),
+                        paramType = field["type"][0].ToString(),
+                    });
+                }
+            }
+        }
+
+        public static SqlSugarClient initDb(DatabaseInfo dbInfo)
+        {
+            string server = dbInfo.hostAddress;
+            int port = dbInfo.port;
+            string user = dbInfo.username;
+            string password = dbInfo.pwd;
+            string database = dbInfo.dbName;
+            DbType dbType = DbType.MySql;
+            var db = new SqlSugarClient(new ConnectionConfig()
+            {
+                ConnectionString = "server=" + server + ";port=" + port + ";user=" + user + ";password=" + password + ";database=" + database + ";charset=utf8;",
+                DbType = dbType,
+                IsAutoCloseConnection = true,
+            });
+            return db;
         }
 
         /// <summary>
@@ -99,27 +243,27 @@ namespace Util
             }
             else if (oper == "contains") //包含
             {
-                return "'" + param.paramValue + "'.Contains('" + paramValue + "')";
+                return "Contains('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "not_contains") //不包含
             {
-                return "!'" + param.paramValue + "'.Contains('" + paramValue + "')";
+                return "!Contains('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "starts_with") //以...开头
             {
-                return "'" + param.paramValue + "'.StartsWith('" + paramValue + "')";
+                return "StartsWith('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "ends_with") //以...结尾
             {
-                return "'" + param.paramValue + "'.EndsWith('" + paramValue + "')";
+                return "EndsWith('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "matches_regex") //匹配正则表达式
             {
-                return "'" + param.paramValue + "'.Match('" + paramValue + "')";
+                return "Match('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "not_matches_regex") //不匹配正则表达式
             {
-                return "!" + "'" + param.paramValue + "'.Match('" + paramValue + "')";
+                return "!Match('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "is_empty")
             {
@@ -139,57 +283,216 @@ namespace Util
             }
             else if (oper == "in") //在...中
             {
-                return "'" + param.paramValue + "' in '" + paramValue + "'";
+                return "In('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "not_in") //不在...中
             {
-                return "'" + param.paramValue + "' not in '" + paramValue + "'";
+                return "!In('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "array_contains") //数组包含
             {
-                return "'" + param.paramValue + "' array_contains '" + paramValue + "'";
+                return "In('" + param.paramValue + "', '" + paramValue + "')";
             }
             else if (oper == "array_not_contains") //数组不包含 
             {
-                return "'" + param.paramValue + "' array_not_contains '" + paramValue + "'";
+                return "!In('" + param.paramValue + "', '" + paramValue + "')";
+            }
+            else if (oper == "array_length_equal") //数组长度等于
+            {
+                return "ArrayLen('" + param.paramValue + "') == " + paramValue;
+            }
+            else if (oper == "array_length_greater")
+            {
+                return "ArrayLen('" + param.paramValue + "') > " + paramValue;
+            }
+            else if (oper == "array_length_less") //数组长度小于
+            {
+                return "ArrayLen('" + param.paramValue + "') < " + paramValue;
+            }
+            else if (oper == "is_true") //为真
+            {
+                return param.paramValue + " == true";
+            }
+            else if (oper == "is_false") //为假
+            {
+                return param.paramValue + " == false";
+            }
+            else if (oper == "date_equal") //日期等于
+            {
+                return "'" + param.paramValue + "' == '" + paramValue + "'";
+            }
+            else if (oper == "date_before") //日期之前
+            {
+                return "'" + param.paramValue + "' < '" + paramValue + "'";
+            }
+            else if (oper == "date_after") //日期之后
+            {
+                return "'" + param.paramValue + "' > '" + paramValue + "'";
+            }
+            else if (oper == "date_between") //日期之间
+            {
+                string[] betweenValues = paramValue.Split(" - ", StringSplitOptions.None);
+                return "'" + param.paramValue + "' >= '" + betweenValues[0] + "' && '" + param.paramValue + "' <= '" + betweenValues[1] + "'";
+            }
+            return "";
+        }
+    
+        /// <summary>
+        /// 运算符转换(SQL)
+        /// </summary>
+        /// <param name="oper">运算符</param>
+        /// <returns>转换后的运算符</returns>
+        public static string operatorTransferForSql(ParamList param, string oper, string paramValue, string fieldName)
+        {
+            if (oper == "equal") //等于
+            { 
+                if(param.paramType == "string" || param.paramType == "time")
+                {
+                    return fieldName + "='" + paramValue + "'";
+                }
+                return fieldName + "=" + paramValue;
+            }
+            else if (oper == "not_equal") //不等于
+            {
+                if(param.paramType == "string" || param.paramType == "time")
+                {
+                    return fieldName + "!='" + paramValue + "'";
+                }
+                return fieldName + "!=" + paramValue;
+            }
+            else if (oper == "greater") //大于
+            {
+                return fieldName + ">" + paramValue;
+            }
+            else if (oper == "greater_equal") //大于等于
+            {
+                return fieldName + " >= " + paramValue;
+            }
+            else if (oper == "less") //小于
+            {
+                return fieldName + " < " + paramValue;
+            }
+            else if (oper == "less_equal") //小于等于
+            {
+                return fieldName + " <= " + paramValue;
+            }
+            else if (oper == "between") //在之间
+            {
+                string[] betweenValues = paramValue.Split(',');
+                return fieldName + " >= " + betweenValues[0] + " and " + fieldName + " <= " + betweenValues[1];
+            }
+            else if (oper == "not_between") //不在之间
+            {
+                string[] betweenValues = paramValue.Split(',');
+                return "(" + fieldName + " < " + betweenValues[0] + " or " + fieldName + " > " + betweenValues[1] + ")";
+            }
+            else if (oper == "contains") //包含
+            {
+                return fieldName + " like '%" + paramValue + "%'";
+            }
+            else if (oper == "not_contains") //不包含
+            {
+                return fieldName + " not like '%" + paramValue + "%'";
+            }
+            else if (oper == "starts_with") //以...开头
+            {
+                return fieldName + " like '" + paramValue + "%'";
+            }
+            else if (oper == "ends_with") //以...结尾
+            {
+                return fieldName + " like '%" + paramValue + "'";
+            }
+            else if (oper == "is_empty")
+            {
+                return fieldName + " is null";
+            }
+            else if (oper == "is_not_empty") //不为空
+            {
+                return fieldName + " is not null";
+            }
+            else if (oper == "is_null") //为空
+            {
+                return fieldName + " is null";
+            }
+            else if (oper == "is_not_null") //不为空
+            {
+                return fieldName + " is not null";
+            }
+            else if (oper == "in") //在...中
+            {
+                if(param.paramType == "string" || param.paramType == "time")
+                {
+                    paramValue = paramValue.Replace(",", "','");
+                    return fieldName + " in ('" + paramValue + "')";
+                }
+                return fieldName + " in (" + paramValue + ")";
+            }
+            else if (oper == "not_in") //不在...中
+            {
+                if(param.paramType == "string" || param.paramType == "time")
+                {
+                    paramValue = paramValue.Replace(",", "','");
+                    return fieldName + " in ('" + paramValue + "')";
+                }
+                return fieldName + " not in (" + paramValue + ")";
+            }
+            else if (oper == "array_contains") //数组包含
+            {
+                if(param.paramType == "string" || param.paramType == "time")
+                {
+                    paramValue = paramValue.Replace(",", "','");
+                    return fieldName + " in ('" + paramValue + "')";
+                }
+                return fieldName + " in (" + paramValue + ")";
+            }
+            else if (oper == "array_not_contains") //数组不包含 
+            {
+                if(param.paramType == "string" || param.paramType == "time")
+                {
+                    paramValue = paramValue.Replace(",", "','");
+                    return fieldName + " not in ('" + paramValue + "')";
+                }
+                return fieldName + " not in (" + paramValue + ")";
             }
             else if (oper == "array_length_equal") //数组长度等于
             {
-                return "'" + param.paramValue + "' array_length_equal " + paramValue;
+                return "Length(" + fieldName + ")=" + paramValue;
             }
             else if (oper == "array_length_greater")
             {
-                return "'" + param.paramValue + "' array_length_greater " + paramValue;
+                return "Length(" + fieldName + ") > " + paramValue;
             }
             else if (oper == "array_length_less") //数组长度小于
             {
-                return "'" + param.paramValue + "' array_length_less " + paramValue;
+                return "Length(" + fieldName + ") < " + paramValue;
             }
             else if (oper == "is_true") //为真
             {
-                return "'" + param.paramValue + "' is true";
+                return fieldName + "=true";
             }
             else if (oper == "is_false") //为假
             {
-                return "'" + param.paramValue + "' is false";
+                return fieldName + "=false";
             }
             else if (oper == "date_equal") //日期等于
             {
-                return "'" + param.paramValue + "' date_equal '" + paramValue + "'";
+                return fieldName + "='" + paramValue + "'";
             }
             else if (oper == "date_before") //日期之前
             {
-                return "'" + param.paramValue + "' date_before '" + paramValue + "'";
+                return fieldName + " < '" + paramValue + "'";
             }
             else if (oper == "date_after") //日期之后
             {
-                return "'" + param.paramValue + "' date_after '" + paramValue + "'";
+                return fieldName + " > '" + paramValue + "'";
             }
             else if (oper == "date_between") //日期之间
             {
-                return "'" + param.paramValue + "' date_between '" + paramValue + "'";
+                string[] betweenValues = paramValue.Split(" - ", StringSplitOptions.None);
+                return fieldName + " >= '" + betweenValues[0] + "' and " + fieldName + " <= '" + betweenValues[1] + "'";
             }
             return "";
         }
+    
     }
 }

+ 49 - 0
Util/PublicFunction.cs

@@ -20,6 +20,55 @@
             }
             return decimal.Parse(str);
         }
+
+
+        #region 转换为首字母大写的驼峰格式
+
+        public static string transferName(string name, int startUpperNum = 2)
+        {
+            if(string.IsNullOrEmpty(name))
+            {
+                return "";
+            }
+            string result = "";
+            string[] list = name.Trim('_').Split('_');
+            if(list.Length == 1)
+            {
+                if(startUpperNum == 1)
+                {
+                    return name.Substring(0, 1).ToUpper() + name.Substring(1);
+                }
+                else if(startUpperNum > 1)
+                {
+                    return name.Substring(0, 1).ToLower() + name.Substring(1);
+                }
+                else
+                {
+                    return name;
+                }
+            }
+            int index = 0;
+            foreach(string sub in list)
+            {
+                index += 1;
+                if(index >= startUpperNum)
+                {
+                    result += sub.Substring(0, 1).ToUpper() + sub.Substring(1).ToLower();
+                }
+                else
+                {
+                    result += sub.ToLower();
+                }
+            }
+            if(startUpperNum > 1)
+            {
+                result = result.Substring(0, 1).ToLower() + result.Substring(1);
+            }
+            return result;
+        }
+
+        #endregion
+    
     
     }
 }

+ 25 - 1
Util/Utils.cs

@@ -97,6 +97,20 @@ public class Utils
             args.Result = str.EndsWith(prefix);
             return;
         }
+        if (funcName == "In")
+        {
+            // 严格校验参数数量
+            if (args.Parameters.Length != 2)
+            {
+                throw new ArgumentException("In 必须传入 2 个参数:字符串、前缀");
+            }
+            // 安全获取参数值(避免 null)
+            var str = args.Parameters[0].Evaluate()?.ToString() ?? string.Empty;
+            var prefix = args.Parameters[1].Evaluate()?.ToString() ?? string.Empty;
+            // 执行原生 EndsWith
+            args.Result = str.Replace("[", "").Replace("]", "").Split(',').Contains(prefix);
+            return;
+        }
 
         // 方案1:精准匹配 IsNullOrEmpty
         if (funcName == "IsNullOrEmpty")
@@ -109,13 +123,23 @@ public class Utils
             args.Result = string.IsNullOrEmpty(value);
             return;
         }
+        if (funcName == "ArrayLen")
+        {
+            if (args.Parameters.Length != 1)
+            {
+                throw new ArgumentException("ArrayLen 必须传入 1 个参数:数组");
+            }
+            var value = args.Parameters[0].Evaluate()?.ToString();
+            args.Result = value?.Replace("[", "").Replace("]", "").Split(',').Length ?? 0;
+            return;
+        }
         
         if (funcName == "Match")
         {
             // 严格校验参数数量
             if (args.Parameters.Length != 2)
             {
-                throw new ArgumentException("StartsWith 必须传入 2 个参数:字符串、前缀");
+                throw new ArgumentException("Match 必须传入 2 个参数:字符串、正则表达式");
             }
             // 安全获取参数值(避免 null)
             var str = args.Parameters[0].Evaluate()?.ToString() ?? string.Empty;

+ 228 - 111
node.json

@@ -5,8 +5,8 @@
             "type": "start",
             "initialized": false,
             "position": {
-                "x": 30.13313629585855,
-                "y": 50
+                "x": 0,
+                "y": 172
             },
             "data": {
                 "nodeMeta": {
@@ -54,19 +54,22 @@
                             }
                         ],
                         "type": "defineVar",
-                        "label": "输入变量"
+                        "label": "输入变量",
+                        "scope": "nextNodes"
                     }
                 }
             },
-            "deletable": false
+            "deletable": false,
+            "targetPosition": "left",
+            "sourcePosition": "right"
         },
         {
             "id": "end",
             "type": "end",
             "initialized": false,
             "position": {
-                "x": 3318.928966598588,
-                "y": 284.4466352400285
+                "x": 2728.093793103448,
+                "y": 613.056551724138
             },
             "data": {
                 "nodeMeta": {
@@ -97,15 +100,17 @@
                     }
                 }
             },
-            "deletable": false
+            "deletable": false,
+            "targetPosition": "left",
+            "sourcePosition": "right"
         },
         {
             "id": "node_mn72gsen-2q151u70g4l3g5e",
             "type": "query-data",
             "initialized": false,
             "position": {
-                "x": 448.74334435926414,
-                "y": -51.60789569311283
+                "x": 370,
+                "y": 0
             },
             "data": {
                 "nodeMeta": {
@@ -144,7 +149,7 @@
                                     {
                                         "operator": "equal",
                                         "value": "start::input.pos_sn",
-                                        "variable": "node_mn72gsen-2q151u70g4l3g5e::injected.pos_sn",
+                                        "variable": "node_mn72gsen-2q151u70g4l3g5e::injected.pos_type",
                                         "isRef": true
                                     }
                                 ],
@@ -156,7 +161,12 @@
                         "label": "查询条件"
                     },
                     "sort": {
-                        "value": [],
+                        "value": [
+                            {
+                                "variable": "node_mn72gsen-2q151u70g4l3g5e::injected.id",
+                                "sort": "desc"
+                            }
+                        ],
                         "type": "sort",
                         "label": "排序"
                     },
@@ -175,7 +185,9 @@
                                 ],
                                 "desc": "",
                                 "children": [],
-                                "_id": "mn745pkd-6u1y4j2w3j6n2r4n"
+                                "_id": "mn745pkd-6u1y4j2w3j6n2r4n",
+                                "isRef": true,
+                                "value": "node_mn72gsen-2q151u70g4l3g5e::injected.is_act"
                             },
                             {
                                 "label": "bind_time",
@@ -185,7 +197,9 @@
                                 ],
                                 "desc": "",
                                 "children": [],
-                                "_id": "mn746w0x-4aa4g6a62582q6y"
+                                "_id": "mn746w0x-4aa4g6a62582q6y",
+                                "isRef": true,
+                                "value": "node_mn72gsen-2q151u70g4l3g5e::injected.bind_time"
                             },
                             {
                                 "label": "act_time",
@@ -195,7 +209,9 @@
                                 ],
                                 "desc": "",
                                 "children": [],
-                                "_id": "mn7485fk-4n4l2m1b6v5t201x"
+                                "_id": "mn7485fk-4n4l2m1b6v5t201x",
+                                "isRef": true,
+                                "value": "node_mn72gsen-2q151u70g4l3g5e::injected.act_time"
                             },
                             {
                                 "label": "pos_type",
@@ -205,7 +221,9 @@
                                 ],
                                 "desc": "",
                                 "children": [],
-                                "_id": "mn746eig-3f682z3r3z3x12m"
+                                "_id": "mn746eig-3f682z3r3z3x12m",
+                                "isRef": true,
+                                "value": "node_mn72gsen-2q151u70g4l3g5e::injected.pos_type"
                             },
                             {
                                 "label": "leader_id",
@@ -216,23 +234,28 @@
                                 "desc": "",
                                 "children": [],
                                 "_isExpanded": false,
-                                "_id": "mn74a05x-je94q3f5s18"
+                                "_id": "mn74a05x-je94q3f5s18",
+                                "isRef": true,
+                                "value": "node_mn72gsen-2q151u70g4l3g5e::injected.leader_id"
                             }
                         ],
-                        "type": "defineVar",
-                        "label": "输出"
+                        "type": "declareVar",
+                        "label": "输出",
+                        "scope": "nextNodes"
                     }
                 }
             },
-            "zIndex": 0
+            "zIndex": 0,
+            "targetPosition": "left",
+            "sourcePosition": "right"
         },
         {
             "id": "node_mn72zfcz-53421b55454y5668",
             "type": "sql-execute",
             "initialized": false,
             "position": {
-                "x": 448.74334435926414,
-                "y": 99.45942524904268
+                "x": 370,
+                "y": 172
             },
             "data": {
                 "nodeMeta": {
@@ -276,20 +299,23 @@
                                 "_id": "mn7463zh-6s6y49mv33305t"
                             }
                         ],
-                        "type": "defineVar",
-                        "label": "输出"
+                        "type": "declareVar",
+                        "label": "输出",
+                        "scope": "nextNodes"
                     }
                 }
             },
-            "zIndex": 0
+            "zIndex": 0,
+            "targetPosition": "left",
+            "sourcePosition": "right"
         },
         {
             "id": "node_mn741kd4-360566q2423q3r",
             "type": "sql-execute",
             "initialized": false,
             "position": {
-                "x": 448.74334435926414,
-                "y": 240.79368349965677
+                "x": 370,
+                "y": 332
             },
             "data": {
                 "nodeMeta": {
@@ -333,20 +359,23 @@
                                 "_id": "mn7497f9-6e32446a1zgv37"
                             }
                         ],
-                        "type": "defineVar",
-                        "label": "输出"
+                        "type": "declareVar",
+                        "label": "输出",
+                        "scope": "nextNodes"
                     }
                 }
             },
-            "zIndex": 0
+            "zIndex": 0,
+            "targetPosition": "left",
+            "sourcePosition": "right"
         },
         {
             "id": "node_mn744auf-3t1d4o4d6w4j525v",
             "type": "ifelse",
             "initialized": false,
             "position": {
-                "x": 898.5932543744572,
-                "y": -10.366613559693794
+                "x": 740,
+                "y": 18
             },
             "data": {
                 "nodeMeta": {
@@ -407,6 +436,18 @@
                                 ],
                                 "logic": "and",
                                 "_id": "swapy-item-_mn7451f6-p6f6h5cd4b312"
+                            },
+                            {
+                                "conditions": [
+                                    {
+                                        "operator": "date_after",
+                                        "value": "2026-04-01",
+                                        "variable": "node_mn72gsen-2q151u70g4l3g5e::output.bind_time",
+                                        "isRef": false
+                                    }
+                                ],
+                                "logic": "or",
+                                "_id": "swapy-item-_mnh7y4dm-5j3i2r29183m3l6o"
                             }
                         ],
                         "type": "ifelse",
@@ -414,15 +455,17 @@
                     }
                 }
             },
-            "zIndex": 0
+            "zIndex": 0,
+            "targetPosition": "left",
+            "sourcePosition": "right"
         },
         {
             "id": "node_mn74w4iq-1858481e3e6r4z4m",
             "type": "iteration",
             "initialized": false,
             "position": {
-                "x": 1300.302675282122,
-                "y": -141.75000829719812
+                "x": 1138.3848275862074,
+                "y": -83.53655172413795
             },
             "data": {
                 "nodeMeta": {
@@ -442,7 +485,8 @@
                     "output": {
                         "value": [],
                         "type": "selectOutput",
-                        "label": "输出变量"
+                        "label": "输出变量",
+                        "scope": "nextNodes"
                     }
                 }
             },
@@ -450,7 +494,9 @@
             "style": {
                 "width": "1315.6962923681951px",
                 "height": "339.0067442198491px"
-            }
+            },
+            "targetPosition": "left",
+            "sourcePosition": "right"
         },
         {
             "id": "node_mn74w4iq-1858481e3e6r4z4m-child-start-node",
@@ -577,7 +623,9 @@
                                     "number"
                                 ],
                                 "desc": "",
-                                "children": []
+                                "children": [],
+                                "isRef": true,
+                                "value": "node_mn74w4iq-1858481e3e6r4z4m-node_mn74wcl6-3m322n1t2r2c553g::injected.id"
                             },
                             {
                                 "label": "status",
@@ -587,11 +635,14 @@
                                 ],
                                 "desc": "",
                                 "children": [],
-                                "_id": "mn75gcqn-6r6p4w4s4p54m20"
+                                "_id": "mn75gcqn-6r6p4w4s4p54m20",
+                                "isRef": true,
+                                "value": "node_mn74w4iq-1858481e3e6r4z4m-node_mn74wcl6-3m322n1t2r2c553g::injected.status"
                             }
                         ],
-                        "type": "defineVar",
-                        "label": "输出"
+                        "type": "declareVar",
+                        "label": "输出",
+                        "scope": "nextNodes"
                     }
                 }
             },
@@ -646,7 +697,7 @@
                                 "conditions": [
                                     {
                                         "operator": "equal",
-                                        "value": "node_mn74w4iq-1858481e3e6r4z4m-child-start-node::node_mn74w4iq-1858481e3e6r4z4m-child-start-node.user_id",
+                                        "value": "node_mn74w4iq-1858481e3e6r4z4m-node_mn74whx5-2723d1q3x23x30::injected.user_id",
                                         "variable": "node_mn74w4iq-1858481e3e6r4z4m-node_mn74whx5-2723d1q3x23x30::injected.id",
                                         "isRef": true
                                     }
@@ -678,7 +729,9 @@
                                 ],
                                 "desc": "",
                                 "children": [],
-                                "_id": "mn75gjht-2bj5m48304i3k3p"
+                                "_id": "mn75gjht-2bj5m48304i3k3p",
+                                "isRef": true,
+                                "value": "node_mn74w4iq-1858481e3e6r4z4m-node_mn74whx5-2723d1q3x23x30::injected.leader_type"
                             },
                             {
                                 "label": "expired_date",
@@ -688,11 +741,14 @@
                                 ],
                                 "desc": "",
                                 "children": [],
-                                "_id": "mn75goi0-2bkg3d2r154l3f"
+                                "_id": "mn75goi0-2bkg3d2r154l3f",
+                                "isRef": true,
+                                "value": "node_mn74w4iq-1858481e3e6r4z4m-node_mn74whx5-2723d1q3x23x30::injected.expired_date"
                             }
                         ],
-                        "type": "defineVar",
-                        "label": "输出"
+                        "type": "declareVar",
+                        "label": "输出",
+                        "scope": "nextNodes"
                     }
                 }
             },
@@ -718,7 +774,7 @@
             "data": {
                 "nodeMeta": {
                     "category": "logic",
-                    "label": "条件分支(1)",
+                    "label": "创客条件判断",
                     "icon": "https://api.iconify.design/tabler/git-branch.svg?color=white",
                     "iconColor": "#1890FF",
                     "showEditBtn": true,
@@ -773,8 +829,8 @@
             "type": "http-request",
             "initialized": false,
             "position": {
-                "x": 2782.221193152015,
-                "y": 39.870472010387374
+                "x": 2358.093793103448,
+                "y": 384.7893103448276
             },
             "data": {
                 "nodeMeta": {
@@ -880,7 +936,49 @@
                             }
                         ],
                         "type": "outputVar",
-                        "label": "响应结果"
+                        "label": "响应结果",
+                        "scope": "nextNodes"
+                    }
+                }
+            },
+            "zIndex": 0,
+            "targetPosition": "left",
+            "sourcePosition": "right"
+        },
+        {
+            "id": "node_mnh7zme8-a1k2t6l2p48848",
+            "type": "code-execute",
+            "initialized": false,
+            "position": {
+                "x": 1138.3848275862074,
+                "y": 282
+            },
+            "data": {
+                "nodeMeta": {
+                    "category": "logic",
+                    "label": "代码执行",
+                    "icon": "https://api.iconify.design/tabler/code.svg?color=white",
+                    "iconColor": "#722ED1",
+                    "showEditBtn": true,
+                    "showRunBtn": true
+                },
+                "formData": {
+                    "code": {
+                        "value": {
+                            "code": {
+                                "language": "",
+                                "content": "test"
+                            },
+                            "inputVar": []
+                        },
+                        "type": "code",
+                        "label": "代码"
+                    },
+                    "output": {
+                        "value": [],
+                        "type": "defineVar",
+                        "label": "输出变量",
+                        "scope": "nextNodes"
                     }
                 }
             },
@@ -896,10 +994,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 352.63314773995035,
-            "sourceY": 105,
-            "targetX": 446.24334435926414,
-            "targetY": 9.39210430688717,
+            "sourceX": 322.5,
+            "sourceY": 227,
+            "targetX": 367.5,
+            "targetY": 61,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -914,10 +1012,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 352.63314773995035,
-            "sourceY": 105,
-            "targetX": 446.24334435926414,
-            "targetY": 154.45942524904268,
+            "sourceX": 322.5,
+            "sourceY": 227,
+            "targetX": 367.5,
+            "targetY": 227,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -932,10 +1030,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 352.63314773995035,
-            "sourceY": 105,
-            "targetX": 446.24334435926414,
-            "targetY": 295.79368349965677,
+            "sourceX": 322.5,
+            "sourceY": 227,
+            "targetX": 367.5,
+            "targetY": 387,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -950,10 +1048,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 771.2433443592641,
-            "sourceY": 9.39210430688717,
-            "targetX": 896.0932543744572,
-            "targetY": 198.6333921623521,
+            "sourceX": 692.5,
+            "sourceY": 61,
+            "targetX": 737.5,
+            "targetY": 252,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -970,10 +1068,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 771.2433443592641,
-            "sourceY": 154.45942524904268,
-            "targetX": 896.0932543744572,
-            "targetY": 198.6333921623521,
+            "sourceX": 692.5,
+            "sourceY": 227,
+            "targetX": 737.5,
+            "targetY": 252,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -990,10 +1088,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 771.2433443592641,
-            "sourceY": 295.79368349965677,
-            "targetX": 896.0932543744572,
-            "targetY": 198.6333921623521,
+            "sourceX": 692.5,
+            "sourceY": 387,
+            "targetX": 737.5,
+            "targetY": 252,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1010,10 +1108,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 1221.093254374457,
-            "sourceY": 376.6333921623521,
-            "targetX": 3316.428966598588,
-            "targetY": 339.4466352400285,
+            "sourceX": 1062.5,
+            "sourceY": 455,
+            "targetX": 2725.593793103448,
+            "targetY": 668.056551724138,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1029,10 +1127,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 1221.093254374457,
-            "sourceY": 193.6333921623521,
-            "targetX": 1297.802675282122,
-            "targetY": 27.74999170280188,
+            "sourceX": 1062.5,
+            "sourceY": 222,
+            "targetX": 1135.8848275862074,
+            "targetY": 85.96344827586205,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1047,10 +1145,10 @@
             "data": {},
             "label": "",
             "zIndex": 1003,
-            "sourceX": 1382.802675282122,
-            "sourceY": -56.75000829719812,
-            "targetX": 1426.5460196413862,
-            "targetY": 92.25673592265096,
+            "sourceX": 1220.8848275862074,
+            "sourceY": 1.4634482758620493,
+            "targetX": 1264.6281719454716,
+            "targetY": 150.47019249571113,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1067,10 +1165,10 @@
             "data": {},
             "label": "",
             "zIndex": 1003,
-            "sourceX": 1382.802675282122,
-            "sourceY": -56.75000829719812,
-            "targetX": 1426.5460196413862,
-            "targetY": -36.75000829719812,
+            "sourceX": 1220.8848275862074,
+            "sourceY": 1.4634482758620493,
+            "targetX": 1264.6281719454716,
+            "targetY": 21.46344827586205,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1085,10 +1183,10 @@
             "data": {},
             "label": "",
             "zIndex": 1003,
-            "sourceX": 1751.5460196413862,
-            "sourceY": -36.75000829719812,
-            "targetX": 1865.6840273169448,
-            "targetY": 13.249991702801879,
+            "sourceX": 1589.6281719454716,
+            "sourceY": 21.46344827586205,
+            "targetX": 1703.7661796210302,
+            "targetY": 71.46344827586205,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1103,10 +1201,10 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 2618.497987782122,
-            "sourceY": 27.74999170280188,
-            "targetX": 2779.721193152015,
-            "targetY": 94.8704796397819,
+            "sourceX": 2456.580018015895,
+            "sourceY": 85.96344827586205,
+            "targetX": 2355.593793103448,
+            "targetY": 439.7893103448276,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1123,10 +1221,10 @@
             "data": {},
             "label": "",
             "zIndex": 1003,
-            "sourceX": 1751.5460196413862,
-            "sourceY": 92.25673592265096,
-            "targetX": 1865.6840273169448,
-            "targetY": 13.249991702801879,
+            "sourceX": 1589.6281719454716,
+            "sourceY": 150.47019249571113,
+            "targetX": 1703.7661796210302,
+            "targetY": 71.46344827586205,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1143,10 +1241,29 @@
             "data": {},
             "label": "",
             "zIndex": 0,
-            "sourceX": 3104.721193152015,
-            "sourceY": 94.8704796397819,
-            "targetX": 3316.428966598588,
-            "targetY": 339.4466352400285,
+            "sourceX": 2680.593793103448,
+            "sourceY": 439.7893103448276,
+            "targetX": 2725.593793103448,
+            "targetY": 668.056551724138,
+            "animated": false,
+            "style": {
+                "stroke": "",
+                "strokeWidth": ""
+            }
+        },
+        {
+            "id": "vueflow__edge-node_mn744auf-3t1d4o4d6w4j525vcondition-1-node_mnh7zme8-a1k2t6l2p48848",
+            "type": "base-edge",
+            "source": "node_mn744auf-3t1d4o4d6w4j525v",
+            "target": "node_mnh7zme8-a1k2t6l2p48848",
+            "sourceHandle": "condition-1",
+            "data": {},
+            "label": "",
+            "zIndex": 0,
+            "sourceX": 1062.5,
+            "sourceY": 413,
+            "targetX": 1135.8848275862074,
+            "targetY": 337,
             "animated": false,
             "style": {
                 "stroke": "",
@@ -1155,13 +1272,13 @@
         }
     ],
     "position": [
-        -476.8998742977351,
-        270.83178855987666
+        157,
+        265.8796742610871
     ],
-    "zoom": 0.5276541459748592,
+    "zoom": 0.5163883091659773,
     "viewport": {
-        "x": -476.8998742977351,
-        "y": 270.83178855987666,
-        "zoom": 0.5276541459748592
+        "x": 157,
+        "y": 265.8796742610871,
+        "zoom": 0.5163883091659773
     }
 }