0
0
Переглянути джерело

移除接口返回对象IResultOutput,统一返回ResultOutput<T>数据格式

zhontai 2 роки тому
батько
коміт
ceccccb1ad
50 змінених файлів з 539 додано та 742 видалено
  1. 6 6
      src/platform/ZhonTai.Admin/Core/Dto/ResultOutput.cs
  2. 6 8
      src/platform/ZhonTai.Admin/Core/Helpers/UploadHelper.cs
  3. 1 0
      src/platform/ZhonTai.Admin/Core/Validators/ValidateRequiredAttribute.cs
  4. 7 18
      src/platform/ZhonTai.Admin/Services/Api/ApiService.cs
  5. 4 4
      src/platform/ZhonTai.Admin/Services/Api/IApiService.cs
  6. 6 11
      src/platform/ZhonTai.Admin/Services/Auth/AuthService.cs
  7. 4 6
      src/platform/ZhonTai.Admin/Services/Cache/CacheService.cs
  8. 4 4
      src/platform/ZhonTai.Admin/Services/Cache/ICacheService.cs
  9. 15 31
      src/platform/ZhonTai.Admin/Services/Dictionary/DictionaryService.cs
  10. 6 1
      src/platform/ZhonTai.Admin/Services/Dictionary/Dto/DictionaryUpdateInput.cs
  11. 7 7
      src/platform/ZhonTai.Admin/Services/Dictionary/IDictionaryService.cs
  12. 12 24
      src/platform/ZhonTai.Admin/Services/DictionaryType/DictionaryTypeService.cs
  13. 6 1
      src/platform/ZhonTai.Admin/Services/DictionaryType/Dto/DictionaryTypeUpdateInput.cs
  14. 7 7
      src/platform/ZhonTai.Admin/Services/DictionaryType/IDictionaryTypeService.cs
  15. 49 99
      src/platform/ZhonTai.Admin/Services/Document/DocumentService.cs
  16. 6 1
      src/platform/ZhonTai.Admin/Services/Document/Dto/DocumentUpdateContentInput.cs
  17. 6 1
      src/platform/ZhonTai.Admin/Services/Document/Dto/DocumentUpdateGroupInput.cs
  18. 6 1
      src/platform/ZhonTai.Admin/Services/Document/Dto/DocumentUpdateMenuInput.cs
  19. 19 17
      src/platform/ZhonTai.Admin/Services/Document/IDocumentService.cs
  20. 2 2
      src/platform/ZhonTai.Admin/Services/LoginLog/ILoginLogService.cs
  21. 5 11
      src/platform/ZhonTai.Admin/Services/LoginLog/LoginLogService.cs
  22. 2 2
      src/platform/ZhonTai.Admin/Services/OprationLog/IOprationLogService.cs
  23. 5 5
      src/platform/ZhonTai.Admin/Services/OprationLog/OprationLogService.cs
  24. 9 8
      src/platform/ZhonTai.Admin/Services/Org/IOrgService.cs
  25. 6 1
      src/platform/ZhonTai.Admin/Services/Org/Input/OrgUpdateInput.cs
  26. 22 32
      src/platform/ZhonTai.Admin/Services/Org/OrgService.cs
  27. 6 1
      src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateApiInput.cs
  28. 6 1
      src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateDotInput.cs
  29. 6 1
      src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateGroupInput.cs
  30. 6 1
      src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateMenuInput.cs
  31. 21 23
      src/platform/ZhonTai.Admin/Services/Permission/IPermissionService.cs
  32. 50 97
      src/platform/ZhonTai.Admin/Services/Permission/PermissionService.cs
  33. 6 1
      src/platform/ZhonTai.Admin/Services/Role/Dto/RoleUpdateInput.cs
  34. 13 12
      src/platform/ZhonTai.Admin/Services/Role/IRoleService.cs
  35. 23 41
      src/platform/ZhonTai.Admin/Services/Role/RoleService.cs
  36. 4 1
      src/platform/ZhonTai.Admin/Services/TaskScheduler/Dto/TaskUpdateInput.cs
  37. 3 2
      src/platform/ZhonTai.Admin/Services/TaskScheduler/ITaskLogService.cs
  38. 8 8
      src/platform/ZhonTai.Admin/Services/TaskScheduler/ITaskService.cs
  39. 3 3
      src/platform/ZhonTai.Admin/Services/TaskScheduler/TaskLogService.cs
  40. 42 76
      src/platform/ZhonTai.Admin/Services/TaskScheduler/TaskService.cs
  41. 6 1
      src/platform/ZhonTai.Admin/Services/Tenant/Dto/TenantUpdateInput.cs
  42. 7 7
      src/platform/ZhonTai.Admin/Services/Tenant/ITenantService.cs
  43. 13 25
      src/platform/ZhonTai.Admin/Services/Tenant/TenantService.cs
  44. 3 0
      src/platform/ZhonTai.Admin/Services/User/Dto/UserUpdateInput.cs
  45. 17 13
      src/platform/ZhonTai.Admin/Services/User/IUserService.cs
  46. 36 60
      src/platform/ZhonTai.Admin/Services/User/UserService.cs
  47. 6 1
      src/platform/ZhonTai.Admin/Services/View/Dto/ViewUpdateInput.cs
  48. 10 10
      src/platform/ZhonTai.Admin/Services/View/IViewService.cs
  49. 16 35
      src/platform/ZhonTai.Admin/Services/View/ViewService.cs
  50. 0 14
      src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

+ 6 - 6
src/platform/ZhonTai.Admin/Core/Dto/ResultOutput.cs

@@ -68,7 +68,7 @@ public static partial class ResultOutput
     /// <param name="data">数据</param>
     /// <param name="msg">消息</param>
     /// <returns></returns>
-    public static IResultOutput Ok<T>(T data = default(T), string msg = null)
+    public static IResultOutput<T> Ok<T>(T data = default(T), string msg = null)
     {
         return new ResultOutput<T>().Ok(data, msg);
     }
@@ -77,7 +77,7 @@ public static partial class ResultOutput
     /// 成功
     /// </summary>
     /// <returns></returns>
-    public static IResultOutput Ok()
+    public static IResultOutput<string> Ok()
     {
         return Ok<string>();
     }
@@ -88,7 +88,7 @@ public static partial class ResultOutput
     /// <param name="msg">消息</param>
     /// <param name="data">数据</param>
     /// <returns></returns>
-    public static IResultOutput NotOk<T>(string msg = null, T data = default)
+    public static IResultOutput<T> NotOk<T>(string msg = null, T data = default)
     {
         return new ResultOutput<T>().NotOk(msg, data);
     }
@@ -98,7 +98,7 @@ public static partial class ResultOutput
     /// </summary>
     /// <param name="msg">消息</param>
     /// <returns></returns>
-    public static IResultOutput NotOk(string msg = null)
+    public static IResultOutput<string> NotOk(string msg = null)
     {
         return new ResultOutput<string>().NotOk(msg);
     }
@@ -118,7 +118,7 @@ public static partial class ResultOutput
     /// </summary>
     /// <param name="success"></param>
     /// <returns></returns>
-    public static IResultOutput Result<T>(bool success)
+    public static IResultOutput<T> Result<T>(bool success)
     {
         return success ? Ok<T>() : NotOk<T>();
     }
@@ -128,7 +128,7 @@ public static partial class ResultOutput
     /// </summary>
     /// <param name="success"></param>
     /// <returns></returns>
-    public static IResultOutput Result(bool success)
+    public static IResultOutput<string> Result(bool success)
     {
         return success ? Ok() : NotOk();
     }

+ 6 - 8
src/platform/ZhonTai.Admin/Core/Helpers/UploadHelper.cs

@@ -27,25 +27,23 @@ public class UploadHelper
     /// <param name="args"></param>
     /// <param name="cancellationToken"></param>
     /// <returns></returns>
-    public async Task<IResultOutput<FileInfo>> UploadAsync(IFormFile file, FileUploadConfig config, object args, CancellationToken cancellationToken = default)
-    {
-        var res = new ResultOutput<FileInfo>();
-
+    public async Task<FileInfo> UploadAsync(IFormFile file, FileUploadConfig config, object args, CancellationToken cancellationToken = default)
+    { 
         if (file == null || file.Length < 1)
         {
-            return res.NotOk("请上传文件!");
+            throw ResultOutput.Exception("请上传文件!");
         }
 
         //格式限制
         if (!config.ContentType.Contains(file.ContentType))
         {
-            return res.NotOk("文件格式错误");
+            throw ResultOutput.Exception("文件格式错误");
         }
 
         //大小限制
         if (!(file.Length <= config.MaxSize))
         {
-            return res.NotOk("文件过大");
+            throw ResultOutput.Exception("文件过大");
         }
 
         var fileInfo = new FileInfo(file.FileName, file.Length)
@@ -67,7 +65,7 @@ public class UploadHelper
 
         await SaveAsync(file, fileInfo.FilePath, cancellationToken);
 
-        return res.Ok(fileInfo);
+        return fileInfo;
     }
 
     /// <summary>

+ 1 - 0
src/platform/ZhonTai.Admin/Core/Validators/ValidateRequiredAttribute.cs

@@ -25,6 +25,7 @@ namespace ZhonTai.Admin.Core.Validators
                 Guid guid => guid != Guid.Empty,
                 long longValue => longValue > 0,
                 int intValue => intValue > 0,
+                string strValue => strValue.NotNull(),
                 _ => true
             };
 

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

@@ -113,15 +113,9 @@ public class ApiService : BaseService, IApiService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> DeleteAsync(long id)
+    public async Task DeleteAsync(long id)
     {
-        var result = false;
-        if (id > 0)
-        {
-            result = (await _apiRepository.DeleteAsync(m => m.Id == id)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        await _apiRepository.DeleteAsync(m => m.Id == id);
     }
 
     /// <summary>
@@ -130,10 +124,9 @@ public class ApiService : BaseService, IApiService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [HttpDelete]
-    public async Task<IResultOutput> SoftDeleteAsync(long id)
+    public async Task SoftDeleteAsync(long id)
     {
-        var result = await _apiRepository.SoftDeleteAsync(id);
-        return ResultOutput.Result(result);
+        await _apiRepository.SoftDeleteAsync(id);
     }
 
     /// <summary>
@@ -141,11 +134,9 @@ public class ApiService : BaseService, IApiService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
+    public async Task BatchSoftDeleteAsync(long[] ids)
     {
-        var result = await _apiRepository.SoftDeleteAsync(ids);
-
-        return ResultOutput.Result(result);
+        await _apiRepository.SoftDeleteAsync(ids);
     }
 
     /// <summary>
@@ -154,7 +145,7 @@ public class ApiService : BaseService, IApiService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> SyncAsync(ApiSyncInput input)
+    public virtual async Task SyncAsync(ApiSyncInput input)
     {
         //查询所有api
         var apis = await _apiRepository.Select.ToListAsync();
@@ -260,7 +251,5 @@ public class ApiService : BaseService, IApiService, IDynamicApi
         await _apiRepository.UpdateDiy.SetSource(apis)
         .UpdateColumns(a => new { a.ParentId, a.Label, a.HttpMethods, a.Description, a.Enabled })
         .ExecuteAffrowsAsync();
-
-        return ResultOutput.Ok();
     }
 }

+ 4 - 4
src/platform/ZhonTai.Admin/Services/Api/IApiService.cs

@@ -22,11 +22,11 @@ public interface IApiService
 
     Task UpdateAsync(ApiUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);
+    Task BatchSoftDeleteAsync(long[] ids);
 
-    Task<IResultOutput> SyncAsync(ApiSyncInput input);
+    Task SyncAsync(ApiSyncInput input);
 }

+ 6 - 11
src/platform/ZhonTai.Admin/Services/Auth/AuthService.cs

@@ -298,24 +298,19 @@ public class AuthService : BaseService, IAuthService, IDynamicApi
         var userClaims = jwtSecurityToken?.Claims?.ToArray();
         if (userClaims == null || userClaims.Length == 0)
         {
-            return ResultOutput.NotOk();
+            throw ResultOutput.Exception("无法解析token");
         }
 
         var refreshExpires = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.RefreshExpires)?.Value;
-        if (refreshExpires.IsNull())
+        if (refreshExpires.IsNull() || refreshExpires.ToLong() <= DateTime.Now.ToTimestamp())
         {
-            return ResultOutput.NotOk();
-        }
-
-        if (refreshExpires.ToLong() <= DateTime.Now.ToTimestamp())
-        {
-            return ResultOutput.NotOk("登录信息已过期");
+            throw ResultOutput.Exception("登录信息已过期");
         }
 
         var userId = userClaims.FirstOrDefault(a => a.Type == ClaimAttributes.UserId)?.Value;
         if (userId.IsNull())
         {
-            return ResultOutput.NotOk("登录信息已失效");
+            throw ResultOutput.Exception("登录信息已失效");
         }
 
         //验签
@@ -324,11 +319,11 @@ public class AuthService : BaseService, IAuthService, IDynamicApi
         var input = jwtSecurityToken.RawHeader + "." + jwtSecurityToken.RawPayload;
         if (jwtSecurityToken.RawSignature != JwtTokenUtilities.CreateEncodedSignature(input, signingCredentials))
         {
-            return ResultOutput.NotOk("验签失败");
+            throw ResultOutput.Exception("验签失败");
         }
 
         var output = await LazyGetRequiredService<IUserService>().GetLoginUserAsync(userId.ToLong());
-        string newToken = GetToken(output?.Data);
+        string newToken = GetToken(output);
         return new { token = newToken };
     }
 

+ 4 - 6
src/platform/ZhonTai.Admin/Services/Cache/CacheService.cs

@@ -8,7 +8,6 @@ using System.Reflection;
 using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Attributes;
 using ZhonTai.Admin.Core.Configs;
-using ZhonTai.Admin.Core.Dto;
 using ZhonTai.DynamicApi;
 using ZhonTai.DynamicApi.Attributes;
 using ZhonTai.Admin.Core.Consts;
@@ -29,9 +28,9 @@ public class CacheService : BaseService, ICacheService, IDynamicApi
     /// 查询列表
     /// </summary>
     /// <returns></returns>
-    public IResultOutput GetList()
+    public List<dynamic> GetList()
     {
-        var list = new List<object>();
+        var list = new List<dynamic>();
 
         var appConfig = LazyGetRequiredService<AppConfig>();
         Assembly[] assemblies = DependencyContext.Default.RuntimeLibraries
@@ -58,7 +57,7 @@ public class CacheService : BaseService, ICacheService, IDynamicApi
             }
         }
 
-        return ResultOutput.Ok(list);
+        return list;
     }
 
     /// <summary>
@@ -66,10 +65,9 @@ public class CacheService : BaseService, ICacheService, IDynamicApi
     /// </summary>
     /// <param name="cacheKey">缓存键</param>
     /// <returns></returns>
-    public async Task<IResultOutput> ClearAsync(string cacheKey)
+    public async Task ClearAsync(string cacheKey)
     {
         Logger.LogWarning($"{User.Id}.{User.UserName}清除缓存[{cacheKey}]");
         await Cache.DelByPatternAsync(cacheKey + "*");
-        return ResultOutput.Ok();
     }
 }

+ 4 - 4
src/platform/ZhonTai.Admin/Services/Cache/ICacheService.cs

@@ -1,5 +1,5 @@
-using System.Threading.Tasks;
-using ZhonTai.Admin.Core.Dto;
+using System.Collections.Generic;
+using System.Threading.Tasks;
 
 namespace ZhonTai.Admin.Services.Cache;
 
@@ -12,12 +12,12 @@ public interface ICacheService
     /// 缓存列表
     /// </summary>
     /// <returns></returns>
-    IResultOutput GetList();
+    List<dynamic> GetList();
 
     /// <summary>
     /// 清除缓存
     /// </summary>
     /// <param name="cacheKey"></param>
     /// <returns></returns>
-    Task<IResultOutput> ClearAsync(string cacheKey);
+    Task ClearAsync(string cacheKey);
 }

+ 15 - 31
src/platform/ZhonTai.Admin/Services/Dictionary/DictionaryService.cs

@@ -28,10 +28,10 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<DictionaryGetOutput> GetAsync(long id)
     {
         var result = await _dictionaryRepository.GetAsync<DictionaryGetOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -40,7 +40,7 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<DictionaryGetPageDto> input)
+    public async Task<PageOutput<DictionaryListOutput>> GetPageAsync(PageInput<DictionaryGetPageDto> input)
     {
         var key = input.Filter?.Name;
         var dictionaryTypeId = input.Filter?.DictionaryTypeId;
@@ -59,7 +59,7 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -67,11 +67,11 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddAsync(DictionaryAddInput input)
+    public async Task<long> AddAsync(DictionaryAddInput input)
     {
         var dictionary = Mapper.Map<DictionaryEntity>(input);
-        var id = (await _dictionaryRepository.InsertAsync(dictionary)).Id;
-        return ResultOutput.Result(id > 0);
+        await _dictionaryRepository.InsertAsync(dictionary);
+        return dictionary.Id;
     }
 
     /// <summary>
@@ -79,22 +79,16 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(DictionaryUpdateInput input)
+    public async Task UpdateAsync(DictionaryUpdateInput input)
     {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _dictionaryRepository.GetAsync(input.Id);
         if (!(entity?.Id > 0))
         {
-            return ResultOutput.NotOk("数据字典不存在!");
+            throw ResultOutput.Exception("数据字典不存在");
         }
 
         Mapper.Map(input, entity);
         await _dictionaryRepository.UpdateAsync(entity);
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -102,15 +96,9 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> DeleteAsync(long id)
+    public async Task DeleteAsync(long id)
     {
-        var result = false;
-        if (id > 0)
-        {
-            result = (await _dictionaryRepository.DeleteAsync(m => m.Id == id)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        await _dictionaryRepository.DeleteAsync(m => m.Id == id);
     }
 
     /// <summary>
@@ -118,11 +106,9 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> SoftDeleteAsync(long id)
+    public async Task SoftDeleteAsync(long id)
     {
-        var result = await _dictionaryRepository.SoftDeleteAsync(id);
-
-        return ResultOutput.Result(result);
+        await _dictionaryRepository.SoftDeleteAsync(id);
     }
 
     /// <summary>
@@ -130,10 +116,8 @@ public class DictionaryService : BaseService, IDictionaryService, IDynamicApi
     /// </summary>
     /// <param name="ids"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
+    public async Task BatchSoftDeleteAsync(long[] ids)
     {
-        var result = await _dictionaryRepository.SoftDeleteAsync(ids);
-
-        return ResultOutput.Result(result);
+        await _dictionaryRepository.SoftDeleteAsync(ids);
     }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Dictionary/Dto/DictionaryUpdateInput.cs

@@ -1,4 +1,7 @@
-namespace ZhonTai.Admin.Services.Dictionary.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Dictionary.Dto;
 
 /// <summary>
 /// 修改
@@ -8,5 +11,7 @@ public class DictionaryUpdateInput : DictionaryAddInput
     /// <summary>
     /// 主键Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择数据字典")]
     public long Id { get; set; }
 }

+ 7 - 7
src/platform/ZhonTai.Admin/Services/Dictionary/IDictionaryService.cs

@@ -10,17 +10,17 @@ namespace ZhonTai.Admin.Services.Dictionary;
 /// </summary>
 public partial interface IDictionaryService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<DictionaryGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetPageAsync(PageInput<DictionaryGetPageDto> input);
+    Task<PageOutput<DictionaryListOutput>> GetPageAsync(PageInput<DictionaryGetPageDto> input);
 
-    Task<IResultOutput> AddAsync(DictionaryAddInput input);
+    Task<long> AddAsync(DictionaryAddInput input);
 
-    Task<IResultOutput> UpdateAsync(DictionaryUpdateInput input);
+    Task UpdateAsync(DictionaryUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);
+    Task BatchSoftDeleteAsync(long[] ids);
 }

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

@@ -32,10 +32,10 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<DictionaryTypeGetOutput> GetAsync(long id)
     {
         var result = await _DictionaryTypeRepository.GetAsync<DictionaryTypeGetOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -44,7 +44,7 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<DictionaryTypeGetPageDto> input)
+    public async Task<PageOutput<DictionaryTypeListOutput>> GetPageAsync(PageInput<DictionaryTypeGetPageDto> input)
     {
         var key = input.Filter?.Name;
 
@@ -62,7 +62,7 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -70,11 +70,11 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddAsync(DictionaryTypeAddInput input)
+    public async Task<long> AddAsync(DictionaryTypeAddInput input)
     {
         var DictionaryType = Mapper.Map<DictionaryTypeEntity>(input);
-        var id = (await _DictionaryTypeRepository.InsertAsync(DictionaryType)).Id;
-        return ResultOutput.Result(id > 0);
+        await _DictionaryTypeRepository.InsertAsync(DictionaryType);
+        return DictionaryType.Id;
     }
 
     /// <summary>
@@ -82,22 +82,16 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(DictionaryTypeUpdateInput input)
+    public async Task UpdateAsync(DictionaryTypeUpdateInput input)
     {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _DictionaryTypeRepository.GetAsync(input.Id);
         if (!(entity?.Id > 0))
         {
-            return ResultOutput.NotOk("数据字典不存在!");
+            throw ResultOutput.Exception("数据字典不存在!");
         }
 
         Mapper.Map(input, entity);
         await _DictionaryTypeRepository.UpdateAsync(entity);
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -106,15 +100,13 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> DeleteAsync(long id)
+    public virtual async Task DeleteAsync(long id)
     {
         //删除字典数据
         await _dictionaryRepository.DeleteAsync(a => a.DictionaryTypeId == id);
 
         //删除字典类型
         await _DictionaryTypeRepository.DeleteAsync(a => a.Id == id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -123,12 +115,10 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
+    public virtual async Task SoftDeleteAsync(long id)
     {
         await _dictionaryRepository.SoftDeleteAsync(a => a.DictionaryTypeId == id);
         await _DictionaryTypeRepository.SoftDeleteAsync(id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -137,11 +127,9 @@ public class DictionaryTypeService : BaseService, IDictionaryTypeService, IDynam
     /// <param name="ids"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
+    public virtual async Task BatchSoftDeleteAsync(long[] ids)
     {
         await _dictionaryRepository.SoftDeleteAsync(a => ids.Contains(a.DictionaryTypeId));
         await _DictionaryTypeRepository.SoftDeleteAsync(ids);
-
-        return ResultOutput.Ok();
     }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/DictionaryType/Dto/DictionaryTypeUpdateInput.cs

@@ -1,4 +1,7 @@
-namespace ZhonTai.Admin.Services.DictionaryType.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.DictionaryType.Dto;
 
 /// <summary>
 /// 修改
@@ -8,5 +11,7 @@ public class DictionaryTypeUpdateInput : DictionaryTypeAddInput
     /// <summary>
     /// 主键Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择数据字典类型")]
     public long Id { get; set; }
 }

+ 7 - 7
src/platform/ZhonTai.Admin/Services/DictionaryType/IDictionaryTypeService.cs

@@ -10,17 +10,17 @@ namespace ZhonTai.Admin.Services.DictionaryType;
 /// </summary>
 public partial interface IDictionaryTypeService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<DictionaryTypeGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetPageAsync(PageInput<DictionaryTypeGetPageDto> input);
+    Task<PageOutput<DictionaryTypeListOutput>> GetPageAsync(PageInput<DictionaryTypeGetPageDto> input);
 
-    Task<IResultOutput> AddAsync(DictionaryTypeAddInput input);
+    Task<long> AddAsync(DictionaryTypeAddInput input);
 
-    Task<IResultOutput> UpdateAsync(DictionaryTypeUpdateInput input);
+    Task UpdateAsync(DictionaryTypeUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);
+    Task BatchSoftDeleteAsync(long[] ids);
 }

+ 49 - 99
src/platform/ZhonTai.Admin/Services/Document/DocumentService.cs

@@ -12,6 +12,8 @@ using ZhonTai.DynamicApi;
 using ZhonTai.DynamicApi.Attributes;
 using ZhonTai.Admin.Core.Helpers;
 using ZhonTai.Admin.Core.Consts;
+using System.Collections.Generic;
+using MySqlX.XDevAPI.Common;
 
 namespace ZhonTai.Admin.Services.Document;
 
@@ -33,27 +35,15 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
         _documentImageRepository = documentImageRepository;
     }
 
-    /// <summary>
-    /// 查询文档
-    /// </summary>
-    /// <param name="id"></param>
-    /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
-    {
-        var result = await _documentRepository.GetAsync(id);
-
-        return ResultOutput.Ok(result);
-    }
-
     /// <summary>
     /// 查询分组
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetGroupAsync(long id)
+    public async Task<DocumentGetGroupOutput> GetGroupAsync(long id)
     {
         var result = await _documentRepository.GetAsync<DocumentGetGroupOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -61,10 +51,10 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetMenuAsync(long id)
+    public async Task<DocumentGetMenuOutput> GetMenuAsync(long id)
     {
         var result = await _documentRepository.GetAsync<DocumentGetMenuOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -72,10 +62,10 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetContentAsync(long id)
+    public async Task<DocumentGetContentOutput> GetContentAsync(long id)
     {
         var result = await _documentRepository.GetAsync<DocumentGetContentOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -85,7 +75,7 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// <param name="start"></param>
     /// <param name="end"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetListAsync(string key, DateTime? start, DateTime? end)
+    public async Task<List<DocumentListOutput>> GetListAsync(string key, DateTime? start, DateTime? end)
     {
         if (end.HasValue)
         {
@@ -99,7 +89,7 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
             .OrderBy(a => a.Sort)
             .ToListAsync<DocumentListOutput>();
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -107,14 +97,14 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetImageListAsync(long id)
+    public async Task<List<string>> GetImageListAsync(long id)
     {
         var result = await _documentImageRepository.Select
             .Where(a => a.DocumentId == id)
             .OrderByDescending(a => a.Id)
             .ToListAsync(a => a.Url);
 
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -122,12 +112,12 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddGroupAsync(DocumentAddGroupInput input)
+    public async Task<long> AddGroupAsync(DocumentAddGroupInput input)
     {
         var entity = Mapper.Map<DocumentEntity>(input);
-        var id = (await _documentRepository.InsertAsync(entity)).Id;
+        await _documentRepository.InsertAsync(entity);
 
-        return ResultOutput.Result(id > 0);
+        return entity.Id;
     }
 
     /// <summary>
@@ -135,12 +125,12 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddMenuAsync(DocumentAddMenuInput input)
+    public async Task<long> AddMenuAsync(DocumentAddMenuInput input)
     {
         var entity = Mapper.Map<DocumentEntity>(input);
-        var id = (await _documentRepository.InsertAsync(entity)).Id;
+        await _documentRepository.InsertAsync(entity);
 
-        return ResultOutput.Result(id > 0);
+        return entity.Id;
     }
 
     /// <summary>
@@ -148,12 +138,12 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddImageAsync(DocumentAddImageInput input)
+    public async Task<long> AddImageAsync(DocumentAddImageInput input)
     {
         var entity = Mapper.Map<DocumentImageEntity>(input);
-        var id = (await _documentImageRepository.InsertAsync(entity)).Id;
+        await _documentImageRepository.InsertAsync(entity);
 
-        return ResultOutput.Result(id > 0);
+        return entity.Id;
     }
 
     /// <summary>
@@ -161,17 +151,11 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateGroupAsync(DocumentUpdateGroupInput input)
+    public async Task UpdateGroupAsync(DocumentUpdateGroupInput input)
     {
-        var result = false;
-        if (input != null && input.Id > 0)
-        {
-            var entity = await _documentRepository.GetAsync(input.Id);
-            entity = Mapper.Map(input, entity);
-            result = (await _documentRepository.UpdateAsync(entity)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        var entity = await _documentRepository.GetAsync(input.Id);
+        entity = Mapper.Map(input, entity);
+        await _documentRepository.UpdateAsync(entity);
     }
 
     /// <summary>
@@ -179,17 +163,11 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateMenuAsync(DocumentUpdateMenuInput input)
+    public async Task UpdateMenuAsync(DocumentUpdateMenuInput input)
     {
-        var result = false;
-        if (input != null && input.Id > 0)
-        {
-            var entity = await _documentRepository.GetAsync(input.Id);
-            entity = Mapper.Map(input, entity);
-            result = (await _documentRepository.UpdateAsync(entity)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        var entity = await _documentRepository.GetAsync(input.Id);
+        entity = Mapper.Map(input, entity);
+        await _documentRepository.UpdateAsync(entity);
     }
 
     /// <summary>
@@ -197,17 +175,11 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateContentAsync(DocumentUpdateContentInput input)
+    public async Task UpdateContentAsync(DocumentUpdateContentInput input)
     {
-        var result = false;
-        if (input != null && input.Id > 0)
-        {
-            var entity = await _documentRepository.GetAsync(input.Id);
-            entity = Mapper.Map(input, entity);
-            result = (await _documentRepository.UpdateAsync(entity)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        var entity = await _documentRepository.GetAsync(input.Id);
+        entity = Mapper.Map(input, entity);
+        await _documentRepository.UpdateAsync(entity);
     }
 
     /// <summary>
@@ -215,15 +187,9 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> DeleteAsync(long id)
+    public async Task DeleteAsync(long id)
     {
-        var result = false;
-        if (id > 0)
-        {
-            result = (await _documentRepository.DeleteAsync(m => m.Id == id)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        await _documentRepository.DeleteAsync(m => m.Id == id);
     }
 
     /// <summary>
@@ -232,15 +198,9 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// <param name="documentId"></param>
     /// <param name="url"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> DeleteImageAsync(long documentId, string url)
+    public async Task DeleteImageAsync(long documentId, string url)
     {
-        var result = false;
-        if (documentId > 0 && url.NotNull())
-        {
-            result = (await _documentImageRepository.DeleteAsync(m => m.DocumentId == documentId && m.Url == url)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        await _documentImageRepository.DeleteAsync(m => m.DocumentId == documentId && m.Url == url);
     }
 
     /// <summary>
@@ -248,17 +208,16 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> SoftDeleteAsync(long id)
+    public async Task SoftDeleteAsync(long id)
     {
-        var result = await _documentRepository.SoftDeleteAsync(id);
-        return ResultOutput.Result(result);
+        await _documentRepository.SoftDeleteAsync(id);
     }
 
     /// <summary>
     /// 查询精简文档列表
     /// </summary>
     /// <returns></returns>
-    public async Task<IResultOutput> GetPlainListAsync()
+    public async Task<IEnumerable<dynamic>> GetPlainListAsync()
     {
         var documents = await _documentRepository.Select
             .OrderBy(a => a.ParentId)
@@ -276,7 +235,7 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
                 a.Opened
             });
 
-        return ResultOutput.Ok(menus);
+        return menus;
     }
 
     /// <summary>
@@ -285,28 +244,19 @@ public class DocumentService : BaseService, IDocumentService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> UploadImage([FromForm] DocumentUploadImageInput input)
+    public async Task<string> UploadImage([FromForm] DocumentUploadImageInput input)
     {
         var uploadConfig = LazyGetRequiredService<IOptionsMonitor<UploadConfig>>().CurrentValue;
         var uploadHelper = LazyGetRequiredService<UploadHelper>();
 
         var config = uploadConfig.Document;
-        var res = await uploadHelper.UploadAsync(input.File, config, new { input.Id });
-        if (res.Success)
+        var fileInfo = await uploadHelper.UploadAsync(input.File, config, new { input.Id });
+        //保存文档图片
+        await AddImageAsync(new DocumentAddImageInput
         {
-            //保存文档图片
-            var r = await AddImageAsync(
-            new DocumentAddImageInput
-            {
-                DocumentId = input.Id,
-                Url = res.Data.FileRequestPath
-            });
-            if (r.Success)
-            {
-                return ResultOutput.Ok(res.Data.FileRequestPath);
-            }
-        }
-
-        return ResultOutput.NotOk("上传失败!");
+            DocumentId = input.Id,
+            Url = fileInfo.FileRequestPath
+        });
+        return fileInfo.FileRequestPath;
     }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Document/Dto/DocumentUpdateContentInput.cs

@@ -1,10 +1,15 @@
-namespace ZhonTai.Admin.Services.Document.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Document.Dto;
 
 public class DocumentUpdateContentInput
 {
     /// <summary>
     /// 编号
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择文档")]
     public long Id { get; set; }
 
     /// <summary>

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Document/Dto/DocumentUpdateGroupInput.cs

@@ -1,9 +1,14 @@
-namespace ZhonTai.Admin.Services.Document.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Document.Dto;
 
 public class DocumentUpdateGroupInput : DocumentAddGroupInput
 {
     /// <summary>
     /// 编号
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择分组")]
     public long Id { get; set; }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Document/Dto/DocumentUpdateMenuInput.cs

@@ -1,9 +1,14 @@
-namespace ZhonTai.Admin.Services.Document.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Document.Dto;
 
 public class DocumentUpdateMenuInput : DocumentAddMenuInput
 {
     /// <summary>
     /// 编号
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择菜单")]
     public long Id { get; set; }
 }

+ 19 - 17
src/platform/ZhonTai.Admin/Services/Document/IDocumentService.cs

@@ -1,4 +1,6 @@
-using System;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
 using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Services.Document.Dto;
@@ -10,35 +12,35 @@ namespace ZhonTai.Admin.Services.Document;
 /// </summary>
 public partial interface IDocumentService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<List<string>> GetImageListAsync(long id);
 
-    Task<IResultOutput> GetImageListAsync(long id);
+    Task<DocumentGetGroupOutput> GetGroupAsync(long id);
 
-    Task<IResultOutput> GetGroupAsync(long id);
+    Task<DocumentGetMenuOutput> GetMenuAsync(long id);
 
-    Task<IResultOutput> GetMenuAsync(long id);
+    Task<DocumentGetContentOutput> GetContentAsync(long id);
 
-    Task<IResultOutput> GetContentAsync(long id);
+    Task<IEnumerable<dynamic>> GetPlainListAsync();
 
-    Task<IResultOutput> GetPlainListAsync();
+    Task<List<DocumentListOutput>> GetListAsync(string key, DateTime? start, DateTime? end);
 
-    Task<IResultOutput> GetListAsync(string key, DateTime? start, DateTime? end);
+    Task<long> AddGroupAsync(DocumentAddGroupInput input);
 
-    Task<IResultOutput> AddGroupAsync(DocumentAddGroupInput input);
+    Task<long> AddMenuAsync(DocumentAddMenuInput input);
 
-    Task<IResultOutput> AddMenuAsync(DocumentAddMenuInput input);
+    Task<long> AddImageAsync(DocumentAddImageInput input);
 
-    Task<IResultOutput> AddImageAsync(DocumentAddImageInput input);
+    Task UpdateGroupAsync(DocumentUpdateGroupInput input);
 
-    Task<IResultOutput> UpdateGroupAsync(DocumentUpdateGroupInput input);
+    Task UpdateMenuAsync(DocumentUpdateMenuInput input);
 
-    Task<IResultOutput> UpdateMenuAsync(DocumentUpdateMenuInput input);
+    Task UpdateContentAsync(DocumentUpdateContentInput input);
 
-    Task<IResultOutput> UpdateContentAsync(DocumentUpdateContentInput input);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteImageAsync(long documentId, string url);
 
-    Task<IResultOutput> DeleteImageAsync(long documentId, string url);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task<string> UploadImage([FromForm] DocumentUploadImageInput input);
 }

+ 2 - 2
src/platform/ZhonTai.Admin/Services/LoginLog/ILoginLogService.cs

@@ -10,7 +10,7 @@ namespace ZhonTai.Admin.Services.LoginLog;
 /// </summary>
 public interface ILoginLogService
 {
-    Task<IResultOutput> GetPageAsync(PageInput<LogGetPageDto> input);
+    Task<PageOutput<LoginLogListOutput>> GetPageAsync(PageInput<LogGetPageDto> input);
 
-    Task<IResultOutput<long>> AddAsync(LoginLogAddInput input);
+    Task<long> AddAsync(LoginLogAddInput input);
 }

+ 5 - 11
src/platform/ZhonTai.Admin/Services/LoginLog/LoginLogService.cs

@@ -9,8 +9,6 @@ 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;
 
@@ -38,7 +36,7 @@ public class LoginLogService : BaseService, ILoginLogService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<LogGetPageDto> input)
+    public async Task<PageOutput<LoginLogListOutput>> GetPageAsync(PageInput<LogGetPageDto> input)
     {
         var userName = input.Filter?.CreatedUserName;
 
@@ -50,15 +48,13 @@ 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,
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -66,10 +62,8 @@ public class LoginLogService : BaseService, ILoginLogService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput<long>> AddAsync(LoginLogAddInput input)
+    public async Task<long> AddAsync(LoginLogAddInput input)
     {
-        var res = new ResultOutput<long>();
-
         input.IP = IPHelper.GetIP(_context?.HttpContext?.Request);
 
         string ua = _context.HttpContext.Request.Headers["User-Agent"];
@@ -84,8 +78,8 @@ public class LoginLogService : BaseService, ILoginLogService, IDynamicApi
             input.BrowserInfo = ua;
         }
         var entity = Mapper.Map<LoginLogEntity>(input);
-        var id = (await _loginLogRepository.InsertAsync(entity)).Id;
+        await _loginLogRepository.InsertAsync(entity);
 
-        return id > 0 ? res.Ok(id) : res;
+        return entity.Id;
     }
 }

+ 2 - 2
src/platform/ZhonTai.Admin/Services/OprationLog/IOprationLogService.cs

@@ -10,7 +10,7 @@ namespace ZhonTai.Admin.Services.OprationLog;
 /// </summary>
 public interface IOprationLogService
 {
-    Task<IResultOutput> GetPageAsync(PageInput<LogGetPageDto> input);
+    Task<PageOutput<OprationLogListOutput>> GetPageAsync(PageInput<LogGetPageDto> input);
 
-    Task<IResultOutput> AddAsync(OprationLogAddInput input);
+    Task<long> AddAsync(OprationLogAddInput input);
 }

+ 5 - 5
src/platform/ZhonTai.Admin/Services/OprationLog/OprationLogService.cs

@@ -36,7 +36,7 @@ public class OprationLogService : BaseService, IOprationLogService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<LogGetPageDto> input)
+    public async Task<PageOutput<OprationLogListOutput>> GetPageAsync(PageInput<LogGetPageDto> input)
     {
         var userName = input.Filter?.CreatedUserName;
 
@@ -54,7 +54,7 @@ public class OprationLogService : BaseService, IOprationLogService, IDynamicApi
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -62,7 +62,7 @@ public class OprationLogService : BaseService, IOprationLogService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddAsync(OprationLogAddInput input)
+    public async Task<long> AddAsync(OprationLogAddInput input)
     {
         string ua = _context.HttpContext.Request.Headers["User-Agent"];
         if (ua.NotNull())
@@ -80,8 +80,8 @@ public class OprationLogService : BaseService, IOprationLogService, IDynamicApi
         input.IP = IPHelper.GetIP(_context?.HttpContext?.Request);
 
         var entity = Mapper.Map<OprationLogEntity>(input);
-        var id = (await _oprationLogRepository.InsertAsync(entity)).Id;
+        await _oprationLogRepository.InsertAsync(entity);
 
-        return ResultOutput.Result(id > 0);
+        return entity.Id;
     }
 }

+ 9 - 8
src/platform/ZhonTai.Admin/Services/Org/IOrgService.cs

@@ -1,20 +1,21 @@
-using ZhonTai.Admin.Core.Dto;
-using ZhonTai.Admin.Services.Org.Input;
+using ZhonTai.Admin.Services.Org.Input;
 using System.Threading.Tasks;
+using System.Collections.Generic;
+using ZhonTai.Admin.Services.Org.Output;
 
 namespace ZhonTai.Admin.Services.Org;
 
 public partial interface IOrgService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<OrgGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetListAsync(string key);
+    Task<List<OrgListOutput>> GetListAsync(string key);
 
-    Task<IResultOutput> AddAsync(OrgAddInput input);
+    Task<long> AddAsync(OrgAddInput input);
 
-    Task<IResultOutput> UpdateAsync(OrgUpdateInput input);
+    Task UpdateAsync(OrgUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Org/Input/OrgUpdateInput.cs

@@ -1,4 +1,7 @@
-namespace ZhonTai.Admin.Services.Org.Input;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Org.Input;
 
 /// <summary>
 /// 修改
@@ -8,5 +11,7 @@ public class OrgUpdateInput : OrgAddInput
     /// <summary>
     /// 主键Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择部门")]
     public long Id { get; set; }
 }

+ 22 - 32
src/platform/ZhonTai.Admin/Services/Org/OrgService.cs

@@ -9,6 +9,7 @@ using ZhonTai.DynamicApi;
 using ZhonTai.Admin.Core.Attributes;
 using ZhonTai.Admin.Domain.RoleOrg;
 using ZhonTai.Admin.Domain.UserOrg;
+using System.Collections.Generic;
 
 namespace ZhonTai.Admin.Services.Org;
 
@@ -31,10 +32,10 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<OrgGetOutput> GetAsync(long id)
     {
         var result = await _orgRepository.GetAsync<OrgGetOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -42,7 +43,7 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// </summary>
     /// <param name="key"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetListAsync(string key)
+    public async Task<List<OrgListOutput>> GetListAsync(string key)
     {
         var data = await _orgRepository
             .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Code.Contains(key))
@@ -50,7 +51,7 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
             .OrderBy(a => a.Sort)
             .ToListAsync<OrgListOutput>();
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -58,23 +59,23 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddAsync(OrgAddInput input)
+    public async Task<long> AddAsync(OrgAddInput input)
     {
         if (await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name))
         {
-            return ResultOutput.NotOk($"此部门已存在");
+            throw ResultOutput.Exception($"此部门已存在");
         }
 
         if (input.Code.NotNull() && await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code))
         {
-            return ResultOutput.NotOk($"此部门编码已存在");
+            throw ResultOutput.Exception($"此部门编码已存在");
         }
 
         var dictionary = Mapper.Map<OrgEntity>(input);
-        var id = (await _orgRepository.InsertAsync(dictionary)).Id;
+        await _orgRepository.InsertAsync(dictionary);
         await Cache.DelByPatternAsync(CacheKeys.DataPermission + "*");
 
-        return ResultOutput.Result(id > 0);
+        return dictionary.Id;
     }
 
     /// <summary>
@@ -82,46 +83,39 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(OrgUpdateInput input)
+    public async Task UpdateAsync(OrgUpdateInput input)
     {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _orgRepository.GetAsync(input.Id);
         if (!(entity?.Id > 0))
         {
-            return ResultOutput.NotOk("部门不存在");
+            throw ResultOutput.Exception("部门不存在");
         }
 
         if (input.Id == input.ParentId)
         {
-            return ResultOutput.NotOk("上级部门不能是本部门");
+            throw ResultOutput.Exception("上级部门不能是本部门");
         }
 
         if (await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name))
         {
-            return ResultOutput.NotOk($"此部门已存在");
+            throw ResultOutput.Exception($"此部门已存在");
         }
 
         if (input.Code.NotNull() && await _orgRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code))
         {
-            return ResultOutput.NotOk($"此部门编码已存在");
+            throw ResultOutput.Exception($"此部门编码已存在");
         }
 
         var childIdList = await _orgRepository.GetChildIdListAsync(input.Id);
         if (childIdList.Contains(input.ParentId))
         {
-            return ResultOutput.NotOk($"上级部门不能是下级部门");
+            throw ResultOutput.Exception($"上级部门不能是下级部门");
         }
 
         Mapper.Map(input, entity);
         await _orgRepository.UpdateAsync(entity);
 
         await Cache.DelByPatternAsync(CacheKeys.DataPermission + "*");
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -130,19 +124,19 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public async Task<IResultOutput> DeleteAsync(long id)
+    public async Task DeleteAsync(long id)
     {
         //本部门下是否有员工
         if(await _userOrgRepository.HasUser(id))
         {
-            return ResultOutput.NotOk($"当前部门有员工无法删除");
+            throw ResultOutput.Exception($"当前部门有员工无法删除");
         }
 
         var orgIdList = await _orgRepository.GetChildIdListAsync(id);
         //本部门的下级部门下是否有员工
         if (await _userOrgRepository.HasUser(orgIdList))
         {
-            return ResultOutput.NotOk($"本部门的下级部门有员工无法删除");
+            throw ResultOutput.Exception($"本部门的下级部门有员工无法删除");
         }
 
         //删除部门角色
@@ -152,8 +146,6 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
         await _orgRepository.DeleteAsync(a => orgIdList.Contains(a.Id));
 
         await Cache.DelByPatternAsync(CacheKeys.DataPermission + "*");
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -162,19 +154,19 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public async Task<IResultOutput> SoftDeleteAsync(long id)
+    public async Task SoftDeleteAsync(long id)
     {
         //本部门下是否有员工
         if (await _userOrgRepository.HasUser(id))
         {
-            return ResultOutput.NotOk($"当前部门有员工无法删除");
+            throw ResultOutput.Exception($"当前部门有员工无法删除");
         }
 
         var orgIdList = await _orgRepository.GetChildIdListAsync(id);
         //本部门的下级部门下是否有员工
         if (await _userOrgRepository.HasUser(orgIdList))
         {
-            return ResultOutput.NotOk($"本部门的下级部门有员工无法删除");
+            throw ResultOutput.Exception($"本部门的下级部门有员工无法删除");
         }
 
         //删除部门角色
@@ -184,7 +176,5 @@ public class OrgService : BaseService, IOrgService, IDynamicApi
         await _orgRepository.SoftDeleteAsync(a => orgIdList.Contains(a.Id));
 
         await Cache.DelByPatternAsync(CacheKeys.DataPermission + "*");
-
-        return ResultOutput.Ok();
     }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateApiInput.cs

@@ -1,9 +1,14 @@
-namespace ZhonTai.Admin.Services.Permission.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Permission.Dto;
 
 public class PermissionUpdateApiInput : PermissionAddApiInput
 {
     /// <summary>
     /// 权限Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择接口")]
     public long Id { get; set; }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateDotInput.cs

@@ -1,9 +1,14 @@
-namespace ZhonTai.Admin.Services.Permission.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Permission.Dto;
 
 public class PermissionUpdateDotInput : PermissionAddDotInput
 {
     /// <summary>
     /// 权限Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择权限点")]
     public long Id { get; set; }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateGroupInput.cs

@@ -1,9 +1,14 @@
-namespace ZhonTai.Admin.Services.Permission.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Permission.Dto;
 
 public class PermissionUpdateGroupInput : PermissionAddGroupInput
 {
     /// <summary>
     /// 权限Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择分组")]
     public long Id { get; set; }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Permission/Dto/PermissionUpdateMenuInput.cs

@@ -1,9 +1,14 @@
-namespace ZhonTai.Admin.Services.Permission.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Permission.Dto;
 
 public class PermissionUpdateMenuInput : PermissionAddMenuInput
 {
     /// <summary>
     /// 权限Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择菜单")]
     public long Id { get; set; }
 }

+ 21 - 23
src/platform/ZhonTai.Admin/Services/Permission/IPermissionService.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Services.Permission.Dto;
@@ -10,46 +11,43 @@ namespace ZhonTai.Admin.Services.Permission;
 /// </summary>
 public partial interface IPermissionService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<PermissionGetGroupOutput> GetGroupAsync(long id);
 
-    Task<IResultOutput> GetGroupAsync(long id);
+    Task<PermissionGetMenuOutput> GetMenuAsync(long id);
 
-    Task<IResultOutput> GetMenuAsync(long id);
+    Task<PermissionGetApiOutput> GetApiAsync(long id);
 
-    Task<IResultOutput> GetApiAsync(long id);
+    Task<PermissionGetDotOutput> GetDotAsync(long id);
 
-    Task<IResultOutput> GetDotAsync(long id);
+    Task<IEnumerable<dynamic>> GetPermissionList();
 
-    Task<IResultOutput> GetPermissionList();
+    Task<List<long>> GetRolePermissionList(long roleId);
 
-    Task<IResultOutput> GetRolePermissionList(long roleId);
+    Task<List<long>> GetTenantPermissionList(long tenantId);
 
+    Task<List<PermissionListOutput>> GetListAsync(string key, DateTime? start, DateTime? end);
 
-    Task<IResultOutput> GetTenantPermissionList(long tenantId);
+    Task<long> AddGroupAsync(PermissionAddGroupInput input);
 
-    Task<IResultOutput> GetListAsync(string key, DateTime? start, DateTime? end);
+    Task<long> AddMenuAsync(PermissionAddMenuInput input);
 
-    Task<IResultOutput> AddGroupAsync(PermissionAddGroupInput input);
+    Task<long> AddApiAsync(PermissionAddApiInput input);
 
-    Task<IResultOutput> AddMenuAsync(PermissionAddMenuInput input);
+    Task<long> AddDotAsync(PermissionAddDotInput input);
 
-    Task<IResultOutput> AddApiAsync(PermissionAddApiInput input);
+    Task UpdateGroupAsync(PermissionUpdateGroupInput input);
 
-    Task<IResultOutput> AddDotAsync(PermissionAddDotInput input);
+    Task UpdateMenuAsync(PermissionUpdateMenuInput input);
 
-    Task<IResultOutput> UpdateGroupAsync(PermissionUpdateGroupInput input);
+    Task UpdateApiAsync(PermissionUpdateApiInput input);
 
-    Task<IResultOutput> UpdateMenuAsync(PermissionUpdateMenuInput input);
+    Task UpdateDotAsync(PermissionUpdateDotInput input);
 
-    Task<IResultOutput> UpdateApiAsync(PermissionUpdateApiInput input);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> UpdateDotAsync(PermissionUpdateDotInput input);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task AssignAsync(PermissionAssignInput input);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
-
-    Task<IResultOutput> AssignAsync(PermissionAssignInput input);
-
-    Task<IResultOutput> SaveTenantPermissionsAsync(PermissionSaveTenantPermissionsInput input);
+    Task SaveTenantPermissionsAsync(PermissionSaveTenantPermissionsInput input);
 }

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

@@ -6,7 +6,6 @@ using Microsoft.Extensions.DependencyInjection;
 using ZhonTai.Admin.Core.Attributes;
 using ZhonTai.Admin.Core.Configs;
 using ZhonTai.Admin.Core.Dto;
-using ZhonTai.Admin.Core.Repositories;
 using ZhonTai.Admin.Services.Permission.Dto;
 using ZhonTai.Admin.Domain.Permission;
 using ZhonTai.Admin.Domain.RolePermission;
@@ -18,10 +17,10 @@ using ZhonTai.Admin.Domain.Api;
 using ZhonTai.Admin.Domain.User;
 using ZhonTai.DynamicApi;
 using ZhonTai.DynamicApi.Attributes;
-using ZhonTai.Admin.Core.Db;
 using ZhonTai.Admin.Core.Consts;
 using FreeSql;
 using ZhonTai.Admin.Domain.Tenant;
+using MySqlX.XDevAPI.Common;
 
 namespace ZhonTai.Admin.Services.Permission;
 
@@ -62,27 +61,15 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
         }
     }
 
-    /// <summary>
-    /// 查询权限
-    /// </summary>
-    /// <param name="id"></param>
-    /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
-    {
-        var result = await _permissionRepository.GetAsync(id);
-
-        return ResultOutput.Ok(result);
-    }
-
     /// <summary>
     /// 查询分组
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetGroupAsync(long id)
+    public async Task<PermissionGetGroupOutput> GetGroupAsync(long id)
     {
         var result = await _permissionRepository.GetAsync<PermissionGetGroupOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -90,10 +77,10 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetMenuAsync(long id)
+    public async Task<PermissionGetMenuOutput> GetMenuAsync(long id)
     {
         var result = await _permissionRepository.GetAsync<PermissionGetMenuOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -101,10 +88,10 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetApiAsync(long id)
+    public async Task<PermissionGetApiOutput> GetApiAsync(long id)
     {
         var result = await _permissionRepository.GetAsync<PermissionGetApiOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -112,14 +99,15 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetDotAsync(long id)
+    public async Task<PermissionGetDotOutput> GetDotAsync(long id)
     {
         var output = await _permissionRepository.Select
         .WhereDynamic(id)
         .IncludeMany(a => a.Apis.Select(b => new ApiEntity { Id = b.Id }))
         .ToOneAsync();
 
-        return ResultOutput.Ok(Mapper.Map<PermissionGetDotOutput>(output));
+        var permissionGetDotOutput= Mapper.Map<PermissionGetDotOutput>(output);
+        return permissionGetDotOutput;
     }
 
     /// <summary>
@@ -129,7 +117,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// <param name="start"></param>
     /// <param name="end"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetListAsync(string key, DateTime? start, DateTime? end)
+    public async Task<List<PermissionListOutput>> GetListAsync(string key, DateTime? start, DateTime? end)
     {
         if (end.HasValue)
         {
@@ -143,14 +131,14 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
             .OrderBy(a => a.Sort)
             .ToListAsync(a=> new PermissionListOutput { ApiPaths = string.Join(";", _permissionApiRepository.Where(b=>b.PermissionId == a.Id).ToList(b => b.Api.Path)) });
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
     /// 查询角色权限-权限列表
     /// </summary>
     /// <returns></returns>
-    public async Task<IResultOutput> GetPermissionList()
+    public async Task<IEnumerable<dynamic>> GetPermissionList()
     {
         var permissions = await _permissionRepository.Select
             .WhereIf(_appConfig.Tenant && User.TenantType == TenantType.Tenant, a =>
@@ -170,7 +158,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
                 Row = a.Type == PermissionType.Menu
             });
 
-        return ResultOutput.Ok(menus);
+        return menus;
     }
 
     /// <summary>
@@ -178,13 +166,13 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="roleId"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetRolePermissionList(long roleId = 0)
+    public async Task<List<long>> GetRolePermissionList(long roleId = 0)
     {
         var permissionIds = await _rolePermissionRepository
             .Select.Where(d => d.RoleId == roleId)
             .ToListAsync(a => a.PermissionId);
 
-        return ResultOutput.Ok(permissionIds);
+        return permissionIds;
     }
 
     /// <summary>
@@ -192,13 +180,13 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="tenantId"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetTenantPermissionList(long tenantId)
+    public async Task<List<long>> GetTenantPermissionList(long tenantId)
     {
         var permissionIds = await _tenantPermissionRepository
             .Select.Where(d => d.TenantId == tenantId)
             .ToListAsync(a => a.PermissionId);
 
-        return ResultOutput.Ok(permissionIds);
+        return permissionIds;
     }
 
     /// <summary>
@@ -206,12 +194,11 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddGroupAsync(PermissionAddGroupInput input)
+    public async Task<long> AddGroupAsync(PermissionAddGroupInput input)
     {
         var entity = Mapper.Map<PermissionEntity>(input);
-        var id = (await _permissionRepository.InsertAsync(entity)).Id;
-
-        return ResultOutput.Ok(id > 0);
+        await _permissionRepository.InsertAsync(entity);
+        return entity.Id;
     }
 
     /// <summary>
@@ -219,12 +206,12 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddMenuAsync(PermissionAddMenuInput input)
+    public async Task<long> AddMenuAsync(PermissionAddMenuInput input)
     {
         var entity = Mapper.Map<PermissionEntity>(input);
-        var id = (await _permissionRepository.InsertAsync(entity)).Id;
+        await _permissionRepository.InsertAsync(entity);
 
-        return ResultOutput.Ok(id > 0);
+        return entity.Id;
     }
 
     /// <summary>
@@ -232,12 +219,12 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddApiAsync(PermissionAddApiInput input)
+    public async Task<long> AddApiAsync(PermissionAddApiInput input)
     {
         var entity = Mapper.Map<PermissionEntity>(input);
-        var id = (await _permissionRepository.InsertAsync(entity)).Id;
+        await _permissionRepository.InsertAsync(entity);
 
-        return ResultOutput.Ok(id > 0);
+        return entity.Id;
     }
 
     /// <summary>
@@ -246,18 +233,18 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> AddDotAsync(PermissionAddDotInput input)
+    public virtual async Task<long> AddDotAsync(PermissionAddDotInput input)
     {
         var entity = Mapper.Map<PermissionEntity>(input);
-        var id = (await _permissionRepository.InsertAsync(entity)).Id;
+        await _permissionRepository.InsertAsync(entity);
 
         if (input.ApiIds != null && input.ApiIds.Any())
         {
-            var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = id, ApiId = a });
+            var permissionApis = input.ApiIds.Select(a => new PermissionApiEntity { PermissionId = entity.Id, ApiId = a });
             await _permissionApiRepository.InsertAsync(permissionApis);
         }
 
-        return ResultOutput.Ok(id > 0);
+        return entity.Id;
     }
 
     /// <summary>
@@ -265,17 +252,11 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateGroupAsync(PermissionUpdateGroupInput input)
+    public async Task UpdateGroupAsync(PermissionUpdateGroupInput input)
     {
-        var result = false;
-        if (input != null && input.Id > 0)
-        {
-            var entity = await _permissionRepository.GetAsync(input.Id);
-            entity = Mapper.Map(input, entity);
-            result = (await _permissionRepository.UpdateAsync(entity)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        var entity = await _permissionRepository.GetAsync(input.Id);
+        entity = Mapper.Map(input, entity);
+        await _permissionRepository.UpdateAsync(entity);
     }
 
     /// <summary>
@@ -283,17 +264,11 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateMenuAsync(PermissionUpdateMenuInput input)
+    public async Task UpdateMenuAsync(PermissionUpdateMenuInput input)
     {
-        var result = false;
-        if (input != null && input.Id > 0)
-        {
-            var entity = await _permissionRepository.GetAsync(input.Id);
-            entity = Mapper.Map(input, entity);
-            result = (await _permissionRepository.UpdateAsync(entity)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        var entity = await _permissionRepository.GetAsync(input.Id);
+        entity = Mapper.Map(input, entity);
+        await _permissionRepository.UpdateAsync(entity);
     }
 
     /// <summary>
@@ -301,17 +276,11 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateApiAsync(PermissionUpdateApiInput input)
+    public async Task UpdateApiAsync(PermissionUpdateApiInput input)
     {
-        var result = false;
-        if (input != null && input.Id > 0)
-        {
-            var entity = await _permissionRepository.GetAsync(input.Id);
-            entity = Mapper.Map(input, entity);
-            result = (await _permissionRepository.UpdateAsync(entity)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        var entity = await _permissionRepository.GetAsync(input.Id);
+        entity = Mapper.Map(input, entity);
+        await _permissionRepository.UpdateAsync(entity);
     }
 
     /// <summary>
@@ -320,22 +289,16 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> UpdateDotAsync(PermissionUpdateDotInput input)
+    public virtual async Task UpdateDotAsync(PermissionUpdateDotInput input)
     {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _permissionRepository.GetAsync(input.Id);
         if (!(entity?.Id > 0))
         {
-            return ResultOutput.NotOk("权限点不存在!");
+            throw ResultOutput.Exception("权限点不存在!");
         }
 
         Mapper.Map(input, entity);
         await _permissionRepository.UpdateAsync(entity);
-
         await _permissionApiRepository.DeleteAsync(a => a.PermissionId == entity.Id);
 
         if (input.ApiIds != null && input.ApiIds.Any())
@@ -346,8 +309,6 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
 
         //清除用户权限缓存
         await ClearUserPermissionsAsync(new List<long> { entity.Id });
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -356,7 +317,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> DeleteAsync(long id)
+    public virtual async Task DeleteAsync(long id)
     {
         //递归查询所有权限点
         var ids = _permissionRepository.Select
@@ -372,8 +333,6 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
 
         //清除用户权限缓存
         await ClearUserPermissionsAsync(ids);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -381,7 +340,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> SoftDeleteAsync(long id)
+    public async Task SoftDeleteAsync(long id)
     {
         //递归查询所有权限点
         var ids = _permissionRepository.Select
@@ -394,8 +353,6 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
 
         //清除用户权限缓存
         await ClearUserPermissionsAsync(ids);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -404,13 +361,13 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> AssignAsync(PermissionAssignInput input)
+    public virtual async Task AssignAsync(PermissionAssignInput input)
     {
         //分配权限的时候判断角色是否存在
         var exists = await _roleRepository.Select.DisableGlobalFilter(FilterNames.Tenant).WhereDynamic(input.RoleId).AnyAsync();
         if (!exists)
         {
-            return ResultOutput.NotOk("该角色不存在或已被删除!");
+            throw ResultOutput.Exception("该角色不存在或已被删除!");
         }
 
         //查询角色权限
@@ -454,8 +411,6 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.UserPermissions + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -464,7 +419,7 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> SaveTenantPermissionsAsync(PermissionSaveTenantPermissionsInput input)
+    public virtual async Task SaveTenantPermissionsAsync(PermissionSaveTenantPermissionsInput input)
     {
         //查询租户权限
         var permissionIds = await _tenantPermissionRepository.Select.Where(d => d.TenantId == input.TenantId).ToListAsync(m => m.PermissionId);
@@ -503,7 +458,5 @@ public class PermissionService : BaseService, IPermissionService, IDynamicApi
                 await Cache.DelAsync(CacheKeys.UserPermissions + userId);
             }
         }
-
-        return ResultOutput.Ok();
     }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Role/Dto/RoleUpdateInput.cs

@@ -1,4 +1,7 @@
-namespace ZhonTai.Admin.Services.Role.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Role.Dto;
 
 /// <summary>
 /// 修改
@@ -8,5 +11,7 @@ public partial class RoleUpdateInput : RoleAddInput
     /// <summary>
     /// 接口Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择角色")]
     public long Id { get; set; }
 }

+ 13 - 12
src/platform/ZhonTai.Admin/Services/Role/IRoleService.cs

@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System.Collections.Generic;
+using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Domain.Role.Dto;
 using ZhonTai.Admin.Services.Role.Dto;
@@ -10,25 +11,25 @@ namespace ZhonTai.Admin.Services.Role;
 /// </summary>
 public interface IRoleService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<RoleGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetListAsync(RoleGetListInput input);
+    Task<List<RoleGetListOutput>> GetListAsync(RoleGetListInput input);
 
-    Task<IResultOutput> GetPageAsync(PageInput<RoleGetPageDto> input);
+    Task<PageOutput<RoleGetPageOutput>> GetPageAsync(PageInput<RoleGetPageDto> input);
 
-    Task<IResultOutput> AddAsync(RoleAddInput input);
+    Task<long> AddAsync(RoleAddInput input);
 
-    Task<IResultOutput> AddRoleUserAsync(RoleAddRoleUserListInput input);
+    Task AddRoleUserAsync(RoleAddRoleUserListInput input);
 
-    Task<IResultOutput> RemoveRoleUserAsync(RoleAddRoleUserListInput input);
+    Task RemoveRoleUserAsync(RoleAddRoleUserListInput input);
 
-    Task<IResultOutput> UpdateAsync(RoleUpdateInput input);
+    Task UpdateAsync(RoleUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> BatchDeleteAsync(long[] ids);
+    Task BatchDeleteAsync(long[] ids);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);
+    Task BatchSoftDeleteAsync(long[] ids);
 }

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

@@ -1,6 +1,5 @@
 using System.Linq;
 using System.Threading.Tasks;
-using ZhonTai.Admin.Core.Repositories;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Domain.Role;
 using ZhonTai.Admin.Domain.RolePermission;
@@ -16,6 +15,7 @@ using ZhonTai.Admin.Domain.User;
 using ZhonTai.Admin.Domain;
 using ZhonTai.Admin.Domain.Org;
 using ZhonTai.Admin.Domain.RoleOrg;
+using System.Collections.Generic;
 
 namespace ZhonTai.Admin.Services.Role;
 
@@ -40,7 +40,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<RoleGetOutput> GetAsync(long id)
     {
         var roleEntity = await _roleRepository.Select
         .WhereDynamic(id)
@@ -49,7 +49,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
 
         var output = Mapper.Map<RoleGetOutput>(roleEntity);
 
-        return ResultOutput.Ok(output);
+        return output;
     }
 
     /// <summary>
@@ -57,14 +57,14 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetListAsync([FromQuery]RoleGetListInput input)
+    public async Task<List<RoleGetListOutput>> GetListAsync([FromQuery]RoleGetListInput input)
     {
         var list = await _roleRepository.Select
         .WhereIf(input.Name.NotNull(), a => a.Name.Contains(input.Name))
         .OrderBy(a => new {a.ParentId, a.Sort})
         .ToListAsync<RoleGetListOutput>();
 
-        return ResultOutput.Ok(list);
+        return list;
     }
 
     /// <summary>
@@ -73,7 +73,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<RoleGetPageDto> input)
+    public async Task<PageOutput<RoleGetPageOutput>> GetPageAsync(PageInput<RoleGetPageDto> input)
     {
         var key = input.Filter?.Name;
 
@@ -91,7 +91,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -99,7 +99,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetRoleUserListAsync([FromQuery] UserGetRoleUserListInput input)
+    public async Task<List<UserGetRoleUserListOutput>> GetRoleUserListAsync([FromQuery] UserGetRoleUserListInput input)
     {
         var list = await _userRepository.Select.From<UserRoleEntity>()
             .InnerJoin(a => a.t2.UserId == a.t1.Id)
@@ -108,16 +108,15 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
             .OrderByDescending(a => a.t1.Id)
             .ToListAsync<UserGetRoleUserListOutput>();
 
-        return ResultOutput.Ok(list);
+        return list;
     }
 
-
     /// <summary>
     /// 新增角色用户
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddRoleUserAsync(RoleAddRoleUserListInput input)
+    public async Task AddRoleUserAsync(RoleAddRoleUserListInput input)
     {
         var roleId = input.RoleId;
         var userIds = await _userRoleRepository.Select.Where(a => a.RoleId == roleId).ToListAsync(a => a.UserId);
@@ -137,8 +136,6 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -147,7 +144,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> RemoveRoleUserAsync(RoleAddRoleUserListInput input)
+    public async Task RemoveRoleUserAsync(RoleAddRoleUserListInput input)
     {
         var userIds = input.UserIds;
         if (userIds != null && userIds.Any())
@@ -159,8 +156,6 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     private async Task AddRoleOrgAsync(long roleId, long[] orgIds)
@@ -181,16 +176,16 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddAsync(RoleAddInput input)
+    public async Task<long> AddAsync(RoleAddInput input)
     {
         if (await _roleRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Name == input.Name))
         {
-            return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组" : "角色")}已存在");
+            throw ResultOutput.Exception($"此{(input.ParentId == 0 ? "分组" : "角色")}已存在");
         }
 
         if (input.Code.NotNull() && await _roleRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Code == input.Code))
         {
-            return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组" : "角色")}编码已存在");
+            throw ResultOutput.Exception($"此{(input.ParentId == 0 ? "分组" : "角色")}编码已存在");
         }
 
         var entity = Mapper.Map<RoleEntity>(input);
@@ -206,7 +201,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
             await AddRoleOrgAsync(entity.Id, input.OrgIds);
         }
 
-        return ResultOutput.Ok();
+        return entity.Id;
     }
 
     /// <summary>
@@ -214,27 +209,22 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(RoleUpdateInput input)
+    public async Task UpdateAsync(RoleUpdateInput input)
     {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _roleRepository.GetAsync(input.Id);
         if (!(entity?.Id > 0))
         {
-            return ResultOutput.NotOk("角色不存在");
+            throw ResultOutput.Exception("角色不存在");
         }
 
         if (await _roleRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Name == input.Name))
         {
-            return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组" : "角色")}已存在");
+            throw ResultOutput.Exception($"此{(input.ParentId == 0 ? "分组" : "角色")}已存在");
         }
 
         if (input.Code.NotNull() && await _roleRepository.Select.AnyAsync(a => a.ParentId == input.ParentId && a.Id != input.Id && a.Code == input.Code))
         {
-            return ResultOutput.NotOk($"此{(input.ParentId == 0 ? "分组" : "角色")}编码已存在");
+            throw ResultOutput.Exception($"此{(input.ParentId == 0 ? "分组" : "角色")}编码已存在");
         }
 
         Mapper.Map(input, entity);
@@ -250,8 +240,6 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -260,7 +248,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> DeleteAsync(long id)
+    public virtual async Task DeleteAsync(long id)
     {
         var userIds = await _userRoleRepository.Select.Where(a => a.RoleId == id).ToListAsync(a => a.UserId);
 
@@ -275,8 +263,6 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -285,7 +271,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// <param name="ids"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> BatchDeleteAsync(long[] ids)
+    public virtual async Task BatchDeleteAsync(long[] ids)
     {
         var userIds = await _userRoleRepository.Select.Where(a => ids.Contains(a.RoleId)).ToListAsync(a => a.UserId);
         //删除用户角色
@@ -299,8 +285,6 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -309,7 +293,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
+    public virtual async Task SoftDeleteAsync(long id)
     {
         var userIds = await _userRoleRepository.Select.Where(a => a.RoleId == id).ToListAsync(a => a.UserId);
         await _userRoleRepository.DeleteAsync(a => a.RoleId == id);
@@ -319,7 +303,6 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -328,7 +311,7 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
     /// <param name="ids"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
+    public virtual async Task BatchSoftDeleteAsync(long[] ids)
     {
         var userIds = await _userRoleRepository.Select.Where(a => ids.Contains(a.RoleId)).ToListAsync(a => a.UserId);
         await _userRoleRepository.DeleteAsync(a => ids.Contains(a.RoleId));
@@ -338,6 +321,5 @@ public class RoleService : BaseService, IRoleService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-        return ResultOutput.Ok();
     }
 }

+ 4 - 1
src/platform/ZhonTai.Admin/Services/TaskScheduler/Dto/TaskUpdateInput.cs

@@ -1,4 +1,6 @@
-namespace ZhonTai.Admin.Services.TaskScheduler.Dto;
+using System.ComponentModel.DataAnnotations;
+
+namespace ZhonTai.Admin.Services.TaskScheduler.Dto;
 
 /// <summary>
 /// 修改
@@ -8,5 +10,6 @@ public partial class TaskUpdateInput : TaskAddInput
     /// <summary>
     /// 任务Id
     /// </summary>
+    [Required(ErrorMessage = "请选择任务")]
     public string Id { get; set; }
 }

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

@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using FreeScheduler;
+using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Domain.Task.Dto;
 
@@ -9,5 +10,5 @@ namespace ZhonTai.Admin.Services.TaskScheduler;
 /// </summary>
 public interface ITaskLogService
 {
-    Task<IResultOutput> GetPageAsync(PageInput<TaskLogGetPageDto> input);
+    Task<PageOutput<TaskLog>> GetPageAsync(PageInput<TaskLogGetPageDto> input);
 }

+ 8 - 8
src/platform/ZhonTai.Admin/Services/TaskScheduler/ITaskService.cs

@@ -10,19 +10,19 @@ namespace ZhonTai.Admin.Services.TaskScheduler;
 /// </summary>
 public interface ITaskService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<TaskGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetPageAsync(PageInput<TaskGetPageDto> input);
+    Task<PageOutput<TaskListOutput>> GetPageAsync(PageInput<TaskGetPageDto> input);
 
-    IResultOutput Add(TaskAddInput input);
+    string Add(TaskAddInput input);
 
-    Task<IResultOutput> UpdateAsync(TaskUpdateInput input);
+    Task UpdateAsync(TaskUpdateInput input);
 
-    IResultOutput Pause(string id);
+    void Pause(string id);
 
-    IResultOutput Resume(string id);
+    void Resume(string id);
 
-    IResultOutput Run(string id);
+    void Run(string id);
 
-    IResultOutput Delete(string id);
+    void Delete(string id);
 }

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

@@ -29,11 +29,11 @@ public class TaskLogService : BaseService, ITaskLogService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<TaskLogGetPageDto> input)
+    public async Task<PageOutput<TaskLog>> GetPageAsync(PageInput<TaskLogGetPageDto> input)
     {
         if (!(input.Filter != null && input.Filter.TaskId.NotNull()))
         {
-            return ResultOutput.NotOk();
+            throw ResultOutput.Exception("请选择任务");
         }
 
         var list = await _taskLogRepository.Select
@@ -50,6 +50,6 @@ public class TaskLogService : BaseService, ITaskLogService, IDynamicApi
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 }

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

@@ -11,6 +11,7 @@ using FreeScheduler;
 using Microsoft.AspNetCore.Mvc.ModelBinding;
 using ZhonTai.Common.Extensions;
 using ZhonTai.Admin.Repositories;
+using ZhonTai.Admin.Core.Validators;
 
 namespace ZhonTai.Admin.Services.TaskScheduler;
 
@@ -32,10 +33,10 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<TaskGetOutput> GetAsync(long id)
     {
         var result = await _taskInfoRepository.GetAsync<TaskGetOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -44,7 +45,7 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<TaskGetPageDto> input)
+    public async Task<PageOutput<TaskListOutput>> GetPageAsync(PageInput<TaskGetPageDto> input)
     {
         var topic = input.Filter?.Topic;
 
@@ -62,7 +63,7 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -70,47 +71,47 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public IResultOutput Add(TaskAddInput input)
+    public string Add(TaskAddInput input)
     {
         if (input.IntervalArgument.IsNull())
         {
-            return ResultOutput.NotOk("请输入定时参数");
+            throw ResultOutput.Exception("请输入定时参数");
         }
 
         var scheduler = LazyGetRequiredService<Scheduler>();
 
-        if(input.Interval == TaskInterval.SEC && input.Round == -1)
+        string id = null;
+        switch (input.Interval)
         {
-            scheduler.AddTask(input.Topic, input.Body, input.Round, input.IntervalArgument.ToInt());
-        } 
-        else if (input.Interval == TaskInterval.SEC && input.Round > 0)
-        {
-            int[] seconds = System.Array.Empty<int>();
-            var intervalArguments = input.IntervalArgument.Split(",");
-            foreach(var arg in intervalArguments)
-            {
-                seconds.Append(arg.ToInt());
-            }
-            scheduler.AddTask(input.Topic, input.Body, seconds);
-        }
-        else if (input.Interval == TaskInterval.RunOnDay && input.Round > 0)
-        {
-            scheduler.AddTaskRunOnDay(input.Topic, input.Body, input.Round, input.IntervalArgument);
-        }
-        else if (input.Interval == TaskInterval.RunOnWeek && input.Round > 0)
-        {
-            scheduler.AddTaskRunOnWeek(input.Topic, input.Body, input.Round, input.IntervalArgument);
-        }
-        else if (input.Interval == TaskInterval.RunOnMonth && input.Round > 0)
-        {
-            scheduler.AddTaskRunOnMonth(input.Topic, input.Body, input.Round, input.IntervalArgument);
-        }
-        else if (input.Interval == TaskInterval.Custom && input.Round > 0)
-        {
-            scheduler.AddTaskCustom(input.Topic, input.Body, input.IntervalArgument);
+            case TaskInterval.SEC when input.Round == -1:
+                id = scheduler.AddTask(input.Topic, input.Body, input.Round, input.IntervalArgument.ToInt());
+                break;
+            case TaskInterval.SEC when input.Round > 0:
+                {
+                    int[] seconds = System.Array.Empty<int>();
+                    var intervalArguments = input.IntervalArgument.Split(",");
+                    foreach (var arg in intervalArguments)
+                    {
+                        seconds.Append(arg.ToInt());
+                    }
+                    id = scheduler.AddTask(input.Topic, input.Body, seconds);
+                    break;
+                }
+            case TaskInterval.RunOnDay when input.Round > 0:
+                id = scheduler.AddTaskRunOnDay(input.Topic, input.Body, input.Round, input.IntervalArgument);
+                break;
+            case TaskInterval.RunOnWeek when input.Round > 0:
+                id = scheduler.AddTaskRunOnWeek(input.Topic, input.Body, input.Round, input.IntervalArgument);
+                break;
+            case TaskInterval.RunOnMonth when input.Round > 0:
+                id = scheduler.AddTaskRunOnMonth(input.Topic, input.Body, input.Round, input.IntervalArgument);
+                break;
+            case TaskInterval.Custom when input.Round > 0:
+                id = scheduler.AddTaskCustom(input.Topic, input.Body, input.IntervalArgument);
+                break;
         }
 
-        return ResultOutput.Ok();
+        return id;
     }
 
     /// <summary>
@@ -118,23 +119,16 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(TaskUpdateInput input)
+    public async Task UpdateAsync(TaskUpdateInput input)
     {
-        if (input.Id.IsNull())
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _taskInfoRepository.GetAsync(a => a.Id == input.Id);
         if (entity != null && entity.Id.NotNull())
         {
-            return ResultOutput.NotOk("任务不存在!");
+            throw ResultOutput.Exception("任务不存在!");
         }
 
         Mapper.Map(input, entity);
         await _taskInfoRepository.UpdateAsync(entity);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -142,17 +136,10 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public IResultOutput Pause([BindRequired]string id)
+    public void Pause([BindRequired][ValidateRequired("请选择任务")]string id)
     {
-        if (id.IsNull())
-        {
-            return ResultOutput.NotOk();
-        }
-
         var scheduler = LazyGetRequiredService<Scheduler>();
         scheduler.PauseTask(id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -160,17 +147,10 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public IResultOutput Resume([BindRequired] string id)
+    public void Resume([BindRequired][ValidateRequired("请选择任务")] string id)
     {
-        if (id.IsNull())
-        {
-            return ResultOutput.NotOk();
-        }
-
         var scheduler = LazyGetRequiredService<Scheduler>();
         scheduler.ResumeTask(id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -178,17 +158,10 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public IResultOutput Run([BindRequired] string id)
+    public void Run([BindRequired][ValidateRequired("请选择任务")] string id)
     {
-        if (id.IsNull())
-        {
-            return ResultOutput.NotOk();
-        }
-
         var scheduler = LazyGetRequiredService<Scheduler>();
         scheduler.RunNowTask(id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -196,16 +169,9 @@ public class TaskService : BaseService, ITaskService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public IResultOutput Delete([BindRequired] string id)
+    public void Delete([BindRequired][ValidateRequired("请选择任务")] string id)
     {
-        if (id.IsNull())
-        {
-            return ResultOutput.NotOk();
-        }
-
         var scheduler = LazyGetRequiredService<Scheduler>();
         scheduler.RemoveTask(id);
-
-        return ResultOutput.Ok();
     }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/Tenant/Dto/TenantUpdateInput.cs

@@ -1,4 +1,7 @@
-namespace ZhonTai.Admin.Services.Tenant.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.Tenant.Dto;
 
 /// <summary>
 /// 修改
@@ -8,5 +11,7 @@ public partial class TenantUpdateInput : TenantAddInput
     /// <summary>
     /// 接口Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择租户")]
     public long Id { get; set; }
 }

+ 7 - 7
src/platform/ZhonTai.Admin/Services/Tenant/ITenantService.cs

@@ -10,17 +10,17 @@ namespace ZhonTai.Admin.Services.Tenant;
 /// </summary>
 public interface ITenantService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<TenantGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetPageAsync(PageInput<TenantGetPageDto> input);
+    Task<PageOutput<TenantListOutput>> GetPageAsync(PageInput<TenantGetPageDto> input);
 
-    Task<IResultOutput> AddAsync(TenantAddInput input);
+    Task<long> AddAsync(TenantAddInput input);
 
-    Task<IResultOutput> UpdateAsync(TenantUpdateInput input);
+    Task UpdateAsync(TenantUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);
+    Task BatchSoftDeleteAsync(long[] ids);
 }

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

@@ -46,10 +46,10 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<TenantGetOutput> GetAsync(long id)
     {
         var result = await _tenantRepository.GetAsync<TenantGetOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -58,7 +58,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<TenantGetPageDto> input)
+    public async Task<PageOutput<TenantListOutput>> GetPageAsync(PageInput<TenantGetPageDto> input)
     {
         var key = input.Filter?.Name;
 
@@ -76,7 +76,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -85,16 +85,16 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> AddAsync(TenantAddInput input)
+    public virtual async Task<long> AddAsync(TenantAddInput input)
     {
         if (await _tenantRepository.Select.AnyAsync(a => a.Name == input.Name))
         {
-            return ResultOutput.NotOk($"企业名称已存在");
+            throw ResultOutput.Exception($"企业名称已存在");
         }
 
         if (await _tenantRepository.Select.AnyAsync(a => a.Code == input.Code))
         {
-            return ResultOutput.NotOk($"企业编码已存在");
+            throw ResultOutput.Exception($"企业编码已存在");
         }
 
         //添加租户
@@ -179,7 +179,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
         tenant.UserId = userId;
         await _tenantRepository.UpdateAsync(tenant);
 
-        return ResultOutput.Ok();
+        return tenant.Id;
     }
 
     /// <summary>
@@ -187,22 +187,16 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(TenantUpdateInput input)
+    public async Task UpdateAsync(TenantUpdateInput input)
     {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _tenantRepository.GetAsync(input.Id);
         if (!(entity?.Id > 0))
         {
-            return ResultOutput.NotOk("租户不存在!");
+            throw ResultOutput.Exception("租户不存在!");
         }
 
         Mapper.Map(input, entity);
         await _tenantRepository.UpdateAsync(entity);
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -211,7 +205,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> DeleteAsync(long id)
+    public virtual async Task DeleteAsync(long id)
     {
         //删除角色权限
         await _rolePermissionRepository.Where(a => a.Role.TenantId == id).DisableGlobalFilter(FilterNames.Tenant).ToDelete().ExecuteAffrowsAsync();
@@ -233,8 +227,6 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
 
         //删除租户
         await _tenantRepository.DeleteAsync(id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -243,7 +235,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
+    public virtual async Task SoftDeleteAsync(long id)
     {
         //删除用户
         await _userRepository.SoftDeleteAsync(a => a.TenantId == id, FilterNames.Tenant);
@@ -253,8 +245,6 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
 
         //删除租户
         var result = await _tenantRepository.SoftDeleteAsync(id);
-
-        return ResultOutput.Result(result);
     }
 
     /// <summary>
@@ -263,7 +253,7 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
     /// <param name="ids"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
+    public virtual async Task BatchSoftDeleteAsync(long[] ids)
     {
         //删除用户
         await _userRepository.SoftDeleteAsync(a => ids.Contains(a.TenantId.Value), FilterNames.Tenant);
@@ -273,7 +263,5 @@ public class TenantService : BaseService, ITenantService, IDynamicApi
 
         //删除租户
         var result = await _tenantRepository.SoftDeleteAsync(ids);
-
-        return ResultOutput.Result(result);
     }
 }

+ 3 - 0
src/platform/ZhonTai.Admin/Services/User/Dto/UserUpdateInput.cs

@@ -1,5 +1,6 @@
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
 using ZhonTai.Admin.Domain.User;
 
 namespace ZhonTai.Admin.Services.User.Dto;
@@ -12,6 +13,8 @@ public partial class UserUpdateInput
     /// <summary>
     /// 主键Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择用户")]
     public long Id { get; set; }
 
     /// <summary>

+ 17 - 13
src/platform/ZhonTai.Admin/Services/User/IUserService.cs

@@ -1,4 +1,6 @@
-using System.Collections.Generic;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using System.Collections.Generic;
 using System.Threading.Tasks;
 using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Domain.User.Dto;
@@ -12,31 +14,33 @@ namespace ZhonTai.Admin.Services.User;
 /// </summary>
 public interface IUserService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<UserGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetPageAsync(PageInput<long?> input);
+    Task<PageOutput<UserGetPageOutput>> GetPageAsync(PageInput<long?> input);
 
-    Task<ResultOutput<AuthLoginOutput>> GetLoginUserAsync(long id);
+    Task<AuthLoginOutput> GetLoginUserAsync(long id);
 
     Task<DataPermissionDto> GetDataPermissionAsync();
 
-    Task<IResultOutput> AddAsync(UserAddInput input);
+    Task<long> AddAsync(UserAddInput input);
 
-    Task<IResultOutput> UpdateAsync(UserUpdateInput input);
+    Task UpdateAsync(UserUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> BatchDeleteAsync(long[] ids);
+    Task BatchDeleteAsync(long[] ids);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);
+    Task BatchSoftDeleteAsync(long[] ids);
 
-    Task<IResultOutput> ChangePasswordAsync(UserChangePasswordInput input);
+    Task ChangePasswordAsync(UserChangePasswordInput input);
 
-    Task<IResultOutput> UpdateBasicAsync(UserUpdateBasicInput input);
+    Task UpdateBasicAsync(UserUpdateBasicInput input);
 
-    Task<IResultOutput> GetBasicAsync();
+    Task<UserUpdateBasicInput> GetBasicAsync();
 
     Task<IList<UserPermissionsOutput>> GetPermissionsAsync();
+
+    Task<string> AvatarUpload([FromForm] IFormFile file);
 }

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

@@ -57,7 +57,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<UserGetOutput> GetAsync(long id)
     {
         var userEntity = await _userRepository.Select
         .WhereDynamic(id)
@@ -84,7 +84,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
 
         var output = Mapper.Map<UserGetOutput>(userEntity);
 
-        return ResultOutput.Ok(output);
+        return output;
     }
 
     /// <summary>
@@ -93,7 +93,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [HttpPost]
-    public async Task<IResultOutput> GetPageAsync(PageInput<long?> input)
+    public async Task<PageOutput<UserGetPageOutput>> GetPageAsync(PageInput<long?> input)
     {
         var orgId = input.Filter;
         var list = await _userRepository.Select
@@ -111,7 +111,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
             Total = total
         };
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -120,7 +120,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [NonAction]
-    public async Task<ResultOutput<AuthLoginOutput>> GetLoginUserAsync(long id)
+    public async Task<AuthLoginOutput> GetLoginUserAsync(long id)
     {
         var output = new ResultOutput<AuthLoginOutput>();
         var entityDto = await _userRepository.Select.DisableGlobalFilter(FilterNames.Tenant)
@@ -133,7 +133,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
             entityDto.TenantType = tenant.TenantType;
             entityDto.DbKey = tenant.DbKey;
         }
-        return output.Ok(entityDto);
+        return entityDto;
     }
 
     /// <summary>
@@ -224,15 +224,15 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// 查询用户基本信息
     /// </summary>
     /// <returns></returns>
-    public async Task<IResultOutput> GetBasicAsync()
+    public async Task<UserUpdateBasicInput> GetBasicAsync()
     {
         if (!(User?.Id > 0))
         {
-            return ResultOutput.NotOk("未登录!");
+            throw ResultOutput.Exception("未登录!");
         }
 
         var data = await _userRepository.GetAsync<UserUpdateBasicInput>(User.Id);
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -272,21 +272,21 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> AddAsync(UserAddInput input)
+    public virtual async Task<long> AddAsync(UserAddInput input)
     {
         if (await _userRepository.Select.AnyAsync(a => a.UserName == input.UserName))
         {
-            return ResultOutput.NotOk($"账号已存在");
+            throw ResultOutput.Exception($"账号已存在");
         }
 
         if (input.Mobile.NotNull() && await _userRepository.Select.AnyAsync(a => a.Mobile == input.Mobile))
         {
-            return ResultOutput.NotOk($"手机号已存在");
+            throw ResultOutput.Exception($"手机号已存在");
         }
 
         if (input.Email.NotNull() && await _userRepository.Select.AnyAsync(a => a.Email == input.Email))
         {
-            return ResultOutput.NotOk($"邮箱已存在");
+            throw ResultOutput.Exception($"邮箱已存在");
         }
 
         // 用户信息
@@ -300,11 +300,6 @@ public class UserService : BaseService, IUserService, IDynamicApi
         var entity = Mapper.Map<UserEntity>(input);
         var user = await _userRepository.InsertAsync(entity);
 
-        if (!(user?.Id > 0))
-        {
-            return ResultOutput.NotOk("新增用户失败");
-        }
-
         var userId = user.Id;
 
         //用户角色
@@ -334,7 +329,7 @@ public class UserService : BaseService, IUserService, IDynamicApi
             await _userOrgRepository.InsertAsync(orgs);
         }
 
-        return ResultOutput.Ok();
+        return userId;
     }
 
     /// <summary>
@@ -343,27 +338,27 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> UpdateAsync(UserUpdateInput input)
+    public virtual async Task UpdateAsync(UserUpdateInput input)
     {
         var user = await _userRepository.GetAsync(input.Id);
         if (!(user?.Id > 0))
         {
-            return ResultOutput.NotOk("用户不存在");
+            throw ResultOutput.Exception("用户不存在");
         }
 
         if (await _userRepository.Select.AnyAsync(a => a.Id != input.Id && a.UserName == input.UserName))
         {
-            return ResultOutput.NotOk($"账号已存在");
+            throw ResultOutput.Exception($"账号已存在");
         }
 
         if (input.Mobile.NotNull() && await _userRepository.Select.AnyAsync(a => a.Id != input.Id && a.Mobile == input.Mobile))
         {
-            return ResultOutput.NotOk($"手机号已存在");
+            throw ResultOutput.Exception($"手机号已存在");
         }
 
         if (input.Email.NotNull() && await _userRepository.Select.AnyAsync(a => a.Id != input.Id && a.Email == input.Email))
         {
-            return ResultOutput.NotOk($"邮箱已存在");
+            throw ResultOutput.Exception($"邮箱已存在");
         }
 
         Mapper.Map(input, user);
@@ -406,8 +401,6 @@ public class UserService : BaseService, IUserService, IDynamicApi
         }
 
         await Cache.DelAsync(CacheKeys.DataPermission + user.Id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -415,13 +408,11 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateBasicAsync(UserUpdateBasicInput input)
+    public async Task UpdateBasicAsync(UserUpdateBasicInput input)
     {
         var entity = await _userRepository.GetAsync(input.Id);
         entity = Mapper.Map(input, entity);
         await _userRepository.UpdateAsync(entity);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -429,26 +420,24 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> ChangePasswordAsync(UserChangePasswordInput input)
+    public async Task ChangePasswordAsync(UserChangePasswordInput input)
     {
         if (input.ConfirmPassword != input.NewPassword)
         {
-            return ResultOutput.NotOk("新密码和确认密码不一致");
+            throw ResultOutput.Exception("新密码和确认密码不一致");
         }
 
         var entity = await _userRepository.GetAsync(input.Id);
         var oldPassword = MD5Encrypt.Encrypt32(input.OldPassword);
         if (oldPassword != entity.Password)
         {
-            return ResultOutput.NotOk("旧密码不正确");
+            throw ResultOutput.Exception("旧密码不正确");
         }
 
         input.Password = MD5Encrypt.Encrypt32(input.NewPassword);
 
         entity = Mapper.Map(input, entity);
         await _userRepository.UpdateAsync(entity);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -457,17 +446,17 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> DeleteAsync(long id)
+    public virtual async Task DeleteAsync(long id)
     {
         var user = await _userRepository.Select.WhereDynamic(id).ToOneAsync(a => new { a.Type });
         if(user == null)
         {
-            return ResultOutput.NotOk("用户不存在");
+            throw ResultOutput.Exception("用户不存在");
         }
 
         if(user.Type == UserType.PlatformAdmin || user.Type == UserType.TenantAdmin)
         {
-            return ResultOutput.NotOk("平台管理员禁止删除");
+            throw ResultOutput.Exception("平台管理员禁止删除");
         }
 
         //删除用户角色
@@ -480,8 +469,6 @@ public class UserService : BaseService, IUserService, IDynamicApi
         await _userRepository.DeleteAsync(a => a.Id == id);
 
         await Cache.DelAsync(CacheKeys.DataPermission + id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -490,14 +477,14 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="ids"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> BatchDeleteAsync(long[] ids)
+    public virtual async Task BatchDeleteAsync(long[] ids)
     {
         var admin = await _userRepository.Select.Where(a => ids.Contains(a.Id) && 
         (a.Type == UserType.PlatformAdmin || a.Type == UserType.TenantAdmin)).AnyAsync();
 
         if (admin)
         {
-            return ResultOutput.NotOk("平台管理员禁止删除");
+            throw ResultOutput.Exception("平台管理员禁止删除");
         }
        
         //删除用户角色
@@ -513,8 +500,6 @@ public class UserService : BaseService, IUserService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -523,17 +508,17 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="id"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> SoftDeleteAsync(long id)
+    public virtual async Task SoftDeleteAsync(long id)
     {
         var user = await _userRepository.Select.WhereDynamic(id).ToOneAsync(a => new { a.Type });
         if (user == null)
         {
-            return ResultOutput.NotOk("用户不存在");
+            throw ResultOutput.Exception("用户不存在");
         }
 
         if (user.Type == UserType.PlatformAdmin || user.Type == UserType.TenantAdmin)
         {
-            return ResultOutput.NotOk("平台管理员禁止删除");
+            throw ResultOutput.Exception("平台管理员禁止删除");
         }
 
         await _userRoleRepository.DeleteAsync(a => a.UserId == id);
@@ -542,8 +527,6 @@ public class UserService : BaseService, IUserService, IDynamicApi
         await _userRepository.SoftDeleteAsync(id);
 
         await Cache.DelAsync(CacheKeys.DataPermission + id);
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -552,14 +535,14 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <param name="ids"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
+    public virtual async Task BatchSoftDeleteAsync(long[] ids)
     {
         var admin = await _userRepository.Select.Where(a => ids.Contains(a.Id) && 
         (a.Type == UserType.PlatformAdmin || a.Type == UserType.TenantAdmin)).AnyAsync();
 
         if (admin)
         {
-            return ResultOutput.NotOk("平台管理员禁止删除");
+            throw ResultOutput.Exception("平台管理员禁止删除");
         }
 
         await _userRoleRepository.DeleteAsync(a => ids.Contains(a.UserId));
@@ -571,8 +554,6 @@ public class UserService : BaseService, IUserService, IDynamicApi
         {
             await Cache.DelAsync(CacheKeys.DataPermission + userId);
         }
-
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -582,17 +563,12 @@ public class UserService : BaseService, IUserService, IDynamicApi
     /// <returns></returns>
     [HttpPost]
     [Login]
-    public async Task<IResultOutput> AvatarUpload([FromForm] IFormFile file)
+    public async Task<string> AvatarUpload([FromForm] IFormFile file)
     {
         var uploadConfig = LazyGetRequiredService<IOptionsMonitor<UploadConfig>>().CurrentValue;
         var uploadHelper = LazyGetRequiredService<UploadHelper>();
         var config = uploadConfig.Avatar;
-        var res = await uploadHelper.UploadAsync(file, config, new { User.Id });
-        if (res.Success)
-        {
-            return ResultOutput.Ok(res.Data.FileRelativePath);
-        }
-
-        return ResultOutput.NotOk(res.Msg ?? "上传失败!");
+        var fileInfo = await uploadHelper.UploadAsync(file, config, new { User.Id });
+        return fileInfo.FileRelativePath;
     }
 }

+ 6 - 1
src/platform/ZhonTai.Admin/Services/View/Dto/ViewUpdateInput.cs

@@ -1,4 +1,7 @@
-namespace ZhonTai.Admin.Services.View.Dto;
+using System.ComponentModel.DataAnnotations;
+using ZhonTai.Admin.Core.Validators;
+
+namespace ZhonTai.Admin.Services.View.Dto;
 
 /// <summary>
 /// 修改
@@ -8,5 +11,7 @@ public class ViewUpdateInput : ViewAddInput
     /// <summary>
     /// 视图Id
     /// </summary>
+    [Required]
+    [ValidateRequired("请选择视图")]
     public long Id { get; set; }
 }

+ 10 - 10
src/platform/ZhonTai.Admin/Services/View/IViewService.cs

@@ -1,5 +1,5 @@
-using System.Threading.Tasks;
-using ZhonTai.Admin.Core.Dto;
+using System.Collections.Generic;
+using System.Threading.Tasks;
 using ZhonTai.Admin.Services.View.Dto;
 
 namespace ZhonTai.Admin.Services.View;
@@ -9,19 +9,19 @@ namespace ZhonTai.Admin.Services.View;
 /// </summary>
 public interface IViewService
 {
-    Task<IResultOutput> GetAsync(long id);
+    Task<ViewGetOutput> GetAsync(long id);
 
-    Task<IResultOutput> GetListAsync(string key);
+    Task<List<ViewListOutput>> GetListAsync(string key);
 
-    Task<IResultOutput> AddAsync(ViewAddInput input);
+    Task<long> AddAsync(ViewAddInput input);
 
-    Task<IResultOutput> UpdateAsync(ViewUpdateInput input);
+    Task UpdateAsync(ViewUpdateInput input);
 
-    Task<IResultOutput> DeleteAsync(long id);
+    Task DeleteAsync(long id);
 
-    Task<IResultOutput> SoftDeleteAsync(long id);
+    Task SoftDeleteAsync(long id);
 
-    Task<IResultOutput> BatchSoftDeleteAsync(long[] ids);
+    Task BatchSoftDeleteAsync(long[] ids);
 
-    Task<IResultOutput> SyncAsync(ViewSyncInput input);
+    Task SyncAsync(ViewSyncInput input);
 }

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

@@ -29,10 +29,10 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetAsync(long id)
+    public async Task<ViewGetOutput> GetAsync(long id)
     {
         var result = await _viewRepository.GetAsync<ViewGetOutput>(id);
-        return ResultOutput.Ok(result);
+        return result;
     }
 
     /// <summary>
@@ -40,7 +40,7 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// </summary>
     /// <param name="key"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> GetListAsync(string key)
+    public async Task<List<ViewListOutput>> GetListAsync(string key)
     {
         var data = await _viewRepository
             .WhereIf(key.NotNull(), a => a.Path.Contains(key) || a.Label.Contains(key))
@@ -48,7 +48,7 @@ public class ViewService : BaseService, IViewService, IDynamicApi
             .OrderBy(a => a.Sort)
             .ToListAsync<ViewListOutput>();
 
-        return ResultOutput.Ok(data);
+        return data;
     }
 
     /// <summary>
@@ -56,12 +56,12 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> AddAsync(ViewAddInput input)
+    public async Task<long> AddAsync(ViewAddInput input)
     {
         var entity = Mapper.Map<ViewEntity>(input);
-        var id = (await _viewRepository.InsertAsync(entity)).Id;
+        await _viewRepository.InsertAsync(entity);
 
-        return ResultOutput.Result(id > 0);
+        return entity.Id;
     }
 
     /// <summary>
@@ -69,22 +69,16 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> UpdateAsync(ViewUpdateInput input)
+    public async Task UpdateAsync(ViewUpdateInput input)
     {
-        if (!(input?.Id > 0))
-        {
-            return ResultOutput.NotOk();
-        }
-
         var entity = await _viewRepository.GetAsync(input.Id);
         if (!(entity?.Id > 0))
         {
-            return ResultOutput.NotOk("视图不存在!");
+            throw ResultOutput.Exception("视图不存在!");
         }
 
         Mapper.Map(input, entity);
         await _viewRepository.UpdateAsync(entity);
-        return ResultOutput.Ok();
     }
 
     /// <summary>
@@ -92,15 +86,9 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> DeleteAsync(long id)
+    public async Task DeleteAsync(long id)
     {
-        var result = false;
-        if (id > 0)
-        {
-            result = (await _viewRepository.DeleteAsync(m => m.Id == id)) > 0;
-        }
-
-        return ResultOutput.Result(result);
+        await _viewRepository.DeleteAsync(m => m.Id == id);
     }
 
     /// <summary>
@@ -108,11 +96,9 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// </summary>
     /// <param name="id"></param>
     /// <returns></returns>
-    public async Task<IResultOutput> SoftDeleteAsync(long id)
+    public async Task SoftDeleteAsync(long id)
     {
-        var result = await _viewRepository.SoftDeleteAsync(id);
-
-        return ResultOutput.Result(result);
+        await _viewRepository.SoftDeleteAsync(id);
     }
 
     /// <summary>
@@ -121,11 +107,9 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// <param name="ids"></param>
     /// <returns></returns>
 
-    public async Task<IResultOutput> BatchSoftDeleteAsync(long[] ids)
+    public async Task BatchSoftDeleteAsync(long[] ids)
     {
-        var result = await _viewRepository.SoftDeleteAsync(ids);
-
-        return ResultOutput.Result(result);
+        await _viewRepository.SoftDeleteAsync(ids);
     }
 
     /// <summary>
@@ -134,7 +118,7 @@ public class ViewService : BaseService, IViewService, IDynamicApi
     /// <param name="input"></param>
     /// <returns></returns>
     [AdminTransaction]
-    public virtual async Task<IResultOutput> SyncAsync(ViewSyncInput input)
+    public virtual async Task SyncAsync(ViewSyncInput input)
     {
         //查询所有视图
         var views = await _viewRepository.Select.ToListAsync();
@@ -206,8 +190,5 @@ public class ViewService : BaseService, IViewService, IDynamicApi
             .UpdateColumns(a => new { a.Label, a.Name, a.Path, a.Enabled, a.Description })
             .ExecuteAffrowsAsync();
         }
-        
-
-        return ResultOutput.Ok();
     }
 }

+ 0 - 14
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -3733,13 +3733,6 @@
             文档服务
             </summary>
         </member>
-        <member name="M:ZhonTai.Admin.Services.Document.DocumentService.GetAsync(System.Int64)">
-            <summary>
-            查询文档
-            </summary>
-            <param name="id"></param>
-            <returns></returns>
-        </member>
         <member name="M:ZhonTai.Admin.Services.Document.DocumentService.GetGroupAsync(System.Int64)">
             <summary>
             查询分组
@@ -4721,13 +4714,6 @@
             <param name="permissionIds"></param>
             <returns></returns>
         </member>
-        <member name="M:ZhonTai.Admin.Services.Permission.PermissionService.GetAsync(System.Int64)">
-            <summary>
-            查询权限
-            </summary>
-            <param name="id"></param>
-            <returns></returns>
-        </member>
         <member name="M:ZhonTai.Admin.Services.Permission.PermissionService.GetGroupAsync(System.Int64)">
             <summary>
             查询分组