| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- using Infrastructure;
- using LitJson;
- using Model.Custom;
- namespace Util
- {
- public class LogicNodeHelper
- {
- /// <summary>
- /// 如果-否则节点
- /// </summary>
- /// <param name="node">节点数据</param>
- /// <param name="paramList">参数列表</param>
- public static void ifElse(NodeList node, List<ParamList> paramList)
- {
- JsonData nodeData = node.nodeData;
- JsonData ifCondition = nodeData["data"]["formData"]["ifelse"]["value"]; // 如果条件
- foreach (JsonData item in ifCondition)
- {
- string conditionExpression = ""; // 条件表达式
- string logicTag = item["logic"].ToString(); // 逻辑
- JsonData conditions = item["conditions"]; // 条件
- foreach (JsonData condition in conditions)
- {
- string oper = condition["operator"].ToString(); // 运算符
- string value = condition["value"].ToString(); // 值
- string variable = condition["variable"].ToString(); // 变量
- if (variable.Contains(".") && variable.Contains("output"))
- {
- variable = variable.Substring(variable.LastIndexOf(".") + 1);
- var param = paramList.FirstOrDefault(x => x.paramName == variable);
- if (param != null)
- {
- string paramValue = param.paramValue;
- string paramType = param.paramType;
- conditionExpression += operatorTransfer(param, oper, paramValue);
- if (logicTag == "and")
- {
- conditionExpression += " && ";
- }
- else if (logicTag == "or")
- {
- conditionExpression += " || ";
- }
- }
- }
- }
- }
- }
- /// <summary>
- /// 运算符转换
- /// </summary>
- /// <param name="oper">运算符</param>
- /// <returns>转换后的运算符</returns>
- public static string operatorTransfer(ParamList param, string oper, string paramValue)
- {
- if (oper == "equal") //等于
- {
- if(param.paramType == "string" || param.paramType == "time")
- {
- return "'" + param.paramValue + "' == '" + paramValue + "'";
- }
- return param.paramValue + " == " + paramValue;
- }
- else if (oper == "not_equal") //不等于
- {
- if(param.paramType == "string" || param.paramType == "time")
- {
- return "'" + param.paramValue + "' != '" + paramValue + "'";
- }
- return param.paramValue + " != " + paramValue;
- }
- else if (oper == "greater") //大于
- {
- return param.paramValue + " > " + paramValue;
- }
- else if (oper == "greater_equal") //大于等于
- {
- return param.paramValue + " >= " + paramValue;
- }
- else if (oper == "less") //小于
- {
- return param.paramValue + " < " + paramValue;
- }
- else if (oper == "less_equal") //小于等于
- {
- return param.paramValue + " <= " + paramValue;
- }
- else if (oper == "between") //在之间
- {
- string[] betweenValues = paramValue.Split(',');
- return param.paramValue + " >= " + betweenValues[0] + " && " + param.paramValue + " <= " + betweenValues[1];
- }
- else if (oper == "not_between") //不在之间
- {
- string[] betweenValues = paramValue.Split(',');
- return "(" + param.paramValue + " < " + betweenValues[0] + " || " + param.paramValue + " > " + betweenValues[1] + ")";
- }
- else if (oper == "contains") //包含
- {
- return "'" + param.paramValue + "'.Contains('" + paramValue + "')";
- }
- else if (oper == "not_contains") //不包含
- {
- return "!'" + param.paramValue + "'.Contains('" + paramValue + "')";
- }
- else if (oper == "starts_with") //以...开头
- {
- return "'" + param.paramValue + "'.StartsWith('" + paramValue + "')";
- }
- else if (oper == "ends_with") //以...结尾
- {
- return "'" + param.paramValue + "'.EndsWith('" + paramValue + "')";
- }
- else if (oper == "matches_regex") //匹配正则表达式
- {
- return "'" + param.paramValue + "'.Match('" + paramValue + "')";
- }
- else if (oper == "not_matches_regex") //不匹配正则表达式
- {
- return "!" + "'" + param.paramValue + "'.Match('" + paramValue + "')";
- }
- else if (oper == "is_empty")
- {
- return "IsNullOrEmpty('" + param.paramValue + "')";
- }
- else if (oper == "is_not_empty") //不为空
- {
- return "!" + "IsNullOrEmpty('" + param.paramValue + "')";
- }
- else if (oper == "is_null") //为空
- {
- return "('" + param.paramValue + "'=='{}' || '" + param.paramValue + "'=='[]')";
- }
- else if (oper == "is_not_null") //不为空
- {
- return "('" + param.paramValue + "'!='{}' || '" + param.paramValue + "'!='[]')";
- }
- else if (oper == "in") //在...中
- {
- return "'" + param.paramValue + "' in '" + paramValue + "'";
- }
- else if (oper == "not_in") //不在...中
- {
- return "'" + param.paramValue + "' not in '" + paramValue + "'";
- }
- else if (oper == "array_contains") //数组包含
- {
- return "'" + param.paramValue + "' array_contains '" + paramValue + "'";
- }
- else if (oper == "array_not_contains") //数组不包含
- {
- return "'" + param.paramValue + "' array_not_contains '" + paramValue + "'";
- }
- else if (oper == "array_length_equal") //数组长度等于
- {
- return "'" + param.paramValue + "' array_length_equal " + paramValue;
- }
- else if (oper == "array_length_greater")
- {
- return "'" + param.paramValue + "' array_length_greater " + paramValue;
- }
- else if (oper == "array_length_less") //数组长度小于
- {
- return "'" + param.paramValue + "' array_length_less " + paramValue;
- }
- else if (oper == "is_true") //为真
- {
- return "'" + param.paramValue + "' is true";
- }
- else if (oper == "is_false") //为假
- {
- return "'" + param.paramValue + "' is false";
- }
- else if (oper == "date_equal") //日期等于
- {
- return "'" + param.paramValue + "' date_equal '" + paramValue + "'";
- }
- else if (oper == "date_before") //日期之前
- {
- return "'" + param.paramValue + "' date_before '" + paramValue + "'";
- }
- else if (oper == "date_after") //日期之后
- {
- return "'" + param.paramValue + "' date_after '" + paramValue + "'";
- }
- else if (oper == "date_between") //日期之间
- {
- return "'" + param.paramValue + "' date_between '" + paramValue + "'";
- }
- return "";
- }
- }
- }
|