using Infrastructure; using LitJson; using Model.Custom; using Services; namespace Util { public class LogicHelper { /// /// 获取逻辑项目的Json数据 /// /// 项目ID /// 请求参数 public static void GetLogicJsonData(int projectId, string request) { var logicProjectService = App.GetService(); var logicProject = logicProjectService.GetById(projectId); if(logicProject == null) { return; } string jsonData = logicProject.setData; if(string.IsNullOrEmpty(jsonData)) { return; } 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 = item["value"].ToString(); ParamList paramListObj = new ParamList(); paramListObj.nodeId = startNodeId; paramListObj.paramName = paramName; paramListObj.paramType = paramType; paramListObj.paramValue = paramValue; paramList.Add(paramListObj); } // 从起始节点开始 sortEdge(edgeList, nodeList, paramList, startNodeId); } /// /// 运行逻辑项目的Json数据 /// /// 边列表 /// 起始节点ID public static void sortEdge(List edgeList, List nodeList, List paramList, string startNodeId) { foreach(EdgeList item in edgeList) { if(item.source == startNodeId) { NodeList node = nodeList.FirstOrDefault(x => x.nodeId == item.target) ?? new NodeList(); switch(node.nodeType) { case "ifelse": // 如果-否则节点 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; case "loop": // 循环节点 break; case "code-execute": // 代码执行节点 break; case "sql-execute": // SQL执行节点 break; case "insert-data": // 插入数据节点 break; case "update-data": // 更新数据节点 break; case "query-data": // 查询数据节点 break; case "delete-data": // 删除数据节点 break; case "http-request": // HTTP请求节点 break; default: break; } } } } } }