diff --git a/admin-generate-ef-seed-data/GenerateSeeds/Program.cs b/admin-generate-ef-seed-data/GenerateSeeds/Program.cs
index 801bb20..689874f 100644
--- a/admin-generate-ef-seed-data/GenerateSeeds/Program.cs
+++ b/admin-generate-ef-seed-data/GenerateSeeds/Program.cs
@@ -31,7 +31,7 @@ foreach (var table in tables)
useStringBuilder.Append(className + ".Seed(modelBuilder);");
sb.Append($@"
-namespace HZY.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
+namespace MiaoYu.Repository.EntityFramework.Admin.Migrations.SeedsDatas.Datas;
public static class {className}
{{
diff --git a/admin-server/MiaoYu.Admin.sln b/admin-server/MiaoYu.Admin.sln
index 350d5be..45957f8 100644
--- a/admin-server/MiaoYu.Admin.sln
+++ b/admin-server/MiaoYu.Admin.sln
@@ -43,7 +43,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiaoYu.Core.Swagger", "Miao
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiaoYu.WinFormDemo", "MiaoYu.WinFormDemo\MiaoYu.WinFormDemo.csproj", "{75959B17-A901-49E1-A5E7-667349DC4203}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MiaoYu.Shared.Admin", "MiaoYu.Shared.Admin\MiaoYu.Shared.Admin.csproj", "{925EF035-4A41-42E4-A3A4-B8E9AE52F6B7}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MiaoYu.Shared.Admin", "MiaoYu.Shared.Admin\MiaoYu.Shared.Admin.csproj", "{925EF035-4A41-42E4-A3A4-B8E9AE52F6B7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MiaoYu.Repository.ChatAI.Admin", "MiaoYu.Repository.ChatAI.Admin\MiaoYu.Repository.ChatAI.Admin.csproj", "{39C765DB-41E7-4BC6-B75E-2A90CFF3A8EF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -115,6 +117,10 @@ Global
{925EF035-4A41-42E4-A3A4-B8E9AE52F6B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{925EF035-4A41-42E4-A3A4-B8E9AE52F6B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{925EF035-4A41-42E4-A3A4-B8E9AE52F6B7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {39C765DB-41E7-4BC6-B75E-2A90CFF3A8EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {39C765DB-41E7-4BC6-B75E-2A90CFF3A8EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {39C765DB-41E7-4BC6-B75E-2A90CFF3A8EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {39C765DB-41E7-4BC6-B75E-2A90CFF3A8EF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -136,6 +142,7 @@ Global
{452F4EDD-E92B-4673-B5FB-863595996614} = {DB46F54A-9F53-44EC-80F8-9E53F0B871CF}
{75959B17-A901-49E1-A5E7-667349DC4203} = {DC7A7E4A-B4DC-4958-BAA5-2BBB1A153B5F}
{925EF035-4A41-42E4-A3A4-B8E9AE52F6B7} = {ACA91C4A-33F0-4ECA-90D2-BEC0811764EE}
+ {39C765DB-41E7-4BC6-B75E-2A90CFF3A8EF} = {451BE0BB-26ED-47ED-ABC7-23001D21410C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E3C61955-46C1-4D06-994F-C86A72B2B0E2}
diff --git a/admin-server/MiaoYu.Api.Admin/appsettings.Development.json b/admin-server/MiaoYu.Api.Admin/appsettings.Development.json
index f1c80fd..2490b35 100644
--- a/admin-server/MiaoYu.Api.Admin/appsettings.Development.json
+++ b/admin-server/MiaoYu.Api.Admin/appsettings.Development.json
@@ -9,7 +9,7 @@
//默认数据库类型 SqlServer 、MySql 、PostgreSql、Oracle
"DefaultDatabaseType": "SqlServer",
//是否监控EFCore程序
- "IsMonitorEFCore": false,
+ "IsMonitorEFCore": true,
// 连接字符串 - mysql
//"ConnectionString": "Server=localhost; port=3306; Database=hzy_admin_mysql_20230227; uid=root; pwd=123456; Convert Zero Datetime=False"
//// 连接字符串 - sqlserver
@@ -19,5 +19,9 @@
//"ConnectionString": "User ID=postgres;Password=123456;Host=localhost;Port=5432;Database=hzy_microservices_pgsql_20230227;Pooling=true;TimeZone=Asia/Shanghai",
//// 连接字符串 - oracle
//"ConnectionString": "user id=hzy_admin_oracle_20221213;password=123456; data source=//127.0.0.1:1521/orcl;Pooling=true;Min Pool Size=1"
+ },
+ "ChatAdminRepositoryOptions": {
+ "ConnectionString": "Server=192.168.195.2;Database=MiaoYu;User ID=zpc;Password=zpc;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;"
+
}
}
\ No newline at end of file
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/ChatAdminDbContext.cs b/admin-server/MiaoYu.Repository.ChatAI.Admin/ChatAdminDbContext.cs
new file mode 100644
index 0000000..3b82218
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/ChatAdminDbContext.cs
@@ -0,0 +1,39 @@
+
+
+namespace MiaoYu.Repository.ChatAI.Admin
+{
+ ///
+ /// 后台管理系统数据库上下文
+ ///
+ [DbContextConfig($"Repository.*.Entities.*")]
+ public class ChatAdminDbContext : DbContext, IBaseDbContext
+ {
+ ///
+ /// 工作单元
+ ///
+ public IUnitOfWork UnitOfWork { get; }
+
+ public ChatAdminDbContext(DbContextOptions dbContextOptions) : base(dbContextOptions)
+ {
+ UnitOfWork = new UnitOfWorkImpl(this);
+ }
+
+ ///
+ /// 模型创建
+ ///
+ ///
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ var dbContextConfigAttribute = GetType().GetCustomAttribute()!;
+ dbContextConfigAttribute!.OnModelCreating(modelBuilder, dbContextConfigAttribute.GetModelTypes(GetType()));
+
+ #region 自动迁移种子数据
+
+ //ModelBuilderExtensions.Seed(modelBuilder);
+
+ #endregion
+ }
+
+
+ }
+}
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/ChatAdminRepositoryStartup.cs b/admin-server/MiaoYu.Repository.ChatAI.Admin/ChatAdminRepositoryStartup.cs
new file mode 100644
index 0000000..d04815a
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/ChatAdminRepositoryStartup.cs
@@ -0,0 +1,139 @@
+
+using MiaoYu.Repository.ChatAI.Admin.Models;
+
+namespace MiaoYu.Repository.ChatAI.Admin
+{
+ ///
+ /// 程序启动器
+ ///
+ [ImportStartupModule]
+ public class ChatAdminRepositoryStartup : StartupModule
+ {
+ ///
+ /// 程序启动器
+ ///
+ ///
+ public override void ConfigureServices(WebApplicationBuilder webApplicationBuilder)
+ {
+ var configuration = webApplicationBuilder.Configuration;
+ var services = webApplicationBuilder.Services;
+ var webHostEnvironment = webApplicationBuilder.Environment;
+
+ var repositoriesOptions = configuration
+ .GetSection(nameof(ChatAdminRepositoryOptions))
+ .Get() ?? throw new Exception("配置对象 空 异常!");
+
+ var connectionString = repositoriesOptions?.ConnectionString;
+
+ connectionString = string.IsNullOrWhiteSpace(connectionString) ?
+ configuration["ConnectionStrings:" + repositoriesOptions!.DefaultDatabaseType.ToString()] :
+ connectionString;
+
+ services.AddDbContextFactory(optionsBuilder =>
+ {
+ switch (repositoriesOptions.DefaultDatabaseType)
+ {
+ case DefaultDatabaseType.SqlServer:
+ optionsBuilder
+ .UseSqlServer(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ case DefaultDatabaseType.MySql:
+ optionsBuilder
+ .UseMySql(connectionString, MySqlServerVersion.LatestSupportedServerVersion, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ case DefaultDatabaseType.PostgreSql:
+ //EnableLegacyTimestampBehavior 启动旧行为,避免时区问题,存储时间报错
+ AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
+ optionsBuilder
+ .UseNpgsql(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ case DefaultDatabaseType.Oracle:
+ optionsBuilder
+ .UseOracle(connectionString, w => w.MinBatchSize(1).MaxBatchSize(1000))
+ ;
+ break;
+ default:
+ break;
+ }
+
+ if (webHostEnvironment.IsDevelopment())
+ {
+ var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
+ // sql 日志写入控制台
+ optionsBuilder.UseLoggerFactory(loggerFactory);
+ }
+
+ // 懒加载代理
+ //options.UseLazyLoadingProxies();
+ //添加 EFCore 监控 和 动态表名
+ optionsBuilder.AddEntityFrameworkMonitor(repositoriesOptions.IsMonitorEFCore);
+ optionsBuilder.AddInterceptors(new AuditInterceptor());
+ });
+
+ services.AddEntityFrameworkRepositories(repositoriesOptions, (auditOptions) =>
+ {
+ // 你的自定义审计字段 ...
+ //auditOptions.Add(new AuditOptions()
+ //{
+ // CreationTimeFieldName = nameof(ICreateEntityV2.CreateTime),
+ // CreatorUserIdFieldName = "",
+ // LastModificationTimeFieldName = nameof(IUpdateEntityV2.UpdateTime),
+ // LastModifierUserIdFieldName = "",
+ // DeletionTimeFieldName = "UpdateTime",
+ // DeleterUserIdFieldName = "UpdateBy",
+ // IsDeletedFieldName = "DelFlag",
+ //});
+ }, (freesqlOptions) =>
+ {
+ freesqlOptions.FreeSqlAuditAopList?.Add(new FreeSqlAuditAop());
+ freesqlOptions.FreeSqlAction = (freeSql) =>
+ {
+ freeSql.Aop.CurdAfter += (object? sender, FreeSql.Aop.CurdAfterEventArgs curdAfter) =>
+ {
+ var stringBuilder = new StringBuilder();
+ stringBuilder.Append($"\r\n====[FreeSql 开始 耗时: {curdAfter.ElapsedMilliseconds} ms]=========");
+ stringBuilder.Append($"\r\n{curdAfter.Sql}");
+ stringBuilder.Append($"\r\n====[FreeSql 结束 线程Id:{Environment.CurrentManagedThreadId}]=========");
+ LogUtil.Log.Warning(stringBuilder.ToString());
+ };
+ };
+ });
+ }
+
+ ///
+ /// Configure
+ ///
+ ///
+ public override void Configure(WebApplication webApplication)
+ {
+ // 使用 DbContext
+ #region 开发环境检测是否需要数据库迁移
+
+ //if (webApplication.Environment.IsDevelopment())
+ //{
+ // // 自动迁移 (如果迁移文件有变动)
+ // using var scope = webApplication.Services.CreateScope();
+ // using var adminDbContext = scope.ServiceProvider.GetService();
+ // if (adminDbContext!.Database.GetPendingMigrations().Count() > 0)
+ // {
+ // try
+ // {
+ // adminDbContext.Database.Migrate();
+ // }
+ // catch (Exception ex)
+ // {
+ // LogUtil.Log.Error(ex.Message, ex);
+ // }
+ // }
+ //}
+
+ #endregion
+
+ }
+
+
+ }
+}
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/FodyWeavers.xml b/admin-server/MiaoYu.Repository.ChatAI.Admin/FodyWeavers.xml
new file mode 100644
index 0000000..a6a2edf
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/FodyWeavers.xsd b/admin-server/MiaoYu.Repository.ChatAI.Admin/FodyWeavers.xsd
new file mode 100644
index 0000000..f35a69b
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/FodyWeavers.xsd
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/MiaoYu.Repository.ChatAI.Admin.csproj b/admin-server/MiaoYu.Repository.ChatAI.Admin/MiaoYu.Repository.ChatAI.Admin.csproj
new file mode 100644
index 0000000..c0d37d9
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/MiaoYu.Repository.ChatAI.Admin.csproj
@@ -0,0 +1,25 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/Models/ChatAdminRepositoryOptions.cs b/admin-server/MiaoYu.Repository.ChatAI.Admin/Models/ChatAdminRepositoryOptions.cs
new file mode 100644
index 0000000..795bb19
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/Models/ChatAdminRepositoryOptions.cs
@@ -0,0 +1,8 @@
+namespace MiaoYu.Repository.ChatAI.Admin.Models;
+
+public class ChatAdminRepositoryOptions : RepositoryOptions
+{
+
+}
+
+
diff --git a/admin-server/MiaoYu.Repository.ChatAI.Admin/Usings.cs b/admin-server/MiaoYu.Repository.ChatAI.Admin/Usings.cs
new file mode 100644
index 0000000..043d34e
--- /dev/null
+++ b/admin-server/MiaoYu.Repository.ChatAI.Admin/Usings.cs
@@ -0,0 +1,26 @@
+global using MiaoYu.Core.EntityFramework;
+global using MiaoYu.Core.EntityFramework.Interceptors;
+global using MiaoYu.Core.Quartz.Models;
+global using HZY.Framework.Core.AspNetCore;
+global using HZY.Framework.Core.Quartz;
+global using HZY.Framework.Repository.EntityFramework;
+global using HZY.Framework.Repository.EntityFramework.Attributes;
+global using HZY.Framework.Repository.EntityFramework.Models;
+global using HZY.Framework.Repository.EntityFramework.Models.Enums;
+global using HZY.Framework.Repository.EntityFramework.Models.Standard;
+global using HZY.Framework.Repository.EntityFramework.Repositories;
+global using HZY.Framework.Repository.EntityFramework.Repositories.Impl;
+global using Microsoft.AspNetCore.Builder;
+global using Microsoft.AspNetCore.Hosting;
+global using Microsoft.EntityFrameworkCore;
+global using Microsoft.EntityFrameworkCore.Infrastructure;
+global using Microsoft.Extensions.Caching.Memory;
+global using Microsoft.Extensions.Configuration;
+global using Microsoft.Extensions.DependencyInjection;
+global using Microsoft.Extensions.Hosting;
+global using Microsoft.Extensions.Logging;
+global using System.ComponentModel.DataAnnotations;
+global using System.ComponentModel.DataAnnotations.Schema;
+global using System.Reflection;
+global using MiaoYu.Core.Logs;
+global using System.Text;
\ No newline at end of file