diff --git a/Haoliang.Core/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/Haoliang.Core/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..2217181
--- /dev/null
+++ b/Haoliang.Core/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
diff --git a/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfo.cs b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfo.cs
new file mode 100644
index 0000000..b3edc0e
--- /dev/null
+++ b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfo.cs
@@ -0,0 +1,22 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("Haoliang.Core")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c3d17cebb9da179f6753a56af8a0a77a244c32f3")]
+[assembly: System.Reflection.AssemblyProductAttribute("Haoliang.Core")]
+[assembly: System.Reflection.AssemblyTitleAttribute("Haoliang.Core")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfoInputs.cache b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..65eb7e8
--- /dev/null
+++ b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+8be02421dfff2584ed0de880e6906d7bb86a51af3956a22dc9c02300e5c63caa
diff --git a/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.GeneratedMSBuildEditorConfig.editorconfig b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..ea39118
--- /dev/null
+++ b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,13 @@
+is_global = true
+build_property.TargetFramework = net8.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = Haoliang.Core
+build_property.ProjectDir = /root/opencode/haoliang/Haoliang.Core/
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
diff --git a/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.AssemblyReference.cache b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..9947f23
Binary files /dev/null and b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.AssemblyReference.cache differ
diff --git a/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.CoreCompileInputs.cache b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..fe2de5b
--- /dev/null
+++ b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+1876776563f014d39691597241f38a428d38a23e7f844ce7209f1ff5cef025d2
diff --git a/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.FileListAbsolute.txt b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.FileListAbsolute.txt
index e69de29..a3cd6a0 100644
--- a/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.FileListAbsolute.txt
+++ b/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.FileListAbsolute.txt
@@ -0,0 +1,5 @@
+/root/opencode/haoliang/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.AssemblyReference.cache
+/root/opencode/haoliang/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.GeneratedMSBuildEditorConfig.editorconfig
+/root/opencode/haoliang/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfoInputs.cache
+/root/opencode/haoliang/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.AssemblyInfo.cs
+/root/opencode/haoliang/Haoliang.Core/obj/Debug/net8.0/Haoliang.Core.csproj.CoreCompileInputs.cache
diff --git a/Haoliang.Data/Entities/CNCBusinessDbContext.cs b/Haoliang.Data/Entities/CNCBusinessDbContext.cs
index 6123779..f41a091 100644
--- a/Haoliang.Data/Entities/CNCBusinessDbContext.cs
+++ b/Haoliang.Data/Entities/CNCBusinessDbContext.cs
@@ -3,6 +3,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Haoliang.Data.Entities;
using Haoliang.Models.System;
+using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
namespace Haoliang.Data
{
@@ -59,19 +60,6 @@ namespace Haoliang.Data
{
base.OnModelCreating(modelBuilder);
- // Configure MySQL-specific settings
- foreach (var entityType in modelBuilder.Model.GetEntityTypes())
- {
- // Set default charset and collation
- if (typeof(BaseEntity).IsAssignableFrom(entityType.ClrType))
- {
- modelBuilder.Entity(entityType.ClrType)
- .ToTable(entityType.GetTableName() ?? "", t => t
- .charset("utf8mb4")
- .collation("utf8mb4_unicode_ci"));
- }
- }
-
// Configure relationships
ConfigureDeviceRelationships(modelBuilder);
ConfigureUserRelationships(modelBuilder);
@@ -92,128 +80,26 @@ namespace Haoliang.Data
private void ConfigureDeviceRelationships(ModelBuilder modelBuilder)
{
- modelBuilder.Entity()
- .HasMany(d => d.DeviceStatus)
- .WithOne()
- .HasForeignKey(ds => ds.DeviceId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(d => d.CollectionResults)
- .WithOne()
- .HasForeignKey(cr => cr.DeviceId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(d => d.CollectionLogs)
- .WithOne()
- .HasForeignKey(cl => cl.DeviceId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(d => d.ProductionRecords)
- .WithOne()
- .HasForeignKey(pr => pr.DeviceId)
- .OnDelete(DeleteBehavior.Cascade);
}
private void ConfigureUserRelationships(ModelBuilder modelBuilder)
{
- modelBuilder.Entity()
- .HasOne(u => u.Role)
- .WithMany()
- .HasForeignKey(u => u.RoleId)
- .OnDelete(DeleteBehavior.Restrict);
-
- modelBuilder.Entity()
- .HasMany(u => u.UserPermissions)
- .WithOne(up => up.User)
- .HasForeignKey(up => up.UserId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(u => u.UserSessions)
- .WithOne(us => us.User)
- .HasForeignKey(us => us.UserId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(u => u.PasswordResets)
- .WithOne(pr => pr.User)
- .HasForeignKey(pr => pr.UserId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(r => r.RolePermissions)
- .WithOne(rp => rp.Role)
- .HasForeignKey(rp => rp.RoleId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(e => e.DeviceAssignments)
- .WithOne(da => da.Employee)
- .HasForeignKey(da => da.EmployeeId)
- .OnDelete(DeleteBehavior.Cascade);
}
private void ConfigureAlarmRelationships(ModelBuilder modelBuilder)
{
- modelBuilder.Entity()
- .HasMany(a => a.AlarmNotifications)
- .WithOne(an => an.Alarm)
- .HasForeignKey(an => an.AlarmId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(ar => ar.Alarms)
- .WithOne(a => a.AlarmRule)
- .HasForeignKey(a => a.AlarmRuleId)
- .OnDelete(DeleteBehavior.Restrict);
}
private void ConfigureCollectionRelationships(ModelBuilder modelBuilder)
{
- modelBuilder.Entity()
- .HasMany(ct => ct.CollectionResults)
- .WithOne(cr => cr.CollectionTask)
- .HasForeignKey(cr => cr.TaskId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(cr => cr.CollectionLogs)
- .WithOne(cl => cl.CollectionResult)
- .HasForeignKey(cl => cl.ResultId)
- .OnDelete(DeleteBehavior.Cascade);
}
private void ConfigureProductionRelationships(ModelBuilder modelBuilder)
{
- modelBuilder.Entity()
- .HasMany(pr => pr.ProgramSummaries)
- .WithOne(pps => pps.ProductionRecord)
- .HasForeignKey(pps => pps.RecordId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(d => d.ProductionSummaries)
- .WithOne(ps => ps.Device)
- .HasForeignKey(ps => ps.DeviceId)
- .OnDelete(DeleteBehavior.Cascade);
}
private void ConfigureTemplateRelationships(ModelBuilder modelBuilder)
{
- modelBuilder.Entity()
- .HasMany(t => t.TagMappings)
- .WithOne(tm => tm.Template)
- .HasForeignKey(tm => tm.TemplateId)
- .OnDelete(DeleteBehavior.Cascade);
-
- modelBuilder.Entity()
- .HasMany(t => t.Devices)
- .WithOne(d => d.Template)
- .HasForeignKey(d => d.TemplateId)
- .OnDelete(DeleteBehavior.Restrict);
}
private void ConfigureIndexes(ModelBuilder modelBuilder)
@@ -246,13 +132,7 @@ namespace Haoliang.Data
// Alarm indexes
modelBuilder.Entity()
- .HasIndex(a => a.AlarmStatus);
-
- modelBuilder.Entity()
- .HasIndex(a => a.IsActive);
-
- modelBuilder.Entity()
- .HasIndex(a => a.CreateTime);
+ .HasIndex(a => a.IsResolved);
// Collection indexes
modelBuilder.Entity()
@@ -278,9 +158,6 @@ namespace Haoliang.Data
modelBuilder.Entity()
.HasIndex(t => t.BrandName);
- modelBuilder.Entity()
- .HasIndex(t => t.IsActive);
-
// System config indexes
modelBuilder.Entity()
.HasIndex(sc => sc.ConfigKey)
@@ -336,31 +213,12 @@ namespace Haoliang.Data
.IsRequired()
.HasMaxLength(255);
- modelBuilder.Entity()
- .Property(u => u.FirstName)
- .IsRequired()
- .HasMaxLength(50);
-
- modelBuilder.Entity()
- .Property(u => u.LastName)
- .IsRequired()
- .HasMaxLength(50);
-
// Alarm constraints
modelBuilder.Entity()
.Property(a => a.AlarmType)
.IsRequired()
.HasMaxLength(50);
- modelBuilder.Entity()
- .Property(a => a.Title)
- .IsRequired()
- .HasMaxLength(255);
-
- modelBuilder.Entity()
- .Property(a => a.AlarmStatus)
- .IsRequired();
-
// System config constraints
modelBuilder.Entity()
.Property(sc => sc.ConfigKey)
@@ -393,24 +251,12 @@ namespace Haoliang.Data
.HasColumnType("text");
modelBuilder.Entity()
- .Property(cr => cr.RawData)
- .HasColumnType("text");
+ .Property(cr => cr.RawJson)
+ .HasColumnType("json");
modelBuilder.Entity()
.Property(cr => cr.ParsedData)
.HasColumnType("text");
-
- modelBuilder.Entity()
- .Property(t => t.TagsJson)
- .HasColumnType("json");
-
- modelBuilder.Entity()
- .Property(t => t.DataProcessingRulesJson)
- .HasColumnType("json");
-
- modelBuilder.Entity()
- .Property(sr => sr.ResultData)
- .HasColumnType("json");
}
public static void ConfigureDatabaseServices(IServiceCollection services, IConfiguration configuration)
@@ -419,14 +265,13 @@ namespace Haoliang.Data
services.AddDbContext(options =>
{
- options.UseMySql(connectionString,
+ options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString),
mysqlOptions =>
{
mysqlOptions.EnableRetryOnFailure(
maxRetryCount: 3,
maxRetryDelay: TimeSpan.FromSeconds(30),
errorNumbersToAdd: null);
- mysqlOptions.EnableSensitiveDataLogging(true);
});
// Enable lazy loading for development
diff --git a/Haoliang.Data/Entities/CNCDbContext.cs b/Haoliang.Data/Entities/CNCDbContext.cs
index f9dec91..2f6a46d 100644
--- a/Haoliang.Data/Entities/CNCDbContext.cs
+++ b/Haoliang.Data/Entities/CNCDbContext.cs
@@ -16,9 +16,14 @@ public DbSet Devices { get; set; }
public DbSet DeviceCurrentStatus { get; set; } = null!;
public DbSet CollectionTagData { get; set; } = null!;
public DbSet CNCTemplates { get; set; }
- public DbSet ProductionRecords { get; set; }
+ public DbSet TemplateFieldMappings { get; set; }
+ public DbSet ProductionRecords { get; set; }
public DbSet ProgramProductionSummary { get; set; }
+ public DbSet ProductionSummaries { get; set; }
public DbSet Users { get; set; }
+ public DbSet Roles { get; set; }
+ public DbSet Employees { get; set; }
+ public DbSet DeviceAssignments { get; set; }
public DbSet Alarms { get; set; }
public DbSet AlarmRules { get; set; }
public DbSet StatisticRules { get; set; }
@@ -106,7 +111,7 @@ public DbSet Devices { get; set; }
.HasColumnType("json");
// 生产记录配置
- modelBuilder.Entity()
+ modelBuilder.Entity()
.Property(p => p.NCProgram)
.IsRequired()
.HasMaxLength(100);
@@ -141,9 +146,6 @@ public DbSet Devices { get; set; }
.HasColumnType("decimal(5,2)");
// 告警通知配置
- modelBuilder.Entity()
- .Property(a => a.LogData)
- .HasColumnType("json");
// 权限配置
modelBuilder.Entity()
diff --git a/Haoliang.Data/Haoliang.Data.csproj b/Haoliang.Data/Haoliang.Data.csproj
index 8bf1899..3f7b0ff 100644
--- a/Haoliang.Data/Haoliang.Data.csproj
+++ b/Haoliang.Data/Haoliang.Data.csproj
@@ -11,7 +11,10 @@
-
+
+
+
+
net8.0
diff --git a/Haoliang.Data/Repositories/CollectionRepository.cs b/Haoliang.Data/Repositories/CollectionRepository.cs
index 7d5c08b..a53316d 100644
--- a/Haoliang.Data/Repositories/CollectionRepository.cs
+++ b/Haoliang.Data/Repositories/CollectionRepository.cs
@@ -295,7 +295,7 @@ namespace Haoliang.Data.Repositories
public async Task> GetLogsByLevelAsync(LogLevel logLevel)
{
return await _context.CollectionLogs
- .Where(cl => cl.LogLevel == logLevel.ToString())
+ .Where(cl => cl.LogLevel == logLevel)
.OrderByDescending(cl => cl.LogTime)
.ToListAsync();
}
@@ -319,7 +319,7 @@ namespace Haoliang.Data.Repositories
public async Task> GetErrorLogsAsync()
{
return await _context.CollectionLogs
- .Where(cl => cl.LogLevel == LogLevel.Error.ToString() || cl.LogLevel == LogLevel.Critical.ToString())
+ .Where(cl => cl.LogLevel == LogLevel.Error || cl.LogLevel == LogLevel.Critical)
.OrderByDescending(cl => cl.LogTime)
.ToListAsync();
}
@@ -327,7 +327,7 @@ namespace Haoliang.Data.Repositories
public async Task CountLogsByLevelAsync(LogLevel logLevel)
{
return await _context.CollectionLogs
- .CountAsync(cl => cl.LogLevel == logLevel.ToString());
+ .CountAsync(cl => cl.LogLevel == logLevel);
}
public async Task DeleteOldLogsAsync(int keepDays = 90)
diff --git a/Haoliang.Data/Repositories/LogRepository.cs b/Haoliang.Data/Repositories/LogRepository.cs
index ffa721d..328217a 100644
--- a/Haoliang.Data/Repositories/LogRepository.cs
+++ b/Haoliang.Data/Repositories/LogRepository.cs
@@ -19,7 +19,7 @@ namespace Haoliang.Data.Repositories
Task> GetRecentLogsAsync(int count = 100);
Task> GetErrorLogsAsync(DateTime? startDate = null, DateTime? endDate = null);
Task GetLogStatisticsAsync(DateTime date);
- Task LogExistsAsync(string logId);
+ Task LogExistsAsync(int logId);
Task> GetLogsBySourceAsync(string source);
}
@@ -34,21 +34,21 @@ namespace Haoliang.Data.Repositories
public async Task> GetLogsAsync(LogLevel? logLevel = null, DateTime? startDate = null, DateTime? endDate = null, string category = null)
{
- var query = _context.Logs.AsQueryable();
+ var query = _context.LogEntries.AsQueryable();
if (logLevel.HasValue)
{
- query = query.Where(l => l.LogLevel == logLevel.Value);
+ query = query.Where(l => l.Level == logLevel.Value);
}
if (startDate.HasValue)
{
- query = query.Where(l => l.LogTime >= startDate.Value);
+ query = query.Where(l => l.Timestamp >= startDate.Value);
}
if (endDate.HasValue)
{
- query = query.Where(l => l.LogTime <= endDate.Value);
+ query = query.Where(l => l.Timestamp <= endDate.Value);
}
if (!string.IsNullOrEmpty(category))
@@ -57,27 +57,27 @@ namespace Haoliang.Data.Repositories
}
return await query
- .OrderByDescending(l => l.LogTime)
+ .OrderByDescending(l => l.Timestamp)
.ToListAsync();
}
public async Task GetLogCountAsync(LogLevel? logLevel = null, DateTime? startDate = null, DateTime? endDate = null)
{
- var query = _context.Logs.AsQueryable();
+ var query = _context.LogEntries.AsQueryable();
if (logLevel.HasValue)
{
- query = query.Where(l => l.LogLevel == logLevel.Value);
+ query = query.Where(l => l.Level == logLevel.Value);
}
if (startDate.HasValue)
{
- query = query.Where(l => l.LogTime >= startDate.Value);
+ query = query.Where(l => l.Timestamp >= startDate.Value);
}
if (endDate.HasValue)
{
- query = query.Where(l => l.LogTime <= endDate.Value);
+ query = query.Where(l => l.Timestamp <= endDate.Value);
}
return await query.CountAsync();
@@ -85,50 +85,50 @@ namespace Haoliang.Data.Repositories
public async Task ArchiveLogsAsync(DateTime cutoffDate)
{
- var logsToArchive = await _context.Logs
- .Where(l => l.LogTime < cutoffDate)
+ var logsToArchive = await _context.LogEntries
+ .Where(l => l.Timestamp < cutoffDate)
.ToListAsync();
if (logsToArchive.Any())
{
// In a real implementation, you would move these to an archive table or file
// For now, we'll just delete them
- _context.Logs.RemoveRange(logsToArchive);
+ _context.LogEntries.RemoveRange(logsToArchive);
await SaveAsync();
}
}
public async Task ClearLogsAsync()
{
- _context.Logs.RemoveRange(_context.Logs);
+ _context.LogEntries.RemoveRange(_context.LogEntries);
await SaveAsync();
}
public async Task> GetRecentLogsAsync(int count = 100)
{
- return await _context.Logs
- .OrderByDescending(l => l.LogTime)
+ return await _context.LogEntries
+ .OrderByDescending(l => l.Timestamp)
.Take(count)
.ToListAsync();
}
public async Task> GetErrorLogsAsync(DateTime? startDate = null, DateTime? endDate = null)
{
- var query = _context.Logs
- .Where(l => l.LogLevel == LogLevel.Error || l.LogLevel == LogLevel.Critical);
+ var query = _context.LogEntries
+ .Where(l => l.Level == LogLevel.Error || l.Level == LogLevel.Critical);
if (startDate.HasValue)
{
- query = query.Where(l => l.LogTime >= startDate.Value);
+ query = query.Where(l => l.Timestamp >= startDate.Value);
}
if (endDate.HasValue)
{
- query = query.Where(l => l.LogTime <= endDate.Value);
+ query = query.Where(l => l.Timestamp <= endDate.Value);
}
return await query
- .OrderByDescending(l => l.LogTime)
+ .OrderByDescending(l => l.Timestamp)
.ToListAsync();
}
@@ -137,18 +137,18 @@ namespace Haoliang.Data.Repositories
var startOfDay = date.Date;
var endOfDay = startOfDay.AddDays(1);
- var logs = await _context.Logs
- .Where(l => l.LogTime >= startOfDay && l.LogTime <= endOfDay)
+ var logs = await _context.LogEntries
+ .Where(l => l.Timestamp >= startOfDay && l.Timestamp <= endOfDay)
.ToListAsync();
var stats = new LogStatistics
{
Date = date,
TotalLogs = logs.Count,
- ErrorLogs = logs.Count(l => l.LogLevel == LogLevel.Error || l.LogLevel == LogLevel.Critical),
- WarningLogs = logs.Count(l => l.LogLevel == LogLevel.Warning),
- InfoLogs = logs.Count(l => l.LogLevel == LogLevel.Information),
- DebugLogs = logs.Count(l => l.LogLevel == LogLevel.Debug),
+ ErrorLogs = logs.Count(l => l.Level == LogLevel.Error || l.Level == LogLevel.Critical),
+ WarningLogs = logs.Count(l => l.Level == LogLevel.Warning),
+ InfoLogs = logs.Count(l => l.Level == LogLevel.Information),
+ DebugLogs = logs.Count(l => l.Level == LogLevel.Debug),
LogSources = logs.GroupBy(l => l.Source)
.ToDictionary(g => g.Key, g => g.Count())
};
@@ -156,17 +156,17 @@ namespace Haoliang.Data.Repositories
return stats;
}
- public async Task LogExistsAsync(string logId)
+ public async Task LogExistsAsync(int logId)
{
- return await _context.Logs
- .AnyAsync(l => l.LogId == logId);
+ return await _context.LogEntries
+ .AnyAsync(l => l.Id == logId);
}
public async Task> GetLogsBySourceAsync(string source)
{
- return await _context.Logs
+ return await _context.LogEntries
.Where(l => l.Source == source)
- .OrderByDescending(l => l.LogTime)
+ .OrderByDescending(l => l.Timestamp)
.ToListAsync();
}
}
diff --git a/Haoliang.Data/Repositories/ProductionRepository.cs b/Haoliang.Data/Repositories/ProductionRepository.cs
index 82eb086..52403d4 100644
--- a/Haoliang.Data/Repositories/ProductionRepository.cs
+++ b/Haoliang.Data/Repositories/ProductionRepository.cs
@@ -10,19 +10,19 @@ using Haoliang.Data.Entities;
namespace Haoliang.Data.Repositories
{
- public interface IProductionRepository : IRepository
+ public interface IProductionRepository : IRepository
{
- Task> GetByDeviceAndDateAsync(int deviceId, DateTime date);
- Task> GetByDeviceAndProgramAsync(int deviceId, string ncProgram);
- Task> GetByDateRangeAsync(DateTime startDate, DateTime endDate);
- Task GetLatestProductionAsync(int deviceId, string ncProgram);
+ Task> GetByDeviceAndDateAsync(int deviceId, DateTime date);
+ Task> GetByDeviceAndProgramAsync(int deviceId, string ncProgram);
+ Task> GetByDateRangeAsync(DateTime startDate, DateTime endDate);
+ Task GetLatestProductionAsync(int deviceId, string ncProgram);
Task GetTodayProductionAsync(int deviceId);
Task GetProductionByDateAsync(int deviceId, DateTime date);
Task GetQualityRateAsync(int deviceId, DateTime date);
Task HasProductionDataAsync(int deviceId, DateTime date);
}
- public class ProductionRepository : Repository, IProductionRepository
+ public class ProductionRepository : Repository, IProductionRepository
{
private readonly CNCDbContext _context;
@@ -31,7 +31,7 @@ namespace Haoliang.Data.Repositories
_context = context;
}
- public async Task> GetByDeviceAndDateAsync(int deviceId, DateTime date)
+ public async Task> GetByDeviceAndDateAsync(int deviceId, DateTime date)
{
return await _context.ProductionRecords
.Where(pr => pr.DeviceId == deviceId && pr.ProductionDate.Date == date.Date)
@@ -40,7 +40,7 @@ namespace Haoliang.Data.Repositories
.ToListAsync();
}
- public async Task> GetByDeviceAndProgramAsync(int deviceId, string ncProgram)
+ public async Task> GetByDeviceAndProgramAsync(int deviceId, string ncProgram)
{
return await _context.ProductionRecords
.Where(pr => pr.DeviceId == deviceId && pr.NCProgram == ncProgram)
@@ -48,7 +48,7 @@ namespace Haoliang.Data.Repositories
.ToListAsync();
}
- public async Task> GetByDateRangeAsync(DateTime startDate, DateTime endDate)
+ public async Task> GetByDateRangeAsync(DateTime startDate, DateTime endDate)
{
return await _context.ProductionRecords
.Where(pr => pr.ProductionDate >= startDate && pr.ProductionDate <= endDate)
@@ -58,7 +58,7 @@ namespace Haoliang.Data.Repositories
.ToListAsync();
}
- public async Task GetLatestProductionAsync(int deviceId, string ncProgram)
+ public async Task GetLatestProductionAsync(int deviceId, string ncProgram)
{
return await _context.ProductionRecords
.Where(pr => pr.DeviceId == deviceId && pr.NCProgram == ncProgram)
@@ -186,7 +186,6 @@ namespace Haoliang.Data.Repositories
summary.ValidQuantity = (int)(summary.TotalQuantity * qualityRate / 100);
summary.InvalidQuantity = summary.TotalQuantity - summary.ValidQuantity;
summary.QualityRate = qualityRate;
- summary.UpdatedAt = DateTime.Now;
Update(summary);
}
diff --git a/Haoliang.Data/Repositories/ProductionSummaryRepository.cs b/Haoliang.Data/Repositories/ProductionSummaryRepository.cs
index 6611cc0..bcf0aa8 100644
--- a/Haoliang.Data/Repositories/ProductionSummaryRepository.cs
+++ b/Haoliang.Data/Repositories/ProductionSummaryRepository.cs
@@ -89,7 +89,7 @@ namespace Haoliang.Data.Repositories
WeekEnd = weekEnd,
TotalDevices = summaries.Select(s => s.DeviceId).Distinct().Count(),
TotalQuantity = summaries.Sum(s => s.TotalQuantity),
- AverageDailyQuantity = summaries.Any() ? summaries.Average(s => s.TotalQuantity) : 0,
+ AverageDailyQuantity = summaries.Any() ? (decimal)summaries.Average(s => s.TotalQuantity) : 0,
DailySummaries = summaries
.GroupBy(s => s.ProductionDate)
.Select(g => new DailyProductionSummary
@@ -121,7 +121,7 @@ namespace Haoliang.Data.Repositories
Month = month,
TotalDevices = summaries.Select(s => s.DeviceId).Distinct().Count(),
TotalQuantity = summaries.Sum(s => s.TotalQuantity),
- AverageDailyQuantity = summaries.Any() ? summaries.Average(s => s.TotalQuantity) : 0,
+ AverageDailyQuantity = summaries.Any() ? (decimal)summaries.Average(s => s.TotalQuantity) : 0,
WeeklySummaries = new List()
};
diff --git a/Haoliang.Data/Repositories/ScheduledTaskRepository.cs b/Haoliang.Data/Repositories/ScheduledTaskRepository.cs
index 904c4b4..a21a41f 100644
--- a/Haoliang.Data/Repositories/ScheduledTaskRepository.cs
+++ b/Haoliang.Data/Repositories/ScheduledTaskRepository.cs
@@ -35,7 +35,7 @@ namespace Haoliang.Data.Repositories
public async Task> GetActiveTasksAsync()
{
return await _context.ScheduledTasks
- .Where(t => t.IsActive && t.TaskStatus != TaskStatus.Disabled)
+ .Where(t => t.IsActive && t.TaskStatus != Haoliang.Models.System.TaskStatus.Disabled)
.OrderBy(t => t.NextRunTime)
.ToListAsync();
}
@@ -70,20 +70,20 @@ namespace Haoliang.Data.Repositories
return await _context.ScheduledTasks
.Where(t => t.IsActive &&
t.NextRunTime <= now &&
- t.TaskStatus != TaskStatus.Running)
+ t.TaskStatus != Haoliang.Models.System.TaskStatus.Running)
.OrderBy(t => t.NextRunTime)
.ToListAsync();
}
public async Task ExecuteTaskAsync(string taskId)
{
- var task = await GetByIdAsync(taskId);
+ var task = await _context.ScheduledTasks.Where(t => t.TaskId == taskId).FirstOrDefaultAsync();
if (task == null || !task.IsActive)
{
return false;
}
- task.TaskStatus = TaskStatus.Running;
+ task.TaskStatus = Haoliang.Models.System.TaskStatus.Running;
task.LastRunAt = DateTime.Now;
await SaveAsync();
@@ -92,7 +92,7 @@ namespace Haoliang.Data.Repositories
{
TaskId = taskId,
ExecutionTime = DateTime.Now,
- Status = TaskStatus.Running,
+ Status = Haoliang.Models.System.TaskStatus.Running,
ErrorMessage = null
};
@@ -108,7 +108,7 @@ namespace Haoliang.Data.Repositories
return await _context.ScheduledTasks
.Where(t => t.IsActive &&
t.NextRunTime <= now &&
- t.TaskStatus != TaskStatus.Running)
+ t.TaskStatus != Haoliang.Models.System.TaskStatus.Running)
.OrderBy(t => t.NextRunTime)
.FirstOrDefaultAsync();
}
@@ -126,18 +126,18 @@ namespace Haoliang.Data.Repositories
{
Date = date,
TotalExecutions = executionResults.Count,
- SuccessfulExecutions = executionResults.Count(r => r.Status == TaskStatus.Completed),
- FailedExecutions = executionResults.Count(r => r.Status == TaskStatus.Failed),
- RunningExecutions = executionResults.Count(r => r.Status == TaskStatus.Running),
+ SuccessfulExecutions = executionResults.Count(r => r.Status == Haoliang.Models.System.TaskStatus.Completed),
+ FailedExecutions = executionResults.Count(r => r.Status == Haoliang.Models.System.TaskStatus.Failed),
+ RunningExecutions = executionResults.Count(r => r.Status == Haoliang.Models.System.TaskStatus.Running),
ExecutionDetails = executionResults
.GroupBy(r => r.TaskId)
.ToDictionary(g => g.Key, g => new TaskExecutionDetail
{
- TaskName = g.FirstOrDefault()?.ScheduledTask?.TaskName ?? "",
+ TaskName = g.Key ?? "",
TotalExecutions = g.Count(),
- SuccessfulExecutions = g.Count(r => r.Status == TaskStatus.Completed),
- FailedExecutions = g.Count(r => r.Status == TaskStatus.Failed),
- AverageExecutionTime = g.Average(r => r.ExecutionDurationMs)
+ SuccessfulExecutions = g.Count(r => r.Status == Haoliang.Models.System.TaskStatus.Completed),
+ FailedExecutions = g.Count(r => r.Status == Haoliang.Models.System.TaskStatus.Failed),
+ AverageExecutionTime = g.Average(r => r.ExecutionDurationMs?.TotalMilliseconds ?? 0)
})
};
diff --git a/Haoliang.Data/Repositories/SystemRepository.cs b/Haoliang.Data/Repositories/SystemRepository.cs
index 8615687..72f851f 100644
--- a/Haoliang.Data/Repositories/SystemRepository.cs
+++ b/Haoliang.Data/Repositories/SystemRepository.cs
@@ -97,7 +97,7 @@ namespace Haoliang.Data.Repositories
if (alarms.Any())
{
var resolvedCount = alarms.Count(a => a.IsResolved);
- return (decimal)resolvedCount / alarms.Count * 100;
+ return (decimal)resolvedCount / alarms.Count() * 100;
}
return 0;
}
diff --git a/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.deps.json b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.deps.json
new file mode 100644
index 0000000..aea0a5a
--- /dev/null
+++ b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.deps.json
@@ -0,0 +1,864 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "Haoliang.Data/1.0.0": {
+ "dependencies": {
+ "Haoliang.Models": "1.0.0",
+ "Microsoft.EntityFrameworkCore": "8.0.2",
+ "Microsoft.EntityFrameworkCore.Design": "8.0.2",
+ "Microsoft.EntityFrameworkCore.Tools": "8.0.2",
+ "Pomelo.EntityFrameworkCore.MySql": "8.0.2"
+ },
+ "runtime": {
+ "Haoliang.Data.dll": {}
+ }
+ },
+ "Humanizer.Core/2.14.1": {
+ "runtime": {
+ "lib/net6.0/Humanizer.dll": {
+ "assemblyVersion": "2.14.0.0",
+ "fileVersion": "2.14.1.48190"
+ }
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces/6.0.0": {
+ "runtime": {
+ "lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "Microsoft.CodeAnalysis.Analyzers/3.3.3": {},
+ "Microsoft.CodeAnalysis.Common/4.5.0": {
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Analyzers": "3.3.3",
+ "System.Collections.Immutable": "6.0.0",
+ "System.Reflection.Metadata": "6.0.1",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encoding.CodePages": "6.0.0"
+ },
+ "runtime": {
+ "lib/netcoreapp3.1/Microsoft.CodeAnalysis.dll": {
+ "assemblyVersion": "4.5.0.0",
+ "fileVersion": "4.500.23.10905"
+ }
+ },
+ "resources": {
+ "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "cs"
+ },
+ "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "de"
+ },
+ "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "es"
+ },
+ "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "fr"
+ },
+ "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "it"
+ },
+ "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "ja"
+ },
+ "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "ko"
+ },
+ "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "pl"
+ },
+ "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "pt-BR"
+ },
+ "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "ru"
+ },
+ "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "tr"
+ },
+ "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "zh-Hans"
+ },
+ "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.resources.dll": {
+ "locale": "zh-Hant"
+ }
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp/4.5.0": {
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "4.5.0"
+ },
+ "runtime": {
+ "lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.dll": {
+ "assemblyVersion": "4.5.0.0",
+ "fileVersion": "4.500.23.10905"
+ }
+ },
+ "resources": {
+ "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "cs"
+ },
+ "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "de"
+ },
+ "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "es"
+ },
+ "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "fr"
+ },
+ "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "it"
+ },
+ "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "ja"
+ },
+ "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "ko"
+ },
+ "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "pl"
+ },
+ "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "pt-BR"
+ },
+ "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "ru"
+ },
+ "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "tr"
+ },
+ "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "zh-Hans"
+ },
+ "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": {
+ "locale": "zh-Hant"
+ }
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": {
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Microsoft.CodeAnalysis.CSharp": "4.5.0",
+ "Microsoft.CodeAnalysis.Common": "4.5.0",
+ "Microsoft.CodeAnalysis.Workspaces.Common": "4.5.0"
+ },
+ "runtime": {
+ "lib/netcoreapp3.1/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": {
+ "assemblyVersion": "4.5.0.0",
+ "fileVersion": "4.500.23.10905"
+ }
+ },
+ "resources": {
+ "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "cs"
+ },
+ "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "de"
+ },
+ "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "es"
+ },
+ "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "fr"
+ },
+ "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "it"
+ },
+ "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "ja"
+ },
+ "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "ko"
+ },
+ "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "pl"
+ },
+ "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "pt-BR"
+ },
+ "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "ru"
+ },
+ "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "tr"
+ },
+ "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "zh-Hans"
+ },
+ "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
+ "locale": "zh-Hant"
+ }
+ }
+ },
+ "Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": {
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.CodeAnalysis.Common": "4.5.0",
+ "System.Composition": "6.0.0",
+ "System.IO.Pipelines": "6.0.3",
+ "System.Threading.Channels": "6.0.0"
+ },
+ "runtime": {
+ "lib/netcoreapp3.1/Microsoft.CodeAnalysis.Workspaces.dll": {
+ "assemblyVersion": "4.5.0.0",
+ "fileVersion": "4.500.23.10905"
+ }
+ },
+ "resources": {
+ "lib/netcoreapp3.1/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "cs"
+ },
+ "lib/netcoreapp3.1/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "de"
+ },
+ "lib/netcoreapp3.1/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "es"
+ },
+ "lib/netcoreapp3.1/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "fr"
+ },
+ "lib/netcoreapp3.1/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "it"
+ },
+ "lib/netcoreapp3.1/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "ja"
+ },
+ "lib/netcoreapp3.1/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "ko"
+ },
+ "lib/netcoreapp3.1/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "pl"
+ },
+ "lib/netcoreapp3.1/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "pt-BR"
+ },
+ "lib/netcoreapp3.1/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "ru"
+ },
+ "lib/netcoreapp3.1/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "tr"
+ },
+ "lib/netcoreapp3.1/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "zh-Hans"
+ },
+ "lib/netcoreapp3.1/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
+ "locale": "zh-Hant"
+ }
+ }
+ },
+ "Microsoft.EntityFrameworkCore/8.0.2": {
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "8.0.2",
+ "Microsoft.EntityFrameworkCore.Analyzers": "8.0.2",
+ "Microsoft.Extensions.Caching.Memory": "8.0.0",
+ "Microsoft.Extensions.Logging": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
+ "assemblyVersion": "8.0.2.0",
+ "fileVersion": "8.0.224.6803"
+ }
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions/8.0.2": {
+ "runtime": {
+ "lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
+ "assemblyVersion": "8.0.2.0",
+ "fileVersion": "8.0.224.6803"
+ }
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers/8.0.2": {},
+ "Microsoft.EntityFrameworkCore.Design/8.0.2": {
+ "dependencies": {
+ "Humanizer.Core": "2.14.1",
+ "Microsoft.CodeAnalysis.CSharp.Workspaces": "4.5.0",
+ "Microsoft.EntityFrameworkCore.Relational": "8.0.2",
+ "Microsoft.Extensions.DependencyModel": "8.0.0",
+ "Mono.TextTemplating": "2.2.1"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": {
+ "assemblyVersion": "8.0.2.0",
+ "fileVersion": "8.0.224.6803"
+ }
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Relational/8.0.2": {
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "8.0.2",
+ "Microsoft.Extensions.Configuration.Abstractions": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
+ "assemblyVersion": "8.0.2.0",
+ "fileVersion": "8.0.224.6803"
+ }
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Tools/8.0.2": {
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Design": "8.0.2"
+ }
+ },
+ "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.Caching.Abstractions.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory/8.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "8.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.Caching.Memory.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection/8.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.DependencyModel/8.0.0": {
+ "dependencies": {
+ "System.Text.Encodings.Web": "8.0.0",
+ "System.Text.Json": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.DependencyModel.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.Logging/8.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.Logging.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.Options/8.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.Options.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Microsoft.Extensions.Primitives/8.0.0": {
+ "runtime": {
+ "lib/net8.0/Microsoft.Extensions.Primitives.dll": {
+ "assemblyVersion": "8.0.0.0",
+ "fileVersion": "8.0.23.53103"
+ }
+ }
+ },
+ "Mono.TextTemplating/2.2.1": {
+ "dependencies": {
+ "System.CodeDom": "4.4.0"
+ },
+ "runtime": {
+ "lib/netstandard2.0/Mono.TextTemplating.dll": {
+ "assemblyVersion": "2.2.0.0",
+ "fileVersion": "2.2.1.1"
+ }
+ }
+ },
+ "MySqlConnector/2.3.5": {
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0"
+ },
+ "runtime": {
+ "lib/net8.0/MySqlConnector.dll": {
+ "assemblyVersion": "2.0.0.0",
+ "fileVersion": "2.3.5.0"
+ }
+ }
+ },
+ "Pomelo.EntityFrameworkCore.MySql/8.0.2": {
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Relational": "8.0.2",
+ "MySqlConnector": "2.3.5"
+ },
+ "runtime": {
+ "lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": {
+ "assemblyVersion": "8.0.2.0",
+ "fileVersion": "8.0.2.0"
+ }
+ }
+ },
+ "System.CodeDom/4.4.0": {
+ "runtime": {
+ "lib/netstandard2.0/System.CodeDom.dll": {
+ "assemblyVersion": "4.0.0.0",
+ "fileVersion": "4.6.25519.3"
+ }
+ }
+ },
+ "System.Collections.Immutable/6.0.0": {
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Composition/6.0.0": {
+ "dependencies": {
+ "System.Composition.AttributedModel": "6.0.0",
+ "System.Composition.Convention": "6.0.0",
+ "System.Composition.Hosting": "6.0.0",
+ "System.Composition.Runtime": "6.0.0",
+ "System.Composition.TypedParts": "6.0.0"
+ }
+ },
+ "System.Composition.AttributedModel/6.0.0": {
+ "runtime": {
+ "lib/net6.0/System.Composition.AttributedModel.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Composition.Convention/6.0.0": {
+ "dependencies": {
+ "System.Composition.AttributedModel": "6.0.0"
+ },
+ "runtime": {
+ "lib/net6.0/System.Composition.Convention.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Composition.Hosting/6.0.0": {
+ "dependencies": {
+ "System.Composition.Runtime": "6.0.0"
+ },
+ "runtime": {
+ "lib/net6.0/System.Composition.Hosting.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Composition.Runtime/6.0.0": {
+ "runtime": {
+ "lib/net6.0/System.Composition.Runtime.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Composition.TypedParts/6.0.0": {
+ "dependencies": {
+ "System.Composition.AttributedModel": "6.0.0",
+ "System.Composition.Hosting": "6.0.0",
+ "System.Composition.Runtime": "6.0.0"
+ },
+ "runtime": {
+ "lib/net6.0/System.Composition.TypedParts.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.IO.Pipelines/6.0.3": {
+ "runtime": {
+ "lib/net6.0/System.IO.Pipelines.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.522.21309"
+ }
+ }
+ },
+ "System.Reflection.Metadata/6.0.1": {
+ "dependencies": {
+ "System.Collections.Immutable": "6.0.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe/6.0.0": {},
+ "System.Text.Encoding.CodePages/6.0.0": {
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Text.Encodings.Web/8.0.0": {},
+ "System.Text.Json/8.0.0": {
+ "dependencies": {
+ "System.Text.Encodings.Web": "8.0.0"
+ }
+ },
+ "System.Threading.Channels/6.0.0": {},
+ "Haoliang.Models/1.0.0": {
+ "runtime": {
+ "Haoliang.Models.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Haoliang.Data/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Humanizer.Core/2.14.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==",
+ "path": "humanizer.core/2.14.1",
+ "hashPath": "humanizer.core.2.14.1.nupkg.sha512"
+ },
+ "Microsoft.Bcl.AsyncInterfaces/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg==",
+ "path": "microsoft.bcl.asyncinterfaces/6.0.0",
+ "hashPath": "microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512"
+ },
+ "Microsoft.CodeAnalysis.Analyzers/3.3.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ==",
+ "path": "microsoft.codeanalysis.analyzers/3.3.3",
+ "hashPath": "microsoft.codeanalysis.analyzers.3.3.3.nupkg.sha512"
+ },
+ "Microsoft.CodeAnalysis.Common/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-lwAbIZNdnY0SUNoDmZHkVUwLO8UyNnyyh1t/4XsbFxi4Ounb3xszIYZaWhyj5ZjyfcwqwmtMbE7fUTVCqQEIdQ==",
+ "path": "microsoft.codeanalysis.common/4.5.0",
+ "hashPath": "microsoft.codeanalysis.common.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.CodeAnalysis.CSharp/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-cM59oMKAOxvdv76bdmaKPy5hfj+oR+zxikWoueEB7CwTko7mt9sVKZI8Qxlov0C/LuKEG+WQwifepqL3vuTiBQ==",
+ "path": "microsoft.codeanalysis.csharp/4.5.0",
+ "hashPath": "microsoft.codeanalysis.csharp.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.CodeAnalysis.CSharp.Workspaces/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-h74wTpmGOp4yS4hj+EvNzEiPgg/KVs2wmSfTZ81upJZOtPkJsVkgfsgtxxqmAeapjT/vLKfmYV0bS8n5MNVP+g==",
+ "path": "microsoft.codeanalysis.csharp.workspaces/4.5.0",
+ "hashPath": "microsoft.codeanalysis.csharp.workspaces.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.CodeAnalysis.Workspaces.Common/4.5.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-l4dDRmGELXG72XZaonnOeORyD/T5RpEu5LGHOUIhnv+MmUWDY/m1kWXGwtcgQ5CJ5ynkFiRnIYzTKXYjUs7rbw==",
+ "path": "microsoft.codeanalysis.workspaces.common/4.5.0",
+ "hashPath": "microsoft.codeanalysis.workspaces.common.4.5.0.nupkg.sha512"
+ },
+ "Microsoft.EntityFrameworkCore/8.0.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-6QlvBx4rdawW3AkkCsGVV+8qRLk34aknV5JD40s1hbVR18vKmT2KDl2DW83nHcPX7f4oebQ3BD1UMNCI/gkE0g==",
+ "path": "microsoft.entityframeworkcore/8.0.2",
+ "hashPath": "microsoft.entityframeworkcore.8.0.2.nupkg.sha512"
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions/8.0.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-DjDKp++BTKFZmX+xLTow7grQTY+pImKfhGW68Zf8myiL3zyJ3b8RZbnLsWGNCqKQIF6hJIz/zA/zmERobFwV0A==",
+ "path": "microsoft.entityframeworkcore.abstractions/8.0.2",
+ "hashPath": "microsoft.entityframeworkcore.abstractions.8.0.2.nupkg.sha512"
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers/8.0.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-LI7awhc0fiAKvcUemsqxXUWqzAH9ywTSyM1rpC1un4p5SE1bhr5nRLvyRVbKRzKakmnNNY3to8NPDnoySEkxVw==",
+ "path": "microsoft.entityframeworkcore.analyzers/8.0.2",
+ "hashPath": "microsoft.entityframeworkcore.analyzers.8.0.2.nupkg.sha512"
+ },
+ "Microsoft.EntityFrameworkCore.Design/8.0.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-lpSEopadyq4VjgErVbKXznlzmrdR+1zG4jjJlumgnDTz6Ov60qZkBn8uTfPYk0PUZ3wn+GNFOi3ouSTK4JKEIA==",
+ "path": "microsoft.entityframeworkcore.design/8.0.2",
+ "hashPath": "microsoft.entityframeworkcore.design.8.0.2.nupkg.sha512"
+ },
+ "Microsoft.EntityFrameworkCore.Relational/8.0.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-NoGfcq2OPw0z8XAPf74YFwGlTKjedWdsIEJqq4SvKcPjcu+B+/XDDNrDRxTvILfz4Ug8POSF49s1jz1JvUqTAg==",
+ "path": "microsoft.entityframeworkcore.relational/8.0.2",
+ "hashPath": "microsoft.entityframeworkcore.relational.8.0.2.nupkg.sha512"
+ },
+ "Microsoft.EntityFrameworkCore.Tools/8.0.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-PWy3X3Z1fnWlbU6pQMSnBvMwqERoKsriJ688TMl1xT2NyqcSk6/dX22eI5eV+qYXYmYna72Dq2u0P8tNZ6AYtg==",
+ "path": "microsoft.entityframeworkcore.tools/8.0.2",
+ "hashPath": "microsoft.entityframeworkcore.tools.8.0.2.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Caching.Abstractions/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3KuSxeHoNYdxVYfg2IRZCThcrlJ1XJqIXkAWikCsbm5C/bCjv7G0WoKDyuR98Q+T607QT2Zl5GsbGRkENcV2yQ==",
+ "path": "microsoft.extensions.caching.abstractions/8.0.0",
+ "hashPath": "microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Caching.Memory/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-7pqivmrZDzo1ADPkRwjy+8jtRKWRCPag9qPI+p7sgu7Q4QreWhcvbiWXsbhP+yY8XSiDvZpu2/LWdBv7PnmOpQ==",
+ "path": "microsoft.extensions.caching.memory/8.0.0",
+ "hashPath": "microsoft.extensions.caching.memory.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Configuration.Abstractions/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==",
+ "path": "microsoft.extensions.configuration.abstractions/8.0.0",
+ "hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.DependencyInjection/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "path": "microsoft.extensions.dependencyinjection/8.0.0",
+ "hashPath": "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==",
+ "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0",
+ "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.DependencyModel/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-NSmDw3K0ozNDgShSIpsZcbFIzBX4w28nDag+TfaQujkXGazBm+lid5onlWoCBy4VsLxqnnKjEBbGSJVWJMf43g==",
+ "path": "microsoft.extensions.dependencymodel/8.0.0",
+ "hashPath": "microsoft.extensions.dependencymodel.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Logging/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "path": "microsoft.extensions.logging/8.0.0",
+ "hashPath": "microsoft.extensions.logging.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Logging.Abstractions/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "path": "microsoft.extensions.logging.abstractions/8.0.0",
+ "hashPath": "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Options/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "path": "microsoft.extensions.options/8.0.0",
+ "hashPath": "microsoft.extensions.options.8.0.0.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Primitives/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==",
+ "path": "microsoft.extensions.primitives/8.0.0",
+ "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512"
+ },
+ "Mono.TextTemplating/2.2.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
+ "path": "mono.texttemplating/2.2.1",
+ "hashPath": "mono.texttemplating.2.2.1.nupkg.sha512"
+ },
+ "MySqlConnector/2.3.5": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AmEfUPkFl+Ev6jJ8Dhns3CYHBfD12RHzGYWuLt6DfG6/af6YvOMyPz74ZPPjBYQGRJkumD2Z48Kqm8s5DJuhLA==",
+ "path": "mysqlconnector/2.3.5",
+ "hashPath": "mysqlconnector.2.3.5.nupkg.sha512"
+ },
+ "Pomelo.EntityFrameworkCore.MySql/8.0.2": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-XjnlcxVBLnEMbyEc5cZzgZeDyLvAniACZQ04W1slWN0f4rmfNzl98gEMvHnFH0fMDF06z9MmgGi/Sr7hJ+BVnw==",
+ "path": "pomelo.entityframeworkcore.mysql/8.0.2",
+ "hashPath": "pomelo.entityframeworkcore.mysql.8.0.2.nupkg.sha512"
+ },
+ "System.CodeDom/4.4.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==",
+ "path": "system.codedom/4.4.0",
+ "hashPath": "system.codedom.4.4.0.nupkg.sha512"
+ },
+ "System.Collections.Immutable/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==",
+ "path": "system.collections.immutable/6.0.0",
+ "hashPath": "system.collections.immutable.6.0.0.nupkg.sha512"
+ },
+ "System.Composition/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-d7wMuKQtfsxUa7S13tITC8n1cQzewuhD5iDjZtK2prwFfKVzdYtgrTHgjaV03Zq7feGQ5gkP85tJJntXwInsJA==",
+ "path": "system.composition/6.0.0",
+ "hashPath": "system.composition.6.0.0.nupkg.sha512"
+ },
+ "System.Composition.AttributedModel/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-WK1nSDLByK/4VoC7fkNiFuTVEiperuCN/Hyn+VN30R+W2ijO1d0Z2Qm0ScEl9xkSn1G2MyapJi8xpf4R8WRa/w==",
+ "path": "system.composition.attributedmodel/6.0.0",
+ "hashPath": "system.composition.attributedmodel.6.0.0.nupkg.sha512"
+ },
+ "System.Composition.Convention/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-XYi4lPRdu5bM4JVJ3/UIHAiG6V6lWWUlkhB9ab4IOq0FrRsp0F4wTyV4Dj+Ds+efoXJ3qbLqlvaUozDO7OLeXA==",
+ "path": "system.composition.convention/6.0.0",
+ "hashPath": "system.composition.convention.6.0.0.nupkg.sha512"
+ },
+ "System.Composition.Hosting/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-w/wXjj7kvxuHPLdzZ0PAUt++qJl03t7lENmb2Oev0n3zbxyNULbWBlnd5J5WUMMv15kg5o+/TCZFb6lSwfaUUQ==",
+ "path": "system.composition.hosting/6.0.0",
+ "hashPath": "system.composition.hosting.6.0.0.nupkg.sha512"
+ },
+ "System.Composition.Runtime/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-qkRH/YBaMPTnzxrS5RDk1juvqed4A6HOD/CwRcDGyPpYps1J27waBddiiq1y93jk2ZZ9wuA/kynM+NO0kb3PKg==",
+ "path": "system.composition.runtime/6.0.0",
+ "hashPath": "system.composition.runtime.6.0.0.nupkg.sha512"
+ },
+ "System.Composition.TypedParts/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-iUR1eHrL8Cwd82neQCJ00MpwNIBs4NZgXzrPqx8NJf/k4+mwBO0XCRmHYJT4OLSwDDqh5nBLJWkz5cROnrGhRA==",
+ "path": "system.composition.typedparts/6.0.0",
+ "hashPath": "system.composition.typedparts.6.0.0.nupkg.sha512"
+ },
+ "System.IO.Pipelines/6.0.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ryTgF+iFkpGZY1vRQhfCzX0xTdlV3pyaTTqRu2ETbEv+HlV7O6y7hyQURnghNIXvctl5DuZ//Dpks6HdL/Txgw==",
+ "path": "system.io.pipelines/6.0.3",
+ "hashPath": "system.io.pipelines.6.0.3.nupkg.sha512"
+ },
+ "System.Reflection.Metadata/6.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-III/lNMSn0ZRBuM9m5Cgbiho5j81u0FAEagFX5ta2DKbljZ3T0IpD8j+BIiHQPeKqJppWS9bGEp6JnKnWKze0g==",
+ "path": "system.reflection.metadata/6.0.1",
+ "hashPath": "system.reflection.metadata.6.0.1.nupkg.sha512"
+ },
+ "System.Runtime.CompilerServices.Unsafe/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
+ "path": "system.runtime.compilerservices.unsafe/6.0.0",
+ "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
+ },
+ "System.Text.Encoding.CodePages/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==",
+ "path": "system.text.encoding.codepages/6.0.0",
+ "hashPath": "system.text.encoding.codepages.6.0.0.nupkg.sha512"
+ },
+ "System.Text.Encodings.Web/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "path": "system.text.encodings.web/8.0.0",
+ "hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512"
+ },
+ "System.Text.Json/8.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==",
+ "path": "system.text.json/8.0.0",
+ "hashPath": "system.text.json.8.0.0.nupkg.sha512"
+ },
+ "System.Threading.Channels/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TY8/9+tI0mNaUMgntOxxaq2ndTkdXqLSxvPmas7XEqOlv9lQtB7wLjYGd756lOaO7Dvb5r/WXhluM+0Xe87v5Q==",
+ "path": "system.threading.channels/6.0.0",
+ "hashPath": "system.threading.channels.6.0.0.nupkg.sha512"
+ },
+ "Haoliang.Models/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.dll b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.dll
new file mode 100644
index 0000000..80c2e7b
Binary files /dev/null and b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.dll differ
diff --git a/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.pdb b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.pdb
new file mode 100644
index 0000000..e725920
Binary files /dev/null and b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.pdb differ
diff --git a/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.runtimeconfig.json b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.runtimeconfig.json
new file mode 100644
index 0000000..244e1ab
--- /dev/null
+++ b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.runtimeconfig.json
@@ -0,0 +1,13 @@
+{
+ "runtimeOptions": {
+ "tfm": "net8.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "8.0.0"
+ },
+ "configProperties": {
+ "System.Reflection.NullabilityInfoContext.IsSupported": true,
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.dll b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.dll
new file mode 100644
index 0000000..c2d95fe
Binary files /dev/null and b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.dll differ
diff --git a/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.pdb b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.pdb
new file mode 100644
index 0000000..7c3395b
Binary files /dev/null and b/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.pdb differ
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfo.cs b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfo.cs
index 35b20e7..6030381 100644
--- a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfo.cs
+++ b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfo.cs
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Haoliang.Data")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+371a5857c3ab7666027e8783ab41863bee079194")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c3d17cebb9da179f6753a56af8a0a77a244c32f3")]
[assembly: System.Reflection.AssemblyProductAttribute("Haoliang.Data")]
[assembly: System.Reflection.AssemblyTitleAttribute("Haoliang.Data")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfoInputs.cache b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfoInputs.cache
index 237fc12..44f47e8 100644
--- a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfoInputs.cache
+++ b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfoInputs.cache
@@ -1 +1 @@
-470368933aa7b5339ba016f2f63bd21657b849f37afc12befc3a0b19a0fe8621
+74dde7117c2620296605ef8bcf766dedf67d1cb4aa2653155b7060e141ab9f7b
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.AssemblyReference.cache b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.AssemblyReference.cache
index c65c5c2..8c45738 100644
Binary files a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.AssemblyReference.cache and b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.AssemblyReference.cache differ
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CopyComplete b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CopyComplete
new file mode 100644
index 0000000..e69de29
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CoreCompileInputs.cache b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CoreCompileInputs.cache
index ba2432e..ba48df1 100644
--- a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CoreCompileInputs.cache
+++ b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-b3e83cefbf2a82944aad34bfc9bb5447342c2beb1c403328419aca00f0512d22
+ab1d1000005e9320e5b249326984a19f9661a948805e61768fd4485fb50c812c
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.FileListAbsolute.txt b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.FileListAbsolute.txt
index 555ab0d..3033691 100644
--- a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.FileListAbsolute.txt
+++ b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.FileListAbsolute.txt
@@ -3,3 +3,15 @@
/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfoInputs.cache
/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.AssemblyInfo.cs
/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CoreCompileInputs.cache
+/root/opencode/haoliang/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.deps.json
+/root/opencode/haoliang/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.runtimeconfig.json
+/root/opencode/haoliang/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.dll
+/root/opencode/haoliang/Haoliang.Data/bin/Debug/net8.0/Haoliang.Data.pdb
+/root/opencode/haoliang/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.dll
+/root/opencode/haoliang/Haoliang.Data/bin/Debug/net8.0/Haoliang.Models.pdb
+/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.csproj.CopyComplete
+/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.dll
+/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/refint/Haoliang.Data.dll
+/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.pdb
+/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.genruntimeconfig.cache
+/root/opencode/haoliang/Haoliang.Data/obj/Debug/net8.0/ref/Haoliang.Data.dll
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.dll b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.dll
new file mode 100644
index 0000000..80c2e7b
Binary files /dev/null and b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.dll differ
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.genruntimeconfig.cache b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.genruntimeconfig.cache
new file mode 100644
index 0000000..7500194
--- /dev/null
+++ b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.genruntimeconfig.cache
@@ -0,0 +1 @@
+23ed7d5ec7781cbe7f16a15235561a1a2f2e8a85539ada3f48aa9b0e474159b2
diff --git a/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.pdb b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.pdb
new file mode 100644
index 0000000..e725920
Binary files /dev/null and b/Haoliang.Data/obj/Debug/net8.0/Haoliang.Data.pdb differ
diff --git a/Haoliang.Data/obj/Debug/net8.0/ref/Haoliang.Data.dll b/Haoliang.Data/obj/Debug/net8.0/ref/Haoliang.Data.dll
new file mode 100644
index 0000000..4e7e210
Binary files /dev/null and b/Haoliang.Data/obj/Debug/net8.0/ref/Haoliang.Data.dll differ
diff --git a/Haoliang.Data/obj/Debug/net8.0/refint/Haoliang.Data.dll b/Haoliang.Data/obj/Debug/net8.0/refint/Haoliang.Data.dll
new file mode 100644
index 0000000..4e7e210
Binary files /dev/null and b/Haoliang.Data/obj/Debug/net8.0/refint/Haoliang.Data.dll differ
diff --git a/Haoliang.Models/System/LogEntry.cs b/Haoliang.Models/System/LogEntry.cs
index d988af5..b8bcb85 100644
--- a/Haoliang.Models/System/LogEntry.cs
+++ b/Haoliang.Models/System/LogEntry.cs
@@ -1,4 +1,5 @@
using System;
+using Haoliang.Models.DataCollection;
namespace Haoliang.Models.System
{
@@ -6,7 +7,7 @@ namespace Haoliang.Models.System
{
public int Id { get; set; }
public DateTime Timestamp { get; set; }
- public string Level { get; set; }
+ public LogLevel Level { get; set; }
public string Category { get; set; }
public string Message { get; set; }
public string Exception { get; set; }
diff --git a/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.dll b/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.dll
index c847b02..c2d95fe 100644
Binary files a/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.dll and b/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.dll differ
diff --git a/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.pdb b/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.pdb
index f98c31c..7c3395b 100644
Binary files a/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.pdb and b/Haoliang.Models/bin/Debug/net8.0/Haoliang.Models.pdb differ
diff --git a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfo.cs b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfo.cs
index 64c7d57..91b7a41 100644
--- a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfo.cs
+++ b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfo.cs
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Haoliang.Models")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+371a5857c3ab7666027e8783ab41863bee079194")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c3d17cebb9da179f6753a56af8a0a77a244c32f3")]
[assembly: System.Reflection.AssemblyProductAttribute("Haoliang.Models")]
[assembly: System.Reflection.AssemblyTitleAttribute("Haoliang.Models")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfoInputs.cache b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfoInputs.cache
index 924f8a0..c68d43c 100644
--- a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfoInputs.cache
+++ b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.AssemblyInfoInputs.cache
@@ -1 +1 @@
-68fbaa8f4888d2483614bb3715a61bd7bc2f4e782dc4c35d6f4f4d41202177fe
+2c18f2f48b9565bc973d3ca206e23b96d6b6815054341daa6858cdf703ae16bc
diff --git a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.dll b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.dll
index c847b02..c2d95fe 100644
Binary files a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.dll and b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.dll differ
diff --git a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.pdb b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.pdb
index f98c31c..7c3395b 100644
Binary files a/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.pdb and b/Haoliang.Models/obj/Debug/net8.0/Haoliang.Models.pdb differ
diff --git a/Haoliang.Models/obj/Debug/net8.0/ref/Haoliang.Models.dll b/Haoliang.Models/obj/Debug/net8.0/ref/Haoliang.Models.dll
index d90bdee..6906f4e 100644
Binary files a/Haoliang.Models/obj/Debug/net8.0/ref/Haoliang.Models.dll and b/Haoliang.Models/obj/Debug/net8.0/ref/Haoliang.Models.dll differ
diff --git a/Haoliang.Models/obj/Debug/net8.0/refint/Haoliang.Models.dll b/Haoliang.Models/obj/Debug/net8.0/refint/Haoliang.Models.dll
index d90bdee..6906f4e 100644
Binary files a/Haoliang.Models/obj/Debug/net8.0/refint/Haoliang.Models.dll and b/Haoliang.Models/obj/Debug/net8.0/refint/Haoliang.Models.dll differ