using System.Collections.Concurrent;
using System.Data;
using System.Text.RegularExpressions;
using Infrastructure;
using LitJson;
using Model;
using Model.Custom;
using Model.Source;
using Newtonsoft.Json;
namespace Util.Logic
{
public class LogicDatabaseNodeHelper
{
///
/// 数据库查询节点
///
/// 节点数据
/// 数据库信息
/// 数据库表列表
/// 参数列表
/// 父节点参数列表
public static void dbQuery(NodeList node, List databaseInfos, List tables, List paramList, List logDic, string env = "development")
{
Dictionary condi = new Dictionary(); // 条件参数字典
JsonData nodeData = node.nodeData;
JsonData dbInfo = nodeData["data"]["formData"]["dbLabel"]["value"]; // 数据库查询信息
JsonData queryField = nodeData["data"]["formData"]["output"]["value"]; // 查询字段
JsonData conditions = nodeData["data"]["formData"]["ifelse"]["value"][0]["conditions"]; // 条件
JsonData sortConditions = nodeData["data"]["formData"]["sort"]["value"]; // 条件
string queryLimit = nodeData["data"]["formData"]["queryLimit"]["value"].ToString(); // 查询上限
string logicTag = nodeData["data"]["formData"]["ifelse"]["value"][0]["logic"].ToString(); // 逻辑
string paramAttribute = "";
if (nodeData.ToJson().Contains("\"parentNode\""))
{
paramAttribute = "iterationInputField";
}
else
{
paramAttribute = "";
}
string queryFieldString = "";
foreach (JsonData field in queryField)
{
string fieldName = field["label"].ToString(); // 字段名
JsonData fieldType = field["type"]; // 字段类型
if(fieldType.Count == 2)
{
if(fieldType[0].ToString() == "array" && fieldType[1].ToString() == "object")
{
JsonData children = field["children"];
foreach (JsonData child in children)
{
string subFieldName = child["label"].ToString(); // 字段名
queryFieldString += subFieldName + ",";
}
}
}
else
{
queryFieldString += fieldName + ",";
}
}
if(string.IsNullOrEmpty(queryFieldString)) queryFieldString = "*";
int dbId = int.Parse(dbInfo["dbId"].ToString()); // 数据库ID
int dbTableId = int.Parse(dbInfo["dbTableId"].ToString()); // 数据库表ID
string sql = "";
var queryTable = tables.FirstOrDefault(x => x.id == dbTableId);
if (queryTable != null)
{
string tableName = queryTable.tableName ?? string.Empty; // 数据库表名
sql = "select " + queryFieldString.TrimEnd(',') + " from " + tableName;
if (conditions.Count > 0)
{
sql += " where ";
}
foreach (JsonData condition in conditions)
{
string oper = condition["operator"].ToString(); // 运算符
string value = condition["value"].ToString(); // 值
if (value.Contains("."))
{
value = value.Substring(value.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == value && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == value) ?? new ParamList();
value = param.paramValueTransfer;
}
string variable = condition["variable"].ToString(); // 变量
if (variable.Contains("."))
{
variable = variable.Substring(variable.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == variable && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == variable) ?? new ParamList();
// string paramValue = param.paramValueTransfer;
sql += operatorTransferForSql(param, oper, value, variable);
sql += " " + logicTag + " ";
}
}
if (sql.EndsWith(" " + logicTag + " "))
{
sql = sql.Substring(0, sql.Length - logicTag.Length - 2);
}
if (sortConditions.Count > 0)
{
sql += " order by ";
foreach (JsonData sortCondition in sortConditions)
{
string variable = sortCondition["variable"].ToString(); // 变量
if (variable.Contains("."))
{
variable = variable.Substring(variable.LastIndexOf(".") + 1);
}
string sort = sortCondition["sort"].ToString(); // 排序
sql += variable + " " + sort + ",";
}
sql = sql.TrimEnd(',');
}
if (!string.IsNullOrEmpty(queryLimit))
{
sql += " limit " + queryLimit;
}
SqlSugarClient db = initDb(databaseInfos.FirstOrDefault(x => x.id == dbId) ?? new DatabaseInfo(), env);
Utils.WriteLog("执行sql:" + sql + ";");
var items = db.Ado.GetDataTable(sql);
if (items.Rows.Count > 0)
{
if (items.Rows.Count > 1)
{
foreach (JsonData field in queryField)
{
string fieldName = field["label"].ToString(); // 字段名
JsonData fieldType = field["type"]; // 字段类型
List> values = new List>();
if(fieldType.Count == 2)
{
if(fieldType[0].ToString() == "array" && fieldType[1].ToString() == "object")
{
foreach (DataRow item in items.Rows)
{
Dictionary fieldData = new Dictionary();
JsonData children = field["children"];
foreach (JsonData child in children)
{
string subFieldName = child["label"].ToString(); // 字段名
string subValue = item[subFieldName]?.ToString() ?? string.Empty; // 字段值
fieldData.Add(subFieldName, subValue);
}
values.Add(fieldData);
}
paramList.Add(new ParamList()
{
nodeId = node.nodeId,
paramAttribute = paramAttribute,
paramName = fieldName,
paramValue = Newtonsoft.Json.JsonConvert.SerializeObject(values),
paramType = field["type"][0].ToString(),
});
}
}
}
}
else
{
foreach (JsonData field in queryField)
{
string fieldName = field["label"].ToString(); // 字段名
string fieldType = field["type"][0].ToString();
string fieldValue = items.Rows.Count > 0 ? items.Rows[0][fieldName]?.ToString() : fieldType == "number" ? "0" : string.Empty; // 字段值
if (nodeData.ToJson().Contains("\"parentNode\""))
{
var parentParam = paramList.FirstOrDefault(x => x.paramName == fieldName && x.paramAttribute == "iterationInputField");
if(parentParam != null)
{
parentParam.paramValue = fieldValue;
}
else
{
paramList.Add(new ParamList()
{
nodeId = node.nodeId,
paramAttribute = "iterationInputField",
paramName = fieldName,
paramValue = fieldValue,
paramType = fieldType,
});
}
}
else
{
paramList.Add(new ParamList()
{
nodeId = node.nodeId,
paramName = fieldName,
paramValue = fieldValue,
paramType = fieldType,
});
}
condi.Add(fieldName, fieldValue);
}
}
}
else
{
foreach (JsonData field in queryField)
{
string fieldName = field["label"].ToString(); // 字段名
string fieldType = field["type"][0].ToString();
string fieldValue = fieldType == "number" ? "0" : string.Empty; // 字段值
var parentParam = paramList.FirstOrDefault(x => x.paramName == fieldName && x.paramAttribute == paramAttribute);
if(parentParam != null)
{
parentParam.paramValue = fieldValue;
}
else
{
paramList.Add(new ParamList()
{
nodeId = node.nodeId,
paramAttribute = paramAttribute,
paramName = fieldName,
paramValue = fieldValue,
paramType = fieldType,
});
}
condi.Add(fieldName, fieldValue);
}
}
}
logDic.Add(new LogItem()
{
title = node.nodeData["data"]["nodeMeta"]["label"].ToString(),
param = condi,
detail = sql
});
}
///
/// 数据库SQL查询节点
///
/// 节点数据
/// 数据库信息
/// 参数列表
/// 父节点参数列表
public static void dbSqlQuery(NodeList node, List databaseInfos, List paramList, List logDic, string env = "development")
{
Dictionary condi = new Dictionary(); // 条件参数字典
JsonData nodeData = node.nodeData;
JsonData dbInfo = nodeData["data"]["formData"]["dbLabel"]["value"]; // 数据库查询信息
JsonData queryField = nodeData["data"]["formData"]["output"]["value"]; // 查询字段
string sql = nodeData["data"]["formData"]["sql"]["value"]["code"]["content"].ToString(); // SQL查询语句
string paramAttribute = "";
if (nodeData.ToJson().Contains("\"parentNode\""))
{
paramAttribute = "iterationInputField";
}
else
{
paramAttribute = "";
}
MatchCollection matches = Regex.Matches(sql, "\\$\\{.*?\\}");
foreach (Match match in matches)
{
string paramName = match.Value.Replace("${", "").Replace("}", "");
string paramValue = "";
var param = paramList.FirstOrDefault(x => x.paramName == paramName && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == paramName) ?? new ParamList();
paramValue = param.paramValueTransfer;
sql = sql.Replace(match.Value, paramValue);
}
sql = LogicHelper.MatchExpressionVal(sql);
int dbId = int.Parse(dbInfo["dbId"].ToString()); // 数据库ID
SqlSugarClient db = initDb(databaseInfos.FirstOrDefault(x => x.id == dbId) ?? new DatabaseInfo(), env);
Utils.WriteLog("执行sql:" + sql + ";");
var items = db.Ado.GetDataTable(sql);
if(items.Rows.Count == 1)
{
foreach (JsonData field in queryField)
{
string fieldName = field["label"].ToString(); // 字段名
string fieldType = field["type"][0].ToString();
string fieldValue = items.Rows.Count > 0 ? items.Rows[0][fieldName]?.ToString() : fieldType == "number" ? "0" : string.Empty; // 字段值
var parentParam = paramList.FirstOrDefault(x => x.paramName == fieldName && x.paramAttribute == paramAttribute);
if(parentParam != null)
{
parentParam.paramValue = fieldValue;
}
else
{
paramList.Add(new ParamList()
{
nodeId = node.nodeId,
paramName = fieldName,
paramAttribute = paramAttribute,
paramValue = fieldValue,
paramType = fieldType,
});
}
condi.Add(fieldName, fieldValue);
}
}
else if(items.Rows.Count > 1)
{
JsonData field = queryField[0];
string fieldName = field["label"].ToString(); // 字段名
string fieldType = field["type"][0].ToString();
string fieldValue = JsonConvert.SerializeObject(items, Formatting.Indented);
var parentParam = paramList.FirstOrDefault(x => x.paramName == fieldName && x.paramAttribute == paramAttribute);
if(parentParam != null)
{
parentParam.paramValue = fieldValue;
}
else
{
paramList.Add(new ParamList()
{
nodeId = node.nodeId,
paramName = fieldName,
paramAttribute = paramAttribute,
paramValue = fieldValue,
paramType = fieldType,
});
}
condi.Add(fieldName, fieldValue);
}
logDic.Add(new LogItem()
{
title = node.nodeData["data"]["nodeMeta"]["label"].ToString(),
param = condi,
detail = sql
});
}
///
/// 数据库插入节点
///
/// 节点数据
/// 数据库信息
/// 数据库表列表
/// 参数列表
/// 父节点参数列表
public static void dbInsert(NodeList node, List databaseInfos, List tables, List paramList, List logDic, string env = "development")
{
JsonData nodeData = node.nodeData;
JsonData dbInfo = nodeData["data"]["formData"]["dbLabel"]["value"]; // 数据库查询信息
JsonData insertField = nodeData["data"]["formData"]["setField"]["value"]; // 插入字段
string insertFieldString = "";
string insertFieldValueString = "";
string paramAttribute = "";
if (nodeData.ToJson().Contains("\"parentNode\""))
{
paramAttribute = "iterationInputField";
}
else
{
paramAttribute = "";
}
foreach (JsonData field in insertField)
{
string fieldName = field["label"].ToString(); // 字段名
string fieldType = field["type"][0].ToString(); // 字段类型
string fieldValue = field["value"].ToString(); // 字段值
if (fieldValue.Contains('.'))
{
fieldValue = fieldValue.Substring(fieldValue.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == fieldValue && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == fieldValue) ?? new ParamList();
fieldValue = param.paramValueTransfer;
}
insertFieldString += fieldName + ",";
if(fieldType == "string" || fieldType == "time")
{
insertFieldValueString += "'" + fieldValue + "',";
}
else
{
insertFieldValueString += fieldValue + ",";
}
}
int dbId = int.Parse(dbInfo["dbId"].ToString()); // 数据库ID
int dbTableId = int.Parse(dbInfo["dbTableId"].ToString()); // 数据库表ID
var queryTable = tables.FirstOrDefault(x => x.id == dbTableId);
string sql = "";
if (queryTable != null)
{
string tableName = queryTable.tableName ?? string.Empty; // 数据库表名
sql = "insert into " + tableName + " (" + insertFieldString.TrimEnd(',') + ") values (" + insertFieldValueString.TrimEnd(',') + ")";
SqlSugarClient db = initDb(databaseInfos.FirstOrDefault(x => x.id == dbId) ?? new DatabaseInfo(), env);
sql = LogicHelper.MatchExpressionVal(sql);
Utils.WriteLog("执行sql:" + sql + ";");
var items = db.Ado.ExecuteCommand(sql);
}
logDic.Add(new LogItem()
{
title = node.nodeData["data"]["nodeMeta"]["label"].ToString(),
detail = sql
});
}
///
/// 数据库更新节点
///
/// 节点数据
/// 数据库信息
/// 数据库表列表
/// 参数列表
/// 父节点参数列表
public static void dbUpdate(NodeList node, List databaseInfos, List tables, List paramList, List logDic, string env = "development")
{
JsonData nodeData = node.nodeData;
JsonData dbInfo = nodeData["data"]["formData"]["dbLabel"]["value"]; // 数据库查询信息
JsonData conditions = nodeData["data"]["formData"]["ifelse"]["value"][0]["conditions"]; // 条件
string logicTag = nodeData["data"]["formData"]["ifelse"]["value"][0]["logic"].ToString(); // 逻辑
JsonData updateField = nodeData["data"]["formData"]["setField"]["value"]; // 修改字段
string updateFieldString = "";
string paramAttribute = "";
if (nodeData.ToJson().Contains("\"parentNode\""))
{
paramAttribute = "iterationInputField";
}
else
{
paramAttribute = "";
}
foreach (JsonData field in updateField)
{
string fieldName = field["label"].ToString(); // 字段名
string fieldType = field["type"][0].ToString(); // 字段类型
string fieldValue = field["value"].ToString(); // 字段值
if (fieldValue.Contains('.'))
{
fieldValue = fieldValue.Substring(fieldValue.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == fieldValue && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == fieldValue) ?? new ParamList();
fieldValue = param.paramValueTransfer;
}
if(fieldType == "string" || fieldType == "time")
{
updateFieldString += fieldName + "='" + fieldValue + "',";
}
else
{
updateFieldString += fieldName + "=" + fieldValue + ",";
}
}
int dbId = int.Parse(dbInfo["dbId"].ToString()); // 数据库ID
int dbTableId = int.Parse(dbInfo["dbTableId"].ToString()); // 数据库表ID
var queryTable = tables.FirstOrDefault(x => x.id == dbTableId);
string sql = "";
if (queryTable != null)
{
string tableName = queryTable.tableName ?? string.Empty; // 数据库表名
sql = "update " + tableName + " set " + updateFieldString.TrimEnd(',');
if (conditions.Count > 0)
{
sql += " where ";
}
foreach (JsonData condition in conditions)
{
string oper = condition["operator"].ToString(); // 运算符
string value = condition["value"].ToString(); // 值
if (value.Contains("."))
{
value = value.Substring(value.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == value && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == value) ?? new ParamList();
value = param.paramValueTransfer;
}
string variable = condition["variable"].ToString(); // 变量
if (variable.Contains("."))
{
variable = variable.Substring(variable.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == variable && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == variable) ?? new ParamList();
// string paramValue = param.paramValueTransfer;
sql += operatorTransferForSql(param, oper, value, variable);
sql += " " + logicTag + " ";
}
}
if (sql.EndsWith(" " + logicTag + " "))
{
sql = sql.Substring(0, sql.Length - logicTag.Length - 2);
}
sql = LogicHelper.MatchExpressionVal(sql);
SqlSugarClient db = initDb(databaseInfos.FirstOrDefault(x => x.id == dbId) ?? new DatabaseInfo(), env);
Utils.WriteLog("执行sql:" + sql + ";");
var items = db.Ado.ExecuteCommand(sql);
}
logDic.Add(new LogItem()
{
title = node.nodeData["data"]["nodeMeta"]["label"].ToString(),
detail = sql
});
}
///
/// 数据库删除节点
///
/// 节点数据
/// 数据库信息
/// 数据库表列表
/// 参数列表
/// 父节点参数列表
public static void dbDelete(NodeList node, List databaseInfos, List tables, List paramList, List logDic, string env = "development")
{
JsonData nodeData = node.nodeData;
JsonData dbInfo = nodeData["data"]["formData"]["dbLabel"]["value"]; // 数据库查询信息
JsonData conditions = nodeData["data"]["formData"]["ifelse"]["value"][0]["conditions"]; // 条件
string logicTag = nodeData["data"]["formData"]["ifelse"]["value"][0]["logic"].ToString(); // 逻辑
int dbId = int.Parse(dbInfo["dbId"].ToString()); // 数据库ID
int dbTableId = int.Parse(dbInfo["dbTableId"].ToString()); // 数据库表ID
var queryTable = tables.FirstOrDefault(x => x.id == dbTableId);
string paramAttribute = "";
if (nodeData.ToJson().Contains("\"parentNode\""))
{
paramAttribute = "iterationInputField";
}
else
{
paramAttribute = "";
}
string sql = "";
if (queryTable != null)
{
string tableName = queryTable.tableName ?? string.Empty; // 数据库表名
sql = "delete from " + tableName;
if (conditions.Count > 0)
{
sql += " where ";
}
foreach (JsonData condition in conditions)
{
string oper = condition["operator"].ToString(); // 运算符
string value = condition["value"].ToString(); // 值
if (value.Contains("."))
{
value = value.Substring(value.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == value && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == value) ?? paramList.FirstOrDefault(x => x.paramValue == value) ?? new ParamList();
value = param.paramValueTransfer;
}
string variable = condition["variable"].ToString(); // 变量
if (variable.Contains("."))
{
variable = variable.Substring(variable.LastIndexOf(".") + 1);
var param = paramList.FirstOrDefault(x => x.paramName == variable && x.paramAttribute == paramAttribute) ?? paramList.FirstOrDefault(x => x.paramName == variable) ?? paramList.FirstOrDefault(x => x.paramValue == variable) ?? new ParamList();
// string paramValue = param.paramValueTransfer;
sql += operatorTransferForSql(param, oper, value, variable);
sql += " " + logicTag + " ";
}
}
if (sql.EndsWith(" " + logicTag + " "))
{
sql = sql.Substring(0, sql.Length - logicTag.Length - 2);
}
sql = LogicHelper.MatchExpressionVal(sql);
SqlSugarClient db = initDb(databaseInfos.FirstOrDefault(x => x.id == dbId) ?? new DatabaseInfo(), env);
var items = db.Ado.ExecuteCommand(sql);
}
logDic.Add(new LogItem()
{
title = node.nodeData["data"]["nodeMeta"]["label"].ToString(),
detail = sql
});
}
// 改用线程安全字典 ConcurrentDictionary,替代普通 Dictionary
private static readonly ConcurrentDictionary _dbCache = new();
///
/// 初始化/获取 SqlSugar 实例(多库+多环境 全局缓存)
///
/// 数据库配置
/// 环境标识 development/production
///
public static SqlSugarClient initDb(DatabaseInfo dbInfo, string env)
{
if (dbInfo == null)
throw new ArgumentNullException(nameof(dbInfo));
// 组合唯一 Key
// string cacheKey = $"{dbInfo.id}_{env}";
// 已存在直接返回
// if (_dbCache.TryGetValue(cacheKey, out var existClient))
// {
// return existClient;
// }
// 统一根据环境取值,减少重复判断
string? host = env.Equals("development", StringComparison.OrdinalIgnoreCase)
? dbInfo.devHostAddress
: dbInfo.hostAddress;
int port = env.Equals("development", StringComparison.OrdinalIgnoreCase)
? dbInfo.devPort
: dbInfo.port;
string? userName = env.Equals("development", StringComparison.OrdinalIgnoreCase)
? dbInfo.devUsername
: dbInfo.username;
string? pwd = env.Equals("development", StringComparison.OrdinalIgnoreCase)
? dbInfo.devPwd
: dbInfo.pwd;
string dbName = dbInfo.dbName ?? string.Empty;
if (string.IsNullOrEmpty(host) || string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(dbName))
{
throw new Exception("数据库连接信息不完整:地址/账号/库名不能为空");
}
SqlSugar.DbType dbType;
string connStr;
// 区分 PG / MySQL,增加连接池配置
if (dbInfo.dbType.Equals("pgsql", StringComparison.OrdinalIgnoreCase))
{
dbType = SqlSugar.DbType.PostgreSQL;
connStr = $"Host={host};Port={port};Database={dbName};Username={userName};Password={pwd};Timeout=30;Pooling=true;Max Pool Size=100;Min Pool Size=5;";
}
else
{
dbType = SqlSugar.DbType.MySql;
connStr = $"server={host};port={port};user={userName};password={pwd};database={dbName};charset=utf8;Max Pool Size=100;Min Pool Size=5;";
}
Utils.WriteLog($"数据库连接字符串:{connStr}");
// 创建实例
var config = new ConnectionConfig
{
ConnectionString = connStr,
DbType = dbType,
IsAutoCloseConnection = true, // 执行完毕自动归还物理连接到连接池
InitKeyType = InitKeyType.Attribute
};
var newClient = new SqlSugarClient(config);
// 原子写入缓存
// _dbCache.TryAdd(cacheKey, newClient);
return newClient;
}
///
/// 运算符转换(SQL)
///
/// 运算符
/// 转换后的运算符
public static string operatorTransferForSql(ParamList param, string oper, string paramValue, string fieldName)
{
if (oper == "equal") //等于
{
if(param.paramType == "string" || param.paramType == "time")
{
return fieldName + "='" + paramValue + "'";
}
return fieldName + "=" + paramValue;
}
else if (oper == "not_equal") //不等于
{
if(param.paramType == "string" || param.paramType == "time")
{
return fieldName + "!='" + paramValue + "'";
}
return fieldName + "!=" + paramValue;
}
else if (oper == "greater") //大于
{
return fieldName + ">" + paramValue;
}
else if (oper == "greater_equal") //大于等于
{
return fieldName + " >= " + paramValue;
}
else if (oper == "less") //小于
{
return fieldName + " < " + paramValue;
}
else if (oper == "less_equal") //小于等于
{
return fieldName + " <= " + paramValue;
}
else if (oper == "between") //在之间
{
string[] betweenValues = paramValue.Split(',');
return fieldName + " >= " + betweenValues[0] + " and " + fieldName + " <= " + betweenValues[1];
}
else if (oper == "not_between") //不在之间
{
string[] betweenValues = paramValue.Split(',');
return "(" + fieldName + " < " + betweenValues[0] + " or " + fieldName + " > " + betweenValues[1] + ")";
}
else if (oper == "contains") //包含
{
return fieldName + " like '%" + paramValue + "%'";
}
else if (oper == "not_contains") //不包含
{
return fieldName + " not like '%" + paramValue + "%'";
}
else if (oper == "starts_with") //以...开头
{
return fieldName + " like '" + paramValue + "%'";
}
else if (oper == "ends_with") //以...结尾
{
return fieldName + " like '%" + paramValue + "'";
}
else if (oper == "is_empty")
{
return fieldName + " is null";
}
else if (oper == "is_not_empty") //不为空
{
return fieldName + " is not null";
}
else if (oper == "is_null") //为空
{
return fieldName + " is null";
}
else if (oper == "is_not_null") //不为空
{
return fieldName + " is not null";
}
else if (oper == "in") //在...中
{
if(param.paramType == "string" || param.paramType == "time")
{
paramValue = paramValue.Replace(",", "','");
return fieldName + " in ('" + paramValue + "')";
}
return fieldName + " in (" + paramValue + ")";
}
else if (oper == "not_in") //不在...中
{
if(param.paramType == "string" || param.paramType == "time")
{
paramValue = paramValue.Replace(",", "','");
return fieldName + " in ('" + paramValue + "')";
}
return fieldName + " not in (" + paramValue + ")";
}
else if (oper == "array_contains") //数组包含
{
if(param.paramType == "string" || param.paramType == "time")
{
paramValue = paramValue.Replace(",", "','");
return fieldName + " in ('" + paramValue + "')";
}
return fieldName + " in (" + paramValue + ")";
}
else if (oper == "array_not_contains") //数组不包含
{
if(param.paramType == "string" || param.paramType == "time")
{
paramValue = paramValue.Replace(",", "','");
return fieldName + " not in ('" + paramValue + "')";
}
return fieldName + " not in (" + paramValue + ")";
}
else if (oper == "array_length_equal") //数组长度等于
{
return "Length(" + fieldName + ")=" + paramValue;
}
else if (oper == "array_length_greater")
{
return "Length(" + fieldName + ") > " + paramValue;
}
else if (oper == "array_length_less") //数组长度小于
{
return "Length(" + fieldName + ") < " + paramValue;
}
else if (oper == "is_true") //为真
{
return fieldName + "=true";
}
else if (oper == "is_false") //为假
{
return fieldName + "=false";
}
else if (oper == "date_equal") //日期等于
{
return fieldName + "='" + paramValue + "'";
}
else if (oper == "date_before") //日期之前
{
return fieldName + " < '" + paramValue + "'";
}
else if (oper == "date_after") //日期之后
{
return fieldName + " > '" + paramValue + "'";
}
else if (oper == "date_between") //日期之间
{
string[] betweenValues = paramValue.Split(" - ", StringSplitOptions.None);
return fieldName + " >= '" + betweenValues[0] + "' and " + fieldName + " <= '" + betweenValues[1] + "'";
}
return "";
}
}
}