LogicNodeHelper.cs 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. using Infrastructure;
  2. using LitJson;
  3. using Model.Custom;
  4. namespace Util
  5. {
  6. public class LogicNodeHelper
  7. {
  8. /// <summary>
  9. /// 如果-否则节点
  10. /// </summary>
  11. /// <param name="node">节点数据</param>
  12. /// <param name="paramList">参数列表</param>
  13. public static void ifElse(NodeList node, List<ParamList> paramList)
  14. {
  15. JsonData nodeData = node.nodeData;
  16. JsonData ifCondition = nodeData["data"]["formData"]["ifelse"]["value"]; // 如果条件
  17. foreach (JsonData item in ifCondition)
  18. {
  19. string conditionExpression = ""; // 条件表达式
  20. string logicTag = item["logic"].ToString(); // 逻辑
  21. JsonData conditions = item["conditions"]; // 条件
  22. foreach (JsonData condition in conditions)
  23. {
  24. string oper = condition["operator"].ToString(); // 运算符
  25. string value = condition["value"].ToString(); // 值
  26. string variable = condition["variable"].ToString(); // 变量
  27. if (variable.Contains(".") && variable.Contains("output"))
  28. {
  29. variable = variable.Substring(variable.LastIndexOf(".") + 1);
  30. var param = paramList.FirstOrDefault(x => x.paramName == variable);
  31. if (param != null)
  32. {
  33. string paramValue = param.paramValue;
  34. string paramType = param.paramType;
  35. conditionExpression += operatorTransfer(param, oper, paramValue);
  36. if (logicTag == "and")
  37. {
  38. conditionExpression += " && ";
  39. }
  40. else if (logicTag == "or")
  41. {
  42. conditionExpression += " || ";
  43. }
  44. }
  45. }
  46. }
  47. }
  48. }
  49. /// <summary>
  50. /// 运算符转换
  51. /// </summary>
  52. /// <param name="oper">运算符</param>
  53. /// <returns>转换后的运算符</returns>
  54. public static string operatorTransfer(ParamList param, string oper, string paramValue)
  55. {
  56. if (oper == "equal") //等于
  57. {
  58. if(param.paramType == "string" || param.paramType == "time")
  59. {
  60. return "'" + param.paramValue + "' == '" + paramValue + "'";
  61. }
  62. return param.paramValue + " == " + paramValue;
  63. }
  64. else if (oper == "not_equal") //不等于
  65. {
  66. if(param.paramType == "string" || param.paramType == "time")
  67. {
  68. return "'" + param.paramValue + "' != '" + paramValue + "'";
  69. }
  70. return param.paramValue + " != " + paramValue;
  71. }
  72. else if (oper == "greater") //大于
  73. {
  74. return param.paramValue + " > " + paramValue;
  75. }
  76. else if (oper == "greater_equal") //大于等于
  77. {
  78. return param.paramValue + " >= " + paramValue;
  79. }
  80. else if (oper == "less") //小于
  81. {
  82. return param.paramValue + " < " + paramValue;
  83. }
  84. else if (oper == "less_equal") //小于等于
  85. {
  86. return param.paramValue + " <= " + paramValue;
  87. }
  88. else if (oper == "between") //在之间
  89. {
  90. string[] betweenValues = paramValue.Split(',');
  91. return param.paramValue + " >= " + betweenValues[0] + " && " + param.paramValue + " <= " + betweenValues[1];
  92. }
  93. else if (oper == "not_between") //不在之间
  94. {
  95. string[] betweenValues = paramValue.Split(',');
  96. return "(" + param.paramValue + " < " + betweenValues[0] + " || " + param.paramValue + " > " + betweenValues[1] + ")";
  97. }
  98. else if (oper == "contains") //包含
  99. {
  100. return "'" + param.paramValue + "'.Contains('" + paramValue + "')";
  101. }
  102. else if (oper == "not_contains") //不包含
  103. {
  104. return "!'" + param.paramValue + "'.Contains('" + paramValue + "')";
  105. }
  106. else if (oper == "starts_with") //以...开头
  107. {
  108. return "'" + param.paramValue + "'.StartsWith('" + paramValue + "')";
  109. }
  110. else if (oper == "ends_with") //以...结尾
  111. {
  112. return "'" + param.paramValue + "'.EndsWith('" + paramValue + "')";
  113. }
  114. else if (oper == "matches_regex") //匹配正则表达式
  115. {
  116. return "'" + param.paramValue + "'.Match('" + paramValue + "')";
  117. }
  118. else if (oper == "not_matches_regex") //不匹配正则表达式
  119. {
  120. return "!" + "'" + param.paramValue + "'.Match('" + paramValue + "')";
  121. }
  122. else if (oper == "is_empty")
  123. {
  124. return "IsNullOrEmpty('" + param.paramValue + "')";
  125. }
  126. else if (oper == "is_not_empty") //不为空
  127. {
  128. return "!" + "IsNullOrEmpty('" + param.paramValue + "')";
  129. }
  130. else if (oper == "is_null") //为空
  131. {
  132. return "('" + param.paramValue + "'=='{}' || '" + param.paramValue + "'=='[]')";
  133. }
  134. else if (oper == "is_not_null") //不为空
  135. {
  136. return "('" + param.paramValue + "'!='{}' || '" + param.paramValue + "'!='[]')";
  137. }
  138. else if (oper == "in") //在...中
  139. {
  140. return "'" + param.paramValue + "' in '" + paramValue + "'";
  141. }
  142. else if (oper == "not_in") //不在...中
  143. {
  144. return "'" + param.paramValue + "' not in '" + paramValue + "'";
  145. }
  146. else if (oper == "array_contains") //数组包含
  147. {
  148. return "'" + param.paramValue + "' array_contains '" + paramValue + "'";
  149. }
  150. else if (oper == "array_not_contains") //数组不包含
  151. {
  152. return "'" + param.paramValue + "' array_not_contains '" + paramValue + "'";
  153. }
  154. else if (oper == "array_length_equal") //数组长度等于
  155. {
  156. return "'" + param.paramValue + "' array_length_equal " + paramValue;
  157. }
  158. else if (oper == "array_length_greater")
  159. {
  160. return "'" + param.paramValue + "' array_length_greater " + paramValue;
  161. }
  162. else if (oper == "array_length_less") //数组长度小于
  163. {
  164. return "'" + param.paramValue + "' array_length_less " + paramValue;
  165. }
  166. else if (oper == "is_true") //为真
  167. {
  168. return "'" + param.paramValue + "' is true";
  169. }
  170. else if (oper == "is_false") //为假
  171. {
  172. return "'" + param.paramValue + "' is false";
  173. }
  174. else if (oper == "date_equal") //日期等于
  175. {
  176. return "'" + param.paramValue + "' date_equal '" + paramValue + "'";
  177. }
  178. else if (oper == "date_before") //日期之前
  179. {
  180. return "'" + param.paramValue + "' date_before '" + paramValue + "'";
  181. }
  182. else if (oper == "date_after") //日期之后
  183. {
  184. return "'" + param.paramValue + "' date_after '" + paramValue + "'";
  185. }
  186. else if (oper == "date_between") //日期之间
  187. {
  188. return "'" + param.paramValue + "' date_between '" + paramValue + "'";
  189. }
  190. return "";
  191. }
  192. }
  193. }