refactor: ♻️ 框架&业务代码分离 (#185)

Co-authored-by: tk <fiyne1a@dingtalk.com>
This commit is contained in:
2024-11-04 12:06:50 +08:00
committed by GitHub
parent 072cc1e491
commit 13ba536df2
404 changed files with 4579 additions and 1283 deletions

View File

@ -25,16 +25,16 @@ global using FreeSql;
global using FreeSql.Aop;
global using FreeSql.DataAnnotations;
global using FreeSql.Internal.Model;
global using Furion;
global using Furion.Authorization;
global using Furion.ConfigurableOptions;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.EventBus;
global using Furion.SpecificationDocument;
global using Furion.UnifyResult;
global using Gurion;
global using Gurion.Authorization;
global using Gurion.ConfigurableOptions;
global using Gurion.DataEncryption;
global using Gurion.DataValidation;
global using Gurion.DependencyInjection;
global using Gurion.DynamicApiController;
global using Gurion.EventBus;
global using Gurion.SpecificationDocument;
global using Gurion.UnifyResult;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Builder;

View File

@ -1,9 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.AdmServer.Domain/NetAdmin.AdmServer.Domain.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="MailKit" Version="4.8.0"/>
</ItemGroup>
</Project>

View File

@ -1,2 +0,0 @@
<wpf:ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml:space="preserve">
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=services_005Cadm_005Cpartial/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
<ProjectReference Include="../NetAdmin.AdmServer.Application/NetAdmin.AdmServer.Application.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
</ItemGroup>
</Project>

View File

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<Content Include="$(SolutionDir)/assets/seed-data/Adm_*.json" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../NetAdmin.AdmServer.Infrastructure/NetAdmin.AdmServer.Infrastructure.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Domain/NetAdmin.SysComponent.Domain.csproj"/>
</ItemGroup>
</Project>

View File

@ -1,8 +1,8 @@
using NetAdmin.AdmServer.Host.Filters;
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.DbMaps.Dependency.Fields;
using NetAdmin.Domain.Enums.Sys;
using NetAdmin.Host.Extensions;
using NetAdmin.SysComponent.Domain.Contexts;
using NetAdmin.SysComponent.Domain.Enums.Sys;
using NetAdmin.SysComponent.Host.Extensions;
namespace NetAdmin.AdmServer.Host.Extensions;

View File

@ -1,17 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<EmbeddedResource Include="$(SolutionDir)/assets/captcha/**" LinkBase="Assets/Captcha"/>
<EmbeddedResource Include="$(SolutionDir)/CHANGELOG.md" LogicalName="CHANGELOG.md"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
<ProjectReference Include="../NetAdmin.AdmServer.Cache/NetAdmin.AdmServer.Cache.csproj"/>
</ItemGroup>
<ItemGroup>
<None Update="*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<ProjectReference Include="../NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' != 'Debug'">
<EmbeddedResource Include="../../../dist/frontend/admin/**/*" LinkBase="UI"/>

View File

@ -91,7 +91,8 @@ namespace NetAdmin.AdmServer.Host
.AddFreeSqlWithArgs() // 添加 freeSql
.AddRemoteRequest() // 添加远程请求
.AddCorsAccessor() // 添加支持跨域访问
.AddContextUser() // 添加上下文用户
.AddContextUserToken() // 添加上下文用户令牌
.AddContextUserInfo() // 添加上下文用户信息
.AddRedisCache() // 添加 Redis 缓存
.AddSchedules() // 添加计划任务

View File

@ -1,45 +0,0 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Sys",
"Title": "系统组件",
"Description": "NetAdmin - 系统组件",
},
{
"Group": "Adm",
"Title": "管理服务",
"Description": "NetAdmin - 管理服务",
},
{
"Group": "Tpl",
"Visible": false,
},
{
"Group": "Probe",
"Visible": false,
}
],
"SecurityDefinitions": [
{
"Id": "Bearer",
"Type": "ApiKey",
"Name": "Authorization",
"Description": "JWT Authorization header using the Bearer scheme.",
"BearerFormat": "JWT",
"Scheme": "bearer",
"In": "Header",
"Requirement": {
"Scheme": {
"Reference": {
"Id": "Bearer",
"Type": "SecurityScheme"
},
"Accesses": []
}
}
}
]
}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore": "Debug",
"System.Logging.EventBusService": "Debug"
},
}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore": "Debug",
"System.Logging.EventBusService": "Debug"
},
}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft.AspNetCore": "Debug",
"System.Logging.EventBusService": "Debug"
},
}
}

View File

@ -0,0 +1,99 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// Swagger文档配置 ------------------------------------------------------------------------------
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Sys",
"Title": "系统组件",
"Description": "NetAdmin - 系统组件"
},
{
"Group": "Adm",
"Title": "管理服务",
"Description": "NetAdmin - 管理服务"
},
{
"Group": "Tpl",
"Visible": false
},
{
"Group": "Probe",
"Visible": false
}
],
"XmlComments": [
"NetAdmin.AdmServer.Application.xml",
"NetAdmin.AdmServer.Cache.xml",
"NetAdmin.AdmServer.Domain.xml",
"NetAdmin.AdmServer.Host.xml",
"NetAdmin.AdmServer.Infrastructure.xml",
"FreeSql.xml",
"NetAdmin.Application.xml",
"NetAdmin.Cache.xml",
"NetAdmin.Domain.xml",
"NetAdmin.Host.xml",
"NetAdmin.Infrastructure.xml",
"NetAdmin.SysComponent.Application.xml",
"NetAdmin.SysComponent.Cache.xml",
"NetAdmin.SysComponent.Domain.xml",
"NetAdmin.SysComponent.Host.xml",
"NetAdmin.SysComponent.Infrastructure.xml"
]
},
// 数据库配置 --------------------------------------------------------------------------------------------------------
"Database": {
"DbType": "Sqlite",
"ConnStr": "data source=NetAdmin.db",
"SeedDataRelativePath": "SeedData"
},
// JWT鉴权配置 -------------------------------------------------------------------------------------------------------
"JWTSettings": {
"ValidateIssuerSigningKey": true,
"IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
"ValidateIssuer": true,
"ValidIssuer": "签发方",
"ValidateAudience": true,
"ValidAudience": "签收方",
"ValidateLifetime": true,
"ExpiredTime": 5256000,
"ClockSkew": 5,
"Algorithm": "HS256"
},
// 日志配置 ----------------------------------------------------------------------------------------------------------
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"System.Logging.EventBusService": "Error"
}
},
// Redis配置 --------------------------------------------------------------------------------------------------------
"Redis": {
"Instances": [
{
"Name": "DataCache",
"ConnStr": "localhost:6379,abortConnect=false",
"DataBase": 0
}
]
},
// 文件上传配置 -------------------------------------------------------------------------------------------------------
"Upload": {
"ContentTypes": [
"image/jpg",
"image/png",
"image/jpeg",
"image/gif"
],
"MaxSize": 1073741824,
"Minio": {
"ServerAddress": "vm-ubt-1:9000",
"AccessKey": "nVMM0gSqwyIjM8iZ",
"SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
"BucketName": "cloud-code",
"AccessUrl": "http://vm-ubt-1:9000",
"Secure": false
}
},
}

View File

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
</ItemGroup>
<ItemGroup>
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Statements.ln">
<Link>Languages/NetAdmin.AdmServer.Statements.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/NetAdmin.AdmServer.Fields.ln">
<Link>Languages/NetAdmin.AdmServer.Fields.ln</Link>
</None>
</ItemGroup>
<ItemGroup>
<None Update="*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -1,6 +1,7 @@
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
namespace NetAdmin.SysComponent.Application.Modules.Tpl;
namespace NetAdmin.Application.Modules.Tpl;
/// <summary>
/// 示例模块

View File

@ -1,7 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.Domain/NetAdmin.Domain.csproj"/>

View File

@ -0,0 +1,8 @@
using NetAdmin.Application.Modules.Tpl;
namespace NetAdmin.Application.Services.Tpl.Dependency;
/// <summary>
/// 示例服务
/// </summary>
public interface IExampleService : IService, IExampleModule;

View File

@ -1,8 +1,10 @@
using NetAdmin.Application.Repositories;
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Domain.DbMaps.Tpl;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
namespace NetAdmin.SysComponent.Application.Services.Tpl;
namespace NetAdmin.Application.Services.Tpl;
/// <inheritdoc cref="IExampleService" />
public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
@ -27,10 +29,10 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
{
req.ThrowIfInvalid();
return QueryInternal(req)
#if DBTYPE_SQLSERVER
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.CountAsync();
#endif
.CountAsync();
}
/// <inheritdoc />
@ -53,10 +55,10 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
{
req.ThrowIfInvalid();
return QueryInternal(req)
#if DBTYPE_SQLSERVER
#if DBTYPE_SQLSERVER
.WithLock(SqlServerLock.NoLock | SqlServerLock.NoWait)
#endif
.AnyAsync();
#endif
.AnyAsync();
}
/// <inheritdoc />

View File

@ -0,0 +1,9 @@
using NetAdmin.Application.Modules.Tpl;
using NetAdmin.Application.Services.Tpl.Dependency;
namespace NetAdmin.Cache.Tpl.Dependency;
/// <summary>
/// 示例缓存
/// </summary>
public interface IExampleCache : ICache<IDistributedCache, IExampleService>, IExampleModule;

View File

@ -1,8 +1,9 @@
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Cache.Tpl.Dependency;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
namespace NetAdmin.SysComponent.Cache.Tpl;
namespace NetAdmin.Cache.Tpl;
/// <inheritdoc cref="IExampleCache" />
public sealed class ExampleCache(IDistributedCache cache, IExampleService service)

View File

@ -1,5 +1,3 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Contexts;
/// <summary>
@ -43,9 +41,9 @@ public sealed record ContextUserToken : DataAbstraction
/// <summary>
/// 从 QueryUserRsp 创建上下文用户
/// </summary>
public static ContextUserToken Create(QueryUserRsp user)
public static ContextUserToken Create(long id, Guid token, string userName, long deptId)
{
return new ContextUserToken { Id = user.Id, Token = user.Token, UserName = user.UserName, DeptId = user.DeptId };
return new ContextUserToken { Id = id, Token = token, UserName = userName, DeptId = deptId };
}
/// <summary>

View File

@ -1,7 +1,7 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
/// <summary>
/// 更新用户字段接口
/// 修改用户字段接口
/// </summary>
public interface IFieldModifiedUser
{

View File

@ -1,12 +1,12 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
/// <summary>
/// 描述字段接口
/// 备注字段接口
/// </summary>
public interface IFieldSummary
{
/// <summary>
/// 描述
/// 备注
/// </summary>
string Summary { get; init; }
}

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc />
public abstract record ImmutableEntity : ImmutableEntity<long>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@ -17,19 +19,25 @@ public abstract record ImmutableEntity : ImmutableEntity<long>
public abstract record ImmutableEntity<T> : LiteImmutableEntity<T>, IFieldCreatedUser
where T : IEquatable<T>
{
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserId" />
/// <summary>
/// 创建者编号
/// </summary>
[Column(CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public long? CreatedUserId { get; init; }
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserName" />
/// <summary>
/// 创建者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc />
public abstract record LiteImmutableEntity : LiteImmutableEntity<long>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@ -17,13 +19,17 @@ public abstract record LiteImmutableEntity : LiteImmutableEntity<long>
public abstract record LiteImmutableEntity<T> : EntityBase<T>, IFieldCreatedTime
where T : IEquatable<T>
{
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
/// <summary>
/// 创建时间
/// </summary>
[Column(ServerTime = DateTimeKind.Local, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual DateTime CreatedTime { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc />
public abstract record LiteMutableEntity : LiteMutableEntity<long>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@ -16,12 +18,16 @@ public abstract record LiteMutableEntity : LiteMutableEntity<long>
public abstract record LiteMutableEntity<T> : LiteImmutableEntity<T>, IFieldModifiedTime
where T : IEquatable<T>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }
/// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" />
/// <summary>
/// 修改时间
/// </summary>
[Column(ServerTime = DateTimeKind.Local, CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc />
public abstract record LiteVersionEntity : LiteVersionEntity<long>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@ -16,13 +18,17 @@ public abstract record LiteVersionEntity : LiteVersionEntity<long>
public abstract record LiteVersionEntity<T> : LiteMutableEntity<T>, IFieldVersion
where T : IEquatable<T>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
public override T Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
/// <summary>
/// 数据版本
/// </summary>
[Column(IsVersion = true, Position = -1)]
[CsvIgnore]
[JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc />
public abstract record MutableEntity : MutableEntity<long>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@ -16,30 +18,40 @@ public abstract record MutableEntity : MutableEntity<long>
public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUser, IFieldModifiedUser
where T : IEquatable<T>
{
/// <inheritdoc />
/// <summary>
/// 创建者编号
/// </summary>
[Column(CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual long? CreatedUserId { get; init; }
/// <inheritdoc />
/// <summary>
/// 创建者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" />
/// <summary>
/// 修改者编号
/// </summary>
[Column(CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public long? ModifiedUserId { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" />
/// <summary>
/// 修改者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc />
public abstract record SimpleEntity : SimpleEntity<long>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]

View File

@ -3,7 +3,9 @@ namespace NetAdmin.Domain.DbMaps.Dependency;
/// <inheritdoc />
public abstract record VersionEntity : VersionEntity<long>
{
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[Snowflake]
@ -16,30 +18,40 @@ public abstract record VersionEntity : VersionEntity<long>
public abstract record VersionEntity<T> : LiteVersionEntity<T>, IFieldModifiedUser, IFieldCreatedUser
where T : IEquatable<T>
{
/// <inheritdoc />
/// <summary>
/// 创建者编号
/// </summary>
[Column(CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual long? CreatedUserId { get; init; }
/// <inheritdoc />
/// <summary>
/// 创建者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanUpdate = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
/// <summary>
/// 唯一编码
/// </summary>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
public override T Id { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" />
/// <summary>
/// 修改者编号
/// </summary>
[Column(CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]
public virtual long? ModifiedUserId { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" />
/// <summary>
/// 修改者用户名
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore]
[JsonIgnore]

View File

@ -8,6 +8,7 @@ public record RestfulInfo<T> : DataAbstraction
/// <summary>
/// 代码
/// </summary>
/// <example>succeed</example>
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public ErrorCodes Code { get; init; }
@ -17,7 +18,8 @@ public record RestfulInfo<T> : DataAbstraction
public T Data { get; init; }
/// <summary>
/// 消息
/// 字符串:"消息内容",或数组:[{"参数名1":"消息内容1"},{"参数名2":"消息内容2"}]
/// </summary>
/// <example>请求成功</example>
public object Msg { get; init; }
}

View File

@ -1,11 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<Content Include="$(SolutionDir)/assets/seed-data/**" LinkBase="SeedData" CopyToOutputDirectory="PreserveNewest"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
</ItemGroup>

View File

@ -1,13 +1,5 @@
global using NetAdmin.Domain.Attributes;
global using NetAdmin.Domain.Attributes.DataValidation;
global using NetAdmin.Domain.Attributes;
global using NetAdmin.Domain.DbMaps.Dependency;
global using NetAdmin.Domain.DbMaps.Dependency.Fields;
global using NetAdmin.Domain.DbMaps.Sys;
global using NetAdmin.Domain.Dto.Dependency;
global using NetAdmin.Domain.Enums.Sys;
global using CsvIgnore = CsvHelper.Configuration.Attributes.IgnoreAttribute;
global using CsvIndex = CsvHelper.Configuration.Attributes.IndexAttribute;
global using CsvName = CsvHelper.Configuration.Attributes.NameAttribute;
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;
global using HttpMethods = NetAdmin.Domain.Enums.HttpMethods;
global using SqlIndex = FreeSql.DataAnnotations.IndexAttribute;
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;

View File

@ -1,9 +1,11 @@
using NetAdmin.Application.Modules.Tpl;
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Cache.Tpl.Dependency;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
using NetAdmin.SysComponent.Application.Modules.Tpl;
using NetAdmin.SysComponent.Application.Services.Tpl.Dependency;
using NetAdmin.SysComponent.Cache.Tpl.Dependency;
using NetAdmin.Host.Attributes;
namespace NetAdmin.SysComponent.Host.Controllers.Tpl;
namespace NetAdmin.Host.Controllers.Tpl;
/// <summary>
/// 示例服务

View File

@ -1,12 +1,7 @@
using Furion.Logging;
using Gurion.Logging;
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.Events;
using NetAdmin.Host.Filters;
using NetAdmin.Host.Utils;
using StackExchange.Redis;
using Yitter.IdGenerator;
using FreeSqlBuilder = NetAdmin.Infrastructure.Utils.FreeSqlBuilder;
#if DEBUG
using Spectre.Console;
#endif
@ -83,7 +78,7 @@ public static class ServiceCollectionExtensions
this IServiceCollection me)
{
var optionsTypes
= from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Furion)) &&
= from type in App.EffectiveTypes.Where(x => !x.IsAbstract && !x.FullName!.Contains(nameof(Gurion)) &&
x.GetInterfaces().Contains(typeof(IConfigurableOptions)))
select type;
@ -126,12 +121,11 @@ public static class ServiceCollectionExtensions
}
/// <summary>
/// 添加上下文用户
/// 添加上下文用户令牌
/// </summary>
public static IServiceCollection AddContextUser(this IServiceCollection me)
public static IServiceCollection AddContextUserToken(this IServiceCollection me)
{
return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create())
.AddScoped(typeof(ContextUserInfo), _ => ContextUserInfo.Create());
return me.AddScoped(typeof(ContextUserToken), _ => ContextUserToken.Create());
}
/// <summary>
@ -142,42 +136,6 @@ public static class ServiceCollectionExtensions
return me.AddEventBus(builder => builder.AddSubscribers(App.Assemblies.ToArray()));
}
/// <summary>
/// 添加 freeSql orm工具
/// </summary>
public static IServiceCollection AddFreeSql( //
this IServiceCollection me, FreeSqlInitMethods initMethods = FreeSqlInitMethods.None, Action<IFreeSql> freeSqlConfig = null)
{
// // 非调试模式下禁止同步数据库
// #if !DEBUG
// initOptions = FreeSqlInitOptions.None;
// #endif
var dbOptions = App.GetOptions<DatabaseOptions>();
var fSql = new FreeSqlBuilder(dbOptions).Build(initMethods);
_ = me.AddSingleton(fSql);
fSql.Aop.AuditValue += SqlAuditor.DataAuditHandler; // Insert/Update自动值处理
var eventPublisher = App.GetService<IEventPublisher>();
#pragma warning disable VSTHRD110
// AOP事件发布异步
fSql.Aop.CommandBefore += (_, e) => eventPublisher.PublishAsync(new SqlCommandBeforeEvent(e)); // 增删查改,执行命令之前触发
fSql.Aop.CommandAfter += (_, e) => eventPublisher.PublishAsync(new SqlCommandAfterEvent(e)); // 增删查改,执行命令完成后触发
fSql.Aop.SyncStructureBefore += (_, e) => eventPublisher.PublishAsync(new SyncStructureBeforeEvent(e)); // CodeFirst迁移执行之前触发
fSql.Aop.SyncStructureAfter += (_, e) => eventPublisher.PublishAsync(new SyncStructureAfterEvent(e)); // CodeFirst迁移执行完成触发
#pragma warning restore VSTHRD110
// 全局过滤器设置
freeSqlConfig?.Invoke(fSql);
return me.AddScoped<UnitOfWorkManager>() // 注入工作单元管理器
.AddFreeRepository(null, App.Assemblies.ToArray()) // 批量注入 Repository
.AddMvcFilter<TransactionInterceptor>(); // 注入事务拦截器
}
/// <summary>
/// 添加内存缓存
/// </summary>

View File

@ -1,4 +1,4 @@
using Furion.FriendlyException;
using Gurion.FriendlyException;
using NetAdmin.Domain.Dto;
namespace NetAdmin.Host.Filters;

View File

@ -1,4 +1,4 @@
using Furion.FriendlyException;
using Gurion.FriendlyException;
using NetAdmin.Domain.Dto;
namespace NetAdmin.Host.Filters;

View File

@ -1,8 +1,8 @@
using Furion.FriendlyException;
using Gurion.FriendlyException;
namespace NetAdmin.Host.Filters;
/// <inheritdoc cref="Furion.FriendlyException.IGlobalExceptionHandler" />
/// <inheritdoc cref="Gurion.FriendlyException.IGlobalExceptionHandler" />
public sealed class GlobalExceptionHandler(ILogger<GlobalExceptionHandler> logger) : IGlobalExceptionHandler, ISingleton
{
/// <inheritdoc />

View File

@ -0,0 +1,56 @@
namespace NetAdmin.Infrastructure.Attributes;
/// <summary>
/// 国家信息特性
/// </summary>
/// <remarks>
/// https://github.com/countries/countries
/// </remarks>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class CountryAttribute : Attribute
{
/// <summary>
/// 三个字母的国家代码
/// </summary>
public string Alpha3 { get; set; }
/// <summary>
/// 国际电话呼号
/// </summary>
public int CallingCode { get; set; }
/// <summary>
/// 国际电话子呼号(区分同一呼号不同国家)
/// </summary>
public string CallingSubCode { get; set; }
/// <summary>
/// 货币代码
/// </summary>
public string CurrencyCode { get; set; }
/// <summary>
/// 当命中多个国家时的首选国家
/// </summary>
public bool IsPreferred { get; set; }
/// <summary>
/// 官方语言代码
/// </summary>
public string Languages { get; set; }
/// <summary>
/// 国家全称
/// </summary>
public string LongName { get; set; }
/// <summary>
/// 国家简称
/// </summary>
public string ShortName { get; set; }
/// <summary>
/// 非正式名称
/// </summary>
public string UnofficialNames { get; set; }
}

View File

@ -0,0 +1,13 @@
namespace NetAdmin.Infrastructure.Attributes;
/// <summary>
/// 域名特性
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class DomainAttribute : Attribute
{
/// <summary>
/// 主机名称
/// </summary>
public string HostName { get; init; }
}

View File

@ -0,0 +1,17 @@
namespace NetAdmin.Infrastructure.Configuration.Dependency;
/// <summary>
/// API客户端基础选项
/// </summary>
public abstract record ApiClientOptions : OptionAbstraction
{
/// <summary>
/// 网关地址
/// </summary>
public string Gateway { get; set; }
/// <summary>
/// 密钥
/// </summary>
public string Token { get; set; }
}

View File

@ -1,4 +1,4 @@
namespace NetAdmin.Infrastructure.Configuration.Options;
namespace NetAdmin.Infrastructure.Configuration.Dependency;
/// <summary>
/// 选项抽象基类

View File

@ -1,3 +1,5 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
namespace NetAdmin.Infrastructure.Configuration.Options;
/// <summary>

View File

@ -1,3 +1,4 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
using DataType = FreeSql.DataType;
namespace NetAdmin.Infrastructure.Configuration.Options;

View File

@ -1,3 +1,5 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
namespace NetAdmin.Infrastructure.Configuration.Options;
/// <summary>

View File

@ -1,3 +1,5 @@
using NetAdmin.Infrastructure.Configuration.Dependency;
namespace NetAdmin.Infrastructure.Configuration.Options;
/// <summary>

View File

@ -74,14 +74,10 @@ public static class Chars
public const string FLG_HTTP_METHOD_PUT = "PUT";
public const string FLG_HTTP_METHOD_TRACE = "TRACE";
public const string FLG_PATH_API_METRICS = "metrics";
public const string FLG_PATH_API_RPOBE = "api/probe";
public const string FLG_PATH_API_SYS_USER_LOGIN_BY_PWD = "api/sys/user/login.by.pwd";
public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
public const string FLG_RANDOM_UNAME_PWD = "VcXlp7WY";
public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
public const string FLG_SYSTEM_PREFIX = "sc_";
public const string FLG_PATH_API_RPOBE = "api/probe";
public const string FLG_PATH_WEBSOCKET_PREFIX = "ws";
public const string FLG_REDIS_INSTANCE_DATA_CACHE = "DataCache";
public const string FLG_SNOWFLAKE_WORK_ID = "SNOWFLAKE_WORK_ID";
public const string FLGL_HTTP_HEADER_VALUE_UA_MOBILE
= "Mozilla/5.0 (Linux; Android 9; Redmi Note 8 Pro Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.96 Mobile Safari/537.36";

View File

@ -10,26 +10,14 @@ namespace NetAdmin.Infrastructure.Constant;
/// </remarks>
public static class Numbers
{
public const int DEF_PAGE_SIZE_QUERY = 20; // 分页查询默认的页容量
public const long DEF_SORT_VAL = 100; // 排序默认值
public const int HTTP_STATUS_BIZ_FAIL = 900; // Http状态码-业务异常
public const long ID_DIC_CATALOG_GEO_AREA = 379794295185413; // 唯一编号:字典目录-行政区划字典
public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
public const int MAX_LIMIT_EXPORT = 10000; // 最大限制:导出为CSV文件的条
public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数
public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码
public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量
public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制Redis锁重试次数
public const int REQUEST_LOG_BUFF_SIZE = 10; // 请求日志缓冲区大小
public const int SCHEDULED_JOB_PARALLEL_NUM = 5; // 计划作业并发数
public const int SECS_CACHE_CHART = 300; // 秒:缓存时间-仪表
public const int SECS_CACHE_DEFAULT = 60; // 秒:缓存时间-默认
public const int SECS_CACHE_DIC_CATALOG_CODE = 300; // 秒:缓存时间-字典配置-目录代码
public const int SECS_CACHE_LOGIN_BY_USER_ID = 3600 * 24 * 30; // 秒:缓存时间-通过用户编号登录的用户信息
public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒Redis锁过期时间
public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒Redis锁重试间隔
public const int SECS_TIMEOUT_HTTP_CLIENT = 15; // 秒:超时时间-默认HTTP客户端
public const int SECS_TIMEOUT_JOB = 600; // 秒:超时时间-作业
public const int DEF_PAGE_SIZE_QUERY = 20; // 默认值:分页查询页容量
public const int HTTP_STATUS_BIZ_FAIL = 900; // HTTP状态码业务异常
public const int MAX_LIMIT_BULK_REQ = 100; // 最大限制:批量请求数
public const int MAX_LIMIT_EXPORT = 50000; // 最大限制导出为CSV文件的条数
public const int MAX_LIMIT_QUERY = 1000; // 最大限制:非分页查询条数
public const int MAX_LIMIT_QUERY_PAGE_NO = 10000; // 最大限制:分页查询页码
public const int MAX_LIMIT_QUERY_PAGE_SIZE = 100; // 最大限制:分页查询页容量
public const int MAX_LIMIT_RETRY_CNT_REDIS_LOCK = 10; // 最大限制:Redis锁重试次
public const int SECS_REDIS_LOCK_EXPIRY = 60; // 秒Redis锁过期时间
public const int SECS_REDIS_LOCK_RETRY_DELAY = 1; // 秒Redis锁重试间隔
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
// ReSharper disable IdentifierTypo
// ReSharper disable UnusedMember.Global
namespace NetAdmin.Infrastructure.Enums;

View File

@ -35,11 +35,6 @@ public static class GlobalStatic
/// </summary>
public static DateTime LatestLogTime => LogCounterOff ? DateTime.MinValue : Volatile.Read(ref _latestLogTime).Time();
/// <summary>
/// 日志记录器忽略的API编号
/// </summary>
public static string[] LoggerIgnoreApiIds => ["api/adm/tools/query.es.log", "api/probe/health.check", "api/probe/is.system.safety.stopped"];
/// <summary>
/// 系统内部密钥
/// </summary>

View File

@ -5,16 +5,36 @@
<ItemGroup>
<PackageReference Include="FreeSql.DbContext.NS" Version="3.2.833-ns4"/>
<PackageReference Include="FreeSql.Provider.Sqlite.NS" Version="3.2.833-ns4"/>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.5.8"/>
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster.NS" Version="4.9.5.8-ns1"/>
<PackageReference Include="Furion.Pure.NS" Version="4.9.5.8-ns1"/>
<PackageReference Include="Gurion" Version="1.1.0"/>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.11.0"/>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.0.0-rc.2.24474.3"/>
<PackageReference Include="Minio" Version="6.0.3"/>
<PackageReference Include="NSExt" Version="2.2.0"/>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3"/>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="2.1.4"/>
<PackageReference Include="System.Drawing.Common" Version="9.0.0-rc.2.24474.1"/>
</ItemGroup>
<ItemGroup>
<None Include="$(SolutionDir)/assets/res/NetAdmin.Statements.ln">
<Link>Languages/NetAdmin.Statements.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/Nations.ln">
<Link>Languages/Nations.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/NetAdmin.Fields.ln">
<Link>Languages/NetAdmin.Fields.ln</Link>
</None>
<None Include="$(SolutionDir)/assets/res/CountryCodes.ln">
<Link>Languages/CountryCodes.ln</Link>
</None>
<EmbeddedResource Include="$(SolutionDir)/assets/res/Ln.resx">
<Link>Languages/Ln.resx</Link>
<Generator>PublicResXFileCodeGenerator</Generator>
</EmbeddedResource>
<Compile Include="$(SolutionDir)/dist/backend/$(ProjectName)/Ln.Designer.cs">
<Link>Languages/Ln.Designer.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Update="*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

View File

@ -3,13 +3,5 @@
"AppSettings": {
"InjectSpecificationDocument": true,
"InjectMiniProfiler": true
},
"JWTSettings": {
"ExpiredTime": 20000
},
"Logging": {
"LogLevel": {
"Default": "Debug",
},
}
}

View File

@ -3,13 +3,5 @@
"AppSettings": {
"InjectSpecificationDocument": true,
"InjectMiniProfiler": true
},
"JWTSettings": {
"ExpiredTime": 20000
},
"Logging": {
"LogLevel": {
"Default": "Debug",
},
},
}
}

View File

@ -0,0 +1,7 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
"AppSettings": {
"InjectSpecificationDocument": true,
"InjectMiniProfiler": true
}
}

View File

@ -0,0 +1,143 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// App基本配置
"AppSettings": {
"InjectSpecificationDocument": false,
"InjectMiniProfiler": false
},
// Swagger文档配置 ------------------------------------------------------------------------------
"SpecificationDocumentSettings": {
"EnableEnumSchemaFilter": false,
"EnableAuthorized": false,
"RoutePrefix": "swagger",
"SecurityDefinitions": [
{
"Id": "Bearer",
"Type": "ApiKey",
"Name": "Authorization",
"Description": "JWT Authorization header using the Bearer scheme.",
"BearerFormat": "JWT",
"Scheme": "bearer",
"In": "Header",
"Requirement": {
"Scheme": {
"Reference": {
"Id": "Bearer",
"Type": "SecurityScheme"
},
"Accesses": []
}
}
}
],
},
// 验证码配置 --------------------------------------------------------------------------------------------------------
"Captcha": {
"ImageRelativePath": ".data/captcha",
"SecretKey": "1Z?f(2)%v?:X5NYRl+]PSi.rDf7Ip#lB"
},
// 跨域配置 ----------------------------------------------------------------------------------------------------------
"CorsAccessorSettings": {
"WithExposedHeaders": [
"access-token",
"x-access-token",
"content-disposition"
]
},
// 动态webapi配置 ----------------------------------------------------------------------------------------------------
"DynamicApiControllerSettings": {
"VerbToHttpMethods": [
[
"post",
"POST"
],
[
"add",
"POST"
],
[
"create",
"POST"
],
[
"insert",
"POST"
],
[
"submit",
"POST"
],
[
"get",
"POST"
],
[
"find",
"POST"
],
[
"fetch",
"POST"
],
[
"query",
"POST"
],
[
"getlist",
"POST"
],
[
"getall",
"POST"
],
[
"put",
"POST"
],
[
"update",
"POST"
],
[
"delete",
"POST"
],
[
"remove",
"POST"
],
[
"clear",
"POST"
],
[
"patch",
"POST"
]
],
"CamelCaseSeparator": ".",
"UrlParameterization": true,
"KeepVerb": true,
"AbandonControllerAffixes": [
"Controller"
]
},
// 友好异常配置 -------------------------------------------------------------------------------------------------------
"FriendlyExceptionSettings": {
"LogError": false
},
// 日志配置 ----------------------------------------------------------------------------------------------------------
"Logging": {
"Monitor": {
"GlobalEnabled": false,
"ReturnValueThreshold": 1000
}
},
// UnifyResultSettings 规范化配置 ------------------------------------------------------------------------------------
"UnifyResultSettings": {
"Return200StatusCodes": [
999
]
},
}

View File

@ -1 +1 @@
global using Furion.RemoteRequest;
global using Gurion.RemoteRequest;

View File

@ -1,3 +1,6 @@
#if DBTYPE_SQLSERVER
using Microsoft.Data.SqlClient;
#endif
using Newtonsoft.Json;
using DataType = FreeSql.DataType;
@ -13,10 +16,16 @@ public sealed class FreeSqlBuilder(DatabaseOptions databaseOptions)
/// </summary>
public IFreeSql Build(FreeSqlInitMethods initMethods)
{
var freeSql = new FreeSql.FreeSqlBuilder().UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr)
.UseGenerateCommandParameterWithLambda(true)
.UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure))
.Build();
var freeSql = new FreeSql.FreeSqlBuilder()
#if DBTYPE_SQLSERVER
.UseConnectionFactory(databaseOptions.DbType, () => new SqlConnection(databaseOptions.ConnStr))
.UseAdoConnectionPool(true)
#else
.UseConnectionString(databaseOptions.DbType, databaseOptions.ConnStr)
#endif
.UseGenerateCommandParameterWithLambda(true)
.UseAutoSyncStructure(initMethods.HasFlag(FreeSqlInitMethods.SyncStructure))
.Build();
_ = InitDbAsync(freeSql, initMethods); // 初始化数据库 ,异步
return freeSql;
}

View File

@ -19,7 +19,7 @@ public sealed class XmlCommentReader : ISingleton
var xmlComments = specificationDocumentSettings.Value.XmlComments //
?? App.GetConfig<SpecificationDocumentSettingsOptions>(nameof(SpecificationDocumentSettingsOptions).TrimSuffixOptions())
.XmlComments;
foreach (var commentFile in xmlComments.Where(x => x.Contains(nameof(NetAdmin)))) {
foreach (var commentFile in xmlComments) {
var xmlDoc = new XmlDocument();
var xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, commentFile);
if (!File.Exists(xmlFilePath)) {

View File

@ -1,332 +0,0 @@
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
// App基本配置
"AppSettings": {
// AppSettings配置根节点
// InjectMiniProfiler是否注入 MiniProfilerbool 类型,默认 true关闭 Swagger 左上角监听
// InjectSpecificationDocument是否启用 Swagger 文档bool 类型,默认 true生产环境可关闭
// EnabledReferenceAssemblyScan是否启用通过 dll 方式添加的引用程序集扫描bool 类型,默认 false
// ExternalAssemblies配置外部程序集完整路径支持动态加载string[] 类型,默认 []
// PrintDbConnectionInfo是否打印数据库连接信息到 MiniProfiler 中bool 类型,默认 true
// SupportPackageNamePrefixs配置支持的包前缀名string[] 类型,默认 []
// OutputOriginalSqlExecuteLog是否输出原始 Sql 执行日志ADO.NET默认 true
// VirtualPath配置虚拟目录必须以 / 开头
"InjectSpecificationDocument": false,
"InjectMiniProfiler": false
},
// Swagger文档配置 ------------------------------------------------------------------------------
"SpecificationDocumentSettings": {
// DocumentTitle文档标题string默认 Specification Api Document
// DefaultGroupName默认分组名string默认 Default
// EnableAuthorized是否启用权限控制bool默认 true
// FormatAsV2采用 Swagger 2.0 版本bool默认 false 已弃用
// RoutePrefix规范化文档地址string默认 api如果希望在首页改为空字符串即可。
// DocExpansionState文档显示方式DocExpansion默认 List取值
// List列表式展开子类默认值
// Full完全展开
// None列表式不展开子类
// XmlComments程序集注释描述文件名可带 .xmlstring默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core
// GroupOpenApiInfos分组信息配置SpecificationOpenApiInfo[],默认 { 'Group': 'Default'}
// SecurityDefinitions安全策略定义配置SpecificationOpenApiSecurityScheme[],默认 []
// Servers配置 Server 下拉列表OpenApiServer[] 类型,默认 [],如:{Servers:[ { Url:"地址", Description:"描述"} ]}
// HideServers是否隐藏 Server 下拉列表bool 类型,默认 true
// RouteTemplate配置文档 swagger.json 路由模板默认模板swagger/{documentName}/swagger.json, {documentName} 代表分组名,必须保留原样
// PackagesGroups配置模块化内置分组名称string[] 类型,默认 []
// EnableEnumSchemaFilter启用枚举 Schema 筛选器bool 类型,默认 true
// EnableTagsOrderDocumentFilter启用标签排序筛选器bool 类型,默认 true
// ServerDir配置 IIS 添加 Application 部署名string 类型,默认空,仅在 Furion v3.2.0+` 有效
// LoginInfo配置 Swagger 是否需要登录才能访问SpecificationLoginInfo 类型,默认 null仅在 Furion v3.3.3+` 有效
// Enabled是否启用登录授权默认 false
// CheckUrl检查登录状态的 Url 地址,该地址必须是 POST 请求,已授权返回 200否则返回 401
// SubmitUrl提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200否则返回 401支持相对地址以 / 开头
// EnableAllGroups启用 Swagger 总分组功能,自动将所有分组的接口合并到 All Groups 中bool 类型,默认 false仅在 Furion v3.3.4+` 有效
// 另外 SpecificationOpenApiInfo 内置配置如下:
//
// Group分组唯一标识string 类型,必填
// Order分组排序int 类型,数字越大排前面,默认 0
// Visible配置分组是否可见bool 类型,默认 true
// Title配置分组标题string 类型
// Description配置分组描述string 类型
// Version配置分组版本默认 1.0
// TermsOfService配置相关链接地址Uri 类型
// Contact配置联系方式OpenApiContact 类型
// License配置协议OpenApiLicense 类型
"EnableEnumSchemaFilter": false,
"EnableAuthorized": false,
"RoutePrefix": "swagger",
"XmlComments": [
"FreeSql.xml",
"NetAdmin.AdmServer.Application.xml",
"NetAdmin.AdmServer.Cache.xml",
"NetAdmin.AdmServer.Host.xml",
"NetAdmin.Application.xml",
"NetAdmin.Cache.xml",
"NetAdmin.Domain.xml",
"NetAdmin.Host.xml",
"NetAdmin.Infrastructure.xml",
"NetAdmin.ScheduledService.xml",
"NetAdmin.SysComponent.Application.xml",
"NetAdmin.SysComponent.Cache.xml",
"NetAdmin.SysComponent.Host.xml",
]
},
// 验证码配置 --------------------------------------------------------------------------------------------------------
"Captcha": {
"ImageRelativePath": ".data/captcha",
"SecretKey": "1Z?f(2)%v?:X5NYRl+]PSi.rDf7Ip#lB"
},
// 跨域配置 ----------------------------------------------------------------------------------------------------------
"CorsAccessorSettings": {
// CorsAccessorSettings
// PolicyName跨域策略名string 类型,必填,默认 App.Cors.Policy
// WithOrigins允许跨域的域名列表string[] 类型,默认 *
// WithHeaders请求表头没有配置则允许所有表头string[] 类型
// WithExposedHeaders设置客户端可获取的响应标头string[] 类型,默认 ["access-token", "x-access-token"]
// WithMethods设置跨域允许请求谓词没有配置则允许所有string[] 类型
// AllowCredentials是否允许跨域请求中的凭据bool 类型,默认值 true
// SetPreflightMaxAge设置预检过期时间int 类型,默认值 24小时
// FixedClientToken是否默认配置 WithExposedHeadersbool 类型,默认 true
// SignalRSupport是否启用 SignalR 跨域支持bool 类型,默认 false
"WithExposedHeaders": [
"access-token",
"x-access-token",
"content-disposition"
]
},
// 数据库配置 --------------------------------------------------------------------------------------------------------
"Database": {
"DbType": "Sqlite",
"ConnStr": "data source=NetAdmin.db",
"SeedDataRelativePath": "SeedData"
},
// 动态webapi配置 ----------------------------------------------------------------------------------------------------
"DynamicApiControllerSettings": {
// 5.1.10 DynamicApiControllerSettings 配置
// Furion 还提供动态 WebAPI 接口一些全局配置选项,如:
//
// DefaultRoutePrefix默认路由前缀string默认 api
// DefaultHttpMethod默认请求谓词string默认POST
// DefaultModule默认模块名称区域可用作接口版本string默认v1
// LowercaseRoute小写路由格式bool默认true
// AsLowerCamelCase启用小驼峰命名首字母小写默认 false
// KeepVerb是否保留动作谓词bool默认false
// KeepName是否保留默认名称bool默认fasle
// CamelCaseSeparator骆驼(驼峰)/帕斯卡命名分隔符string默认-
// VersionSeparator版本分隔符string默认@
// ModelToQueryGET/HEAD 请求将 类类型参数转查询参数bool默认 false
// SupportedMvcController是否支持 Mvc Controller 动态配置bool默认 false
// UrlParameterization路由参数采用 [FromQuery] 化,默认 false[FromRoute] 方式)
// DefaultArea配置默认区域默认 null
// ForceWithRoutePrefix配置是否强制添加 DefaultRoutePrefix当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效
// AbandonControllerAffixes默认去除控制器名称前后缀列表名string[],默认:
// AppServices
// AppService
// ApiController
// Controller
// Services
// Service
// AbandonActionAffixes默认去除动作方法名称前后缀列表名string[],默认:
// Async
// VerbToHttpMethods复写默认方法名转 [HttpMethod] 规则string[][] 二维数组类型,内置匹配规则为:
// ["post"] = "POST",
// ["add"] = "POST",
// ["create"] = "POST",
// ["insert"] = "POST",
// ["submit"] = "POST",
// ["get"] = "GET",
// ["find"] = "GET",
// ["fetch"] = "GET",
// ["query"] = "GET",
// ["getlist"] = "GET",
// ["getall"] = "GET",
// ["put"] = "PUT",
// ["update"] = "PUT",
// ["delete"] = "DELETE",
// ["remove"] = "DELETE",
// ["clear"] = "DELETE",
// ["patch"] = "PATCH"
//
// 复写示例
// "DynamicApiControllerSettings": {
// "VerbToHttpMethods": [
// [ "getall", "HEAD" ], // => getall 会被复写为 `[HttpHead]`
// [ "other", "PUT" ] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求
// ]
// }
// "DefaultRoutePrefix": "rest",
"VerbToHttpMethods": [
[
"post",
"POST"
],
[
"add",
"POST"
],
[
"create",
"POST"
],
[
"insert",
"POST"
],
[
"submit",
"POST"
],
[
"get",
"POST"
],
[
"find",
"POST"
],
[
"fetch",
"POST"
],
[
"query",
"POST"
],
[
"getlist",
"POST"
],
[
"getall",
"POST"
],
[
"put",
"POST"
],
[
"update",
"POST"
],
[
"delete",
"POST"
],
[
"remove",
"POST"
],
[
"clear",
"POST"
],
[
"patch",
"POST"
]
],
"CamelCaseSeparator": ".",
"UrlParameterization": true,
"KeepVerb": true,
"AbandonControllerAffixes": [
"Controller"
],
},
// 友好异常配置 -------------------------------------------------------------------------------------------------------
"FriendlyExceptionSettings": {
// 7.15 FriendlyExceptionSettings 配置
// HideErrorCode隐藏错误码bool 类型,默认 false
// DefaultErrorCode默认错误码string 类型
// DefaultErrorMessage默认错误消息string 类型
// ThrowBah是否将 Oops.Oh 默认抛出为业务异常bool 类型,默认 false设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理,而不是 OnException
// LogError是否输出异常日志bool 类型,默认 true
"LogError": false
},
// JWT鉴权配置 -------------------------------------------------------------------------------------------------------
"JWTSettings": {
"ValidateIssuerSigningKey": true,
// 是否验证密钥bool 类型默认true
"IssuerSigningKey": "bO0BCAGxpxYnm6AE4XpgO25T27NayFzjGgfDqBuzUzD6ROpFiZUi3KjVg93bdGek",
// 密钥string 类型必须是复杂密钥长度大于16
"ValidateIssuer": true,
// 是否验证签发方bool 类型默认true
"ValidIssuer": "签发方",
// 签发方string 类型
"ValidateAudience": true,
// 是否验证签收方bool 类型默认true
"ValidAudience": "签收方",
// 签收方string 类型
"ValidateLifetime": true,
// 是否验证过期时间bool 类型默认true建议true
"ExpiredTime": 20,
// 过期时间long 类型单位分钟默认20分钟
"ClockSkew": 5,
// 过期时间容错值long 类型,单位秒,默认 5秒
"Algorithm": "HS256"
// 加密算法string 类型,默认 HS256
},
// 日志配置 ----------------------------------------------------------------------------------------------------------
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"System.Logging.EventBusService": "Error"
},
"Monitor": {
"GlobalEnabled": false,
// 是否启用全局拦截,默认 `false`
// "IncludeOfMethods": [], // 是否指定拦截特定方法,当 GlobalEnabled: false 有效
// "ExcludeOfMethods": [], // 是否指定排除特定方法,当 GlobalEnabled: true 有效
// "BahLogLevel": "Information", // 配置 Oops.Oh 和 Oops.Bah 业务日志输出级别,默认 Information
// "WithReturnValue": true, // 配置是否包含返回值,默认 `true`Furion 4.3.9+ 有效
"ReturnValueThreshold": 1000
// 配置返回值字符串阈值,默认 0全量输出Furion 4.3.9+ 有效
// "JsonBehavior": "None", // 配置 LoggingMonitor Json 输出行为,默认 NoneFurion 4.5.2+ 有效
// "MethodsSettings": [
// // 配置被监视方法更多信息Furion 4.3.9+ 有效
// {
// "FullName": "Furion.Application.TestLoggerServices.MethodName", // 方法完全限定名
// "WithReturnValue": true, // 配置是否包含返回值,默认 `true`Furion 4.3.9+ 有效
// "ReturnValueThreshold": 0 // 配置返回值字符串阈值,默认 0全量输出Furion 4.3.9+ 有效
// }
// ]
}
},
// Redis配置 --------------------------------------------------------------------------------------------------------
"Redis": {
"Instances": [
// 数据缓存
{
"Name": "DataCache",
"ConnStr": "localhost:6379,abortConnect=false",
"DataBase": 0,
}
]
},
// UnifyResultSettings 规范化配置 ------------------------------------------------------------------------------------
"UnifyResultSettings": {
// Return200StatusCodes配置返回 200 状态码的请求int[] 类型,只支持 400+(404除外) 状态码篡改
// AdaptStatusCodes配置篡改状态码规则int[][] 类型,只支持 400+(404除外) 状态码篡改
// SupportMvcController是否支持 MVC 控制台规范化处理bool 类型,默认 false
"Return200StatusCodes": [
999
],
},
// 文件上传配置 -------------------------------------------------------------------------------------------------------
"Upload": {
"ContentTypes": [
"image/jpg",
"image/png",
"image/jpeg",
"image/gif"
],
"MaxSize": 1073741824,
"Minio": {
"ServerAddress": "vm-ubt-1:9000",
"AccessKey": "nVMM0gSqwyIjM8iZ",
"SecretKey": "F8OZngGrNsZSYn4MP9swwMSf5rfm61EC",
"BucketName": "net-admin",
"AccessUrl": "http://vm-ubt-1:9000",
"Secure": false,
}
},
}

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Api;
using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Cache;
using NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Captcha;
using NetAdmin.SysComponent.Domain.Dto.Sys.Captcha;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Config;
using NetAdmin.SysComponent.Domain.Dto.Sys.Config;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dept;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dept;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dev;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dev;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dic.Catalog;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dic.Content;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,5 +1,5 @@
using NetAdmin.Domain.Dto.Sys.Dic.Catalog;
using NetAdmin.Domain.Dto.Sys.Dic.Content;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,6 +1,5 @@
using NetAdmin.Domain.Dto.Sys;
using NetAdmin.Domain.Dto.Sys.Job;
using NetAdmin.Domain.Dto.Sys.JobRecord;
using NetAdmin.SysComponent.Domain.Dto.Sys.Job;
using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.JobRecord;
using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.LoginLog;
using NetAdmin.SysComponent.Domain.Dto.Sys.LoginLog;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Menu;
using NetAdmin.SysComponent.Domain.Dto.Sys.Menu;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.RequestLogDetail;
using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLogDetail;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,5 +1,4 @@
using NetAdmin.Domain.Dto.Sys;
using NetAdmin.Domain.Dto.Sys.RequestLog;
using NetAdmin.SysComponent.Domain.Dto.Sys.RequestLog;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Role;
using NetAdmin.SysComponent.Domain.Dto.Sys.Role;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.SiteMsgDept;
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgDept;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.SiteMsgFlag;
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgFlag;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,5 +1,5 @@
using NetAdmin.Domain.Dto.Sys.SiteMsg;
using NetAdmin.Domain.Dto.Sys.SiteMsgFlag;
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsg;
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgFlag;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.SiteMsgRole;
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgRole;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.SiteMsgUser;
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgUser;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Tool;
using NetAdmin.SysComponent.Domain.Dto.Sys.Tool;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,5 +1,5 @@
using NetAdmin.Domain.Dto.Sys.User;
using NetAdmin.Domain.Dto.Sys.UserProfile;
using NetAdmin.SysComponent.Domain.Dto.Sys.User;
using NetAdmin.SysComponent.Domain.Dto.Sys.UserProfile;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.UserProfile;
using NetAdmin.SysComponent.Domain.Dto.Sys.UserProfile;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.VerifyCode;
using NetAdmin.SysComponent.Domain.Dto.Sys.VerifyCode;
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.UserProfile;
using NetAdmin.SysComponent.Domain.Dto.Sys.UserProfile;
// ReSharper disable once CheckNamespace
namespace NetAdmin.SysComponent.Application.Modules.Sys;

View File

@ -1,9 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<DefineConstants>DBTYPE_SQLITE</DefineConstants>
</PropertyGroup>
<Import Project="$(SolutionDir)/build/code.quality.props"/>
<ItemGroup>
<ProjectReference Include="../NetAdmin.Application/NetAdmin.Application.csproj"/>
<ProjectReference Include="../NetAdmin.SysComponent.Domain/NetAdmin.SysComponent.Domain.csproj"/>
</ItemGroup>
</Project>

View File

@ -1,9 +1,11 @@
global using NetAdmin.Application.Modules;
global using NetAdmin.Application.Modules;
global using NetAdmin.Application.Repositories;
global using NetAdmin.Application.Services;
global using NetAdmin.Domain.DbMaps.Sys;
global using NetAdmin.Domain.Dto.Dependency;
global using NetAdmin.SysComponent.Application.Modules.Sys;
global using NetAdmin.SysComponent.Application.Services.Sys.Dependency;
global using NetAdmin.SysComponent.Domain.DbMaps.Sys;
global using NetAdmin.SysComponent.Domain.Dto.Sys;
global using NetAdmin.SysComponent.Domain.Enums.Sys;
global using DynamicFilterInfo = NetAdmin.Domain.Dto.DynamicFilterInfo;
global using DynamicFilterOperators = NetAdmin.Domain.Enums.DynamicFilterOperators;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Api;
using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
namespace NetAdmin.SysComponent.Application.Services.Sys;

View File

@ -1,5 +1,5 @@
using System.Collections.Concurrent;
using NetAdmin.Domain.Dto.Sys.Cache;
using NetAdmin.SysComponent.Domain.Dto.Sys.Cache;
using StackExchange.Redis;
namespace NetAdmin.SysComponent.Application.Services.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Captcha;
using NetAdmin.SysComponent.Domain.Dto.Sys.Captcha;
using SixLabors.ImageSharp;
using Yitter.IdGenerator;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Config;
using NetAdmin.SysComponent.Domain.Dto.Sys.Config;
namespace NetAdmin.SysComponent.Application.Services.Sys;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Api;
using NetAdmin.SysComponent.Domain.Dto.Sys.Api;
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dic.Catalog;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Catalog;
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Dic.Content;
using NetAdmin.SysComponent.Domain.Dto.Sys.Dic.Content;
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;

View File

@ -1,5 +1,4 @@
using NetAdmin.Domain.Dto.Sys;
using NetAdmin.Domain.Dto.Sys.JobRecord;
using NetAdmin.SysComponent.Domain.Dto.Sys.JobRecord;
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.Job;
using NetAdmin.SysComponent.Domain.Dto.Sys.Job;
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;

View File

@ -1,4 +1,4 @@
using NetAdmin.Domain.Dto.Sys.SiteMsgFlag;
using NetAdmin.SysComponent.Domain.Dto.Sys.SiteMsgFlag;
namespace NetAdmin.SysComponent.Application.Services.Sys.Dependency;

Some files were not shown because too many files have changed in this diff Show More