Jelajahi Sumber

支持app项目中分离admindb

zhontai 2 tahun lalu
induk
melakukan
6a7dee7151
63 mengubah file dengan 474 tambahan dan 312 penghapusan
  1. 5 3
      src/hosts/ZhonTai.Host/Configs/dbconfig.json
  2. 6 0
      src/platform/ZhonTai.Admin/Core/Attributes/TransactionAttribute.cs
  3. 1 1
      src/platform/ZhonTai.Admin/Core/Configs/DbConfig.cs
  4. 4 10
      src/platform/ZhonTai.Admin/Core/Consts/DbKeys.cs
  5. 2 171
      src/platform/ZhonTai.Admin/Core/Db/DBServiceCollectionExtensions.cs
  6. 170 0
      src/platform/ZhonTai.Admin/Core/Db/DbHelper.cs
  7. 1 1
      src/platform/ZhonTai.Admin/Core/Db/Transaction/TransactionAsyncInterceptor.cs
  8. 0 5
      src/platform/ZhonTai.Admin/Core/Db/Transaction/UnitOfWorkManagerCloud.cs
  9. 4 1
      src/platform/ZhonTai.Admin/Core/HostApp.cs
  10. 1 1
      src/platform/ZhonTai.Admin/Core/Repositories/RepositoryBase.cs
  11. 7 2
      src/platform/ZhonTai.Admin/Core/Startup/HostAppOptions.cs
  12. 1 1
      src/platform/ZhonTai.Admin/Domain/Dictionary/IDictionaryRepository.cs
  13. 1 1
      src/platform/ZhonTai.Admin/Domain/DictionaryType/IDictionaryTypeRepository.cs
  14. 1 1
      src/platform/ZhonTai.Admin/Domain/Document/IDocumentRepository.cs
  15. 1 1
      src/platform/ZhonTai.Admin/Domain/DocumentImage/IDocumentImageRepository.cs
  16. 1 1
      src/platform/ZhonTai.Admin/Domain/Org/IOrgRepository.cs
  17. 1 0
      src/platform/ZhonTai.Admin/Domain/Org/OrgEntity.cs
  18. 1 1
      src/platform/ZhonTai.Admin/Domain/Permission/IPermissionRepository.cs
  19. 7 0
      src/platform/ZhonTai.Admin/Domain/PermissionApi/IPermissionApiRepository.cs
  20. 7 0
      src/platform/ZhonTai.Admin/Domain/RoleOrg/IRoleOrgRepository.cs
  21. 7 0
      src/platform/ZhonTai.Admin/Domain/RolePermission/IRolePermissionRepository.cs
  22. 7 0
      src/platform/ZhonTai.Admin/Domain/TenantPermission/ITenantPermissionRepository.cs
  23. 1 0
      src/platform/ZhonTai.Admin/Domain/User/UserEntity.cs
  24. 7 0
      src/platform/ZhonTai.Admin/Domain/UserOrg/IUserOrgRepository.cs
  25. 1 1
      src/platform/ZhonTai.Admin/Domain/UserOrg/UserOrgEntity.cs
  26. 7 0
      src/platform/ZhonTai.Admin/Domain/UserRole/IUserRoleRepository.cs
  27. 1 1
      src/platform/ZhonTai.Admin/Repositories/Api/ApiRepository.cs
  28. 1 1
      src/platform/ZhonTai.Admin/Repositories/CustomGenerateData.cs
  29. 1 1
      src/platform/ZhonTai.Admin/Repositories/CustomSyncData.cs
  30. 1 1
      src/platform/ZhonTai.Admin/Repositories/Dictionary/DictionaryRepository.cs
  31. 1 1
      src/platform/ZhonTai.Admin/Repositories/DictionaryType/DictionaryTypeRepository.cs
  32. 1 1
      src/platform/ZhonTai.Admin/Repositories/Document/DocumentRepository.cs
  33. 1 1
      src/platform/ZhonTai.Admin/Repositories/DocumentImage/DocumentImageRepository.cs
  34. 1 1
      src/platform/ZhonTai.Admin/Repositories/LoginLog/LoginLogRepository.cs
  35. 1 1
      src/platform/ZhonTai.Admin/Repositories/OprationLog/OprationLogRepository.cs
  36. 2 2
      src/platform/ZhonTai.Admin/Repositories/Org/OrgRepository.cs
  37. 1 1
      src/platform/ZhonTai.Admin/Repositories/Permission/PermissionRepository.cs
  38. 14 0
      src/platform/ZhonTai.Admin/Repositories/PermissionApi/PermissionApiRepository.cs
  39. 1 1
      src/platform/ZhonTai.Admin/Repositories/Role/RoleRepository.cs
  40. 15 0
      src/platform/ZhonTai.Admin/Repositories/RoleOrg/RoleOrgRepository.cs
  41. 14 0
      src/platform/ZhonTai.Admin/Repositories/RolePermission/RolePermissionRepository.cs
  42. 8 0
      src/platform/ZhonTai.Admin/Repositories/Task/ITaskLogRepository.cs
  43. 8 0
      src/platform/ZhonTai.Admin/Repositories/Task/ITaskRepository.cs
  44. 13 0
      src/platform/ZhonTai.Admin/Repositories/Task/TaskLogRepository.cs
  45. 13 0
      src/platform/ZhonTai.Admin/Repositories/Task/TaskRepository.cs
  46. 1 1
      src/platform/ZhonTai.Admin/Repositories/Tenant/TenantRepository.cs
  47. 14 0
      src/platform/ZhonTai.Admin/Repositories/TenantPermission/TenantPermissionRepository.cs
  48. 1 1
      src/platform/ZhonTai.Admin/Repositories/User/UserRepository.cs
  49. 14 0
      src/platform/ZhonTai.Admin/Repositories/UserOrg/UserOrgRepository.cs
  50. 14 0
      src/platform/ZhonTai.Admin/Repositories/UserRole/UserRoleRepository.cs
  51. 1 1
      src/platform/ZhonTai.Admin/Repositories/UserStaff/UserStaffRepository.cs
  52. 1 1
      src/platform/ZhonTai.Admin/Repositories/View/ViewRepositoryRepository.cs
  53. 4 8
      src/platform/ZhonTai.Admin/Services/Org/OrgService.cs
  54. 10 25
      src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs
  55. 4 4
      src/platform/ZhonTai.Admin/Services/Role/RoleService.cs
  56. 2 2
      src/platform/ZhonTai.Admin/Services/TaskScheduler/TaskLogService.cs
  57. 2 2
      src/platform/ZhonTai.Admin/Services/TaskScheduler/TaskService.cs
  58. 5 6
      src/platform/ZhonTai.Admin/Services/Tenant/TenantService.cs
  59. 6 5
      src/platform/ZhonTai.Admin/Services/User/UserService.cs
  60. 3 3
      src/platform/ZhonTai.Admin/Services/View/ViewService.cs
  61. 20 15
      src/platform/ZhonTai.Admin/ZhonTai.Admin.xml
  62. 22 0
      src/tests/ZhonTai.Tests/Repositories/ApiRepositoryTest.cs
  63. 0 23
      src/tests/ZhonTai.Tests/Repositories/RepositoryBaseTest.cs

+ 5 - 3
src/hosts/ZhonTai.Host/Configs/dbconfig.json

@@ -60,13 +60,15 @@
 
   //多数据库
   //定义DbKeys枚举
-  //使用仓储访问 public ModuleRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AdminDb, muowm)
-  //使用FreeSqlCloud访问  freeSqlCloud.Use(DbKeys.AdminDb);
+  //使用仓储访问 public ModuleRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AppDb, muowm)
+  //使用FreeSqlCloud访问  freeSqlCloud.Use(DbKeys.AppDb);
   "dbs": [
     //{
     //  "key": "admindb",
     //  "type": "Sqlite",
-    //  "connectionString": "Data Source=|DataDirectory|\\admindb.db; Pooling=true;Min Pool Size=1",
+    //  "syncStructure": true,
+    //  "syncData": true,
+    //  "connectionString": "Data Source=|DataDirectory|\\db\\admindb.db; Pooling=true;Min Pool Size=1",
     //  "providerType": ""
     //}
   ]

+ 6 - 0
src/platform/ZhonTai.Admin/Core/Attributes/TransactionAttribute.cs

@@ -1,6 +1,7 @@
 using FreeSql;
 using System;
 using System.Data;
+using ZhonTai.Admin.Core.Consts;
 
 namespace ZhonTai.Admin.Core.Attributes;
 
@@ -20,4 +21,9 @@ public class TransactionAttribute : Attribute
     /// </summary>
     public IsolationLevel IsolationLevel { get; set; }
 
+    /// <summary>
+    /// 数据库注册键
+    /// </summary>
+    public string DbKey { get; set; } = DbKeys.AppDb;
+
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Core/Configs/DbConfig.cs

@@ -11,7 +11,7 @@ public class DbConfig
     /// <summary>
     /// 数据库注册键
     /// </summary>
-    public string Key { get; set; } = DbKeys.MasterDb;
+    public string Key { get; set; } = DbKeys.AppDb;
 
     /// <summary>
     /// 程序集名称

+ 4 - 10
src/platform/ZhonTai.Admin/Core/Consts/DbKeys.cs

@@ -5,17 +5,11 @@ namespace ZhonTai.Admin.Core.Consts;
 /// <summary>
 /// 数据库键名
 /// </summary>
-public static partial class DbKeys
+public class DbKeys
 {
     /// <summary>
-    /// 主库
+    /// 数据库注册键
     /// </summary>
-    [Description("主库")]
-    public static string MasterDb { get; set; } = "masterdb";
-
-    /// <summary>
-    /// admin库
-    /// </summary>
-    [Description("admin库")]
-    public static string AdminDb { get; set; } = "admindb";
+    [Description("数据库注册键")]
+    public static string AppDb { get; set; } = "admindb";
 }

+ 2 - 171
src/platform/ZhonTai.Admin/Core/Db/DBServiceCollectionExtensions.cs

@@ -20,171 +20,6 @@ namespace ZhonTai.Admin.Core.Db;
 
 public static class DBServiceCollectionExtensions
 {
-    /// <summary>
-    /// 注册数据库
-    /// </summary>
-    /// <param name="freeSqlCloud"></param>
-    /// <param name="user"></param>
-    /// <param name="dbConfig"></param>
-    /// <param name="appConfig"></param>
-    /// <param name="hostAppOptions"></param>
-    private static void RegisterDb(
-        FreeSqlCloud freeSqlCloud,
-        IUser user,
-        DbConfig dbConfig,
-        AppConfig appConfig,
-        HostAppOptions hostAppOptions
-    )
-    {
-        //注册数据库
-        freeSqlCloud.Register(dbConfig.Key, () =>
-        {
-            //创建数据库
-            if (dbConfig.CreateDb)
-            {
-                DbHelper.CreateDatabaseAsync(dbConfig).Wait();
-            }
-
-            var providerType = dbConfig.ProviderType.NotNull() ? Type.GetType(dbConfig.ProviderType) : null;
-            var freeSqlBuilder = new FreeSqlBuilder()
-                    .UseConnectionString(dbConfig.Type, dbConfig.ConnectionString, providerType)
-                    .UseAutoSyncStructure(false)
-                    .UseLazyLoading(false)
-                    .UseNoneCommandParameter(true);
-
-            if (dbConfig.SlaveList?.Length > 0)
-            {
-                var slaveList = dbConfig.SlaveList.Select(a => a.ConnectionString).ToArray();
-                var slaveWeightList = dbConfig.SlaveList.Select(a => a.Weight).ToArray();
-                freeSqlBuilder.UseSlave(slaveList).UseSlaveWeight(slaveWeightList);
-            }
-
-            hostAppOptions?.ConfigureFreeSqlBuilder?.Invoke(freeSqlBuilder);
-
-            #region 监听所有命令
-
-            if (dbConfig.MonitorCommand)
-            {
-                freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) =>
-                {
-                    //Console.WriteLine($"{cmd.CommandText}\n{traceLog}{Environment.NewLine}");
-                    Console.WriteLine($"{cmd.CommandText}{Environment.NewLine}");
-                });
-            }
-
-            #endregion 监听所有命令
-
-            var fsql = freeSqlBuilder.Build();
-
-            //软删除过滤器
-            fsql.GlobalFilter.ApplyOnly<IDelete>(FilterNames.Delete, a => a.IsDeleted == false);
-
-            //租户过滤器
-            if (appConfig.Tenant)
-            {
-                fsql.GlobalFilter.ApplyOnlyIf<ITenant>(FilterNames.Tenant, () => user?.Id > 0, a => a.TenantId == user.TenantId);
-            }
-
-            //数据权限过滤器
-            fsql.GlobalFilter.ApplyOnlyIf<IData>(FilterNames.Self,
-                () =>
-                {
-                    if (!(user?.Id > 0))
-                        return false;
-                    var dataPermission = user.DataPermission;
-                    if (user.Type == UserType.DefaultUser && dataPermission != null)
-                        return dataPermission.DataScope != DataScope.All && dataPermission.OrgIds.Count == 0;
-                    return false;
-                },
-                a => a.OwnerId == user.Id
-            );
-            fsql.GlobalFilter.ApplyOnlyIf<IData>(FilterNames.Data,
-                () =>
-                {
-                    if (!(user?.Id > 0))
-                        return false;
-                    var dataPermission = user.DataPermission;
-                    if (user.Type == UserType.DefaultUser && dataPermission != null)
-                        return dataPermission.DataScope != DataScope.All && dataPermission.OrgIds.Count > 0;
-                    return false;
-                },
-                a => a.OwnerId == user.Id || user.DataPermission.OrgIds.Contains(a.OwnerOrgId.Value)
-            );
-
-            //配置实体
-            DbHelper.ConfigEntity(fsql, appConfig, dbConfig);
-
-            hostAppOptions?.ConfigureFreeSql?.Invoke(fsql);
-
-            #region 初始化数据库
-
-            //同步结构
-            if (dbConfig.SyncStructure)
-            {
-                DbHelper.SyncStructure(fsql, dbConfig: dbConfig, appConfig: appConfig);
-            }
-
-            #region 审计数据
-
-            //计算服务器时间
-            var serverTime = fsql.Ado.QuerySingle(() => DateTime.UtcNow);
-            var timeOffset = DateTime.UtcNow.Subtract(serverTime);
-            DbHelper.TimeOffset = timeOffset;
-            fsql.Aop.AuditValue += (s, e) =>
-            {
-                DbHelper.AuditValue(e, timeOffset, user);
-            };
-
-            #endregion 审计数据
-
-            //同步数据
-            if (dbConfig.SyncData)
-            {
-                DbHelper.SyncDataAsync(fsql, dbConfig, appConfig).Wait();
-            }
-
-            #endregion 初始化数据库
-
-            //生成数据
-            if (dbConfig.GenerateData && !dbConfig.CreateDb && !dbConfig.SyncData)
-            {
-                DbHelper.GenerateDataAsync(fsql, appConfig, dbConfig).Wait();
-            }
-
-            #region 监听Curd操作
-
-            if (dbConfig.Curd)
-            {
-                fsql.Aop.CurdBefore += (s, e) =>
-                {
-                    if (appConfig.MiniProfiler)
-                    {
-                        MiniProfiler.Current.CustomTiming("CurdBefore", e.Sql);
-                    }
-                    Console.WriteLine($"{e.Sql}{Environment.NewLine}");
-                };
-                fsql.Aop.CurdAfter += (s, e) =>
-                {
-                    if (appConfig.MiniProfiler)
-                    {
-                        MiniProfiler.Current.CustomTiming("CurdAfter", $"{e.ElapsedMilliseconds}");
-                    }
-                };
-            }
-
-            #endregion 监听Curd操作
-
-            return fsql;
-        });
-
-        //执行注册数据库
-        var fsql = freeSqlCloud.Use(dbConfig.Key);
-        if (dbConfig.SyncStructure)
-        {
-            var _ = fsql.CodeFirst;
-        }
-    }
-
     /// <summary>
     /// 添加数据库
     /// </summary>
@@ -198,18 +33,14 @@ public static class DBServiceCollectionExtensions
         var appConfig = ConfigHelper.Get<AppConfig>("appconfig", env.EnvironmentName);
         var user = services.BuildServiceProvider().GetService<IUser>();
         var freeSqlCloud = appConfig.DistributeKey.IsNull() ? new FreeSqlCloud() : new FreeSqlCloud(appConfig.DistributeKey);
-        if (dbConfig.Key.NotNull())
-        {
-            DbKeys.MasterDb = dbConfig.Key;
-        }
-        RegisterDb(freeSqlCloud, user, dbConfig, appConfig, hostAppOptions);
+        DbHelper.RegisterDb(freeSqlCloud, user, dbConfig, appConfig, hostAppOptions);
 
         //注册多数据库
         if (dbConfig.Dbs?.Length > 0)
         {
             foreach (var db in dbConfig.Dbs)
             {
-                RegisterDb(freeSqlCloud, user, db, appConfig, null);
+                DbHelper.RegisterDb(freeSqlCloud, user, db, appConfig, null);
             }
         }
 

+ 170 - 0
src/platform/ZhonTai.Admin/Core/Db/DbHelper.cs

@@ -15,6 +15,11 @@ using ZhonTai.Admin.Core.Auth;
 using System.IO;
 using ZhonTai.Common.Helpers;
 using ZhonTai.Admin.Core.Db.Data;
+using StackExchange.Profiling;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Startup;
+using ZhonTai.Admin.Domain.Role;
+using ZhonTai.Admin.Domain.User;
 
 namespace ZhonTai.Admin.Core.Db;
 
@@ -392,4 +397,169 @@ public class DbHelper
             throw new Exception($" generate data failed。\n{ex.Message}{Environment.NewLine}");
         }
     }
+
+    /// <summary>
+    /// 注册数据库
+    /// </summary>
+    /// <param name="freeSqlCloud"></param>
+    /// <param name="user"></param>
+    /// <param name="dbConfig"></param>
+    /// <param name="appConfig"></param>
+    /// <param name="hostAppOptions"></param>
+    public static void RegisterDb(
+        FreeSqlCloud freeSqlCloud,
+        IUser user,
+        DbConfig dbConfig,
+        AppConfig appConfig,
+        HostAppOptions hostAppOptions
+    )
+    {
+        //注册数据库
+        freeSqlCloud.Register(dbConfig.Key, () =>
+        {
+            //创建数据库
+            if (dbConfig.CreateDb)
+            {
+                CreateDatabaseAsync(dbConfig).Wait();
+            }
+
+            var providerType = dbConfig.ProviderType.NotNull() ? Type.GetType(dbConfig.ProviderType) : null;
+            var freeSqlBuilder = new FreeSqlBuilder()
+                    .UseConnectionString(dbConfig.Type, dbConfig.ConnectionString, providerType)
+                    .UseAutoSyncStructure(false)
+                    .UseLazyLoading(false)
+                    .UseNoneCommandParameter(true);
+
+            if (dbConfig.SlaveList?.Length > 0)
+            {
+                var slaveList = dbConfig.SlaveList.Select(a => a.ConnectionString).ToArray();
+                var slaveWeightList = dbConfig.SlaveList.Select(a => a.Weight).ToArray();
+                freeSqlBuilder.UseSlave(slaveList).UseSlaveWeight(slaveWeightList);
+            }
+
+            hostAppOptions?.ConfigureFreeSqlBuilder?.Invoke(freeSqlBuilder);
+
+            #region 监听所有命令
+
+            if (dbConfig.MonitorCommand)
+            {
+                freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) =>
+                {
+                    //Console.WriteLine($"{cmd.CommandText}\n{traceLog}{Environment.NewLine}");
+                    Console.WriteLine($"{cmd.CommandText}{Environment.NewLine}");
+                });
+            }
+
+            #endregion 监听所有命令
+
+            var fsql = freeSqlBuilder.Build();
+
+            //软删除过滤器
+            fsql.GlobalFilter.ApplyOnly<IDelete>(FilterNames.Delete, a => a.IsDeleted == false);
+
+            //租户过滤器
+            if (appConfig.Tenant)
+            {
+                fsql.GlobalFilter.ApplyOnlyIf<ITenant>(FilterNames.Tenant, () => user?.Id > 0, a => a.TenantId == user.TenantId);
+            }
+
+            //数据权限过滤器
+            fsql.GlobalFilter.ApplyOnlyIf<IData>(FilterNames.Self,
+                () =>
+                {
+                    if (!(user?.Id > 0))
+                        return false;
+                    var dataPermission = user.DataPermission;
+                    if (user.Type == UserType.DefaultUser && dataPermission != null)
+                        return dataPermission.DataScope != DataScope.All && dataPermission.OrgIds.Count == 0;
+                    return false;
+                },
+                a => a.OwnerId == user.Id
+            );
+            fsql.GlobalFilter.ApplyOnlyIf<IData>(FilterNames.Data,
+                () =>
+                {
+                    if (!(user?.Id > 0))
+                        return false;
+                    var dataPermission = user.DataPermission;
+                    if (user.Type == UserType.DefaultUser && dataPermission != null)
+                        return dataPermission.DataScope != DataScope.All && dataPermission.OrgIds.Count > 0;
+                    return false;
+                },
+                a => a.OwnerId == user.Id || user.DataPermission.OrgIds.Contains(a.OwnerOrgId.Value)
+            );
+
+            //配置实体
+            ConfigEntity(fsql, appConfig, dbConfig);
+
+            hostAppOptions?.ConfigureFreeSql?.Invoke(fsql);
+
+            #region 初始化数据库
+
+            //同步结构
+            if (dbConfig.SyncStructure)
+            {
+                SyncStructure(fsql, dbConfig: dbConfig, appConfig: appConfig);
+            }
+
+            #region 审计数据
+
+            //计算服务器时间
+            var serverTime = fsql.Ado.QuerySingle(() => DateTime.UtcNow);
+            var timeOffset = DateTime.UtcNow.Subtract(serverTime);
+            TimeOffset = timeOffset;
+            fsql.Aop.AuditValue += (s, e) =>
+            {
+                AuditValue(e, timeOffset, user);
+            };
+
+            #endregion 审计数据
+
+            //同步数据
+            if (dbConfig.SyncData)
+            {
+                SyncDataAsync(fsql, dbConfig, appConfig).Wait();
+            }
+
+            #endregion 初始化数据库
+
+            //生成数据
+            if (dbConfig.GenerateData && !dbConfig.CreateDb && !dbConfig.SyncData)
+            {
+                GenerateDataAsync(fsql, appConfig, dbConfig).Wait();
+            }
+
+            #region 监听Curd操作
+
+            if (dbConfig.Curd)
+            {
+                fsql.Aop.CurdBefore += (s, e) =>
+                {
+                    if (appConfig.MiniProfiler)
+                    {
+                        MiniProfiler.Current.CustomTiming("CurdBefore", e.Sql);
+                    }
+                    Console.WriteLine($"{e.Sql}{Environment.NewLine}");
+                };
+                fsql.Aop.CurdAfter += (s, e) =>
+                {
+                    if (appConfig.MiniProfiler)
+                    {
+                        MiniProfiler.Current.CustomTiming("CurdAfter", $"{e.ElapsedMilliseconds}");
+                    }
+                };
+            }
+
+            #endregion 监听Curd操作
+
+            return fsql;
+        });
+
+        //执行注册数据库
+        var fsql = freeSqlCloud.Use(dbConfig.Key);
+        if (dbConfig.SyncStructure)
+        {
+            var _ = fsql.CodeFirst;
+        }
+    }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Core/Db/Transaction/TransactionAsyncInterceptor.cs

@@ -27,7 +27,7 @@ public class TransactionAsyncInterceptor : IAsyncInterceptor
         {
             IsolationLevel? isolationLevel = transaction.IsolationLevel == 0 ? null : transaction.IsolationLevel;
 
-            _unitOfWork = _unitOfWorkManagerCloud.Begin(DbKeys.MasterDb, transaction.Propagation, isolationLevel);
+            _unitOfWork = _unitOfWorkManagerCloud.Begin(transaction.DbKey, transaction.Propagation, isolationLevel);
             return true;
         }
 

+ 0 - 5
src/platform/ZhonTai.Admin/Core/Db/Transaction/UnitOfWorkManagerCloud.cs

@@ -1,7 +1,6 @@
 using FreeSql;
 using System.Collections.Generic;
 using System.Data;
-using ZhonTai.Admin.Core.Consts;
 
 namespace ZhonTai.Admin.Core.Db.Transaction;
 
@@ -16,10 +15,6 @@ public class UnitOfWorkManagerCloud
 
     public UnitOfWorkManager GetUnitOfWorkManager(string dbKey)
     {
-        if (dbKey.IsNull())
-        {
-            dbKey = DbKeys.MasterDb;
-        }
         if (_managers.TryGetValue(dbKey, out var uowm) == false)
         {
             _managers.Add(dbKey, uowm = new UnitOfWorkManager(_cloud.Use(dbKey)));

+ 4 - 1
src/platform/ZhonTai.Admin/Core/HostApp.cs

@@ -175,7 +175,10 @@ public class HostApp
         services.AddSingleton(dbConfig);
 
         //添加数据库
-        services.AddDb(env, _hostAppOptions);
+        if (!_hostAppOptions.CustomInitDb)
+        {
+            services.AddDb(env, _hostAppOptions);
+        }
 
         //上传配置
         var uploadConfig = ConfigHelper.Load("uploadconfig", env.EnvironmentName, true);

+ 1 - 1
src/platform/ZhonTai.Admin/Core/Repositories/RepositoryBase.cs

@@ -113,7 +113,7 @@ namespace ZhonTai.Admin.Core.Repositories
 
     public class RepositoryBase<TEntity> : RepositoryBase<TEntity, long>, IRepositoryBase<TEntity> where TEntity : class
     {
-        public RepositoryBase(UnitOfWorkManagerCloud uowm) : this(DbKeys.MasterDb, uowm) { }
+        public RepositoryBase(UnitOfWorkManagerCloud uowm) : this(DbKeys.AppDb, uowm) { }
         public RepositoryBase(string db, UnitOfWorkManagerCloud uowm) : this(uowm.GetUnitOfWorkManager(db)) { }
         RepositoryBase(UnitOfWorkManager uowm) : base(uowm.Orm)
         {

+ 7 - 2
src/platform/ZhonTai.Admin/Core/Startup/HostAppOptions.cs

@@ -41,12 +41,12 @@ public class HostAppOptions
     public Action<HostAppMiddlewareContext> ConfigurePostMiddleware { get; set; }
 
     /// <summary>
-    /// 配置FreeSql构建器
+    /// 配置主库FreeSql构建器
     /// </summary>
     public Action<FreeSqlBuilder> ConfigureFreeSqlBuilder { get; set; }
 
     /// <summary>
-    /// 配置FreeSql
+    /// 配置主库FreeSql
     /// </summary>
     public Action<IFreeSql> ConfigureFreeSql { get; set; }
 
@@ -60,4 +60,9 @@ public class HostAppOptions
     /// </summary>
     public Action<IdGeneratorOptions> ConfigureIdGenerator { get; set; }
 
+    /// <summary>
+    /// 自定义数据库初始化
+    /// </summary>
+    public bool CustomInitDb { get; set; } = false;
+
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/Dictionary/IDictionaryRepository.cs

@@ -2,6 +2,6 @@
 
 namespace ZhonTai.Admin.Domain.Dictionary;
 
-public partial interface IDictionaryRepository : IRepositoryBase<DictionaryEntity>
+public interface IDictionaryRepository : IRepositoryBase<DictionaryEntity>
 {
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/DictionaryType/IDictionaryTypeRepository.cs

@@ -2,6 +2,6 @@
 
 namespace ZhonTai.Admin.Domain.DictionaryType;
 
-public partial interface IDictionaryTypeRepository : IRepositoryBase<DictionaryTypeEntity>
+public interface IDictionaryTypeRepository : IRepositoryBase<DictionaryTypeEntity>
 {
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/Document/IDocumentRepository.cs

@@ -2,6 +2,6 @@
 
 namespace ZhonTai.Admin.Domain.Document;
 
-public partial interface IDocumentRepository : IRepositoryBase<DocumentEntity>
+public interface IDocumentRepository : IRepositoryBase<DocumentEntity>
 {
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/DocumentImage/IDocumentImageRepository.cs

@@ -2,6 +2,6 @@
 
 namespace ZhonTai.Admin.Domain.DocumentImage;
 
-public partial interface IDocumentImageRepository : IRepositoryBase<DocumentImageEntity>
+public interface IDocumentImageRepository : IRepositoryBase<DocumentImageEntity>
 {
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/Org/IOrgRepository.cs

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Core.Repositories;
 
 namespace ZhonTai.Admin.Domain.Org;
 
-public partial interface IOrgRepository : IRepositoryBase<OrgEntity>
+public interface IOrgRepository : IRepositoryBase<OrgEntity>
 {
     /// <summary>
     /// 获得本部门和下级部门Id

+ 1 - 0
src/platform/ZhonTai.Admin/Domain/Org/OrgEntity.cs

@@ -4,6 +4,7 @@ using System.Collections.Generic;
 using ZhonTai.Admin.Domain.UserStaff;
 using ZhonTai.Admin.Domain.User;
 using ZhonTai.Admin.Domain.Role;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Domain.Org;
 

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/Permission/IPermissionRepository.cs

@@ -2,6 +2,6 @@
 
 namespace ZhonTai.Admin.Domain.Permission;
 
-public partial interface IPermissionRepository : IRepositoryBase<PermissionEntity>
+public interface IPermissionRepository : IRepositoryBase<PermissionEntity>
 {
 }

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/PermissionApi/IPermissionApiRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.PermissionApi;
+
+public interface IPermissionApiRepository : IRepositoryBase<PermissionApiEntity>
+{
+}

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/RoleOrg/IRoleOrgRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.RoleOrg;
+
+public interface IRoleOrgRepository : IRepositoryBase<RoleOrgEntity>
+{
+}

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/RolePermission/IRolePermissionRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.RolePermission;
+
+public interface IRolePermissionRepository : IRepositoryBase<RolePermissionEntity>
+{
+}

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/TenantPermission/ITenantPermissionRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.TenantPermission;
+
+public interface ITenantPermissionRepository : IRepositoryBase<TenantPermissionEntity>
+{
+}

+ 1 - 0
src/platform/ZhonTai.Admin/Domain/User/UserEntity.cs

@@ -7,6 +7,7 @@ using ZhonTai.Admin.Domain.Role;
 using ZhonTai.Admin.Domain.UserRole;
 using ZhonTai.Admin.Domain.UserStaff;
 using ZhonTai.Admin.Domain.Org;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Domain.User;
 

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/UserOrg/IUserOrgRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.UserOrg;
+
+public interface IUserOrgRepository : IRepositoryBase<UserOrgEntity>
+{
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Domain/UserOrg/UserOrgEntity.cs

@@ -3,7 +3,7 @@ using FreeSql.DataAnnotations;
 using ZhonTai.Admin.Domain.Org;
 using ZhonTai.Admin.Domain.User;
 
-namespace ZhonTai.Admin.Domain;
+namespace ZhonTai.Admin.Domain.UserOrg;
 
 /// <summary>
 /// 用户所属部门

+ 7 - 0
src/platform/ZhonTai.Admin/Domain/UserRole/IUserRoleRepository.cs

@@ -0,0 +1,7 @@
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Domain.UserRole;
+
+public interface IUserRoleRepository : IRepositoryBase<UserRoleEntity>
+{
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/Api/ApiRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class ApiRepository : RepositoryBase<ApiEntity>, IApiRepository
 {
-    public ApiRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public ApiRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/CustomGenerateData.cs

@@ -20,7 +20,7 @@ using ZhonTai.Admin.Domain.UserStaff;
 using ZhonTai.Admin.Domain.Org;
 using ZhonTai.Admin.Core.Db.Data;
 using FreeSql;
-using ZhonTai.Admin.Domain;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Repositories;
 

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/CustomSyncData.cs

@@ -15,7 +15,7 @@ using ZhonTai.Admin.Core.Configs;
 using ZhonTai.Admin.Domain.Org;
 using ZhonTai.Admin.Domain.UserStaff;
 using ZhonTai.Admin.Core.Db.Data;
-using ZhonTai.Admin.Domain;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Repositories;
 

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/Dictionary/DictionaryRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class DictionaryRepository : RepositoryBase<DictionaryEntity>, IDictionaryRepository
 {
-    public DictionaryRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public DictionaryRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/DictionaryType/DictionaryTypeRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class DictionaryTypeRepository : RepositoryBase<DictionaryTypeEntity>, IDictionaryTypeRepository
 {
-    public DictionaryTypeRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public DictionaryTypeRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/Document/DocumentRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class DocumentRepository : RepositoryBase<DocumentEntity>, IDocumentRepository
 {
-    public DocumentRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public DocumentRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/DocumentImage/DocumentImageRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class DocumentImageRepository : RepositoryBase<DocumentImageEntity>, IDocumentImageRepository
 {
-    public DocumentImageRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public DocumentImageRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/LoginLog/LoginLogRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class LoginLogRepository : RepositoryBase<LoginLogEntity>, ILoginLogRepository
 {
-    public LoginLogRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public LoginLogRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/OprationLog/OprationLogRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class OprationLogRepository : RepositoryBase<OprationLogEntity>, IOprationLogRepository
 {
-    public OprationLogRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public OprationLogRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 2 - 2
src/platform/ZhonTai.Admin/Repositories/Org/OrgRepository.cs

@@ -3,15 +3,15 @@ using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Consts;
 using ZhonTai.Admin.Core.Db.Transaction;
 using ZhonTai.Admin.Core.Repositories;
-using ZhonTai.Admin.Domain;
 using ZhonTai.Admin.Domain.Org;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Repositories;
 
 public class OrgRepository : RepositoryBase<OrgEntity>, IOrgRepository
 {
     private readonly IRepositoryBase<UserOrgEntity> _userOrgRepository;
-    public OrgRepository(UnitOfWorkManagerCloud uowm, IRepositoryBase<UserOrgEntity> userOrgRepository) : base(DbKeys.AdminDb, uowm)
+    public OrgRepository(UnitOfWorkManagerCloud uowm, IRepositoryBase<UserOrgEntity> userOrgRepository) : base(DbKeys.AppDb, uowm)
     {
         _userOrgRepository = userOrgRepository;
     }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/Permission/PermissionRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class PermissionRepository : RepositoryBase<PermissionEntity>, IPermissionRepository
 {
-    public PermissionRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public PermissionRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 14 - 0
src/platform/ZhonTai.Admin/Repositories/PermissionApi/PermissionApiRepository.cs

@@ -0,0 +1,14 @@
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain.PermissionApi;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class PermissionApiRepository : RepositoryBase<PermissionApiEntity>, IPermissionApiRepository
+{
+    public PermissionApiRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+
+    }
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/Role/RoleRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class RoleRepository : RepositoryBase<RoleEntity>, IRoleRepository
 {
-    public RoleRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public RoleRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
     }
 }

+ 15 - 0
src/platform/ZhonTai.Admin/Repositories/RoleOrg/RoleOrgRepository.cs

@@ -0,0 +1,15 @@
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain;
+using ZhonTai.Admin.Domain.RoleOrg;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class RoleOrgRepository : RepositoryBase<RoleOrgEntity>, IRoleOrgRepository
+{
+    public RoleOrgRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+
+    }
+}

+ 14 - 0
src/platform/ZhonTai.Admin/Repositories/RolePermission/RolePermissionRepository.cs

@@ -0,0 +1,14 @@
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain.RolePermission;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class RolePermissionRepository : RepositoryBase<RolePermissionEntity>, IRolePermissionRepository
+{
+    public RolePermissionRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+
+    }
+}

+ 8 - 0
src/platform/ZhonTai.Admin/Repositories/Task/ITaskLogRepository.cs

@@ -0,0 +1,8 @@
+using FreeScheduler;
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Repositories;
+
+public interface ITaskLogRepository : IRepositoryBase<TaskLog>
+{
+}

+ 8 - 0
src/platform/ZhonTai.Admin/Repositories/Task/ITaskRepository.cs

@@ -0,0 +1,8 @@
+using FreeScheduler;
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Repositories;
+
+public interface ITaskRepository : IRepositoryBase<TaskInfo>
+{
+}

+ 13 - 0
src/platform/ZhonTai.Admin/Repositories/Task/TaskLogRepository.cs

@@ -0,0 +1,13 @@
+using FreeScheduler;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class TaskLogRepository : RepositoryBase<TaskLog>, ITaskLogRepository
+{
+    public TaskLogRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+    }
+}

+ 13 - 0
src/platform/ZhonTai.Admin/Repositories/Task/TaskRepository.cs

@@ -0,0 +1,13 @@
+using FreeScheduler;
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class TaskRepository : RepositoryBase<TaskInfo>, ITaskRepository
+{
+    public TaskRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+    }
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/Tenant/TenantRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class TenantRepository : RepositoryBase<TenantEntity>, ITenantRepository
 {
-    public TenantRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AdminDb, muowm)
+    public TenantRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AppDb, muowm)
     {
     }
 }

+ 14 - 0
src/platform/ZhonTai.Admin/Repositories/TenantPermission/TenantPermissionRepository.cs

@@ -0,0 +1,14 @@
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain.TenantPermission;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class TenantPermissionRepository : RepositoryBase<TenantPermissionEntity>, ITenantPermissionRepository
+{
+    public TenantPermissionRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+
+    }
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/User/UserRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class UserRepository : RepositoryBase<UserEntity>, IUserRepository
 {
-    public UserRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AdminDb, muowm)
+    public UserRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AppDb, muowm)
     {
 
     }

+ 14 - 0
src/platform/ZhonTai.Admin/Repositories/UserOrg/UserOrgRepository.cs

@@ -0,0 +1,14 @@
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain.UserOrg;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class UserOrgRepository : RepositoryBase<UserOrgEntity>, IUserOrgRepository
+{
+    public UserOrgRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+
+    }
+}

+ 14 - 0
src/platform/ZhonTai.Admin/Repositories/UserRole/UserRoleRepository.cs

@@ -0,0 +1,14 @@
+using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Repositories;
+using ZhonTai.Admin.Domain.UserRole;
+
+namespace ZhonTai.Admin.Repositories;
+
+public class UserRoleRepository : RepositoryBase<UserRoleEntity>, IUserRoleRepository
+{
+    public UserRoleRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
+    {
+
+    }
+}

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/UserStaff/UserStaffRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class UserStaffRepository : RepositoryBase<UserStaffEntity>, IUserStaffRepository
 {
-    public UserStaffRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AdminDb, uowm)
+    public UserStaffRepository(UnitOfWorkManagerCloud uowm) : base(DbKeys.AppDb, uowm)
     {
 
     }

+ 1 - 1
src/platform/ZhonTai.Admin/Repositories/View/ViewRepositoryRepository.cs

@@ -7,7 +7,7 @@ namespace ZhonTai.Admin.Repositories;
 
 public class ViewRepository : RepositoryBase<ViewEntity>, IViewRepository
 {
-    public ViewRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AdminDb, muowm)
+    public ViewRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AppDb, muowm)
     {
     }
 }

+ 4 - 8
src/platform/ZhonTai.Admin/Services/Org/OrgService.cs

@@ -6,10 +6,8 @@ using ZhonTai.Admin.Domain.Org;
 using ZhonTai.Admin.Core.Consts;
 using ZhonTai.DynamicApi.Attributes;
 using ZhonTai.DynamicApi;
-using ZhonTai.Admin.Core.Repositories;
-using ZhonTai.Admin.Domain;
 using ZhonTai.Admin.Core.Attributes;
-using ZhonTai.Admin.Core.Auth;
+using ZhonTai.Admin.Domain.RoleOrg;
 
 namespace ZhonTai.Admin.Services.Org;
 
@@ -19,13 +17,11 @@ namespace ZhonTai.Admin.Services.Org;
 [DynamicApi(Area = AdminConsts.AreaName)]
 public class OrgService : BaseService, IOrgService, IDynamicApi
 {
-    private readonly IOrgRepository _orgRepository;
+    private IOrgRepository _orgRepository => LazyGetRequiredService<IOrgRepository>();
+    private IRoleOrgRepository _roleOrgRepository => LazyGetRequiredService<IRoleOrgRepository>();
 
-    private IRepositoryBase<RoleOrgEntity> _roleOrgRepository => LazyGetRequiredService<IRepositoryBase<RoleOrgEntity>>();
-
-    public OrgService(IOrgRepository orgRepository)
+    public OrgService()
     {
-        _orgRepository = orgRepository;
     }
 
     /// <summary>

+ 10 - 25
src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs

@@ -31,32 +31,17 @@ namespace ZhonTai.Admin.Services.Permission;
 [DynamicApi(Area = AdminConsts.AreaName)]
 public class PermissionService : BaseService, IPermissionService, IDynamicApi
 {
-    private readonly AppConfig _appConfig;
-    private readonly IPermissionRepository _permissionRepository;
-    private readonly IRoleRepository _roleRepository;
+    private AppConfig _appConfig => LazyGetRequiredService<AppConfig>();
+    private IPermissionRepository _permissionRepository => LazyGetRequiredService<IPermissionRepository>();
+    private IRoleRepository _roleRepository => LazyGetRequiredService<IRoleRepository>();
     private IUserRepository _userRepository => LazyGetRequiredService<IUserRepository>();
-    private readonly IRepositoryBase<RolePermissionEntity> _rolePermissionRepository;
-    private readonly IRepositoryBase<TenantPermissionEntity> _tenantPermissionRepository;
-    private readonly IRepositoryBase<UserRoleEntity> _userRoleRepository;
-    private readonly IRepositoryBase<PermissionApiEntity> _permissionApiRepository;
-
-    public PermissionService(
-        AppConfig appConfig,
-        IPermissionRepository permissionRepository,
-        IRoleRepository roleRepository,
-        IRepositoryBase<RolePermissionEntity> rolePermissionRepository,
-        IRepositoryBase<TenantPermissionEntity> tenantPermissionRepository,
-        IRepositoryBase<UserRoleEntity> userRoleRepository,
-        IRepositoryBase<PermissionApiEntity> permissionApiRepository
-    )
+    private IRolePermissionRepository _rolePermissionRepository => LazyGetRequiredService<IRolePermissionRepository>();
+    private ITenantPermissionRepository _tenantPermissionRepository => LazyGetRequiredService<ITenantPermissionRepository>();
+    private IUserRoleRepository _userRoleRepository => LazyGetRequiredService<IUserRoleRepository>();
+    private IPermissionApiRepository _permissionApiRepository => LazyGetRequiredService<IPermissionApiRepository>();
+
+    public PermissionService()
     {
-        _appConfig = appConfig;
-        _permissionRepository = permissionRepository;
-        _roleRepository = roleRepository;
-        _rolePermissionRepository = rolePermissionRepository;
-        _tenantPermissionRepository = tenantPermissionRepository;
-        _userRoleRepository = userRoleRepository;
-        _permissionApiRepository = permissionApiRepository;
     }
 
     /// <summary>
@@ -446,7 +431,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
         if (_appConfig.Tenant && User.TenantType == TenantType.Tenant)
         {
             var cloud = ServiceProvider.GetRequiredService<FreeSqlCloud>();
-            var tenantPermissionIds = await cloud.Use(DbKeys.MasterDb).Select<TenantPermissionEntity>().Where(d => d.TenantId == User.TenantId).ToListAsync(m => m.PermissionId);
+            var tenantPermissionIds = await cloud.Use(DbKeys.AppDb).Select<TenantPermissionEntity>().Where(d => d.TenantId == User.TenantId).ToListAsync(m => m.PermissionId);
             insertPermissionIds = insertPermissionIds.Where(d => tenantPermissionIds.Contains(d));
         }
 

+ 4 - 4
src/platform/ZhonTai.Admin/Services/Role/RoleService.cs

@@ -15,6 +15,7 @@ using ZhonTai.Admin.Domain.UserRole;
 using ZhonTai.Admin.Domain.User;
 using ZhonTai.Admin.Domain;
 using ZhonTai.Admin.Domain.Org;
+using ZhonTai.Admin.Domain.RoleOrg;
 
 namespace ZhonTai.Admin.Services.Role;
 
@@ -26,10 +27,9 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
 {
     private IRoleRepository _roleRepository => LazyGetRequiredService<IRoleRepository>();
     private IUserRepository _userRepository => LazyGetRequiredService<IUserRepository>();
-
-    private IRepositoryBase<UserRoleEntity> _userRoleRepository => LazyGetRequiredService<IRepositoryBase<UserRoleEntity>>();
-    private IRepositoryBase<RolePermissionEntity> _rolePermissionRepository => LazyGetRequiredService<IRepositoryBase<RolePermissionEntity>>();
-    private IRepositoryBase<RoleOrgEntity> _roleOrgRepository => LazyGetRequiredService<IRepositoryBase<RoleOrgEntity>>();
+    private IUserRoleRepository _userRoleRepository => LazyGetRequiredService<IUserRoleRepository>();
+    private IRolePermissionRepository _rolePermissionRepository => LazyGetRequiredService<IRolePermissionRepository>();
+    private IRoleOrgRepository _roleOrgRepository => LazyGetRequiredService<IRoleOrgRepository>();
 
     public RoleService()
     {

+ 2 - 2
src/platform/ZhonTai.Admin/Services/TaskScheduler/TaskLogService.cs

@@ -1,5 +1,4 @@
 using System.Threading.Tasks;
-using ZhonTai.Admin.Core.Repositories;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Domain.Task.Dto;
 using ZhonTai.DynamicApi;
@@ -7,6 +6,7 @@ using ZhonTai.DynamicApi.Attributes;
 using Microsoft.AspNetCore.Mvc;
 using ZhonTai.Admin.Core.Consts;
 using FreeScheduler;
+using ZhonTai.Admin.Repositories;
 
 namespace ZhonTai.Admin.Services.TaskScheduler;
 
@@ -16,7 +16,7 @@ namespace ZhonTai.Admin.Services.TaskScheduler;
 [DynamicApi(Area = AdminConsts.AreaName)]
 public class TaskLogService : BaseService, ITaskLogService, IDynamicApi
 {
-    private IRepositoryBase<TaskLog> _taskLogRepository => LazyGetRequiredService<IRepositoryBase<TaskLog>>();
+    private ITaskLogRepository _taskLogRepository => LazyGetRequiredService<ITaskLogRepository>();
 
     public TaskLogService()
     {

+ 2 - 2
src/platform/ZhonTai.Admin/Services/TaskScheduler/TaskService.cs

@@ -10,8 +10,8 @@ using Microsoft.AspNetCore.Mvc;
 using ZhonTai.Admin.Core.Consts;
 using FreeScheduler;
 using Microsoft.AspNetCore.Mvc.ModelBinding;
-using TaskStatus = FreeScheduler.TaskStatus;
 using ZhonTai.Common.Extensions;
+using ZhonTai.Admin.Repositories;
 
 namespace ZhonTai.Admin.Services.TaskScheduler;
 
@@ -21,7 +21,7 @@ namespace ZhonTai.Admin.Services.TaskScheduler;
 [DynamicApi(Area = AdminConsts.AreaName)]
 public class TaskService : BaseService, ITaskService, IDynamicApi
 {
-    private IRepositoryBase<TaskInfo> _taskInfoRepository => LazyGetRequiredService<IRepositoryBase<TaskInfo>>();
+    private ITaskRepository _taskInfoRepository => LazyGetRequiredService<ITaskRepository>();
 
     public TaskService()
     {

+ 5 - 6
src/platform/ZhonTai.Admin/Services/Tenant/TenantService.cs

@@ -2,7 +2,6 @@
 using System.Threading.Tasks;
 using Microsoft.AspNetCore.Mvc;
 using ZhonTai.Admin.Core.Attributes;
-using ZhonTai.Admin.Core.Repositories;
 using ZhonTai.Common.Helpers;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Domain.Role;
@@ -18,7 +17,7 @@ using ZhonTai.Admin.Core.Consts;
 using ZhonTai.Admin.Core.Configs;
 using ZhonTai.Admin.Domain.Org;
 using ZhonTai.Admin.Domain.UserStaff;
-using ZhonTai.Admin.Domain;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Services.Tenant;
 
@@ -28,15 +27,15 @@ namespace ZhonTai.Admin.Services.Tenant;
 [DynamicApi(Area = AdminConsts.AreaName)]
 public class TenantService : BaseService, ITenantService, IDynamicApi
 {
+    private AppConfig _appConfig => LazyGetRequiredService<AppConfig>();
     private ITenantRepository _tenantRepository => LazyGetRequiredService<ITenantRepository>();
     private IRoleRepository _roleRepository => LazyGetRequiredService<IRoleRepository>();
     private IUserRepository _userRepository => LazyGetRequiredService<IUserRepository>();
     private IOrgRepository _orgRepository => LazyGetRequiredService<IOrgRepository>();
-    private IRepositoryBase<UserRoleEntity> _userRoleRepository => LazyGetRequiredService<IRepositoryBase<UserRoleEntity>>();
-    private IRepositoryBase<RolePermissionEntity> _rolePermissionRepository => LazyGetRequiredService<IRepositoryBase<RolePermissionEntity>>();
+    private IUserRoleRepository _userRoleRepository => LazyGetRequiredService<IUserRoleRepository>();
+    private IRolePermissionRepository _rolePermissionRepository => LazyGetRequiredService<IRolePermissionRepository>();
     private IUserStaffRepository _userStaffRepository => LazyGetRequiredService<IUserStaffRepository>();
-    private IRepositoryBase<UserOrgEntity> _userOrgRepository => LazyGetRequiredService<IRepositoryBase<UserOrgEntity>>();
-    private AppConfig _appConfig => LazyGetRequiredService<AppConfig>();
+    private IUserOrgRepository _userOrgRepository => LazyGetRequiredService<IUserOrgRepository>();
 
     public TenantService()
     {

+ 6 - 5
src/platform/ZhonTai.Admin/Services/User/UserService.cs

@@ -23,12 +23,13 @@ using ZhonTai.DynamicApi.Attributes;
 using ZhonTai.Admin.Core.Helpers;
 using ZhonTai.Admin.Core.Consts;
 using ZhonTai.Admin.Domain.UserStaff;
-using ZhonTai.Admin.Domain;
 using ZhonTai.Admin.Domain.Org;
 using System.Data;
 using ZhonTai.Admin.Domain.TenantPermission;
 using FreeSql;
 using ZhonTai.Admin.Domain.User.Dto;
+using ZhonTai.Admin.Domain.RoleOrg;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Services.User;
 
@@ -44,9 +45,9 @@ public class UserService : BaseService, IUserService, IDynamicApi
     private ITenantRepository _tenantRepository => LazyGetRequiredService<ITenantRepository>();
     private IApiRepository _apiRepository => LazyGetRequiredService<IApiRepository>();
     private IUserStaffRepository _staffRepository => LazyGetRequiredService<IUserStaffRepository>();
-    private IRepositoryBase<UserRoleEntity> _userRoleRepository => LazyGetRequiredService<IRepositoryBase<UserRoleEntity>>();
-    private IRepositoryBase<RoleOrgEntity> _roleOrgRepository => LazyGetRequiredService<IRepositoryBase<RoleOrgEntity>>();
-    private IRepositoryBase<UserOrgEntity> _userOrgRepository => LazyGetRequiredService<IRepositoryBase<UserOrgEntity>>();
+    private IUserRoleRepository _userRoleRepository => LazyGetRequiredService<IUserRoleRepository>();
+    private IRoleOrgRepository _roleOrgRepository => LazyGetRequiredService<IRoleOrgRepository>();
+    private IUserOrgRepository _userOrgRepository => LazyGetRequiredService<IUserOrgRepository>();
 
     public UserService()
     {
@@ -247,7 +248,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
             if (User.TenantAdmin)
             {
                 var cloud = LazyGetRequiredService<FreeSqlCloud>();
-                var db = cloud.Use(DbKeys.MasterDb);
+                var db = cloud.Use(DbKeys.AppDb);
 
                 return await db.Select<ApiEntity>()
                 .Where(a => db.Select<TenantPermissionEntity, PermissionApiEntity>()

+ 3 - 3
src/platform/ZhonTai.Admin/Services/View/ViewService.cs

@@ -17,11 +17,11 @@ namespace ZhonTai.Admin.Services.View;
 [DynamicApi(Area = AdminConsts.AreaName)]
 public class ViewService : BaseService, IViewService, IDynamicApi
 {
-    private readonly IViewRepository _viewRepository;
+    private IViewRepository _viewRepository => LazyGetRequiredService<IViewRepository>();
 
-    public ViewService(IViewRepository moduleRepository)
+    public ViewService()
     {
-        _viewRepository = moduleRepository;
+
     }
 
     /// <summary>

+ 20 - 15
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -34,6 +34,11 @@
             事务隔离级别
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Core.Attributes.TransactionAttribute.DbKey">
+            <summary>
+            数据库注册键
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Core.Attributes.ValidateInputAttribute">
             <summary>
             输入模型验证
@@ -706,14 +711,9 @@
             数据库键名
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Core.Consts.DbKeys.MasterDb">
-            <summary>
-            主库
-            </summary>
-        </member>
-        <member name="P:ZhonTai.Admin.Core.Consts.DbKeys.AdminDb">
+        <member name="P:ZhonTai.Admin.Core.Consts.DbKeys.AppDb">
             <summary>
-            admin库
+            数据库注册键
             </summary>
         </member>
         <member name="T:ZhonTai.Admin.Core.Consts.FilterNames">
@@ -842,7 +842,7 @@
             <returns></returns>
             <exception cref="T:System.Exception"></exception>
         </member>
-        <member name="M:ZhonTai.Admin.Core.Db.DBServiceCollectionExtensions.RegisterDb(FreeSql.FreeSqlCloud,ZhonTai.Admin.Core.Auth.IUser,ZhonTai.Admin.Core.Configs.DbConfig,ZhonTai.Admin.Core.Configs.AppConfig,ZhonTai.Admin.Core.Startup.HostAppOptions)">
+        <member name="M:ZhonTai.Admin.Core.Db.DbHelper.RegisterDb(FreeSql.FreeSqlCloud,ZhonTai.Admin.Core.Auth.IUser,ZhonTai.Admin.Core.Configs.DbConfig,ZhonTai.Admin.Core.Configs.AppConfig,ZhonTai.Admin.Core.Startup.HostAppOptions)">
             <summary>
             注册数据库
             </summary>
@@ -1578,12 +1578,12 @@
         </member>
         <member name="P:ZhonTai.Admin.Core.Startup.HostAppOptions.ConfigureFreeSqlBuilder">
             <summary>
-            配置FreeSql构建器
+            配置主库FreeSql构建器
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Core.Startup.HostAppOptions.ConfigureFreeSql">
             <summary>
-            配置FreeSql
+            配置主库FreeSql
             </summary>
         </member>
         <member name="P:ZhonTai.Admin.Core.Startup.HostAppOptions.ConfigureDynamicApi">
@@ -1596,6 +1596,11 @@
             配置雪花漂移算法
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Core.Startup.HostAppOptions.CustomInitDb">
+            <summary>
+            自定义数据库初始化
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.Api.ApiEntity">
             <summary>
             接口管理
@@ -2447,27 +2452,27 @@
             租户
             </summary>
         </member>
-        <member name="T:ZhonTai.Admin.Domain.UserOrgEntity">
+        <member name="T:ZhonTai.Admin.Domain.UserOrg.UserOrgEntity">
             <summary>
             用户所属部门
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.UserOrgEntity.UserId">
+        <member name="P:ZhonTai.Admin.Domain.UserOrg.UserOrgEntity.UserId">
             <summary>
             用户Id
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.UserOrgEntity.User">
+        <member name="P:ZhonTai.Admin.Domain.UserOrg.UserOrgEntity.User">
             <summary>
             用户
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.UserOrgEntity.OrgId">
+        <member name="P:ZhonTai.Admin.Domain.UserOrg.UserOrgEntity.OrgId">
             <summary>
             部门Id
             </summary>
         </member>
-        <member name="P:ZhonTai.Admin.Domain.UserOrgEntity.Org">
+        <member name="P:ZhonTai.Admin.Domain.UserOrg.UserOrgEntity.Org">
             <summary>
             部门
             </summary>

+ 22 - 0
src/tests/ZhonTai.Tests/Repositories/ApiRepositoryTest.cs

@@ -0,0 +1,22 @@
+using Xunit;
+using ZhonTai.Admin.Domain.Api;
+
+namespace ZhonTai.Tests.Repositories;
+
+public class ApiRepositoryTest : BaseTest
+{
+    private readonly IApiRepository _apiRepository;
+
+    public ApiRepositoryTest()
+    {
+        _apiRepository = GetService<IApiRepository>();
+    }
+
+    [Fact]
+    public async void GetAsync()
+    {
+        var id = 161227167658053;
+        var user = await _apiRepository.GetAsync(a => a.Id == id);
+        Assert.Equal(id, user?.Id);
+    }
+}

+ 0 - 23
src/tests/ZhonTai.Tests/Repositories/RepositoryBaseTest.cs

@@ -1,23 +0,0 @@
-using Xunit;
-using ZhonTai.Admin.Core.Repositories;
-using ZhonTai.Admin.Domain.Api;
-
-namespace ZhonTai.Tests.Repositories;
-
-public class RepositoryBaseTest : BaseTest
-{
-    private readonly IRepositoryBase<ApiEntity> _repositoryBase;
-
-    public RepositoryBaseTest()
-    {
-        _repositoryBase = GetService<IRepositoryBase<ApiEntity>>();
-    }
-
-    [Fact]
-    public async void GetAsyncByExpression()
-    {
-        var id = 161227167658053;
-        var user = await _repositoryBase.GetAsync(a => a.Id == id);
-        Assert.Equal(id, user?.Id);
-    }
-}