LogicHelper.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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.nodeId = startNodeId;
  67. paramListObj.paramName = paramName;
  68. paramListObj.paramType = paramType;
  69. paramListObj.paramValue = paramValue;
  70. paramList.Add(paramListObj);
  71. }
  72. // 从起始节点开始
  73. sortEdge(edgeList, nodeList, paramList, startNodeId);
  74. }
  75. /// <summary>
  76. /// 运行逻辑项目的Json数据
  77. /// </summary>
  78. /// <param name="edgeList">边列表</param>
  79. /// <param name="startNodeId">起始节点ID</param>
  80. public static void sortEdge(List<EdgeList> edgeList, List<NodeList> nodeList, List<ParamList> paramList, string startNodeId)
  81. {
  82. foreach(EdgeList item in edgeList)
  83. {
  84. if(item.source == startNodeId)
  85. {
  86. NodeList node = nodeList.FirstOrDefault(x => x.nodeId == item.target) ?? new NodeList();
  87. switch(node.nodeType)
  88. {
  89. case "ifelse": // 如果-否则节点
  90. var ifElseResult = LogicNodeHelper.ifElse(node, paramList);
  91. if(ifElseResult.Count > 0)
  92. {
  93. foreach(bool result in ifElseResult)
  94. {
  95. if(result)
  96. {
  97. sortEdge(edgeList, nodeList, paramList, item.target);
  98. break;
  99. }
  100. }
  101. }
  102. break;
  103. case "iteration": // 迭代节点
  104. break;
  105. case "loop": // 循环节点
  106. break;
  107. case "code-execute": // 代码执行节点
  108. break;
  109. case "sql-execute": // SQL执行节点
  110. break;
  111. case "insert-data": // 插入数据节点
  112. break;
  113. case "update-data": // 更新数据节点
  114. break;
  115. case "query-data": // 查询数据节点
  116. break;
  117. case "delete-data": // 删除数据节点
  118. break;
  119. case "http-request": // HTTP请求节点
  120. break;
  121. default:
  122. break;
  123. }
  124. }
  125. }
  126. }
  127. }
  128. }