// using System.Text.RegularExpressions; // using Common; // using Feign; // using Infrastructure; // using LitJson; // using Model.Custom; // using Model.Source; // using Services; // namespace Util.Logic // { // public class LogicHelperBak // { // /// // /// 获取逻辑项目的Json数据 // /// // /// 项目ID // /// 请求参数 // public static Dictionary DoLogic(int projectId, string request) // { // var logicProjectService = App.GetService(); // var logicProject = logicProjectService.GetById(projectId); // if(logicProject == null) // { // return new Dictionary(); // } // string jsonData = logicProject.setData ?? string.Empty; // if(string.IsNullOrEmpty(jsonData)) // { // return new Dictionary(); // } // JsonData requestObj = JsonMapper.ToObject(request); // JsonData jsonDataObj = JsonMapper.ToObject(jsonData); // JsonData nodes = jsonDataObj["nodes"]; // 节点数据 // List nodeList = new List(); // 节点列表 // foreach(JsonData node in nodes) // { // JsonData id = node["id"]; // JsonData type = node["type"]; // NodeList nodeListObj = new NodeList(); // nodeListObj.nodeId = id.ToString(); // nodeListObj.nodeType = type.ToString(); // nodeListObj.nodeData = node; // nodeList.Add(nodeListObj); // } // List edgeList = new List(); // 边列表 // JsonData edges = jsonDataObj["edges"]; // 边数据 // foreach(JsonData edge in edges) // { // JsonData source = edge["source"]; // JsonData target = edge["target"]; // EdgeList edgeListObj = new EdgeList(); // edgeListObj.source = source.ToString(); // edgeListObj.target = target.ToString(); // edgeListObj.edgeData = edge; // edgeList.Add(edgeListObj); // } // string startNodeId = "start"; // 起始节点ID // // 获取起始节点数据 // List paramList = new List(); // NodeList startNode = nodeList.FirstOrDefault(x => x.nodeId == startNodeId) ?? new NodeList(); // JsonData nodeData = startNode.nodeData; // JsonData input = nodeData["data"]["formData"]["input"]["value"]; // for(int i = 0; i < input.Count; i++) // { // JsonData item = input[i]; // string paramName = item["label"].ToString(); // string paramType = item["type"][0].ToString(); // string paramValue = requestObj[paramName].ToString(); // ParamList paramListObj = new ParamList(); // paramListObj.nodeId = startNodeId; // paramListObj.paramName = paramName; // paramListObj.paramType = paramType; // paramListObj.paramValue = paramValue; // paramListObj.paramAttribute = "startinput"; // paramList.Add(paramListObj); // } // //获取数据库信息 // List dbIdValues = LitJsonHelper.FindAllValuesByKey(jsonDataObj, "dbId"); // if(dbIdValues.Count > 0) dbIdValues = dbIdValues.Where(m => !string.IsNullOrEmpty(m)).Distinct().ToList(); // List dbTableIdValues = LitJsonHelper.FindAllValuesByKey(jsonDataObj, "dbTableId"); // if(dbTableIdValues.Count > 0) dbTableIdValues = dbTableIdValues.Where(m => !string.IsNullOrEmpty(m)).Distinct().ToList(); // string dbIdList = string.Join(",", dbIdValues); // List databaseInfos = ISource.getDatabaseInfoListByIds(dbIdList); // // 获取数据库表信息 // string dbTableIdList = string.Join(",", dbTableIdValues); // List tables = ISource.getDatabaseTableListByIds(dbTableIdList); // // 从起始节点开始 // sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, startNodeId, new Dictionary()); // // 返回结果 // Dictionary result = new Dictionary(); // foreach(ParamList item in paramList.Where(m => m.paramAttribute == "endoutput").ToList()) // { // result.Add(item.paramName, item.paramValue); // } // return result; // } // /// // /// 运行逻辑项目的Json数据 // /// // /// 边列表 // /// 起始节点ID // public static void sortEdge(List databaseInfos, List tables, List edgeList, List nodeList, List paramList, string startNodeId, Dictionary doEdgeCount) // { // var edges = edgeList.Where(m => m.source == startNodeId).ToList(); // foreach(EdgeList item in edges) // { // //记录同一层级的节点执行计数,保证当前层级的所有节点都执行完后,再执行下一层级的节点 // if(doEdgeCount.ContainsKey(startNodeId)) // { // doEdgeCount[startNodeId]++; // } // else // { // doEdgeCount.Add(startNodeId, 1); // } // int edgeCount = doEdgeCount[startNodeId]; // NodeList node = nodeList.FirstOrDefault(x => x.nodeId == item.target) ?? new NodeList(); // int targetEdgeCount = edgeList.Count(m => m.target == node.nodeId); // switch(node.nodeType) // { // case "ifelse": // 如果-否则节点 // var ifElseResult = LogicNodeHelper.ifElse(node, paramList); // if(ifElseResult.Count > 0) // { // foreach(bool result in ifElseResult) // { // if(result) // { // // if (node.nodeData.ToJson().Contains("\"parentNode\"")) // // { // // string pNodeId = node.nodeData["parentNode"]?.ToString() ?? string.Empty; // // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, pNodeId + "-child-start-node", doEdgeCount); // // } // // else // // { // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // // } // break; // } // } // } // break; // case "iteration": // 迭代节点 // // var iterationParamList = LogicNodeHelper.iteration(node, paramList); // if(edgeCount >= edges.Count || targetEdgeCount == 1) // { // bool op = true; // while (op) // { // sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, node.nodeId + "-child-start-node", doEdgeCount); // op = RedisServer.Cache.Get("break_" + node.nodeId) != "1"; // } // sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // } // break; // case "child_start": // 子流程起始节点 // LogicNodeHelper.iterationChildStart(node, paramList); // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // break; // case "break": // 跳出循环 // LogicNodeHelper.iterationBreak(node, ""); // // 跳出循环后,继续执行循环后面的节点 // string parentNodeId = node.nodeData["parentNode"]?.ToString() ?? string.Empty; // EdgeList breakEdge = edgeList.FirstOrDefault(x => x.source == parentNodeId) ?? new EdgeList(); // if(string.IsNullOrEmpty(breakEdge.source)) // { // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, breakEdge.target, doEdgeCount); // } // break; // case "loop": // 循环节点 // if(edgeCount >= edges.Count || targetEdgeCount == 1) // { // List> loopResult = LogicNodeHelper.loop(node, paramList); // foreach(Dictionary subLoop in loopResult) // { // if(RedisServer.Cache.Get("break_" + node.nodeId) == "1") // { // break; // } // else // { // foreach(string key in subLoop.Keys) // { // var loopParam = paramList.FirstOrDefault(x => x.paramName == key && x.nodeId == node.nodeId && x.paramAttribute == "loop"); // if(loopParam != null) // { // loopParam.paramValue = subLoop[key]?.ToString(); // } // else // { // paramList.Add(new ParamList() // { // nodeId = node.nodeId, // paramAttribute = "loop", // paramName = key, // paramType = "string", // paramValue = subLoop[key]?.ToString(), // }); // } // } // doEdgeCount.Remove(node.nodeId + "-child-start-node"); // sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, node.nodeId + "-child-start-node", doEdgeCount); // } // } // sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // } // break; // case "code-execute": // 代码执行节点 // LogicNodeHelper.codeExecute(node, paramList); // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // break; // case "sql-execute": // SQL执行节点 // LogicDatabaseNodeHelper.dbSqlQuery(node, databaseInfos, paramList); // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // break; // case "insert-data": // 插入数据节点 // break; // case "update-data": // 更新数据节点 // break; // case "query-data": // 查询数据节点 // LogicDatabaseNodeHelper.dbQuery(node, databaseInfos, tables, paramList); // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // break; // case "delete-data": // 删除数据节点 // break; // case "http-request": // HTTP请求节点 // LogicToolNodeHelper.httpRequest(node, paramList); // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // break; // case "var-aggregate": // 变量聚合节点 // LogicNodeHelper.varAggregate(node, paramList); // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // break; // case "end": // 结束节点 // break; // default: // if(edgeCount >= edges.Count) sortEdge(databaseInfos, tables, edgeList, nodeList, paramList, item.target, doEdgeCount); // break; // } // } // } // public static string GetExpressionVal(string str) // { // if(str == "#{now}#") return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // if(str == "#{today}#") return DateTime.Now.ToString("yyyy-MM-dd"); // if(str == "#{this_month}#") return DateTime.Now.ToString("yyyy-MM"); // if(str.StartsWith("#{now") && str.EndsWith("DAY}#")) return DateTime.Now.AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss"); // if(str.StartsWith("#{now") && str.EndsWith("MONTH}#")) return DateTime.Now.AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss"); // if(str.StartsWith("#{today") && str.EndsWith("DAY}#")) return DateTime.Now.AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd"); // if(str.StartsWith("#{today") && str.EndsWith("MONTH}#")) return DateTime.Now.AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd"); // if(str.StartsWith("#{this_month") && str.EndsWith("DAY}#")) return DateTime.Now.AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM"); // if(str.StartsWith("#{this_month") && str.EndsWith("MONTH}#")) return DateTime.Now.AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM"); // if(str.StartsWith("#{") && str.EndsWith("DAY}#")) return DateTime.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[0]).AddDays(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss"); // if(str.StartsWith("#{") && str.EndsWith("MONTH}#")) return DateTime.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[0]).AddMonths(int.Parse(str.Replace("#", "").Replace("{", "").Replace("}", "").Split(',')[1])).ToString("yyyy-MM-dd HH:mm:ss"); // if(str.StartsWith("#{split") && str.EndsWith("}#")) // { // string[] data = str.Replace("#{", "").Replace("}#", "").Split(','); // string text = data[1]; // string splitTag = data[2]; // string index = data[3]; // return text.Split(new string[]{ splitTag }, StringSplitOptions.None)[int.Parse(index)]; // } // else if(str.StartsWith("#{") && str.EndsWith("}#")) // { // string[] data = str.Replace("#{", "").Replace("}#", "").Split(','); // string tag = data[0]; // string format = data[data.Length - 1]; // if(format.StartsWith("yyyy")) // { // if(tag == "now") // { // if(data.Length == 2) // { // return DateTime.Now.ToString(format); // } // else if(data.Length == 4) // { // if(data[2] == "DAY") return DateTime.Now.AddDays(int.Parse(data[1])).ToString(format); // if(data[2] == "MONTH") return DateTime.Now.AddMonths(int.Parse(data[1])).ToString(format); // } // } // else // { // if(data.Length == 2) // { // return DateTime.Parse(tag).ToString(format); // } // else if(data.Length == 4) // { // if(data[2] == "DAY") return DateTime.Parse(tag).AddDays(int.Parse(data[1])).ToString(format); // if(data[2] == "MONTH") return DateTime.Parse(tag).AddMonths(int.Parse(data[1])).ToString(format); // } // } // } // } // return str; // } // public static string MatchExpressionVal(string str) // { // if(string.IsNullOrEmpty(str)) return str; // MatchCollection mc = Regex.Matches(str, "#\\{.*?\\}#"); // foreach(Match m in mc) // { // str = str.Replace(m.Value, GetExpressionVal(m.Value)); // } // return str; // } // } // }