LogicHelper.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using Infrastructure;
  2. using LitJson;
  3. using Model.Custom;
  4. using Services;
  5. namespace Util
  6. {
  7. public class LogicHelper
  8. {
  9. /// <summary>
  10. /// 获取逻辑项目的Json数据
  11. /// </summary>
  12. /// <param name="projectId">项目ID</param>
  13. /// <param name="request">请求参数</param>
  14. public static void GetLogicJsonData(int projectId, string request)
  15. {
  16. var logicProjectService = App.GetService<ILogicProjectService>();
  17. var logicProject = logicProjectService.GetById(projectId);
  18. if(logicProject == null)
  19. {
  20. return;
  21. }
  22. string jsonData = logicProject.setData;
  23. if(string.IsNullOrEmpty(jsonData))
  24. {
  25. return;
  26. }
  27. JsonData requestObj = JsonMapper.ToObject(request);
  28. JsonData jsonDataObj = JsonMapper.ToObject(jsonData);
  29. JsonData nodes = jsonDataObj["nodes"]; // 节点数据
  30. List<NodeList> nodeList = new List<NodeList>(); // 节点列表
  31. foreach(JsonData node in nodes)
  32. {
  33. JsonData id = node["id"];
  34. JsonData type = node["type"];
  35. NodeList nodeListObj = new NodeList();
  36. nodeListObj.nodeId = id.ToString();
  37. nodeListObj.nodeType = type.ToString();
  38. nodeListObj.nodeData = node;
  39. nodeList.Add(nodeListObj);
  40. }
  41. List<EdgeList> edgeList = new List<EdgeList>(); // 边列表
  42. JsonData edges = jsonDataObj["edges"]; // 边数据
  43. foreach(JsonData edge in edges)
  44. {
  45. JsonData source = edge["source"];
  46. JsonData target = edge["target"];
  47. EdgeList edgeListObj = new EdgeList();
  48. edgeListObj.source = source.ToString();
  49. edgeListObj.target = target.ToString();
  50. edgeListObj.edgeData = edge;
  51. edgeList.Add(edgeListObj);
  52. }
  53. string startNodeId = "start"; // 起始节点ID
  54. // 获取起始节点数据
  55. List<ParamList> paramList = new List<ParamList>();
  56. NodeList startNode = nodeList.FirstOrDefault(x => x.nodeId == startNodeId) ?? new NodeList();
  57. JsonData nodeData = startNode.nodeData;
  58. JsonData input = nodeData["data"]["formData"]["input"]["value"];
  59. for(int i = 0; i < input.Count; i++)
  60. {
  61. JsonData item = input[i];
  62. string paramName = item["label"].ToString();
  63. string paramType = item["type"][0].ToString();
  64. string paramValue = item["value"].ToString();
  65. ParamList paramListObj = new ParamList();
  66. paramListObj.paramName = paramName;
  67. paramListObj.paramType = paramType;
  68. paramListObj.paramValue = paramValue;
  69. paramList.Add(paramListObj);
  70. }
  71. // 从起始节点开始
  72. sortEdge(edgeList, nodeList, paramList, startNodeId);
  73. }
  74. /// <summary>
  75. /// 运行逻辑项目的Json数据
  76. /// </summary>
  77. /// <param name="edgeList">边列表</param>
  78. /// <param name="startNodeId">起始节点ID</param>
  79. public static void sortEdge(List<EdgeList> edgeList, List<NodeList> nodeList, List<ParamList> paramList, string startNodeId)
  80. {
  81. foreach(EdgeList item in edgeList)
  82. {
  83. if(item.source == startNodeId)
  84. {
  85. NodeList node = nodeList.FirstOrDefault(x => x.nodeId == item.target) ?? new NodeList();
  86. switch(node.nodeType)
  87. {
  88. case "ifelse": // 如果-否则节点
  89. LogicNodeHelper.ifElse(node, paramList);
  90. break;
  91. case "iteration": // 迭代节点
  92. break;
  93. case "loop": // 循环节点
  94. break;
  95. case "code-execute": // 代码执行节点
  96. break;
  97. case "sql-execute": // SQL执行节点
  98. break;
  99. case "insert-data": // 插入数据节点
  100. break;
  101. case "update-data": // 更新数据节点
  102. break;
  103. case "query-data": // 查询数据节点
  104. break;
  105. case "delete-data": // 删除数据节点
  106. break;
  107. case "http-request": // HTTP请求节点
  108. break;
  109. default:
  110. break;
  111. }
  112. sortEdge(edgeList, nodeList, paramList, item.target);
  113. }
  114. }
  115. }
  116. }
  117. }