Compare commits

...

5 Commits

Author SHA1 Message Date
Diego
f626b4e5fc sql插件增加分表模式 属性 2025-04-21 11:00:05 +08:00
2248356998 qq.com
bc23200e66 更新依赖 2025-04-20 20:32:41 +08:00
Diego
95ab59fd5a build: 10.4.21 2025-04-18 11:27:48 +08:00
Diego
0bbee003b0 app.json 2025-04-18 09:21:31 +08:00
Diego
d20cb7a928 兼容10.4.8以下数据库 2025-04-17 09:41:15 +08:00
19 changed files with 90 additions and 55 deletions

View File

@@ -18,11 +18,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="BootstrapBlazor.TableExport" Version="9.2.2" />
<PackageReference Include="BootstrapBlazor.TableExport" Version="9.2.3" />
<!--<PackageReference Include="MiniExcel" Version="1.39.0" />-->
<PackageReference Include="UAParser" Version="3.1.47" />
<PackageReference Include="Rougamo.Fody" Version="5.0.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.188" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.189" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.1" />

View File

@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BootstrapBlazor.FontAwesome" Version="9.0.2" />
<PackageReference Include="BootstrapBlazor" Version="9.5.5" />
<PackageReference Include="BootstrapBlazor" Version="9.5.8" />
<PackageReference Include="Yitter.IdGenerator" Version="1.0.14" />
</ItemGroup>

View File

@@ -1,8 +1,8 @@
<Project>
<PropertyGroup>
<PluginVersion>10.4.19</PluginVersion>
<ProPluginVersion>10.4.19</ProPluginVersion>
<PluginVersion>10.4.22</PluginVersion>
<ProPluginVersion>10.4.22</ProPluginVersion>
<AuthenticationVersion>2.1.7</AuthenticationVersion>
</PropertyGroup>

View File

@@ -7,7 +7,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CS-Script" Version="4.8.27" />
<PackageReference Include="CS-Script" Version="4.9.5" />
</ItemGroup>
<ItemGroup>

View File

@@ -10,8 +10,8 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="9.0.4" />
<PackageReference Include="TouchSocket" Version="3.0.25" />
<PackageReference Include="TouchSocket.SerialPorts" Version="3.0.25" />
<PackageReference Include="TouchSocket" Version="3.0.26" />
<PackageReference Include="TouchSocket.SerialPorts" Version="3.0.26" />
</ItemGroup>
<ItemGroup>

View File

@@ -310,7 +310,6 @@ internal static class RuntimeServiceHelper
}
}
item.Value.Dispose();
}
if (group.Key != null)
{
@@ -321,6 +320,19 @@ internal static class RuntimeServiceHelper
}
}
}
public static void VariableRuntimesDispose(IEnumerable<long> variableIds)
{
foreach (var variableId in variableIds)
{
if (GlobalData.IdVariables.TryGetValue(variableId, out var variableRuntime))
{
variableRuntime.Dispose();
}
}
}
public static void AddCollectChangedDriver(IEnumerable<VariableRuntime> newVariableRuntimes, ConcurrentHashSet<IDriver> changedDriver)

View File

@@ -43,10 +43,10 @@ public class VariableRuntimeService : IVariableRuntimeService
//获取变量,先找到原插件线程,然后修改插件线程内的字典,再改动全局字典,最后刷新插件
ConcurrentHashSet<IDriver> changedDriver = new();
RuntimeServiceHelper.VariableRuntimesDispose(variableIds);
RuntimeServiceHelper.AddCollectChangedDriver(newVariableRuntimes, changedDriver);
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
RuntimeServiceHelper.AddCollectChangedDriver(newVariableRuntimes, changedDriver);
if (restart)
{
@@ -79,9 +79,9 @@ public class VariableRuntimeService : IVariableRuntimeService
ConcurrentHashSet<IDriver> changedDriver = new();
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
RuntimeServiceHelper.VariableRuntimesDispose(variableIds);
RuntimeServiceHelper.AddCollectChangedDriver(newVariableRuntimes, changedDriver);
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
if (restart)
{
@@ -111,6 +111,7 @@ public class VariableRuntimeService : IVariableRuntimeService
ConcurrentHashSet<IDriver> changedDriver = new();
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
RuntimeServiceHelper.VariableRuntimesDispose(variableIds);
if (restart)
{
@@ -144,10 +145,9 @@ public class VariableRuntimeService : IVariableRuntimeService
var variableIds = newVariableRuntimes.Select(a => a.Id).ToHashSet();
ConcurrentHashSet<IDriver> changedDriver = new();
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
RuntimeServiceHelper.VariableRuntimesDispose(variableIds);
RuntimeServiceHelper.AddCollectChangedDriver(newVariableRuntimes, changedDriver);
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
if (restart)
{
@@ -237,10 +237,9 @@ public class VariableRuntimeService : IVariableRuntimeService
ConcurrentHashSet<IDriver> changedDriver = new();
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
RuntimeServiceHelper.VariableRuntimesDispose(variableIds);
RuntimeServiceHelper.AddCollectChangedDriver(newVariableRuntimes, changedDriver);
RuntimeServiceHelper.AddBusinessChangedDriver(variableIds, changedDriver);
if (restart)
{

View File

@@ -81,5 +81,23 @@ public class Startup : AppStartup
});
var fullName = Assembly.GetExecutingAssembly().FullName;//获取程序集全名
CodeFirstUtils.CodeFirst(fullName!);//CodeFirst
//10.4.9 删除logenable
try
{
using var db = DbContext.GetDB<Channel>();
if (!db.DbMaintenance.IsAnyColumn(nameof(Channel), "LogEnable", false)) return;
var tables = db.DbMaintenance.DropColumn(nameof(Channel), "LogEnable");
}
catch { }
try
{
using var db = DbContext.GetDB<Device>();
if (!db.DbMaintenance.IsAnyColumn(nameof(Device), "LogEnable", false)) return;
var tables = db.DbMaintenance.DropColumn(nameof(Device), "LogEnable");
}
catch { }
}
}

View File

@@ -9,8 +9,8 @@
<PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
<PackageReference Include="SqlSugar.TDengineCore" Version="4.18.6" />
<PackageReference Include="Rougamo.Fody" Version="5.0.0" />
<PackageReference Include="TouchSocket.Dmtp" Version="3.0.25" />
<PackageReference Include="TouchSocket.WebApi.Swagger" Version="3.0.25" />
<PackageReference Include="TouchSocket.Dmtp" Version="3.0.26" />
<PackageReference Include="TouchSocket.WebApi.Swagger" Version="3.0.26" />
<PackageReference Include="ThingsGateway.Authentication" Version="$(AuthenticationVersion)" />
</ItemGroup>

View File

@@ -35,6 +35,7 @@
"BigTextScriptHistoryTable": "DynamicScriptHistoryTable",
"BigTextScriptRealTable": "DynamicScriptRealTable",
"RealTableBusinessInterval": "RealTableBusinessInterval",
"SqlDBSplitType": "SplitType",
"BusinessUpdateEnum": "BusinessUpdateEnum",
"BusinessInterval": "BusinessInterval",

View File

@@ -35,7 +35,7 @@
"BigTextScriptHistoryTable": "历史表动态脚本",
"BigTextScriptRealTable": "实时表动态脚本",
"RealTableBusinessInterval": "实时表定时上传间隔",
"SqlDBSplitType": "分表模式",
"BusinessUpdateEnum": "上传模式",
"BusinessInterval": "定时上传间隔",
"IsAllVariable": "选择全部变量",

View File

@@ -1,12 +0,0 @@

namespace ThingsGateway.Plugin.SqlDB;
public enum DbType
{
MySql = 0,
SqlServer = 1,
Sqlite = 2,
Oracle = 3,
PostgreSQL = 4,
}

View File

@@ -14,7 +14,7 @@ using SqlSugar;
namespace ThingsGateway.Plugin.SqlDB;
[SplitTable(SplitType.Week)]//按周分表 (自带分表支持 年、季、月、周、日)
[SplitTable(SplitType._Custom01)]//按周分表 (自带分表支持 年、季、月、周、日)
[SugarTable("{name}_{year}{month}{day}", TableDescription = "设备采集历史表")]//3个变量必须要有
[SugarIndex("index_Id", nameof(SQLHistoryValue.Id), OrderByType.Desc)]
[SugarIndex("index_Name", nameof(SQLHistoryValue.Name), OrderByType.Desc)]

View File

@@ -8,6 +8,10 @@
// QQ群605534569
//------------------------------------------------------------------------------
using Mapster;
using Microsoft.Data.Sqlite;
using SqlSugar;
using System.Reflection;
@@ -17,11 +21,11 @@ namespace ThingsGateway.Plugin.SqlDB;
public class SqlDBDateSplitTableService : DateSplitTableService
{
private SqlDBProducerProperty sqlDBProducerProperty;
private SqlDBProducerProperty _sqlDBProducerProperty;
public SqlDBDateSplitTableService(SqlDBProducerProperty sqlDBProducerProperty)
{
this.sqlDBProducerProperty = sqlDBProducerProperty;
this._sqlDBProducerProperty = sqlDBProducerProperty;
}
#region Core
@@ -29,7 +33,7 @@ public class SqlDBDateSplitTableService : DateSplitTableService
public override List<SplitTableInfo> GetAllTables(ISqlSugarClient db, EntityInfo EntityInfo, List<DbTableInfo> tableInfos)
{
CheckTableName(EntityInfo.DbTableName);
string regex = "^" + EntityInfo.DbTableName.Replace("{year}", "([0-9]{2,4})").Replace("{day}", "([0-9]{1,2})").Replace("{month}", "([0-9]{1,2})").Replace("{name}", sqlDBProducerProperty.HistoryDBTableName);
string regex = "^" + EntityInfo.DbTableName.Replace("{year}", "([0-9]{2,4})").Replace("{day}", "([0-9]{1,2})").Replace("{month}", "([0-9]{1,2})").Replace("{name}", _sqlDBProducerProperty.HistoryDBTableName);
List<string> list = (from it in tableInfos
where Regex.IsMatch(it.Name, regex, RegexOptions.IgnoreCase)
select it.Name).Reverse().ToList();
@@ -51,16 +55,9 @@ public class SqlDBDateSplitTableService : DateSplitTableService
public override string GetTableName(ISqlSugarClient db, EntityInfo EntityInfo)
{
var splitTableAttribute = EntityInfo.Type.GetCustomAttribute<SplitTableAttribute>();
if (splitTableAttribute != null)
{
var type = splitTableAttribute.SplitType;
return GetTableName(db, EntityInfo, type);
}
else
{
return GetTableName(db, EntityInfo, SplitType.Day);
}
var type = (SplitType)_sqlDBProducerProperty.SqlDBSplitType;
return GetTableName(db, EntityInfo, type);
}
public override string GetTableName(ISqlSugarClient db, EntityInfo EntityInfo, SplitType splitType)
@@ -154,8 +151,9 @@ public class SqlDBDateSplitTableService : DateSplitTableService
private string GetTableNameByDate(EntityInfo EntityInfo, SplitType splitType, DateTime date)
{
date = ConvertDateBySplitType(date, splitType);
return EntityInfo.DbTableName.Replace("{year}", date.Year + "").Replace("{day}", SqlDBDateSplitTableService.PadLeft2(date.Day + "")).Replace("{month}", SqlDBDateSplitTableService.PadLeft2(date.Month + "")).Replace("{name}", sqlDBProducerProperty.HistoryDBTableName);
var type = (SplitType)_sqlDBProducerProperty.SqlDBSplitType;
date = ConvertDateBySplitType(date, type);
return EntityInfo.DbTableName.Replace("{year}", date.Year + "").Replace("{day}", SqlDBDateSplitTableService.PadLeft2(date.Day + "")).Replace("{month}", SqlDBDateSplitTableService.PadLeft2(date.Month + "")).Replace("{name}", _sqlDBProducerProperty.HistoryDBTableName);
}
private static string PadLeft2(string str)

View File

@@ -13,7 +13,23 @@ using BootstrapBlazor.Components;
using System.ComponentModel.DataAnnotations;
namespace ThingsGateway.Plugin.SqlDB;
public enum DbType
{
MySql = 0,
SqlServer = 1,
Sqlite = 2,
Oracle = 3,
PostgreSQL = 4,
}
public enum SqlDBSplitType
{
Day = 0,
Week = 1,
Month = 2,
Month_6 = 1000,
Season = 3,
Year = 4,
}
/// <summary>
/// SqlDBProducerProperty
/// </summary>
@@ -34,6 +50,9 @@ public class SqlDBProducerProperty : BusinessPropertyWithCacheInterval
[DynamicProperty]
public DbType DbType { get; set; } = DbType.SqlServer;
[DynamicProperty]
public SqlDBSplitType SqlDBSplitType { get; set; } = SqlDBSplitType.Week;
[DynamicProperty]
[Required]
[AutoGenerateColumn(ComponentType = typeof(Textarea), Rows = 1)]

View File

@@ -9,7 +9,7 @@
</ProjectReference>
<ProjectReference Include="..\..\Gateway\ThingsGateway.Gateway.Razor\ThingsGateway.Gateway.Razor.csproj">
</ProjectReference>
<PackageReference Include="Confluent.Kafka" Version="2.9.0" GeneratePathProperty="true">
<PackageReference Include="Confluent.Kafka" Version="2.10.0" GeneratePathProperty="true">
<PrivateAssets>contentFiles;compile;build;buildMultitargeting;buildTransitive;analyzers;</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@@ -6,7 +6,7 @@
"Startway": "", // 启动方式DOTNET (直接启动) WindowsServicewindows服务 PM2, Systemctl等不需要配置。对应文件夹下的命令文件
"AppSettings": {
"InjectSpecificationDocument": false, // 生产环境是否开启Swagger
"InjectSpecificationDocument": true, // 生产环境是否开启Swagger
"ExternalAssemblies": [ "Plugins" ], // 插件目录
// nuget动态加载的程序集

View File

@@ -16,7 +16,7 @@
<ItemGroup>
<PackageReference Include="TouchSocket.Dmtp" Version="3.0.25" />
<PackageReference Include="TouchSocket.Dmtp" Version="3.0.26" />
</ItemGroup>

View File

@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>10.4.19</Version>
<Version>10.4.22</Version>
</PropertyGroup>
<ItemGroup>