diff --git a/Hadoop/ZKLT.Hadoop.Interface/ITableService.cs b/Hadoop/ZKLT.Hadoop.Interface/ITableService.cs
index ce900bf..047f9cb 100644
--- a/Hadoop/ZKLT.Hadoop.Interface/ITableService.cs
+++ b/Hadoop/ZKLT.Hadoop.Interface/ITableService.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json.Linq;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -32,7 +33,7 @@ namespace ZKLT.Hadoop.Interface
/// 数据表
/// 数据
/// 是否成功
- public bool Insert(HDP_Source source, HDP_Table table, Dictionary row);
+ public bool Insert(HDP_Source source, HDP_Table table, JContainer? row);
///
/// 更新
@@ -42,7 +43,7 @@ namespace ZKLT.Hadoop.Interface
/// 条件
/// 数据
/// 是否成功
- public bool Update(HDP_Source source, HDP_Table table, Dictionary where, Dictionary row);
+ public bool Update(HDP_Source source, HDP_Table table, JContainer? where, JContainer? row);
///
/// 删除
@@ -52,7 +53,7 @@ namespace ZKLT.Hadoop.Interface
/// 条件
/// 数据
/// 是否成功
- public bool Delete(HDP_Source source, HDP_Table table, Dictionary where, Dictionary row);
+ public bool Delete(HDP_Source source, HDP_Table table, JContainer? where, JContainer? row);
///
/// 查询单个
@@ -62,7 +63,7 @@ namespace ZKLT.Hadoop.Interface
/// 条件
/// 数据
/// 结果
- public T? QuerySingle(HDP_Source source, HDP_Table table, Dictionary where, Dictionary row, string[]? col);
+ public T? QuerySingle(HDP_Source source, HDP_Table table, JContainer? where, JContainer? row, string[]? col);
///
/// 查询列表
@@ -73,8 +74,8 @@ namespace ZKLT.Hadoop.Interface
/// 条件
/// 数据
/// 结果集
- public T[] Query(HDP_Source source, HDP_Table table, Dictionary? where, Dictionary? row,
- Dictionary? order, string[]? col);
+ public T[] Query(HDP_Source source, HDP_Table table, JContainer? where, JContainer? row,
+ JContainer? order, string[]? col);
///
/// 查询列表
@@ -85,7 +86,7 @@ namespace ZKLT.Hadoop.Interface
/// 条件
/// 数据
/// 结果集
- public HDP_Page QueryPage(HDP_Source source, HDP_Table table, int pageIndex, int pageSize, Dictionary? where, Dictionary? row, Dictionary? order, string[]? col);
+ public HDP_Page QueryPage(HDP_Source source, HDP_Table table, int pageIndex, int pageSize, JContainer? where, JContainer? row, JContainer? order, string[]? col);
///
diff --git a/Hadoop/ZKLT.Hadoop.Model/HDP_Command.cs b/Hadoop/ZKLT.Hadoop.Model/HDP_Command.cs
index afb092c..bf6f4b1 100644
--- a/Hadoop/ZKLT.Hadoop.Model/HDP_Command.cs
+++ b/Hadoop/ZKLT.Hadoop.Model/HDP_Command.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json.Linq;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -23,11 +24,11 @@ namespace ZKLT.Hadoop.Model
private string[]? _Col;
- private Dictionary? _Where;
+ private JContainer? _Where;
- private Dictionary? _Data;
+ private JContainer? _Data;
- private Dictionary? _Order;
+ private JContainer? _Order;
///
/// 源
@@ -42,12 +43,12 @@ namespace ZKLT.Hadoop.Model
///
/// 条件
///
- public Dictionary? Where { get => _Where; set => _Where = value; }
+ public JContainer? Where { get => _Where; set => _Where = value; }
///
/// 数据
///
- public Dictionary? Data { get => _Data; set => _Data = value; }
+ public JContainer? Data { get => _Data; set => _Data = value; }
///
/// 分页下标
@@ -62,7 +63,7 @@ namespace ZKLT.Hadoop.Model
///
/// 排序
///
- public Dictionary? Order { get => _Order; set => _Order = value; }
+ public JContainer? Order { get => _Order; set => _Order = value; }
///
/// 命令类型
diff --git a/Hadoop/ZKLT.Hadoop.Model/HDP_CommandAction.cs b/Hadoop/ZKLT.Hadoop.Model/HDP_CommandAction.cs
index 7480205..c20d37c 100644
--- a/Hadoop/ZKLT.Hadoop.Model/HDP_CommandAction.cs
+++ b/Hadoop/ZKLT.Hadoop.Model/HDP_CommandAction.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json.Linq;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -27,7 +28,7 @@ namespace ZKLT.Hadoop.Model
/// 函数
/// 参数
/// 命令
- public static object Convert(string action, Dictionary param)
+ public static object Convert(string action, JContainer param)
{
if (action == DATENOW)
{
diff --git a/Hadoop/ZKLT.Hadoop.Model/HDP_Table.cs b/Hadoop/ZKLT.Hadoop.Model/HDP_Table.cs
index 4847fb3..91d3b03 100644
--- a/Hadoop/ZKLT.Hadoop.Model/HDP_Table.cs
+++ b/Hadoop/ZKLT.Hadoop.Model/HDP_Table.cs
@@ -1,4 +1,5 @@
-using System;
+using Newtonsoft.Json.Linq;
+using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
@@ -136,6 +137,29 @@ namespace ZKLT.Hadoop.Model
}
}
+ return _result;
+ }
+
+ ///
+ /// 类转JObject
+ ///
+ /// 数据
+ ///
+ public static JObject Class2JObject(object data) {
+ var _result = new JObject();
+
+ Type _type = data.GetType();
+
+ var _properties = _type.GetProperties();
+
+ foreach (var _property in _properties)
+ {
+ if (_property.GetValue(data) != null)
+ {
+ _result.Add(new JProperty(_property.Name, _property.GetValue(data)!));
+ }
+ }
+
return _result;
}
}
diff --git a/Hadoop/ZKLT.Hadoop.Model/ZKLT.Hadoop.Model.csproj b/Hadoop/ZKLT.Hadoop.Model/ZKLT.Hadoop.Model.csproj
index daeed6e..4f722d2 100644
--- a/Hadoop/ZKLT.Hadoop.Model/ZKLT.Hadoop.Model.csproj
+++ b/Hadoop/ZKLT.Hadoop.Model/ZKLT.Hadoop.Model.csproj
@@ -10,4 +10,8 @@
+
+
+
+
diff --git a/Hadoop/ZKLT.Hadoop/HadoopService.cs b/Hadoop/ZKLT.Hadoop/HadoopService.cs
index 0872e8e..44291c3 100644
--- a/Hadoop/ZKLT.Hadoop/HadoopService.cs
+++ b/Hadoop/ZKLT.Hadoop/HadoopService.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using MySqlX.XDevAPI.Relational;
+using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -140,10 +141,11 @@ namespace ZKLT.Hadoop
{
return _Source;
}
- var _result = _TableService.QuerySingle(_Source, GetTable("HDP_Source")!, new Dictionary
+
+ var _result = _TableService.QuerySingle(_Source, GetTable("HDP_Source")!, new JObject
{
{ "Id","=" }
- }, new Dictionary {
+ }, new JObject {
{ "Id",sourceid}
}, null);
return _result;
@@ -186,7 +188,7 @@ namespace ZKLT.Hadoop
throw new ArgumentException("编号已存在");
}
- return _TableService.Insert(_Source, GetTable("HDP_Source")!, HDP_Table.Class2Dictionary(source));
+ return _TableService.Insert(_Source, GetTable("HDP_Source")!, HDP_Table.Class2JObject(source));
}
///
@@ -226,9 +228,9 @@ namespace ZKLT.Hadoop
throw new ArgumentException("编号不存在");
}
- return _TableService.Update(_Source, GetTable("HDP_Source")!, new Dictionary {
+ return _TableService.Update(_Source, GetTable("HDP_Source")!, new JObject {
{"Id","=" }
- }, HDP_Table.Class2Dictionary(source));
+ }, HDP_Table.Class2JObject(source));
}
///
@@ -248,9 +250,9 @@ namespace ZKLT.Hadoop
throw new ArgumentException("编号不存在");
}
- return _TableService.Delete(_Source, GetTable("HDP_Source")!, new Dictionary {
+ return _TableService.Delete(_Source, GetTable("HDP_Source")!, new JObject{
{"Id","=" }
- }, new Dictionary {
+ }, new JObject{
{"Id",sourceid }
});
}
@@ -282,18 +284,18 @@ namespace ZKLT.Hadoop
return _Tables.First(x => x.Id == tableid);
}
- var _result = _TableService.QuerySingle(_Source, GetTable("HDP_Table")!, new Dictionary
+ var _result = _TableService.QuerySingle(_Source, GetTable("HDP_Table")!, new JObject
{
{ "Id","=" }
- }, new Dictionary {
+ }, new JObject{
{ "Id",tableid}
}, null);
if (_result != null)
{
- _result.Columns = _TableService.Query(_Source, GetTable("HDP_Column")!, new Dictionary {
+ _result.Columns = _TableService.Query(_Source, GetTable("HDP_Column")!, new JObject {
{ "TableId","="}
- }, new Dictionary {
+ }, new JObject{
{"TableId",_result.Id! }
}, null, null);
}
@@ -320,7 +322,7 @@ namespace ZKLT.Hadoop
{
using (TransactionScope _scope = new TransactionScope())
{
- if (!_TableService.Insert(_Source, GetTable("HDP_Table")!, HDP_Table.Class2Dictionary(table)))
+ if (!_TableService.Insert(_Source, GetTable("HDP_Table")!, HDP_Table.Class2JObject(table)))
{
return false;
}
@@ -328,7 +330,7 @@ namespace ZKLT.Hadoop
{
var _column = table.Columns![i];
_column.TableId = table.Id;
- if (!_TableService.Insert(_Source, GetTable("HDP_Column")!, HDP_Table.Class2Dictionary(_column)))
+ if (!_TableService.Insert(_Source, GetTable("HDP_Column")!, HDP_Table.Class2JObject(_column)))
{
return false;
}
@@ -362,9 +364,9 @@ namespace ZKLT.Hadoop
{
using (TransactionScope _scope = new TransactionScope())
{
- if (!_TableService.Update(_Source, GetTable("HDP_Table")!, new Dictionary {
+ if (!_TableService.Update(_Source, GetTable("HDP_Table")!, new JObject{
{ "Id","="}
- }, HDP_Table.Class2Dictionary(table)))
+ }, HDP_Table.Class2JObject(table)))
{
return false;
}
@@ -373,21 +375,21 @@ namespace ZKLT.Hadoop
{
var _column = table.Columns![i];
_column.TableId = table.Id;
- if (_TableService.QuerySingle(_Source, GetTable("HDP_Column")!, new Dictionary
+ if (_TableService.QuerySingle(_Source, GetTable("HDP_Column")!, new JObject
{
{"Id","=" }
- }, HDP_Table.Class2Dictionary(_column), null) == null)
+ }, HDP_Table.Class2JObject(_column), null) == null)
{
- if (!_TableService.Insert(_Source, GetTable("HDP_Column")!, HDP_Table.Class2Dictionary(_column)))
+ if (!_TableService.Insert(_Source, GetTable("HDP_Column")!, HDP_Table.Class2JObject(_column)))
{
return false;
}
}
else
{
- if (!_TableService.Update(_Source, GetTable("HDP_Column")!, new Dictionary {
+ if (!_TableService.Update(_Source, GetTable("HDP_Column")!, new JObject {
{"Id","=" }
- }, HDP_Table.Class2Dictionary(_column)))
+ }, HDP_Table.Class2JObject(_column)))
{
return false;
}
@@ -423,17 +425,17 @@ namespace ZKLT.Hadoop
using (TransactionScope _scope = new TransactionScope())
{
- if (!_TableService.Delete(_Source, GetTable("HDP_Table")!, new Dictionary {
+ if (!_TableService.Delete(_Source, GetTable("HDP_Table")!, new JObject{
{"Id","=" }
- }, new Dictionary {
+ }, new JObject {
{"Id",tableId }
}))
{
return false;
}
- if (!_TableService.Delete(_Source, GetTable("HDP_Column")!, new Dictionary {
+ if (!_TableService.Delete(_Source, GetTable("HDP_Column")!, new JObject{
{ "TableId","="}
- }, new Dictionary {
+ }, new JObject {
{"TableId",tableId }
}))
{
diff --git a/Hadoop/ZKLT.Hadoop/TableService.cs b/Hadoop/ZKLT.Hadoop/TableService.cs
index 7f74144..767819a 100644
--- a/Hadoop/ZKLT.Hadoop/TableService.cs
+++ b/Hadoop/ZKLT.Hadoop/TableService.cs
@@ -12,6 +12,8 @@ using MySqlX.XDevAPI.Relational;
using Mysqlx.Crud;
using Newtonsoft.Json;
using Mysqlx.Resultset;
+using Newtonsoft.Json.Linq;
+using System.Transactions;
namespace ZKLT.Hadoop
{
@@ -22,60 +24,70 @@ namespace ZKLT.Hadoop
///
/// 表
/// 条件
- /// 数据
- /// 命令
+ /// 数据
/// 参数
- private void MergeWhere(HDP_Table table, Dictionary? where, Dictionary? row, StringBuilder command, Dictionary param)
+ private string MergeWhere(HDP_Table table, JContainer? where, JContainer? data, Dictionary param)
{
- string _guid = "";
- //执行条件
StringBuilder _wherestr = new StringBuilder();
- _wherestr.Append("WHERE 1 = 1");
- if (where != null && where.Count > 0)
+ string _guid = "";
+ if (where != null && data != null)
{
- for (var i = 0; i < table.Columns!.Length; i++)
+ _wherestr.AppendLine("WHERE");
+ var _wheres = new List();
+ var _datas = new List();
+ if (where.Type == JTokenType.Object)
+ {
+ _wheres.Add((JObject)where);
+ _datas.Add((JObject)data);
+ }
+ else if (where.Type == JTokenType.Array)
{
- var _column = table.Columns[i];
- if (where.ContainsKey(_column.Key!))
+ for(var i = 0;i < where.Count;i++)
{
- switch (where[_column.Key!])
+ _wheres.Add((JObject)where.Children().ToArray()[i]);
+ _datas.Add((JObject)data.Children().ToArray()[i]);
+ }
+ }
+ for (var j = 0; j < _wheres.Count; j++) {
+ if (j > 0) {
+ _wherestr.AppendLine("OR");
+ }
+ _wherestr.AppendLine("(");
+ var _where = _wheres[j];
+ var _data = _datas[j];
+ if (_where.Count > 0)
+ {
+ _wherestr.AppendLine("1 = 1");
+ var _fileds = _where.Children().ToArray();
+ for (var i = 0; i < _fileds.Length; i++)
{
- case HDP_WhereType.LIKE:
- _guid = Guid.NewGuid().ToString("N");
- _wherestr.Append($@" AND `{_column.Key!}` {where[_column.Key!]} CONCAT('%',@{_guid},'%')");
- param.Add(_guid, row![_column.Key!]);
- break;
- case HDP_WhereType.BETWEEN:
- if (row![_column.Key!] != null)
+ var _item = (JProperty)_fileds[i];
+ if (table.Columns!.Any(x => x.Key == _item.Name) && _data.ContainsKey(_item.Name))
+ {
+ if (_item.Value.Type == JTokenType.String)
+ {
+ _guid = Guid.NewGuid().ToString("N");
+ _wherestr.AppendLine(@$"AND `{_item.Name}` {_item.Value.ToString()} @{_guid}");
+ param.Add(_guid, ((JValue)_data[_item.Name]!).Value!);
+ }
+ else if (_item.Value.Type == JTokenType.Array)
{
- var _betweendata = JsonConvert.DeserializeObject