Parcourir la source

更新admin事务

zhontai il y a 2 ans
Parent
commit
6caf9cf930
38 fichiers modifiés avec 163 ajouts et 125 suppressions
  1. 20 1
      src/platform/ZhonTai.Admin/Core/Attributes/TransactionAttribute.cs
  2. 3 7
      src/platform/ZhonTai.Admin/Core/Db/DBServiceCollectionExtensions.cs
  3. 10 4
      src/platform/ZhonTai.Admin/Core/Db/Transaction/TransactionAsyncInterceptor.cs
  4. 8 1
      src/platform/ZhonTai.Admin/Core/Repositories/RepositoryBase.cs
  5. 0 14
      src/platform/ZhonTai.Admin/Domain/Org/IOrgRepository.cs
  6. 16 1
      src/platform/ZhonTai.Admin/Domain/UserOrg/IUserOrgRepository.cs
  7. 1 1
      src/platform/ZhonTai.Admin/Repositories/Api/ApiRepository.cs
  8. 1 1
      src/platform/ZhonTai.Admin/Repositories/Dictionary/DictionaryRepository.cs
  9. 1 1
      src/platform/ZhonTai.Admin/Repositories/DictionaryType/DictionaryTypeRepository.cs
  10. 1 1
      src/platform/ZhonTai.Admin/Repositories/Document/DocumentRepository.cs
  11. 1 1
      src/platform/ZhonTai.Admin/Repositories/DocumentImage/DocumentImageRepository.cs
  12. 1 1
      src/platform/ZhonTai.Admin/Repositories/LoginLog/LoginLogRepository.cs
  13. 1 1
      src/platform/ZhonTai.Admin/Repositories/OprationLog/OprationLogRepository.cs
  14. 2 25
      src/platform/ZhonTai.Admin/Repositories/Org/OrgRepository.cs
  15. 1 1
      src/platform/ZhonTai.Admin/Repositories/Permission/PermissionRepository.cs
  16. 1 1
      src/platform/ZhonTai.Admin/Repositories/PermissionApi/PermissionApiRepository.cs
  17. 1 1
      src/platform/ZhonTai.Admin/Repositories/Role/RoleRepository.cs
  18. 1 1
      src/platform/ZhonTai.Admin/Repositories/RoleOrg/RoleOrgRepository.cs
  19. 1 1
      src/platform/ZhonTai.Admin/Repositories/RolePermission/RolePermissionRepository.cs
  20. 1 1
      src/platform/ZhonTai.Admin/Repositories/Task/TaskLogRepository.cs
  21. 1 1
      src/platform/ZhonTai.Admin/Repositories/Task/TaskRepository.cs
  22. 2 2
      src/platform/ZhonTai.Admin/Repositories/Tenant/TenantRepository.cs
  23. 1 1
      src/platform/ZhonTai.Admin/Repositories/TenantPermission/TenantPermissionRepository.cs
  24. 3 4
      src/platform/ZhonTai.Admin/Repositories/User/UserRepository.cs
  25. 24 2
      src/platform/ZhonTai.Admin/Repositories/UserOrg/UserOrgRepository.cs
  26. 1 1
      src/platform/ZhonTai.Admin/Repositories/UserRole/UserRoleRepository.cs
  27. 1 1
      src/platform/ZhonTai.Admin/Repositories/UserStaff/UserStaffRepository.cs
  28. 1 1
      src/platform/ZhonTai.Admin/Repositories/View/ViewRepositoryRepository.cs
  29. 1 1
      src/platform/ZhonTai.Admin/Services/Api/ApiService.cs
  30. 3 3
      src/platform/ZhonTai.Admin/Services/DictionaryType/DictionaryTypeService.cs
  31. 4 0
      src/platform/ZhonTai.Admin/Services/LoginLog/LoginLogService.cs
  32. 8 6
      src/platform/ZhonTai.Admin/Services/Org/OrgService.cs
  33. 5 5
      src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs
  34. 4 4
      src/platform/ZhonTai.Admin/Services/Role/RoleService.cs
  35. 4 4
      src/platform/ZhonTai.Admin/Services/Tenant/TenantService.cs
  36. 6 6
      src/platform/ZhonTai.Admin/Services/User/UserService.cs
  37. 1 1
      src/platform/ZhonTai.Admin/Services/View/ViewService.cs
  38. 21 16
      src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

+ 20 - 1
src/platform/ZhonTai.Admin/Core/Attributes/TransactionAttribute.cs

@@ -24,6 +24,25 @@ public class TransactionAttribute : Attribute
     /// <summary>
     /// 数据库注册键
     /// </summary>
-    public string DbKey { get; set; } = DbKeys.AppDb;
+    public string DbKey { get; set; }
 
+    public TransactionAttribute()
+    {
+    }
+
+    public TransactionAttribute(string dbKey)
+    {
+        DbKey = dbKey;
+    }
+}
+
+/// <summary>
+/// 启用事物
+/// </summary>
+[AttributeUsage(AttributeTargets.Method, Inherited = true)]
+public class AppTransactionAttribute : TransactionAttribute
+{
+    public AppTransactionAttribute():base(DbKeys.AppDb)
+    {
+    }
 }

+ 3 - 7
src/platform/ZhonTai.Admin/Core/Db/DBServiceCollectionExtensions.cs

@@ -1,19 +1,12 @@
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Hosting;
-using System;
-using StackExchange.Profiling;
 using FreeSql;
 using ZhonTai.Common.Helpers;
 using ZhonTai.Admin.Core.Configs;
-using ZhonTai.Admin.Core.Entities;
 using ZhonTai.Admin.Core.Auth;
 using ZhonTai.Admin.Core.Startup;
-using ZhonTai.Admin.Core.Consts;
-using System.Linq;
 using System.Collections.Concurrent;
 using System.Reflection;
-using ZhonTai.Admin.Domain.User;
-using ZhonTai.Admin.Domain.Role;
 using ZhonTai.Admin.Core.Db.Transaction;
 
 namespace ZhonTai.Admin.Core.Db;
@@ -47,6 +40,9 @@ public static class DBServiceCollectionExtensions
         services.AddSingleton<IFreeSql>(freeSqlCloud);
         services.AddSingleton(freeSqlCloud);
         services.AddScoped<UnitOfWorkManagerCloud>();
+        //定义基础仓储主库
+        var fsql = freeSqlCloud.Use(dbConfig.Key);
+        services.AddSingleton(provider => fsql);
     }
 
     /// <summary>

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

@@ -4,7 +4,7 @@ using System.Threading.Tasks;
 using Castle.DynamicProxy;
 using FreeSql;
 using ZhonTai.Admin.Core.Attributes;
-using ZhonTai.Admin.Core.Consts;
+using ZhonTai.Admin.Core.Configs;
 using ZhonTai.Admin.Core.Dto;
 
 namespace ZhonTai.Admin.Core.Db.Transaction;
@@ -13,10 +13,12 @@ public class TransactionAsyncInterceptor : IAsyncInterceptor
 {
     private IUnitOfWork _unitOfWork;
     private readonly UnitOfWorkManagerCloud _unitOfWorkManagerCloud;
+    private readonly DbConfig _dbConfig;
 
-    public TransactionAsyncInterceptor(UnitOfWorkManagerCloud unitOfWorkManagerCloud)
+    public TransactionAsyncInterceptor(UnitOfWorkManagerCloud unitOfWorkManagerCloud, DbConfig dbConfig)
     {
         _unitOfWorkManagerCloud = unitOfWorkManagerCloud;
+        _dbConfig = dbConfig;
     }
 
     private bool TryBegin(IInvocation invocation)
@@ -26,8 +28,12 @@ public class TransactionAsyncInterceptor : IAsyncInterceptor
         if (attribute is TransactionAttribute transaction)
         {
             IsolationLevel? isolationLevel = transaction.IsolationLevel == 0 ? null : transaction.IsolationLevel;
-
-            _unitOfWork = _unitOfWorkManagerCloud.Begin(transaction.DbKey, transaction.Propagation, isolationLevel);
+            var dbKey = transaction.DbKey;
+            if (dbKey.IsNull())
+            {
+                dbKey = _dbConfig.Key;
+            }
+            _unitOfWork = _unitOfWorkManagerCloud.Begin(dbKey, transaction.Propagation, isolationLevel);
             return true;
         }
 

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

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

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

@@ -12,18 +12,4 @@ public interface IOrgRepository : IRepositoryBase<OrgEntity>
     /// <param name="id"></param>
     /// <returns></returns>
     Task<List<long>> GetChildIdListAsync(long id);
-
-    /// <summary>
-    /// 本部门下是否有员工
-    /// </summary>
-    /// <param name="id"></param>
-    /// <returns></returns>
-    Task<bool> HasUser(long id);
-
-    /// <summary>
-    /// 部门列表下是否有员工
-    /// </summary>
-    /// <param name="idList"></param>
-    /// <returns></returns>
-    Task<bool> HasUser(List<long> idList);
 }

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

@@ -1,7 +1,22 @@
-using ZhonTai.Admin.Core.Repositories;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using ZhonTai.Admin.Core.Repositories;
 
 namespace ZhonTai.Admin.Domain.UserOrg;
 
 public interface IUserOrgRepository : IRepositoryBase<UserOrgEntity>
 {
+    /// <summary>
+    /// 本部门下是否有员工
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    Task<bool> HasUser(long id);
+
+    /// <summary>
+    /// 部门列表下是否有员工
+    /// </summary>
+    /// <param name="idList"></param>
+    /// <returns></returns>
+    Task<bool> HasUser(List<long> idList);
 }

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.Api;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class ApiRepository : RepositoryBase<ApiEntity>, IApiRepository
+public class ApiRepository : AppRepositoryBase<ApiEntity>, IApiRepository
 {
     public ApiRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.Dictionary;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class DictionaryRepository : RepositoryBase<DictionaryEntity>, IDictionaryRepository
+public class DictionaryRepository : AppRepositoryBase<DictionaryEntity>, IDictionaryRepository
 {
     public DictionaryRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.DictionaryType;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class DictionaryTypeRepository : RepositoryBase<DictionaryTypeEntity>, IDictionaryTypeRepository
+public class DictionaryTypeRepository : AppRepositoryBase<DictionaryTypeEntity>, IDictionaryTypeRepository
 {
     public DictionaryTypeRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.Document;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class DocumentRepository : RepositoryBase<DocumentEntity>, IDocumentRepository
+public class DocumentRepository : AppRepositoryBase<DocumentEntity>, IDocumentRepository
 {
     public DocumentRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.DocumentImage;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class DocumentImageRepository : RepositoryBase<DocumentImageEntity>, IDocumentImageRepository
+public class DocumentImageRepository : AppRepositoryBase<DocumentImageEntity>, IDocumentImageRepository
 {
     public DocumentImageRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.LoginLog;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class LoginLogRepository : RepositoryBase<LoginLogEntity>, ILoginLogRepository
+public class LoginLogRepository : AppRepositoryBase<LoginLogEntity>, ILoginLogRepository
 {
     public LoginLogRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.OprationLog;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class OprationLogRepository : RepositoryBase<OprationLogEntity>, IOprationLogRepository
+public class OprationLogRepository : AppRepositoryBase<OprationLogEntity>, IOprationLogRepository
 {
     public OprationLogRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -3,16 +3,13 @@ using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Db.Transaction;
 using ZhonTai.Admin.Core.Repositories;
 using ZhonTai.Admin.Domain.Org;
-using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class OrgRepository : RepositoryBase<OrgEntity>, IOrgRepository
+public class OrgRepository : AppRepositoryBase<OrgEntity>, IOrgRepository
 {
-    private readonly IRepositoryBase<UserOrgEntity> _userOrgRepository;
-    public OrgRepository(UnitOfWorkManagerCloud uowm, IRepositoryBase<UserOrgEntity> userOrgRepository) : base(uowm)
+    public OrgRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {
-        _userOrgRepository = userOrgRepository;
     }
 
     /// <summary>
@@ -27,24 +24,4 @@ public class OrgRepository : RepositoryBase<OrgEntity>, IOrgRepository
         .AsTreeCte()
         .ToListAsync(a => a.Id);
     }
-
-    /// <summary>
-    /// 本部门下是否有员工
-    /// </summary>
-    /// <param name="id"></param>
-    /// <returns></returns>
-    public async Task<bool> HasUser(long id)
-    {
-        return await _userOrgRepository.Select.Where(a => a.OrgId == id).AnyAsync();
-    }
-
-    /// <summary>
-    /// 部门列表下是否有员工
-    /// </summary>
-    /// <param name="idList"></param>
-    /// <returns></returns>
-    public async Task<bool> HasUser(List<long> idList)
-    {
-        return await _userOrgRepository.Select.Where(a => idList.Contains(a.OrgId)).AnyAsync();
-    }
 }

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.Permission;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class PermissionRepository : RepositoryBase<PermissionEntity>, IPermissionRepository
+public class PermissionRepository : AppRepositoryBase<PermissionEntity>, IPermissionRepository
 {
     public PermissionRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.PermissionApi;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class PermissionApiRepository : RepositoryBase<PermissionApiEntity>, IPermissionApiRepository
+public class PermissionApiRepository : AppRepositoryBase<PermissionApiEntity>, IPermissionApiRepository
 {
     public PermissionApiRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.Role;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class RoleRepository : RepositoryBase<RoleEntity>, IRoleRepository
+public class RoleRepository : AppRepositoryBase<RoleEntity>, IRoleRepository
 {
     public RoleRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -5,7 +5,7 @@ using ZhonTai.Admin.Domain.RoleOrg;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class RoleOrgRepository : RepositoryBase<RoleOrgEntity>, IRoleOrgRepository
+public class RoleOrgRepository : AppRepositoryBase<RoleOrgEntity>, IRoleOrgRepository
 {
     public RoleOrgRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.RolePermission;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class RolePermissionRepository : RepositoryBase<RolePermissionEntity>, IRolePermissionRepository
+public class RolePermissionRepository : AppRepositoryBase<RolePermissionEntity>, IRolePermissionRepository
 {
     public RolePermissionRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Core.Repositories;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class TaskLogRepository : RepositoryBase<TaskLog>, ITaskLogRepository
+public class TaskLogRepository : AppRepositoryBase<TaskLog>, ITaskLogRepository
 {
     public TaskLogRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Core.Repositories;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class TaskRepository : RepositoryBase<TaskInfo>, ITaskRepository
+public class TaskRepository : AppRepositoryBase<TaskInfo>, ITaskRepository
 {
     public TaskRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -5,9 +5,9 @@ using ZhonTai.Admin.Domain.Tenant;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class TenantRepository : RepositoryBase<TenantEntity>, ITenantRepository
+public class TenantRepository : AppRepositoryBase<TenantEntity>, ITenantRepository
 {
-    public TenantRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AppDb, muowm)
+    public TenantRepository(UnitOfWorkManagerCloud muowm) : base(muowm)
     {
     }
 }

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.TenantPermission;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class TenantPermissionRepository : RepositoryBase<TenantPermissionEntity>, ITenantPermissionRepository
+public class TenantPermissionRepository : AppRepositoryBase<TenantPermissionEntity>, ITenantPermissionRepository
 {
     public TenantPermissionRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -1,13 +1,12 @@
-using ZhonTai.Admin.Core.Consts;
-using ZhonTai.Admin.Core.Db.Transaction;
+using ZhonTai.Admin.Core.Db.Transaction;
 using ZhonTai.Admin.Core.Repositories;
 using ZhonTai.Admin.Domain.User;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class UserRepository : RepositoryBase<UserEntity>, IUserRepository
+public class UserRepository : AppRepositoryBase<UserEntity>, IUserRepository
 {
-    public UserRepository(UnitOfWorkManagerCloud muowm) : base(DbKeys.AppDb, muowm)
+    public UserRepository(UnitOfWorkManagerCloud muowm) : base(muowm)
     {
 
     }

+ 24 - 2
src/platform/ZhonTai.Admin/Repositories/UserOrg/UserOrgRepository.cs

@@ -1,13 +1,35 @@
-using ZhonTai.Admin.Core.Db.Transaction;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+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 class UserOrgRepository : AppRepositoryBase<UserOrgEntity>, IUserOrgRepository
 {
     public UserOrgRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {
+        
+    }
 
+    /// <summary>
+    /// 本部门下是否有员工
+    /// </summary>
+    /// <param name="id"></param>
+    /// <returns></returns>
+    public async Task<bool> HasUser(long id)
+    {
+        return await Select.Where(a => a.OrgId == id).AnyAsync();
+    }
+
+    /// <summary>
+    /// 部门列表下是否有员工
+    /// </summary>
+    /// <param name="idList"></param>
+    /// <returns></returns>
+    public async Task<bool> HasUser(List<long> idList)
+    {
+        return await Select.Where(a => idList.Contains(a.OrgId)).AnyAsync();
     }
 }

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.UserRole;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class UserRoleRepository : RepositoryBase<UserRoleEntity>, IUserRoleRepository
+public class UserRoleRepository : AppRepositoryBase<UserRoleEntity>, IUserRoleRepository
 {
     public UserRoleRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.UserStaff;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class UserStaffRepository : RepositoryBase<UserStaffEntity>, IUserStaffRepository
+public class UserStaffRepository : AppRepositoryBase<UserStaffEntity>, IUserStaffRepository
 {
     public UserStaffRepository(UnitOfWorkManagerCloud uowm) : base(uowm)
     {

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

@@ -4,7 +4,7 @@ using ZhonTai.Admin.Domain.View;
 
 namespace ZhonTai.Admin.Repositories;
 
-public class ViewRepository : RepositoryBase<ViewEntity>, IViewRepository
+public class ViewRepository : AppRepositoryBase<ViewEntity>, IViewRepository
 {
     public ViewRepository(UnitOfWorkManagerCloud muowm) : base(muowm)
     {

+ 1 - 1
src/platform/ZhonTai.Admin/Services/Api/ApiService.cs

@@ -159,7 +159,7 @@ public class ApiService : BaseService, IApiService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> SyncAsync(ApiSyncInput input)
     {
         //查询所有api

+ 3 - 3
src/platform/ZhonTai.Admin/Services/DictionaryType/DictionaryTypeService.cs

@@ -105,7 +105,7 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> DeleteAsync(long id)
     {
         //删除字典数据
@@ -122,7 +122,7 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
     {
         await _dictionaryRepository.SoftDeleteAsync(a => a.DictionaryTypeId == id);
@@ -136,7 +136,7 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
     {
         await _dictionaryRepository.SoftDeleteAsync(a => ids.Contains(a.DictionaryTypeId));

+ 4 - 0
src/platform/ZhonTai.Admin/Services/LoginLog/LoginLogService.cs

@@ -9,6 +9,8 @@ using ZhonTai.DynamicApi;
 using ZhonTai.DynamicApi.Attributes;
 using Microsoft.AspNetCore.Mvc;
 using ZhonTai.Admin.Core.Consts;
+using System.Linq;
+using System.Text.RegularExpressions;
 
 namespace ZhonTai.Admin.Services.LoginLog;
 
@@ -48,6 +50,8 @@ public class LoginLogService : BaseService, ILoginLogService, IDynamicApi
         .Page(input.CurrentPage, input.PageSize)
         .ToListAsync<LoginLogListOutput>();
 
+        //list = list.Select(a => a.IP = Regex.Replace(a.IP, "*"));
+
         var data = new PageOutput<LoginLogListOutput>()
         {
             List = list,

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

@@ -8,6 +8,7 @@ using ZhonTai.DynamicApi.Attributes;
 using ZhonTai.DynamicApi;
 using ZhonTai.Admin.Core.Attributes;
 using ZhonTai.Admin.Domain.RoleOrg;
+using ZhonTai.Admin.Domain.UserOrg;
 
 namespace ZhonTai.Admin.Services.Org;
 
@@ -18,6 +19,7 @@ namespace ZhonTai.Admin.Services.Org;
 public class OrgService : BaseService, IOrgService, IDynamicApi
 {
     private IOrgRepository _orgRepository => LazyGetRequiredService<IOrgRepository>();
+    private IUserOrgRepository _userOrgRepository => LazyGetRequiredService<IUserOrgRepository>();
     private IRoleOrgRepository _roleOrgRepository => LazyGetRequiredService<IRoleOrgRepository>();
 
     public OrgService()
@@ -127,18 +129,18 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public async Task<IResultOutput> DeleteAsync(long id)
     {
         //本部门下是否有员工
-        if(await _orgRepository.HasUser(id))
+        if(await _userOrgRepository.HasUser(id))
         {
             return ResultOutput.NotOk($"当前部门有员工无法删除");
         }
 
         var orgIdList = await _orgRepository.GetChildIdListAsync(id);
         //本部门的下级部门下是否有员工
-        if (await _orgRepository.HasUser(orgIdList))
+        if (await _userOrgRepository.HasUser(orgIdList))
         {
             return ResultOutput.NotOk($"本部门的下级部门有员工无法删除");
         }
@@ -159,18 +161,18 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public async Task<IResultOutput> SoftDeleteAsync(long id)
     {
         //本部门下是否有员工
-        if (await _orgRepository.HasUser(id))
+        if (await _userOrgRepository.HasUser(id))
         {
             return ResultOutput.NotOk($"当前部门有员工无法删除");
         }
 
         var orgIdList = await _orgRepository.GetChildIdListAsync(id);
         //本部门的下级部门下是否有员工
-        if (await _orgRepository.HasUser(orgIdList))
+        if (await _userOrgRepository.HasUser(orgIdList))
         {
             return ResultOutput.NotOk($"本部门的下级部门有员工无法删除");
         }

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

@@ -245,7 +245,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> AddDotAsync(PermissionAddDotInput input)
     {
         var entity = Mapper.Map<PermissionEntity>(input);
@@ -319,7 +319,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> UpdateDotAsync(PermissionUpdateDotInput input)
     {
         if (!(input?.Id > 0))
@@ -355,7 +355,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> DeleteAsync(long id)
     {
         //递归查询所有权限点
@@ -403,7 +403,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> AssignAsync(PermissionAssignInput input)
     {
         //分配权限的时候判断角色是否存在
@@ -463,7 +463,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> SaveTenantPermissionsAsync(PermissionSaveTenantPermissionsInput input)
     {
         //查询租户权限

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

@@ -259,7 +259,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> DeleteAsync(long id)
     {
         var userIds = await _userRoleRepository.Select.Where(a => a.RoleId == id).ToListAsync(a => a.UserId);
@@ -284,7 +284,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> BatchDeleteAsync(long[] ids)
     {
         var userIds = await _userRoleRepository.Select.Where(a => ids.Contains(a.RoleId)).ToListAsync(a => a.UserId);
@@ -308,7 +308,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
     {
         var userIds = await _userRoleRepository.Select.Where(a => a.RoleId == id).ToListAsync(a => a.UserId);
@@ -327,7 +327,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
     {
         var userIds = await _userRoleRepository.Select.Where(a => ids.Contains(a.RoleId)).ToListAsync(a => a.UserId);

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

@@ -84,7 +84,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> AddAsync(TenantAddInput input)
     {
         if (await _tenantRepository.Select.AnyAsync(a => a.Name == input.Name))
@@ -210,7 +210,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> DeleteAsync(long id)
     {
         //删除角色权限
@@ -242,7 +242,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
     {
         //删除用户
@@ -262,7 +262,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
     {
         //删除用户

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

@@ -272,7 +272,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> AddAsync(UserAddInput input)
     {
         if (await _userRepository.Select.AnyAsync(a => a.UserName == input.UserName))
@@ -343,7 +343,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> UpdateAsync(UserUpdateInput input)
     {
         var user = await _userRepository.GetAsync(input.Id);
@@ -457,7 +457,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> DeleteAsync(long id)
     {
         var user = await _userRepository.Select.WhereDynamic(id).ToOneAsync(a => new { a.Type });
@@ -490,7 +490,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> BatchDeleteAsync(long[] ids)
     {
         var admin = await _userRepository.Select.Where(a => ids.Contains(a.Id) && 
@@ -523,7 +523,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
     {
         var user = await _userRepository.Select.WhereDynamic(id).ToOneAsync(a => new { a.Type });
@@ -552,7 +552,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
     {
         var admin = await _userRepository.Select.Where(a => ids.Contains(a.Id) && 

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

@@ -133,7 +133,7 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [Transaction]
+    [AppTransaction]
     public virtual async Task<IResultOutput> SyncAsync(ViewSyncInput input)
     {
         //查询所有视图

+ 21 - 16
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -39,6 +39,11 @@
             数据库注册键
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Core.Attributes.AppTransactionAttribute">
+            <summary>
+            启用事物
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Core.Attributes.ValidateInputAttribute">
             <summary>
             输入模型验证
@@ -2003,20 +2008,6 @@
             <param name="id"></param>
             <returns></returns>
         </member>
-        <member name="M:ZhonTai.Admin.Domain.Org.IOrgRepository.HasUser(System.Int64)">
-            <summary>
-            本部门下是否有员工
-            </summary>
-            <param name="id"></param>
-            <returns></returns>
-        </member>
-        <member name="M:ZhonTai.Admin.Domain.Org.IOrgRepository.HasUser(System.Collections.Generic.List{System.Int64})">
-            <summary>
-            部门列表下是否有员工
-            </summary>
-            <param name="idList"></param>
-            <returns></returns>
-        </member>
         <member name="T:ZhonTai.Admin.Domain.Org.OrgEntity">
             <summary>
             组织架构
@@ -2492,6 +2483,20 @@
             租户
             </summary>
         </member>
+        <member name="M:ZhonTai.Admin.Domain.UserOrg.IUserOrgRepository.HasUser(System.Int64)">
+            <summary>
+            本部门下是否有员工
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Domain.UserOrg.IUserOrgRepository.HasUser(System.Collections.Generic.List{System.Int64})">
+            <summary>
+            部门列表下是否有员工
+            </summary>
+            <param name="idList"></param>
+            <returns></returns>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.UserOrg.UserOrgEntity">
             <summary>
             用户所属部门
@@ -2904,14 +2909,14 @@
             <param name="id"></param>
             <returns></returns>
         </member>
-        <member name="M:ZhonTai.Admin.Repositories.OrgRepository.HasUser(System.Int64)">
+        <member name="M:ZhonTai.Admin.Repositories.UserOrgRepository.HasUser(System.Int64)">
             <summary>
             本部门下是否有员工
             </summary>
             <param name="id"></param>
             <returns></returns>
         </member>
-        <member name="M:ZhonTai.Admin.Repositories.OrgRepository.HasUser(System.Collections.Generic.List{System.Int64})">
+        <member name="M:ZhonTai.Admin.Repositories.UserOrgRepository.HasUser(System.Collections.Generic.List{System.Int64})">
             <summary>
             部门列表下是否有员工
             </summary>