1 Commits

Author SHA1 Message Date
tk
06b7aa4ae8 chore(release): 2.3.1 2024-12-13 16:15:37 +08:00
518 changed files with 4169 additions and 10039 deletions

View File

@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [ 23.x ] node-version: [ 22.x ]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with: with:

View File

@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
node-version: [ 23.x ] node-version: [ 22.x ]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with: with:

View File

@ -2,56 +2,6 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [2.4.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.4.0) (2025-07-02)
### ⚠ BREAKING CHANGES
* [skip ci]
### Features
* ✨ 表格操作栏按钮下拉菜单 ([51cc9fa](https://github.com/nsnail/NetAdmin/commit/51cc9fa80ca296fa6c320d0a47ed51ee0aaef1ce))
* ✨ 表格右键菜单增加排序功能 ([a202595](https://github.com/nsnail/NetAdmin/commit/a2025956878d4e8fb935659f4db0adee02cd8071))
* ✨ 财务管理 ([94d0b70](https://github.com/nsnail/NetAdmin/commit/94d0b7028f8a0d31af67b435f5ed14f7eb2de0b4))
* ✨ 菜单复制 ([#214](https://github.com/nsnail/NetAdmin/issues/214)) ([81d9b0b](https://github.com/nsnail/NetAdmin/commit/81d9b0b3bb280661ceffa61aa6e9d612fb7ec52c))
* ✨ 分组统计功能 ([0b036e9](https://github.com/nsnail/NetAdmin/commit/0b036e9d67ffdf7a07c772606009f02744e6a3c3))
* ✨ 框架代码同步 ([098cfc1](https://github.com/nsnail/NetAdmin/commit/098cfc135e781a0cf172cd1289e5e871c7a76419))
* ✨ 框架代码同步 ([7256626](https://github.com/nsnail/NetAdmin/commit/725662693b7b47f6fae4c1917dd8d80220c7640a))
* ✨ 文档管理 ([#221](https://github.com/nsnail/NetAdmin/issues/221)) ([7ed3040](https://github.com/nsnail/NetAdmin/commit/7ed30406c9f721a12f0b756ec8884a1882242b93))
* ✨ 移动国家代码 ([2ff1466](https://github.com/nsnail/NetAdmin/commit/2ff146664e539c395d98530856783f33d3bbd6f2))
* ✨ 营销管理 ([62ac779](https://github.com/nsnail/NetAdmin/commit/62ac7790e80408c9194a71b032f7597c5d8c16cf))
* ✨ 营销管理-返佣比率 ([e5a0f92](https://github.com/nsnail/NetAdmin/commit/e5a0f925a0650a263b79de0e5793b8db2348a7ae))
* ✨ 自助充值 ([e621532](https://github.com/nsnail/NetAdmin/commit/e62153289fd13c5588518a5ee7cfc05c799df6b9))
* ✨ 作业增加请求地址显示查询 ([585f8f4](https://github.com/nsnail/NetAdmin/commit/585f8f4e43ae7fe0c9c387cc41f629f4f279740a))
* ✨ select-filter badge icon ([#217](https://github.com/nsnail/NetAdmin/issues/217)) ([4d857f1](https://github.com/nsnail/NetAdmin/commit/4d857f1861b1256980e7cc59e2ab6a5f7d966da2))
### Bug Fixes
* 🐛 按钮文字提示 ([#227](https://github.com/nsnail/NetAdmin/issues/227)) ([c88c8d2](https://github.com/nsnail/NetAdmin/commit/c88c8d293d44f2707f3b5232e6a40a141af9981c))
* 🐛 初次访问时前端js错误 ([9b6e053](https://github.com/nsnail/NetAdmin/commit/9b6e053721c95cf5fbdfa11112892a51e047af59))
* 🐛 档案管理空列表loading状态 ([ac4bb50](https://github.com/nsnail/NetAdmin/commit/ac4bb50b66034f9841ba2398a168ed746c673aea))
* 🐛 导出界面报错 ([#213](https://github.com/nsnail/NetAdmin/issues/213)) ([ef2f0de](https://github.com/nsnail/NetAdmin/commit/ef2f0de095e314f34bec21c0a2ccdb51423a163b))
* 🐛 导出文件的responseType ([#205](https://github.com/nsnail/NetAdmin/issues/205)) ([841a419](https://github.com/nsnail/NetAdmin/commit/841a4195e77aa96e3c6c72626c1add3f71a310aa))
* 🐛 个性主题色冲突 ([4e4a1d0](https://github.com/nsnail/NetAdmin/commit/4e4a1d0dff7f3698e9a9cfcf46368260cfd70cbd))
* 🐛 前端警告 ([9c81ce6](https://github.com/nsnail/NetAdmin/commit/9c81ce6f9fe9573c33a99eb86fcf727ed0cbf9f0))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 文件下载编码匹配 ([541c061](https://github.com/nsnail/NetAdmin/commit/541c0616bf5d405a62eac0c5eb967f0ddd4c5139))
* 🐛 修复一些样式问题 ([442a69f](https://github.com/nsnail/NetAdmin/commit/442a69f90de179539f78c01d967572f83bd2eff8))
* 🐛 样式问题 ([377c28c](https://github.com/nsnail/NetAdmin/commit/377c28c57049d453108f9da41b168e1fdb64d7e1))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 种子数据 ([f6aee1b](https://github.com/nsnail/NetAdmin/commit/f6aee1be0f05113cf1b798e23a176c02686348b5))
* 🐛 build err ([60e8451](https://github.com/nsnail/NetAdmin/commit/60e8451048a42cfa47d7c82b038eb8db7e017697))
* 🐛 build error ([278e10d](https://github.com/nsnail/NetAdmin/commit/278e10d8fc750eeb0933a86b64d69f5cc7e0b1cb))
* 🐛 editUser ([ef2a0c3](https://github.com/nsnail/NetAdmin/commit/ef2a0c3280532ac24889279e4780a1b1a2561a6b))
* 🐛 idd ([#208](https://github.com/nsnail/NetAdmin/issues/208)) ([4e9f605](https://github.com/nsnail/NetAdmin/commit/4e9f605ea2cc6fe394068cfea5638e51920b9096))
* 🐛 scTable dataChanged ([52e7f93](https://github.com/nsnail/NetAdmin/commit/52e7f93cc2de967a7a90448813b4c1030996d170))
* 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf))
* 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90))
* 🐛 vue3-json-viewer 升级出现问题 ([0a03e27](https://github.com/nsnail/NetAdmin/commit/0a03e27b0e7a62de0d836de2dea061adc392cf0f))
* flowchart显示问题 ([eef6661](https://github.com/nsnail/NetAdmin/commit/eef6661c9233c88b3447cc94b44c025b7b87ff8a))
### [2.3.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.3.1) (2024-12-13) ### [2.3.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.3.1) (2024-12-13)

View File

@ -4,7 +4,7 @@
<DefineConstants>DBTYPE_SQLITE</DefineConstants> <DefineConstants>DBTYPE_SQLITE</DefineConstants>
<SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir> <SolutionDir>$(MSBuildThisFileDirectory)</SolutionDir>
</PropertyGroup> </PropertyGroup>
<Import Project="$(SolutionDir)/build/minver.targets"/> <Import Project="$(SolutionDir)/build/minver.targets" />
<PropertyGroup> <PropertyGroup>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Authors>nsnail</Authors> <Authors>nsnail</Authors>
@ -18,22 +18,20 @@
<LangVersion>preview</LangVersion> <LangVersion>preview</LangVersion>
<MinVerDefaultPreReleaseIdentifiers>beta</MinVerDefaultPreReleaseIdentifiers> <MinVerDefaultPreReleaseIdentifiers>beta</MinVerDefaultPreReleaseIdentifiers>
<MinVerTagPrefix>v</MinVerTagPrefix> <MinVerTagPrefix>v</MinVerTagPrefix>
<NoWarn>CA1707;IDE0005;IDE0008;IDE0010;IDE0028;IDE0055;IDE0072;IDE0160;IDE0300;IDE0305;RCS1141;RCS1142;RCS1181;S101;S1121;S1135;S125;S2094;S3604;S4663;S6561;SA1010;SYSLIB1045</NoWarn> <NoWarn>CA1707;IDE0005;IDE0008;IDE0010;IDE0028;IDE0055;IDE0160;IDE0300;IDE0305;RCS1141;RCS1142;RCS1181;S101;S1121;S1135;S125;S2094;S3604;S4663;S6561;SYSLIB1045;SA1010</NoWarn>
<Product>NetAdmin</Product> <Product>NetAdmin</Product>
<RepositoryType>git</RepositoryType> <RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/nsnail/NetAdmin.git</RepositoryUrl> <RepositoryUrl>https://github.com/nsnail/NetAdmin.git</RepositoryUrl>
<TargetFramework Condition="'$(OS)' != 'Windows_NT'">net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<TargetFramework Condition="'$(OS)' == 'Windows_NT'">net9.0-windows</TargetFramework>
<UseWindowsForms Condition="'$(OS)' == 'Windows_NT'">true</UseWindowsForms>
<Title>$(AssemblyName)</Title> <Title>$(AssemblyName)</Title>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="MinVer" Version="6.1.0-beta.1"> <PackageReference Include="MinVer" Version="6.0.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="$(SolutionDir)/src/backend/GlobalUsings.cs" Link="GlobalUsings.cs"/> <Compile Include="$(SolutionDir)/src/backend/GlobalUsings.cs" Link="GlobalUsings.cs" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,4 +1,4 @@
FROM mcr.microsoft.com/dotnet/aspnet:9.0.5 AS base FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app WORKDIR /app
EXPOSE 8080 EXPOSE 8080
RUN apt update RUN apt update

249
NetAdmin.sln Normal file
View File

@ -0,0 +1,249 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".drone", ".drone", "{3E408077-E73E-45CE-A53A-EF5F9DAE4B46}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1}"
ProjectSection(SolutionItems) = preProject
README.md = .drone/workflows/README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{1129FE25-466B-4F4F-85FC-3752664245E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
nightly-build.yml = .github/workflows/nightly-build.yml
README.md = .github/workflows/README.md
release.yml = .github/workflows/release.yml
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
code.quality.props = build/code.quality.props
copy.pkg.xml.comment.files.targets = build/copy.pkg.xml.comment.files.targets
minver.targets = build/minver.targets
prebuild.targets = build/prebuild.targets
stylecop.analyzers.ruleset = build/stylecop.analyzers.ruleset
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
README.md = docker/README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
ProjectSection(SolutionItems) = preProject
.commitlintrc.js = .commitlintrc.js
.editorconfig = .editorconfig
.gitattributes = .gitattributes
.gitignore = .gitignore
.gitmodules = .gitmodules
CHANGELOG.md = CHANGELOG.md
Directory.Build.props = Directory.Build.props
Dockerfile = Dockerfile
dotnet-tools.json = dotnet-tools.json
global.json = global.json
LICENSE = LICENSE
NetAdmin.sln.DotSettings = NetAdmin.sln.DotSettings
nuget.config = nuget.config
package.json = package.json
README.md = README.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
ProjectSection(SolutionItems) = preProject
1.git.pull.request.ps1 = scripts/1.git.pull.request.ps1
2.git.release.ps1 = scripts/2.git.release.ps1
3.git.recreate.branch.ps1 = scripts/3.git.recreate.branch.ps1
4.git.del.obsolete.tags.ps1 = scripts/4.git.del.obsolete.tags.ps1
5.git.update.submodule.ps1 = scripts/5.git.update.submodule.ps1
clean.ln.csx = scripts/clean.ln.csx
code.clean.csx = scripts/code.clean.csx
code.clean.ps1 = scripts/code.clean.ps1
find.unused.ln.csx = scripts/find.unused.ln.csx
gen.cs.tt = scripts/gen.cs.tt
gen.id.linq = scripts/gen.id.linq
gen.ln.cmd = scripts/gen.ln.cmd
gen.resx.tt = scripts/gen.resx.tt
image.optimize.csx = scripts/image.optimize.csx
install.as.tpl.ps1 = scripts/install.as.tpl.ps1
rename.csx = scripts/rename.csx
resharper.full.ps1 = scripts/resharper.full.ps1
switch.nuget.or.project.csx = scripts/switch.nuget.or.project.csx
sync.sln.files.csx = scripts/sync.sln.files.csx
wait.server.stop.sh = scripts/wait.server.stop.sh
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C84EB5A0-37AD-4B17-A51E-E36888C4441E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{4DAF9366-855F-46BB-AE4C-660C92FA0697}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Infrastructure", "src\backend\NetAdmin\NetAdmin.Infrastructure\NetAdmin.Infrastructure.csproj", "{1E62C322-EE42-4699-A6F1-791C53EFA62D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Application", "src\backend\YourSolution.AdmServer.Application\YourSolution.AdmServer.Application.csproj", "{E38B2EB4-D7A5-4777-9236-3B348919DF23}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Host", "src\backend\YourSolution.AdmServer.Host\YourSolution.AdmServer.Host.csproj", "{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "03.hosted-servers", "03.hosted-servers", "{12AE5B4B-CB1A-498E-83B8-04E201E31D86}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Domain", "src\backend\NetAdmin\NetAdmin.Domain\NetAdmin.Domain.csproj", "{58509C57-09FA-4E3C-BC07-78E786A2A326}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Application", "src\backend\NetAdmin\NetAdmin.Application\NetAdmin.Application.csproj", "{70C54E1B-2083-4196-AB68-34CAF0075D82}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Host", "src\backend\NetAdmin\NetAdmin.Host\NetAdmin.Host.csproj", "{91839A15-D08F-4848-A301-F793412BC688}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Cache", "src\backend\NetAdmin\NetAdmin.Cache\NetAdmin.Cache.csproj", "{91452C22-4B57-4F16-9AF6-42C7BF830504}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Cache", "src\backend\YourSolution.AdmServer.Cache\YourSolution.AdmServer.Cache.csproj", "{7CB632D3-3635-4F8D-AFE7-F496D37D422B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Host", "src\backend\NetAdmin\NetAdmin.SysComponent.Host\NetAdmin.SysComponent.Host.csproj", "{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Cache", "src\backend\NetAdmin\NetAdmin.SysComponent.Cache\NetAdmin.SysComponent.Cache.csproj", "{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.SysComponent.Application", "src\backend\NetAdmin\NetAdmin.SysComponent.Application\NetAdmin.SysComponent.Application.csproj", "{34650E82-D257-46DA-BD6B-DE307113347B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "02.components", "02.components", "{3F23258D-8299-4992-9F51-2EE9B52CF9D2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01.frameworks", "01.frameworks", "{D9C3EF66-2757-473D-A26B-54FD08DA203F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04.tests", "04.tests", "{89260294-80FC-49F1-8D73-AECD39AFF2B7}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "05.tools", "05.tools", "{79409163-5006-405D-AC96-406FA0AD77B7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "src\backend\UnitTests\UnitTests.csproj", "{C7F27698-DA05-4ACD-B0D7-4791B3972002}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetAdmin.Tests", "src\backend\NetAdmin\NetAdmin.Tests\NetAdmin.Tests.csproj", "{00604162-C444-478B-B773-3AB23C856CA7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Domain", "src\backend\YourSolution.AdmServer.Domain\YourSolution.AdmServer.Domain.csproj", "{932520DF-D312-415A-A128-1117F8221D68}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YourSolution.AdmServer.Infrastructure", "src\backend\YourSolution.AdmServer.Infrastructure\YourSolution.AdmServer.Infrastructure.csproj", "{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}"
EndProject
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gurion", "refs\Gurion\src\Gurion\Gurion.csproj", "{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql", "refs\NetAdmin.FreeSql\src\FreeSql\FreeSql.csproj", "{3C65DA42-877D-46FF-B754-C12214302A29}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.Provider.Sqlite", "refs\NetAdmin.FreeSql\src\FreeSql.Provider.Sqlite\FreeSql.Provider.Sqlite.csproj", "{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}"#refs
##EndProject#refs
##Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FreeSql.DbContext", "refs\NetAdmin.FreeSql\src\FreeSql.DbContext\FreeSql.DbContext.csproj", "{FE03DF27-EC56-48DB-81B0-F99947259A7C}"#refs
##EndProject#refs
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E62C322-EE42-4699-A6F1-791C53EFA62D}.Release|Any CPU.Build.0 = Release|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E38B2EB4-D7A5-4777-9236-3B348919DF23}.Release|Any CPU.Build.0 = Release|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3}.Release|Any CPU.Build.0 = Release|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58509C57-09FA-4E3C-BC07-78E786A2A326}.Release|Any CPU.Build.0 = Release|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.ActiveCfg = Release|Any CPU
{70C54E1B-2083-4196-AB68-34CAF0075D82}.Release|Any CPU.Build.0 = Release|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91839A15-D08F-4848-A301-F793412BC688}.Release|Any CPU.Build.0 = Release|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91452C22-4B57-4F16-9AF6-42C7BF830504}.Release|Any CPU.Build.0 = Release|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CB632D3-3635-4F8D-AFE7-F496D37D422B}.Release|Any CPU.Build.0 = Release|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C}.Release|Any CPU.Build.0 = Release|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C}.Release|Any CPU.Build.0 = Release|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34650E82-D257-46DA-BD6B-DE307113347B}.Release|Any CPU.Build.0 = Release|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7F27698-DA05-4ACD-B0D7-4791B3972002}.Release|Any CPU.Build.0 = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00604162-C444-478B-B773-3AB23C856CA7}.Release|Any CPU.Build.0 = Release|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Debug|Any CPU.Build.0 = Debug|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.ActiveCfg = Release|Any CPU
{932520DF-D312-415A-A128-1117F8221D68}.Release|Any CPU.Build.0 = Release|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA}.Release|Any CPU.Build.0 = Release|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{CCD098FE-4F95-4FA4-8CC0-9A6DE921FBAE}.Release|Any CPU.Build.0 = Release|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{3C65DA42-877D-46FF-B754-C12214302A29}.Release|Any CPU.Build.0 = Release|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{CF5EFA63-4631-4A64-B4F3-98A7DD532F68}.Release|Any CPU.Build.0 = Release|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
##{FE03DF27-EC56-48DB-81B0-F99947259A7C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{4DAF9366-855F-46BB-AE4C-660C92FA0697} = {C84EB5A0-37AD-4B17-A51E-E36888C4441E}
{12AE5B4B-CB1A-498E-83B8-04E201E31D86} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{3F23258D-8299-4992-9F51-2EE9B52CF9D2} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{D9C3EF66-2757-473D-A26B-54FD08DA203F} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{70C54E1B-2083-4196-AB68-34CAF0075D82} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{91452C22-4B57-4F16-9AF6-42C7BF830504} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{58509C57-09FA-4E3C-BC07-78E786A2A326} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{91839A15-D08F-4848-A301-F793412BC688} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{1E62C322-EE42-4699-A6F1-791C53EFA62D} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{E38B2EB4-D7A5-4777-9236-3B348919DF23} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{7CB632D3-3635-4F8D-AFE7-F496D37D422B} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{CE895E44-EEC3-4ECE-A56A-8A82E7D863E3} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{89260294-80FC-49F1-8D73-AECD39AFF2B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{C7F27698-DA05-4ACD-B0D7-4791B3972002} = {89260294-80FC-49F1-8D73-AECD39AFF2B7}
{00604162-C444-478B-B773-3AB23C856CA7} = {D9C3EF66-2757-473D-A26B-54FD08DA203F}
{34650E82-D257-46DA-BD6B-DE307113347B} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{19872A4C-3C9A-4C62-A33B-74F5B8D6F77C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{C2CC1596-3BEE-43EA-A9BE-4EDE5716296C} = {3F23258D-8299-4992-9F51-2EE9B52CF9D2}
{79409163-5006-405D-AC96-406FA0AD77B7} = {4DAF9366-855F-46BB-AE4C-660C92FA0697}
{932520DF-D312-415A-A128-1117F8221D68} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{C3DE6F6A-D1FC-4B8E-9033-980FBEBBD2BA} = {12AE5B4B-CB1A-498E-83B8-04E201E31D86}
{3C6F049E-3EE8-4D66-9AFF-E8A369032487} = {1129FE25-466B-4F4F-85FC-3752664245E1}
{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1} = {3E408077-E73E-45CE-A53A-EF5F9DAE4B46}
EndGlobalSection
EndGlobal

View File

@ -12,7 +12,6 @@
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantPatternParentheses/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=RedundantPatternParentheses/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameter/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameter/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameterInConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SuggestBaseTypeForParameterInConstructor/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=SwitchExpressionHandlesSomeKnownEnumValuesWithExceptionInDefault/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=TooWideLocalVariableScope/@EntryIndexedValue">HINT</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=TooWideLocalVariableScope/@EntryIndexedValue">HINT</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002EGlobal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=UnusedAutoPropertyAccessor_002ELocal/@EntryIndexedValue">DO_NOT_SHOW</s:String>
@ -326,7 +325,6 @@
&lt;/Patterns&gt;</s:String> &lt;/Patterns&gt;</s:String>
<!-- Environment--> <!-- Environment-->
<s:Boolean x:Key="/Default/Environment/Editor/UseCamelHumps/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpUseContinuousIndentInsideBracesMigration/@EntryIndexedValue">True</s:Boolean>

View File

@ -1,93 +0,0 @@
<Solution>
<Folder Name="/.drone/"/>
<Folder Name="/.drone/workflows/">
<File Path=".drone/workflows/README.md"/>
</Folder>
<Folder Name="/.github/"/>
<Folder Name="/.github/workflows/">
<File Path=".github/workflows/nightly-build.yml"/>
<File Path=".github/workflows/README.md"/>
<File Path=".github/workflows/release.yml"/>
</Folder>
<Folder Name="/build/">
<File Path="build/code.quality.props"/>
<File Path="build/copy.pkg.xml.comment.files.targets"/>
<File Path="build/minver.targets"/>
<File Path="build/prebuild.targets"/>
<File Path="build/stylecop.analyzers.ruleset"/>
</Folder>
<Folder Name="/docker/">
<File Path="docker/README.md"/>
</Folder>
<Folder Name="/meta/">
<File Path=".commitlintrc.js"/>
<File Path=".editorconfig"/>
<File Path=".gitattributes"/>
<File Path=".gitignore"/>
<File Path=".gitmodules"/>
<File Path="CHANGELOG.md"/>
<File Path="Directory.Build.props"/>
<File Path="Dockerfile"/>
<File Path="dotnet-tools.json"/>
<File Path="global.json"/>
<File Path="LICENSE"/>
<File Path="NetAdmin.slnx.DotSettings"/>
<File Path="nuget.config"/>
<File Path="package.json"/>
<File Path="README.md"/>
</Folder>
<Folder Name="/scripts/">
<File Path="scripts/1.git.pull.request.ps1"/>
<File Path="scripts/2.git.release.ps1"/>
<File Path="scripts/3.git.recreate.branch.ps1"/>
<File Path="scripts/4.git.del.obsolete.tags.ps1"/>
<File Path="scripts/5.git.update.submodule.ps1"/>
<File Path="scripts/clean.ln.csx"/>
<File Path="scripts/code.clean.csx"/>
<File Path="scripts/code.clean.ps1"/>
<File Path="scripts/find.unused.ln.csx"/>
<File Path="scripts/gen.cs.tt"/>
<File Path="scripts/gen.id.linq"/>
<File Path="scripts/gen.ln.cmd"/>
<File Path="scripts/gen.resx.tt"/>
<File Path="scripts/git.config.cmd"/>
<File Path="scripts/image.optimize.csx"/>
<File Path="scripts/install.as.tpl.ps1"/>
<File Path="scripts/rename.csx"/>
<File Path="scripts/resharper.full.ps1"/>
<File Path="scripts/switch.nuget.or.project.csx"/>
<File Path="scripts/sync.slnx.files.csx"/>
<File Path="scripts/wait.server.stop.sh"/>
</Folder>
<Folder Name="/src/"/>
<Folder Name="/src/backend/"/>
<Folder Name="/src/backend/01.frameworks/">
<!--<Project Type="Refs" Path="refs/Gurion/src/Gurion/Gurion.csproj"/>-->
<!--<Project Type="Refs" Path="refs/NetAdmin.FreeSql/src/FreeSql.DbContext/FreeSql.DbContext.csproj"/>-->
<!--<Project Type="Refs" Path="refs/NetAdmin.FreeSql/src/FreeSql.Provider.Sqlite/FreeSql.Provider.Sqlite.csproj"/>-->
<!--<Project Type="Refs" Path="refs/NetAdmin.FreeSql/src/FreeSql/FreeSql.csproj"/>-->
<Project Path="src/backend/NetAdmin/NetAdmin.Application/NetAdmin.Application.csproj"/>
<Project Path="src/backend/NetAdmin/NetAdmin.Cache/NetAdmin.Cache.csproj"/>
<Project Path="src/backend/NetAdmin/NetAdmin.Domain/NetAdmin.Domain.csproj"/>
<Project Path="src/backend/NetAdmin/NetAdmin.Host/NetAdmin.Host.csproj"/>
<Project Path="src/backend/NetAdmin/NetAdmin.Infrastructure/NetAdmin.Infrastructure.csproj"/>
<Project Path="src/backend/NetAdmin/NetAdmin.Tests/NetAdmin.Tests.csproj"/>
</Folder>
<Folder Name="/src/backend/02.components/">
<Project Path="src/backend/NetAdmin/NetAdmin.SysComponent.Application/NetAdmin.SysComponent.Application.csproj"/>
<Project Path="src/backend/NetAdmin/NetAdmin.SysComponent.Cache/NetAdmin.SysComponent.Cache.csproj"/>
<Project Path="src/backend/NetAdmin/NetAdmin.SysComponent.Host/NetAdmin.SysComponent.Host.csproj"/>
</Folder>
<Folder Name="/src/backend/03.hosted-servers/">
<Project Path="src/backend/YourSolution.AdmServer.Application/YourSolution.AdmServer.Application.csproj"/>
<Project Path="src/backend/YourSolution.AdmServer.Cache/YourSolution.AdmServer.Cache.csproj"/>
<Project Path="src/backend/YourSolution.AdmServer.Domain/YourSolution.AdmServer.Domain.csproj"/>
<Project Path="src/backend/YourSolution.AdmServer.Host/YourSolution.AdmServer.Host.csproj"/>
<Project Path="src/backend/YourSolution.AdmServer.Infrastructure/YourSolution.AdmServer.Infrastructure.csproj"/>
</Folder>
<Folder Name="/src/backend/04.tests/">
<Project Path="src/backend/UnitTests/UnitTests.csproj"/>
</Folder>
<Folder Name="/src/backend/05.tools/">
</Folder>
</Solution>

View File

@ -14,24 +14,22 @@ https://na.tools92.top
```shell ```shell
docker run -p 8080:8080 nsnail/netadmin docker run -p 8080:8080 nsnail/netadmin
# 墙内用户请自备梯子 # 需魔法上网
``` ```
## 构建步骤 ## 构建步骤
所涉软件均推荐下载zip/tar版本解压即用一键删除不会污染系统环境
```shell ```shell
# 1. 检查 dotnet sdk 版本 >=9.0.0 # 1. 检查 dotnet sdk 版本 >=9.0.0
dotnet --list-sdks dotnet --list-sdks
# 下载 dotnethttps://dotnet.microsoft.com/zh-cn/download/dotnet # 下载 dotnethttps://dotnet.microsoft.com/zh-cn/download/dotnet
# 2. 克隆代码仓库 # 2. 克隆代码仓库
git clone --depth 1 https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin git clone https://github.com/nsnail/NetAdmin.git && cd ./NetAdmin
# 3. 确认本机 redis 处于运行状态 # 3. 确认本机 redis 处于运行状态
redis-server # 启动服务器 redis-server # 启动服务器
redis-cli ping # 连接测试 redis-cli # 连接测试
# 下载 redis for windowshttps://github.com/redis-windows/redis-windows/releases # 下载 redis for windowshttps://github.com/redis-windows/redis-windows/releases
# 下载 redis for linux/machttps://redis.io/download # 下载 redis for linux/machttps://redis.io/download
@ -42,7 +40,7 @@ dotnet run --project ./src/backend/YourSolution.AdmServer.Host/YourSolution.AdmS
# 5. 检查 nodejs 版本 >=20 # 5. 检查 nodejs 版本 >=20
node -v node -v
# 下载 nodejshttps://nodejs.org/zh-cn/download # 下载 nodejshttps://nodejs.org/en/download
# 6. 安装 npm 依赖包 # 6. 安装 npm 依赖包
cd ./src/frontend/admin && npm install cd ./src/frontend/admin && npm install
@ -71,19 +69,19 @@ npm run dev
```mermaid ```mermaid
flowchart TD flowchart TD
sys-host["NetAdmin.SysComponent.Host<br>系统组件:主机层"] sys-host["NetAdmin.SysComponent.Host\n系统组件:主机层"]
sys-cache["NetAdmin.SysComponent.Cache<br>系统组件:缓存层"] sys-cache["NetAdmin.SysComponent.Cache\n系统组件:缓存层"]
sys-app["NetAdmin.SysComponent.Application<br>系统组件:应用层"] sys-app["NetAdmin.SysComponent.Application\n系统组件:应用层"]
host["<b>NetAdmin.Host</b><br>框架:主机层<br>.Net自托管主机程序<br>(输入输出格式化)<br>(数据校验、鉴权)<br>...所有HTTP管道过滤器中间件"] host["<b>NetAdmin.Host</b>\n框架:主机层\n.Net自托管主机程序\n(输入输出格式化)\n(数据校验、鉴权)\n...所有HTTP管道过滤器中间件"]
cache["<b>NetAdmin.Cache</b><br>框架:缓存层<br>基于Redis或MemoryCache的缓存策略实现"] cache["<b>NetAdmin.Cache</b>\n框架:缓存层\n基于Redis或MemoryCache的缓存策略实现"]
app["<b>NetAdmin.Application</b><br>框架:业务应用层<br>(内部服务增删改查)<br>(外部服务增删改查)<br>...所有业务用例的计算与组合逻辑的模块化)"] app["<b>NetAdmin.Application</b>\n框架:业务应用层\n(内部服务增删改查)\n(外部服务增删改查)\n...所有业务用例的计算与组合逻辑的模块化)"]
domain["<b>NetAdmin.Domain</b><br>框架:数据实体层<br>(数据库关系实体映射)<br>DTO数据传输对象<br>...所有数据模型的抽象与封装)"] domain["<b>NetAdmin.Domain</b>\n框架:数据实体层\n(数据库关系实体映射)\nDTO数据传输对象\n...所有数据模型的抽象与封装)"]
infra["<b>NetAdmin.Infrastructure</b><br>框架:基础设施层<br>第三方组件和Nuget包引用<br>(公共构建和程序运行配置)<br>(公共常量枚举异常定义)<br>(全球化化和多语言)<br>...所有公共Utility工具"] infra["<b>NetAdmin.Infrastructure</b>\n框架:基础设施层\n第三方组件和Nuget包引用\n(公共构建和程序运行配置)\n(公共常量枚举异常定义)\n(全球化化和多语言)\n...所有公共Utility工具"]
biz-host["YourSolution.XXX.Host<br>业务实例:主机层"] biz-host["YourSolution.XXX.Host\n业务实例:主机层"]
biz-cache["YourSolution.XXX.Cache<br>业务实例:缓存层"] biz-cache["YourSolution.XXX.Cache\n业务实例:缓存层"]
biz-app["YourSolution.XXX.Application<br>业务实例:应用层"] biz-app["YourSolution.XXX.Application\n业务实例:应用层"]
biz-domain["YourSolution.XXX.Domain<br>业务实例:数据实体层"] biz-domain["YourSolution.XXX.Domain\n业务实例:数据实体层"]
biz-infra["YourSolution.XXX.Infrastructure<br>业务实例:基础设施层"] biz-infra["YourSolution.XXX.Infrastructure\n业务实例:基础设施层"]
biz-host-->biz-cache-->biz-app-->biz-domain-->biz-infra biz-host-->biz-cache-->biz-app-->biz-domain-->biz-infra
sys-host-->sys-cache-->sys-app-->domain-->infra sys-host-->sys-cache-->sys-app-->domain-->infra
host-->cache-->app-->domain-->infra host-->cache-->app-->domain-->infra

View File

@ -1,4 +1,3 @@
USDT
上次执行时间 上次执行时间
上次执行状态 上次执行状态
上次执行耗时 上次执行耗时
@ -18,10 +17,9 @@ USDT
以什么结束 以什么结束
作业名称 作业名称
作业状态 作业状态
保密
信息 信息
倒序排序 倒序排序
充值成功
充值订单导出
全部数据 全部数据
公告 公告
共青团员 共青团员
@ -29,7 +27,6 @@ USDT
创建时间 创建时间
初中 初中
删除 删除
到账确认中
包含 包含
博士 博士
博士后 博士后
@ -48,7 +45,6 @@ USDT
字典内容导出 字典内容导出
宕机 宕机
客户端IP 客户端IP
小于 小于
小于等于 小于等于
小学 小学
@ -57,11 +53,10 @@ USDT
已校验 已校验
已读 已读
并且 并且
归属角色
归属部门
微信支付
成功 成功
或者 或者
所属角色
所属部门
手机 手机
手机号 手机号
执行耗时 执行耗时
@ -76,10 +71,6 @@ USDT
接口路径 接口路径
插入种子数据 插入种子数据
操作系统 操作系统
支付宝
支付超时
支出
收入
数据范围 数据范围
文档内容 文档内容
文档内容导出 文档内容导出
@ -108,8 +99,6 @@ USDT
用户代理 用户代理
用户名 用户名
用户导出 用户导出
用户邀请导出
用户钱包导出
电子邮箱 电子邮箱
登录 登录
@ -122,15 +111,11 @@ USDT
站内信导出 站内信导出
等于 等于
等待发送 等待发送
等待支付
管理员充值
管理员扣费
管理模块 管理模块
系统模块 系统模块
绑定手机号码 绑定手机号码
结果非预期 结果非预期
群众 群众
自助充值
自定义 自定义
范围 范围
菜单 菜单
@ -143,17 +128,16 @@ USDT
请求方式 请求方式
请求日志导出 请求日志导出
调试 调试
跟踪
跟踪标识
身份证 身份证
运行 运行
追踪
追踪标识
通知 通知
邮箱号 邮箱号
部门名称 部门名称
部门导出 部门导出
配置导出 配置导出
重设密码 重设密码
钱包交易导出
链接 链接
错误 错误
随机排序 随机排序

View File

@ -5,8 +5,6 @@ XML注释文件不存在
中文姓名 中文姓名
事务已回滚 事务已回滚
事务已提交 事务已提交
交易失败
交易金额不正确
人机校验请求不能为空 人机校验请求不能为空
人机验证未通过 人机验证未通过
作业名称不能为空 作业名称不能为空
@ -33,7 +31,6 @@ XML注释文件不存在
手机号码不能为空 手机号码不能为空
接口编码不存在 接口编码不存在
支付宝账号 支付宝账号
支付方式不正确
政治面貌不正确 政治面貌不正确
数据库同步开始 数据库同步开始
数据库服务器时钟偏移 数据库服务器时钟偏移
@ -111,7 +108,6 @@ XML注释文件不存在
部门可见 部门可见
部门名称不能为空 部门名称不能为空
配置文件初始化完毕 配置文件初始化完毕
钱包余额不足
键值不能为空 键值不能为空
键名称不能为空 键名称不能为空
随机延时结束时间不正确 随机延时结束时间不正确

View File

@ -1,11 +1,8 @@
[ [
{ {
"CnyToPointRate": 100,
"Enabled": true, "Enabled": true,
"Trc20ReceiptAddress": "TMTByCrcZkY7o8YMax1pXiYV5SUQBZEnCu",
"UsdToPointRate": 700,
"UserRegisterConfirm": false, "UserRegisterConfirm": false,
"UserRegisterDeptId": 372119301627909, "UserRegisterDeptId": 372119301627909,
"UserRegisterRoleId": 371729946431493, "UserRegisterRoleId": 371729946431493
} }
] ]

View File

@ -2,29 +2,12 @@
{ {
"Enabled": true, "Enabled": true,
"ExecutionCron": "0 * * * * ?", "ExecutionCron": "0 * * * * ?",
"HttpMethod": 7, "HttpMethod": 3,
"JobName": "用户收入支出统计", "JobName": "HTTP 请求测试",
"LastStatusCode": 200, "NextExecTime": "2020-09-13 12:26:40",
"NextExecTime": "2025-06-27 19:07:00", "NextTimeId": 1600000000,
"NextTimeId": 1751022420, "RequestUrl": "https://httpbin.org/ip",
"RequestBody": "{\"Sql\":\"UPDATE Sys_UserWallet SET TotalIncome = (SELECT COALESCE(SUM(Amount), 0) FROM Sys_WalletTrade WHERE Sys_WalletTrade.OwnerId = Sys_UserWallet.Id AND Sys_WalletTrade.TradeDirection = 1);UPDATE Sys_UserWallet SET TotalExpenditure = (SELECT COALESCE(SUM(Amount), 0) FROM Sys_WalletTrade WHERE Sys_WalletTrade.OwnerId = Sys_UserWallet.Id AND Sys_WalletTrade.TradeDirection = 2);\",\"TimeoutSecs\":60}",
"RequestHeader": "{\"Content-Type\":\"application/json\"}",
"RequestUrl": "https://na.tools92.top/api/sys/tools/execute.sql",
"Status": 1, "Status": 1,
"UserId": 664362432344581, "UserId": 370942943322181,
}, }
{
"Enabled": true,
"ExecutionCron": "0 * * * * ?",
"HttpMethod": 7,
"JobName": "充值到账确认",
"LastStatusCode": 200,
"NextExecTime": "2025-06-27 19:07:00",
"NextTimeId": 1751022420,
"RequestBody": "{\"readRecordCount\":100}",
"RequestHeader": "{\"Content-Type\":\"application/json\"}",
"RequestUrl": "https://na.tools92.top/api/sys/deposit.order/received.confirmation",
"Status": 1,
"UserId": 664362432344581,
},
] ]

View File

@ -26,7 +26,7 @@
"Id": 373837957840901, "Id": 373837957840901,
"Name": "sys/user", "Name": "sys/user",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/user", "Path": "/sys/user",
"Sort": 100, "Sort": 100,
"Title": "用户管理", "Title": "用户管理",
"Type": 1 "Type": 1
@ -37,7 +37,7 @@
"Id": 373838018527237, "Id": 373838018527237,
"Name": "sys/role", "Name": "sys/role",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/role", "Path": "/sys/role",
"Sort": 99, "Sort": 99,
"Title": "角色管理", "Title": "角色管理",
"Type": 1 "Type": 1
@ -48,7 +48,7 @@
"Id": 373838045605893, "Id": 373838045605893,
"Name": "sys/dept", "Name": "sys/dept",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/dept", "Path": "/sys/dept",
"Sort": 98, "Sort": 98,
"Title": "部门管理", "Title": "部门管理",
"Type": 1 "Type": 1
@ -59,82 +59,18 @@
"Id": 373838070898693, "Id": 373838070898693,
"Name": "sys/menu", "Name": "sys/menu",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/menu", "Path": "/sys/menu",
"Sort": 97, "Sort": 97,
"Title": "菜单管理", "Title": "菜单管理",
"Type": 1 "Type": 1
}, },
// ------------------------------ 财务管理 ------------------------------
{
"Icon": "el-icon-money",
"Id": 690906994118665,
"Name": "finance",
"Path": "/finance",
"Sort": 99,
"Title": "财务管理",
"Type": 1
},
{
"Component": "sys/wallet",
"Icon": "el-icon-wallet",
"Id": 690907673255942,
"Name": "sys/wallet",
"ParentId": 690906994118665,
"Path": "/finance/wallet",
"Sort": 100,
"Title": "钱包管理",
"Type": 1
},
{
"Component": "sys/trade",
"Icon": "el-icon-calendar",
"Id": 690907673255943,
"Name": "sys/trade",
"ParentId": 690906994118665,
"Path": "/finance/trade",
"Sort": 99,
"Title": "交易流水",
"Type": 1
},
{
"Component": "sys/order",
"Icon": "el-icon-shopping-cart",
"Id": 690907673255944,
"Name": "sys/order",
"ParentId": 690906994118665,
"Path": "/finance/order",
"Sort": 98,
"Title": "充值订单",
"Type": 1
},
// ------------------------------ 营销管理 ------------------------------
{
"Icon": "el-icon-share",
"Id": 692575802241032,
"Name": "market",
"Path": "/market",
"Sort": 98,
"Title": "营销管理",
"Type": 1
},
{
"Component": "sys/invite",
"Icon": "el-icon-connection",
"Id": 692575802245126,
"Name": "sys/invite",
"ParentId": 692575802241032,
"Path": "/market/invite",
"Sort": 100,
"Title": "邀请管理",
"Type": 1
},
// ------------------------------ 系统管理 ------------------------------ // ------------------------------ 系统管理 ------------------------------
{ {
"Icon": "sc-icon-app", "Icon": "sc-icon-App",
"Id": 485278637670422, "Id": 485278637670422,
"Name": "sys", "Name": "sys",
"Path": "/sys", "Path": "/sys",
"Sort": 98, "Sort": 99,
"Title": "系统管理", "Title": "系统管理",
"Type": 1 "Type": 1
}, },
@ -144,18 +80,18 @@
"Id": 380415005847557, "Id": 380415005847557,
"Name": "sys/config", "Name": "sys/config",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/config", "Path": "/sys/config",
"Sort": 100, "Sort": 100,
"Title": "系统设置", "Title": "系统设置",
"Type": 1 "Type": 1
}, },
{ {
"Component": "sys/job", "Component": "sys/job",
"Icon": "sc-icon-scheduled-job", "Icon": "sc-icon-ScheduledJob",
"Id": 510067557638158, "Id": 510067557638158,
"Name": "sys/job", "Name": "sys/job",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/job", "Path": "/sys/job",
"Sort": 99, "Sort": 99,
"Title": "计划作业", "Title": "计划作业",
"Type": 1 "Type": 1
@ -166,7 +102,7 @@
"Id": 375315654221829, "Id": 375315654221829,
"Name": "sys/dic", "Name": "sys/dic",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/dic", "Path": "/sys/dic",
"Sort": 98, "Sort": 98,
"Title": "字典管理", "Title": "字典管理",
"Type": 1 "Type": 1
@ -177,7 +113,7 @@
"Id": 482779610341392, "Id": 482779610341392,
"Name": "sys/msg", "Name": "sys/msg",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/msg", "Path": "/sys/msg",
"Sort": 97, "Sort": 97,
"Title": "消息管理", "Title": "消息管理",
"Type": 1, "Type": 1,
@ -188,7 +124,7 @@
"Id": 397880678895621, "Id": 397880678895621,
"Name": "sys/api", "Name": "sys/api",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/api", "Path": "/sys/api",
"Sort": 96, "Sort": 96,
"Title": "接口管理", "Title": "接口管理",
"Type": 1 "Type": 1
@ -199,18 +135,18 @@
"Id": 374911555702789, "Id": 374911555702789,
"Name": "sys/cache", "Name": "sys/cache",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/cache", "Path": "/sys/cache",
"Sort": 95, "Sort": 95,
"Title": "缓存管理", "Title": "缓存管理",
"Type": 1 "Type": 1
}, },
// ------------------------------ 档案管理 ------------------------------ // ------------------------------ 档案管理 ------------------------------
{ {
"Icon": "sc-icon-archive", "Icon": "sc-icon-Archive",
"Id": 616214756757512, "Id": 616214756757512,
"Name": "archive", "Name": "archive",
"Path": "/archive", "Path": "/archive",
"Sort": 97, "Sort": 98,
"Title": "档案管理", "Title": "档案管理",
"Type": 1 "Type": 1
}, },
@ -231,7 +167,7 @@
"Id": 374792687640581, "Id": 374792687640581,
"Name": "log", "Name": "log",
"Path": "/log", "Path": "/log",
"Sort": 96, "Sort": 97,
"Title": "日志管理", "Title": "日志管理",
"Type": 1 "Type": 1
}, },
@ -241,18 +177,18 @@
"Id": 485285246504976, "Id": 485285246504976,
"Name": "sys/log/operation", "Name": "sys/log/operation",
"ParentId": 374792687640581, "ParentId": 374792687640581,
"Path": "/log/operation", "Path": "/sys/log/operation",
"Sort": 100, "Sort": 100,
"Title": "操作日志", "Title": "操作日志",
"Type": 1, "Type": 1,
}, },
{ {
"Component": "sys/log/login", "Component": "sys/log/login",
"Icon": "sc-icon-open-door", "Icon": "sc-icon-OpenDoor",
"Id": 485285246504970, "Id": 485285246504970,
"Name": "sys/log/login", "Name": "sys/log/login",
"ParentId": 374792687640581, "ParentId": 374792687640581,
"Path": "/log/login", "Path": "/sys/log/login",
"Sort": 99, "Sort": 99,
"Title": "登录日志", "Title": "登录日志",
"Type": 1, "Type": 1,
@ -263,7 +199,7 @@
"Id": 373838105399301, "Id": 373838105399301,
"Name": "dev", "Name": "dev",
"Path": "/dev", "Path": "/dev",
"Sort": 95, "Sort": 96,
"Title": "开发管理", "Title": "开发管理",
"Type": 1 "Type": 1
}, },
@ -291,7 +227,7 @@
{ {
"Id": 560217289232398, "Id": 560217289232398,
"ParentId": 373838105399301, "ParentId": 373838105399301,
"Icon": "sc-icon-free-sql", "Icon": "sc-icon-FreeSql",
"Name": "dev/freesql", "Name": "dev/freesql",
"Path": "https://freesql.net/guide", "Path": "https://freesql.net/guide",
"Sort": 99, "Sort": 99,

View File

@ -42,69 +42,5 @@
{ {
"ApiId": "api/sys/user/set.session.user.app.config", "ApiId": "api/sys/user/set.session.user.app.config",
"RoleId": 371729946431493, "RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/count.by",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/login.log/export",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/user.wallet/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/user.wallet/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.trade/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.trade/count.by",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.trade/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/count.by",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/create",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/get.deposit.config",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/deposit.order/pay.confirm",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/user.invite/query",
"RoleId": 371729946431493,
} }
] ]

View File

@ -6,37 +6,5 @@
{ {
"MenuId": 374967228141573, "MenuId": 374967228141573,
"RoleId": 371729946431493 "RoleId": 371729946431493
},
{
"MenuId": 690906994118665,
"RoleId": 371729946431493
},
{
"MenuId": 690907673255942,
"RoleId": 371729946431493
},
{
"MenuId": 374792687640581,
"RoleId": 371729946431493
},
{
"MenuId": 485285246504970,
"RoleId": 371729946431493
},
{
"MenuId": 690907673255943,
"RoleId": 371729946431493
},
{
"MenuId": 690907673255944,
"RoleId": 371729946431493
},
{
"MenuId": 692575802241032,
"RoleId": 371729946431493
},
{
"MenuId": 692575802245126,
"RoleId": 371729946431493
} }
] ]

View File

@ -3,27 +3,16 @@
"DeptId": 372119301627909, "DeptId": 372119301627909,
"Enabled": true, "Enabled": true,
"Id": 370942943322181, "Id": 370942943322181,
"InviteCode": "Q09Y8O",
"Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15", "Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15",
"Token": "A9AFD92E-A33D-4152-9A6C-A9C141D24887", "Token": "A9AFD92E-A33D-4152-9A6C-A9C141D24887",
"UserName": "root", "UserName": "root"
}, },
{ {
"DeptId": 372119301627909, "DeptId": 372119301627909,
"Enabled": true, "Enabled": true,
"Id": 560217289236492, "Id": 560217289236492,
"InviteCode": "7ZH5PB",
"Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15", "Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15",
"Token": "4208EA97-B32F-4E39-A290-4C0D27B61EBF", "Token": "4208EA97-B32F-4E39-A290-4C0D27B61EBF",
"UserName": "user", "UserName": "user"
},
{
"DeptId": 372119301627909,
"Enabled": true,
"Id": 664362432344581,
"InviteCode": "47Q56H",
"Password": "A8E87D23-49BC-25A1-1C7C-59186BEF5D15",
"Token": "751D599B-2B8C-417C-9565-CCF2363F5F6F",
"UserName": "jobs",
} }
] ]

View File

@ -1,15 +0,0 @@
[
{
"Id": 370942943322181,
},
{
"Id": 560217289236492,
"OwnerDeptId": 372119301627909,
"OwnerId": 370942943322181,
},
{
"Id": 664362432344581,
"OwnerDeptId": 372119301627909,
"OwnerId": 370942943322181,
}
]

View File

@ -3,10 +3,6 @@
"Id": 370942943322181, "Id": 370942943322181,
"AppConfig": "[]" "AppConfig": "[]"
}, },
{
"Id": 664362432344581,
"AppConfig": "[]"
},
{ {
"Id": 560217289236492, "Id": 560217289236492,
"AppConfig": "[]" "AppConfig": "[]"

View File

@ -3,10 +3,6 @@
"RoleId": 370943613149253, "RoleId": 370943613149253,
"UserId": 370942943322181 "UserId": 370942943322181
}, },
{
"RoleId": 370943613149253,
"UserId": 664362432344581
},
{ {
"RoleId": 371729946431493, "RoleId": 371729946431493,
"UserId": 560217289236492 "UserId": 560217289236492

View File

@ -1,17 +0,0 @@
[
{
"Id": 370942943322181,
"OwnerDeptId": 372119301627909,
"OwnerId": 370942943322181,
},
{
"Id": 664362432344581,
"OwnerDeptId": 372119301627909,
"OwnerId": 664362432344581,
},
{
"Id": 560217289236492,
"OwnerDeptId": 372119301627909,
"OwnerId": 560217289236492,
}
]

View File

@ -15,15 +15,15 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15"> <PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.12.19">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Roslynator.Analyzers" Version="4.13.1"> <PackageReference Include="Roslynator.Analyzers" Version="4.12.9">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.12.0.118525"> <PackageReference Include="SonarAnalyzer.CSharp" Version="10.3.0.106239">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>

View File

@ -3,8 +3,8 @@
<ItemGroup> <ItemGroup>
<PackageReferenceFiles <PackageReferenceFiles
Condition="%(PackageReference.CopyToOutputDirectory) != ''" Condition="%(PackageReference.CopyToOutputDirectory) != ''"
Include="$(NugetPackageRoot)\%(PackageReference.Identity)\%(PackageReference.Version)\%(PackageReference.CopyToOutputDirectory)"/> Include="$(NugetPackageRoot)\%(PackageReference.Identity)\%(PackageReference.Version)\%(PackageReference.CopyToOutputDirectory)" />
</ItemGroup> </ItemGroup>
<Copy SourceFiles="@(PackageReferenceFiles)" DestinationFolder="$(OutDir)"/> <Copy SourceFiles="@(PackageReferenceFiles)" DestinationFolder="$(OutDir)" />
</Target> </Target>
</Project> </Project>

View File

@ -1,12 +1,12 @@
<Project> <Project>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent"> <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="dotnet tool restore" StdOutEncoding="utf-8"/> <Exec Command="dotnet tool restore" StdOutEncoding="utf-8" />
<Exec Condition="!Exists('$(SolutionDir)/assets/res/Ln.resx')" WorkingDirectory="$(SolutionDir)/scripts" <Exec Condition="!Exists('$(SolutionDir)/assets/res/Ln.resx')" WorkingDirectory="$(SolutionDir)/scripts"
Command="dotnet t4 ./gen.resx.tt -o ../assets/res/Ln.resx" Command="dotnet t4 ./gen.resx.tt -o ../assets/res/Ln.resx"
StdOutEncoding="utf-8"/> StdOutEncoding="utf-8" />
<Exec Condition="!Exists('$(SolutionDir)/dist/backend/$(ProjectName)/Ln.cs')" <Exec Condition="!Exists('$(SolutionDir)/dist/backend/$(ProjectName)/Ln.cs')"
WorkingDirectory="$(SolutionDir)/scripts" WorkingDirectory="$(SolutionDir)/scripts"
Command="dotnet t4 ./gen.cs.tt -o ../dist/backend/$(ProjectName)/Ln.cs" Command="dotnet t4 ./gen.cs.tt -o ../dist/backend/$(ProjectName)/Ln.cs"
StdOutEncoding="utf-8"/> StdOutEncoding="utf-8" />
</Target> </Target>
</Project> </Project>

View File

@ -2,6 +2,6 @@
<configuration> <configuration>
<packageSources> <packageSources>
<add key="nuget.cdn.azure.cn" value="https://nuget.cdn.azure.cn/v3/index.json"/> <add key="nuget.cdn.azure.cn" value="https://nuget.cdn.azure.cn/v3/index.json" />
</packageSources> </packageSources>
</configuration> </configuration>

View File

@ -1,9 +1,9 @@
{ {
"version": "2.4.0", "version": "2.3.1",
"devDependencies": { "devDependencies": {
"cz-git": "^1.11.2", "cz-git": "^1.11.0",
"commitizen": "^4.3.1", "commitizen": "^4.3.1",
"prettier": "^3.6.2", "prettier": "^3.4.2",
"standard-version": "^9.5.0" "standard-version": "^9.5.0"
}, },
"config": { "config": {

View File

@ -1,5 +1,3 @@
#!/usr/bin/env pwsh
$branch = $( git branch --show-current ) $branch = $( git branch --show-current )
git add ../ git add ../
$skipFormat = Read-Host "输入 n 跳过代码整理" $skipFormat = Read-Host "输入 n 跳过代码整理"

View File

@ -1,5 +1,3 @@
#!/usr/bin/env pwsh
cd .. cd ..
$types = @{ $types = @{
'1' = @('major', '主版本') '1' = @('major', '主版本')

View File

@ -1,5 +1,3 @@
#!/usr/bin/env pwsh
$branch = $( git branch --show-current ) $branch = $( git branch --show-current )
git checkout main git checkout main
git pull git pull

View File

@ -1,4 +1,2 @@
#!/usr/bin/env pwsh
git push origin :refs/tags/$(git tag -l "*-*") git push origin :refs/tags/$(git tag -l "*-*")
git tag -d $( git tag -l "*-*" ) git tag -d $(git tag -l "*-*")

View File

@ -1,5 +1,3 @@
#!/usr/bin/env pwsh
git submodule update --progress --init --recursive --force --remote -- "../refs/Gurion" git submodule update --progress --init --recursive --force --remote -- "../refs/Gurion"
git submodule update --progress --init --recursive --force --remote -- "../refs/NetAdmin.FreeSql" git submodule update --progress --init --recursive --force --remote -- "../refs/NetAdmin.FreeSql"
git submodule update --progress --init --recursive --force --remote -- "../refs/ns-ext" git submodule update --progress --init --recursive --force --remote -- "../refs/ns-ext"

View File

@ -18,7 +18,7 @@ using System.Net.Http.Json;
{ {
CreateNoWindow = true, CreateNoWindow = true,
FileName = "dotnet", FileName = "dotnet",
Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.slnx", Arguments = $"jb cleanupcode --include=\"{files}\" --no-build ../NetAdmin.sln",
UseShellExecute = false, UseShellExecute = false,
RedirectStandardOutput = true RedirectStandardOutput = true
} }

View File

@ -1,7 +1,5 @@
#!/usr/bin/env pwsh
npm --prefix ../src/frontend/admin run prettier npm --prefix ../src/frontend/admin run prettier
jb cleanupcode --no-build --include=$( $( git status --porcelain | Where-Object { $_ -match "^\s*[MA]" } | ForEach-Object { $_.TrimStart(" M").TrimStart(" A") } ) -join ";" ) ../NetAdmin.slnx jb cleanupcode --no-build --include=$($(git status --porcelain | Where-Object { $_ -match "^\s*[MA]" } | ForEach-Object { $_.TrimStart(" M").TrimStart(" A") }) -join ";") ../NetAdmin.sln
dot rbom -w -e refs -e .git -e node_modules ../ dot rbom -w -e refs -e .git -e node_modules ../
dot trim -w -e refs -e .git -e node_modules ../ dot trim -w -e refs -e .git -e node_modules ../
dot tolf -w -e refs -e .git -e node_modules ../ dot tolf -w -e refs -e .git -e node_modules ../

View File

@ -1,4 +1,2 @@
#!/usr/bin/env pwsh
dotnet new uninstall ../ dotnet new uninstall ../
dotnet new --install ../ dotnet new --install ../

View File

@ -1,4 +1,4 @@
#r "nuget: NSExt, 2.3.5" #r "nuget: NSExt, 2.3.2"
using NSExt.Extensions; using NSExt.Extensions;
Console.WriteLine("请输入原始名称NetAdmin"); Console.WriteLine("请输入原始名称NetAdmin");

View File

@ -1,3 +1 @@
#!/usr/bin/env pwsh jb cleanupcode --no-build ../NetAdmin.sln
jb cleanupcode --no-build ../NetAdmin.slnx

View File

@ -5,13 +5,18 @@ while (!new[] { "1", "2" }.Contains(input))
Console.WriteLine("1.nuget 2.project"); Console.WriteLine("1.nuget 2.project");
input = Console.ReadLine(); input = Console.ReadLine();
} }
var slnxFile = Directory.GetFiles(@"../", "*.slnx").First(); var slnFile = Directory.GetFiles(@"../", "*.sln").First();
var csprojFiles = Directory.GetFiles(@"../src", "*.csproj", new EnumerationOptions { RecurseSubdirectories = true }); var csprojFiles = Directory.GetFiles(@"../src", "*.csproj", new EnumerationOptions { RecurseSubdirectories = true });
var slnContent = File.ReadAllText(slnxFile); var slnContent = File.ReadAllText(slnFile);
if (input == "1") if (input == "1")
{ {
slnContent = Regex.Replace(slnContent, "<Project Type=\"Refs\"(.*)>", "<!--<Project Type=\"Refs\"$1>-->"); slnContent = Regex.Replace(slnContent, "\\nProject\\((.*)#refs", "\n##Project($1#refs");
slnContent = Regex.Replace(slnContent, "\\nEndProject#refs", "\n##EndProject#refs");
foreach (Match m in Regex.Matches(slnContent, "\"(\\{[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}\\})\"#refs"))
{
slnContent = slnContent.Replace($" {m.Groups[1].Value}.", $" ##{m.Groups[1].Value}.");
}
foreach (var csprojFile in csprojFiles) foreach (var csprojFile in csprojFiles)
{ {
var csprojContent = File.ReadAllText(csprojFile); var csprojContent = File.ReadAllText(csprojFile);
@ -22,7 +27,7 @@ if (input == "1")
} }
else else
{ {
slnContent = Regex.Replace(slnContent, "<!--(.*)-->", "$1"); slnContent = Regex.Replace(slnContent, "##", "");
foreach (var csprojFile in csprojFiles) foreach (var csprojFile in csprojFiles)
{ {
var csprojContent = File.ReadAllText(csprojFile); var csprojContent = File.ReadAllText(csprojFile);
@ -34,4 +39,4 @@ else
Console.WriteLine(slnContent); Console.WriteLine(slnContent);
File.WriteAllText(slnxFile, slnContent); File.WriteAllText(slnFile, slnContent);

View File

@ -0,0 +1,91 @@
using System.Text.RegularExpressions;
var slnFile = Directory.GetFiles(@"../", "*.sln").First();
var content = File.ReadAllText(slnFile);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"meta\", \"meta\", \"{5198A03D-0CAC-4828-A807-34A693F73859}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{5198A03D-0CAC-4828-A807-34A693F73859}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../", "*").Where(x => !x.EndsWith(".sln") && !x.EndsWith(".user"))
.Select(x=>$" {Path.GetFileName(x)} = {Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"docker\", \"docker\", \"{E80A1018-C354-4A26-9029-8847BB9DA864}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{E80A1018-C354-4A26-9029-8847BB9DA864}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../docker", "*")
.Select(x=>$" {Path.GetFileName(x)} = docker/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{3C6F049E-3EE8-4D66-9AFF-E8A369032487}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{3C6F049E-3EE8-4D66-9AFF-E8A369032487}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../.github/workflows", "*")
.Select(x=>$" {Path.GetFileName(x)} = .github/workflows/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"workflows\", \"workflows\", \"{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{BB5BB244-E7D2-4368-8C18-C1C0ED1E12D1}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../.drone/workflows", "*")
.Select(x=>$" {Path.GetFileName(x)} = .drone/workflows/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"scripts\", \"scripts\", \"{BB0B25C9-0901-4923-913F-00F9A6B352A5}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "scripts", "scripts", "{BB0B25C9-0901-4923-913F-00F9A6B352A5}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../scripts", "*")
.Select(x=>$" {Path.GetFileName(x)} = scripts/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
content = Regex.Replace(
content,
"Project\\(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\"\\) = \"build\", \"build\", \"{8E4C93BA-9493-4892-80C4-5E174C504829}\"(?:.|\n)*?EndProject",
$$"""
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{8E4C93BA-9493-4892-80C4-5E174C504829}"
ProjectSection(SolutionItems) = preProject
{{string.Join('\n',
Directory.GetFiles(@"../build", "*")
.Select(x=>$" {Path.GetFileName(x)} = build/{Path.GetFileName(x)}")
)}}
EndProject
"""
);
Console.WriteLine(content);
File.WriteAllText(slnFile, content);

View File

@ -1,87 +0,0 @@
using System.Text.RegularExpressions;
var slnxFile = Directory.GetFiles(@"../", "*.slnx").First();
var content = File.ReadAllText(slnxFile);
content = Regex.Replace(
content,
"<Folder Name=\"/meta/\">(?:.|\n)*?</Folder>",
$$"""
<Folder Name="/meta/">
{{string.Join('\n',
Directory.GetFiles(@"../", "*").Where(x => !x.EndsWith(".slnx") && !x.EndsWith(".user"))
.Select(x=>$" <File Path=\"{Path.GetFileName(x)}\"/>")
)}}
</Folder>
"""
);
content = Regex.Replace(
content,
"<Folder Name=\"/docker/\">(?:.|\n)*?</Folder>",
$$"""
<Folder Name="/docker/">
{{string.Join('\n',
Directory.GetFiles(@"../docker", "*")
.Select(x=>$" <File Path=\"docker/{Path.GetFileName(x)}\"/>")
)}}
</Folder>
"""
);
content = Regex.Replace(
content,
"<Folder Name=\"/.github/workflows/\">(?:.|\n)*?</Folder>",
$$"""
<Folder Name="/.github/workflows/">
{{string.Join('\n',
Directory.GetFiles(@"../.github/workflows", "*")
.Select(x=>$" <File Path=\".github/workflows/{Path.GetFileName(x)}\"/>")
)}}
</Folder>
"""
);
content = Regex.Replace(
content,
"<Folder Name=\"/.drone/workflows/\">(?:.|\n)*?</Folder>",
$$"""
<Folder Name="/.drone/workflows/">
{{string.Join('\n',
Directory.GetFiles(@"../.drone/workflows", "*")
.Select(x=>$" <File Path=\".drone/workflows/{Path.GetFileName(x)}\"/>")
)}}
</Folder>
"""
);
content = Regex.Replace(
content,
"<Folder Name=\"/scripts/\">(?:.|\n)*?</Folder>",
$$"""
<Folder Name="/scripts/">
{{string.Join('\n',
Directory.GetFiles(@"../scripts", "*")
.Select(x=>$" <File Path=\"scripts/{Path.GetFileName(x)}\"/>")
)}}
</Folder>
"""
);
content = Regex.Replace(
content,
"<Folder Name=\"/build/\">(?:.|\n)*?</Folder>",
$$"""
<Folder Name="/build/">
{{string.Join('\n',
Directory.GetFiles(@"../build", "*")
.Select(x=>$" <File Path=\"build/{Path.GetFileName(x)}\"/>")
)}}
</Folder>
"""
);
Console.WriteLine(content);
File.WriteAllText(slnxFile, content);

View File

@ -32,6 +32,7 @@ global using Gurion.DataEncryption;
global using Gurion.DataValidation; global using Gurion.DataValidation;
global using Gurion.DependencyInjection; global using Gurion.DependencyInjection;
global using Gurion.DynamicApiController; global using Gurion.DynamicApiController;
global using Gurion.EventBus;
global using Gurion.SpecificationDocument; global using Gurion.SpecificationDocument;
global using Gurion.UnifyResult; global using Gurion.UnifyResult;
global using Mapster; global using Mapster;
@ -57,7 +58,6 @@ global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Redis;
global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Upload; global using NetAdmin.Infrastructure.Configuration.Options.SubNodes.Upload;
global using NetAdmin.Infrastructure.Constant; global using NetAdmin.Infrastructure.Constant;
global using NetAdmin.Infrastructure.Enums; global using NetAdmin.Infrastructure.Enums;
global using NetAdmin.Infrastructure.EventBus;
global using NetAdmin.Infrastructure.Exceptions; global using NetAdmin.Infrastructure.Exceptions;
global using NetAdmin.Infrastructure.Extensions; global using NetAdmin.Infrastructure.Extensions;
global using NetAdmin.Infrastructure.Languages; global using NetAdmin.Infrastructure.Languages;

View File

@ -2,7 +2,6 @@ using CsvHelper;
using Microsoft.Net.Http.Headers; using Microsoft.Net.Http.Headers;
using NetAdmin.Application.Repositories; using NetAdmin.Application.Repositories;
using NetAdmin.Domain; using NetAdmin.Domain;
using NetAdmin.Domain.Contexts;
using NetAdmin.Domain.DbMaps.Dependency; using NetAdmin.Domain.DbMaps.Dependency;
using NetAdmin.Domain.DbMaps.Dependency.Fields; using NetAdmin.Domain.DbMaps.Dependency.Fields;
using NetAdmin.Domain.Dto.Dependency; using NetAdmin.Domain.Dto.Dependency;
@ -49,15 +48,14 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// 导出实体 /// 导出实体
/// </summary> /// </summary>
protected static async Task<IActionResult> ExportAsync<TQuery, TExport>( // protected static async Task<IActionResult> ExportAsync<TQuery, TExport>( //
Func<QueryReq<TQuery>, ISelect<TEntity>> selector, QueryReq<TQuery> query, string fileName, Expression<Func<TEntity, object>> listExp = null Func<QueryReq<TQuery>, ISelect<TEntity>> selector, QueryReq<TQuery> query, string fileName, Expression<Func<TEntity, object>> listExp = null)
, Func<object, object> listHandle = null)
where TQuery : DataAbstraction, new() where TQuery : DataAbstraction, new()
{ {
var select = selector(query).WithNoLockNoWait().Take(Numbers.MAX_LIMIT_EXPORT); var select = selector(query).WithNoLockNoWait().Take(Numbers.MAX_LIMIT_EXPORT);
object list = listExp == null ? await select.ToListAsync().ConfigureAwait(false) : await select.ToListAsync(listExp).ConfigureAwait(false); object list = listExp == null
? await select.ToListAsync().ConfigureAwait(false)
list = listHandle?.Invoke(list) ?? list; : await select.ToListAsync(listExp).ConfigureAwait(false);
return await GetExportFileStreamAsync<TExport>(fileName, list).ConfigureAwait(false); return await GetExportFileStreamAsync<TExport>(fileName, list).ConfigureAwait(false);
} }
@ -71,7 +69,6 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
/// <param name="whereExp">查询表达式</param> /// <param name="whereExp">查询表达式</param>
/// <param name="whereSql">查询sql</param> /// <param name="whereSql">查询sql</param>
/// <param name="ignoreVersion">是否忽略版本锁</param> /// <param name="ignoreVersion">是否忽略版本锁</param>
/// <param name="disableGlobalDataFilter">是否忽略全局数据权限过滤</param>
/// <returns>更新行数</returns> /// <returns>更新行数</returns>
protected Task<int> UpdateAsync( // protected Task<int> UpdateAsync( //
TEntity newValue // TEntity newValue //
@ -79,16 +76,12 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
, List<string> excludeFields = null // , List<string> excludeFields = null //
, Expression<Func<TEntity, bool>> whereExp = null // , Expression<Func<TEntity, bool>> whereExp = null //
, string whereSql = null // , string whereSql = null //
, bool ignoreVersion = false, bool disableGlobalDataFilter = false) , bool ignoreVersion = false)
{ {
// 默认匹配主键 // 默认匹配主键
whereExp ??= a => a.Id.Equals(newValue.Id); whereExp ??= a => a.Id.Equals(newValue.Id);
var update = BuildUpdate(newValue, includeFields, excludeFields, ignoreVersion).Where(whereExp).Where(whereSql); var update = BuildUpdate(newValue, includeFields, excludeFields, ignoreVersion).Where(whereExp).Where(whereSql);
if (disableGlobalDataFilter) { return update.ExecuteAffrowsAsync();
update = update.DisableGlobalFilter(nameof(Chars.FLG_FREE_SQL_GLOBAL_FILTER_DATA));
}
return update.ExecuteEffectsAsync();
} }
#if DBTYPE_SQLSERVER #if DBTYPE_SQLSERVER
@ -106,8 +99,8 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
TEntity newValue // TEntity newValue //
, List<string> includeFields = null // , List<string> includeFields = null //
, List<string> excludeFields = null // , List<string> excludeFields = null //
, Expression<Func<TEntity, bool>> whereExp = null // , Expression<Func<TEntity, bool>> whereExp = null //
, string whereSql = null // , string whereSql = null //
, bool ignoreVersion = false) , bool ignoreVersion = false)
{ {
// 默认匹配主键 // 默认匹配主键
@ -142,30 +135,6 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM); return new FileStreamResult(stream, Chars.FLG_HTTP_HEADER_VALUE_APPLICATION_OCTET_STREAM);
} }
private static Dictionary<string, object> IncludeToDictionary(TEntity entity, List<string> includeFields)
{
var ret = includeFields!.ToDictionary(
x => x, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity));
// ReSharper disable once ConvertIfStatementToSwitchStatement
if (entity is IFieldModifiedUser) {
var userInfo = App.GetService<ContextUserInfo>();
if (userInfo == null) {
return ret;
}
ret.Add(nameof(IFieldModifiedUser.ModifiedUserId), userInfo.Id);
ret.Add(nameof(IFieldModifiedUser.ModifiedUserName), userInfo.UserName);
}
// ReSharper disable once SuspiciousTypeConversion.Global
if (entity is IFieldModifiedClientIp) {
ret.Add(nameof(IFieldModifiedClientIp.ModifiedClientIp), App.HttpContext?.GetRealIpAddress()?.MapToIPv4().ToString().IpV4ToInt32());
}
return ret;
}
private IUpdate<TEntity> BuildUpdate(TEntity entity, List<string> includeFields, List<string> excludeFields, bool ignoreVersion) private IUpdate<TEntity> BuildUpdate(TEntity entity, List<string> includeFields, List<string> excludeFields, bool ignoreVersion)
{ {
IUpdate<TEntity> updateExp; IUpdate<TEntity> updateExp;
@ -176,7 +145,9 @@ public abstract class RepositoryService<TEntity, TPrimary, TLogger>(BasicReposit
} }
} }
else { else {
updateExp = Rpo.UpdateDiy.SetDto(IncludeToDictionary(entity, includeFields)); updateExp = Rpo.UpdateDiy.SetDto(includeFields!.ToDictionary(
x => x
, x => typeof(TEntity).GetProperty(x, BindingFlags.Public | BindingFlags.Instance)!.GetValue(entity)));
if (!ignoreVersion && entity is IFieldVersion ver) { if (!ignoreVersion && entity is IFieldVersion ver) {
updateExp = updateExp.Where($"{nameof(IFieldVersion.Version)} = {ver.Version}"); updateExp = updateExp.Where($"{nameof(IFieldVersion.Version)} = {ver.Version}");
} }

View File

@ -10,7 +10,7 @@ public abstract class ServiceBase<TLogger> : ServiceBase
/// </summary> /// </summary>
protected ServiceBase() // protected ServiceBase() //
{ {
Logger = S<ILogger<TLogger>>(); Logger = App.GetService<ILogger<TLogger>>();
} }
/// <summary> /// <summary>
@ -29,7 +29,7 @@ public abstract class ServiceBase : IScoped, IService
/// </summary> /// </summary>
protected ServiceBase() protected ServiceBase()
{ {
UserToken = S<ContextUserToken>(); UserToken = App.GetService<ContextUserToken>();
ServiceId = Guid.NewGuid(); ServiceId = Guid.NewGuid();
} }
@ -38,19 +38,4 @@ public abstract class ServiceBase : IScoped, IService
/// <inheritdoc /> /// <inheritdoc />
public ContextUserToken UserToken { get; set; } public ContextUserToken UserToken { get; set; }
/// <summary>
/// 获取服务
/// </summary>
#pragma warning disable RCS1036
#pragma warning restore RCS1036
// ReSharper disable once MemberCanBeMadeStatic.Global
#pragma warning disable CA1822, S2325
protected T S<T>()
#pragma warning restore S2325, CA1822
where T : class
{
return App.GetService<T>();
}
} }

View File

@ -42,9 +42,8 @@ public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
.ToDictionaryAsync(a => a.Count()) .ToDictionaryAsync(a => a.Count())
.ConfigureAwait(false); .ConfigureAwait(false);
return ret.Select(x => new KeyValuePair<IImmutableDictionary<string, string>, int>( return ret.Select(x => new KeyValuePair<IImmutableDictionary<string, string>, int>(
req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Tpl_Example).GetProperty(y)!.GetValue(x.Key)?.ToString()) req.RequiredFields.ToImmutableDictionary(y => y, y => typeof(Tpl_Example).GetProperty(y)!.GetValue(x.Key)!.ToString())
, x.Value)) , x.Value))
.Where(x => x.Key.Any(y => !y.Value.NullOrEmpty()))
.OrderByDescending(x => x.Value); .OrderByDescending(x => x.Value);
} }

View File

@ -16,5 +16,5 @@ public interface ICache<out TCacheLoad, out TService>
/// <summary> /// <summary>
/// 关联的服务 /// 关联的服务
/// </summary> /// </summary>
TService Service { get; } public TService Service { get; }
} }

View File

@ -1,11 +1,11 @@
namespace NetAdmin.Domain.Attributes; namespace NetAdmin.Domain.Attributes;
/// <summary> /// <summary>
/// 枚举装饰 /// 标记一个枚举的状态指示
/// </summary> /// </summary>
/// <inheritdoc /> /// <inheritdoc />
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)] [AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class EnumDecorationAttribute(string indicate = nameof(Indicates.None), bool pulse = false, int sort = 0) : Attribute public sealed class IndicatorAttribute(string indicate, bool pulse) : Attribute
{ {
/// <summary> /// <summary>
/// 状态指示 /// 状态指示
@ -16,9 +16,4 @@ public sealed class EnumDecorationAttribute(string indicate = nameof(Indicates.N
/// 脉动 /// 脉动
/// </summary> /// </summary>
public bool Pulse { get; } = pulse; public bool Pulse { get; } = pulse;
/// <summary>
/// 排序值
/// </summary>
public int Sort { get; } = sort;
} }

View File

@ -8,5 +8,5 @@ public interface IFieldModifiedClientIp
/// <summary> /// <summary>
/// 客户端IP /// 客户端IP
/// </summary> /// </summary>
int? ModifiedClientIp { get; init; } int ModifiedClientIp { get; init; }
} }

View File

@ -1,17 +1,17 @@
namespace NetAdmin.Domain.DbMaps.Dependency.Fields; namespace NetAdmin.Domain.DbMaps.Dependency.Fields;
/// <summary> /// <summary>
/// 归属字段接口 /// 拥有者字段接口
/// </summary> /// </summary>
public interface IFieldOwner public interface IFieldOwner
{ {
/// <summary> /// <summary>
/// 归属部门编号 /// 拥有者部门编号
/// </summary> /// </summary>
long? OwnerDeptId { get; init; } long? OwnerDeptId { get; init; }
/// <summary> /// <summary>
/// 归属用户编号 /// 拥有者用户编号
/// </summary> /// </summary>
long? OwnerId { get; init; } long? OwnerId { get; init; }
} }

View File

@ -47,7 +47,7 @@ public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUse
[Column(CanInsert = false, Position = -1)] [Column(CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual long? ModifiedUserId { get; init; } public long? ModifiedUserId { get; init; }
/// <summary> /// <summary>
/// 修改者用户名 /// 修改者用户名
@ -55,5 +55,5 @@ public abstract record MutableEntity<T> : LiteMutableEntity<T>, IFieldCreatedUse
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31, CanInsert = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string ModifiedUserName { get; init; } public string ModifiedUserName { get; init; }
} }

View File

@ -71,7 +71,7 @@ public record Sys_Api : ImmutableEntity<string>, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleApi))] [Navigate(ManyToMany = typeof(Sys_RoleApi))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; } public ICollection<Sys_Role> Roles { get; init; }
/// <summary> /// <summary>
/// 服务描述 /// 服务描述

View File

@ -6,14 +6,6 @@ namespace NetAdmin.Domain.DbMaps.Sys;
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Config))] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_Config))]
public record Sys_Config : VersionEntity, IFieldEnabled public record Sys_Config : VersionEntity, IFieldEnabled
{ {
/// <summary>
/// 人民币兑点数比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int CnyToPointRate { get; init; }
/// <summary> /// <summary>
/// 是否启用 /// 是否启用
/// </summary> /// </summary>
@ -22,38 +14,6 @@ public record Sys_Config : VersionEntity, IFieldEnabled
[JsonIgnore] [JsonIgnore]
public virtual bool Enabled { get; init; } public virtual bool Enabled { get; init; }
/// <summary>
/// 必须邀请注册
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual bool RegisterInviteRequired { get; init; }
/// <summary>
/// 必须手机号注册
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual bool RegisterMobileRequired { get; init; }
/// <summary>
/// Trc20收款地址
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_CHAR_34)]
[CsvIgnore]
[JsonIgnore]
public virtual string Trc20ReceiptAddress { get; init; }
/// <summary>
/// 美元兑点数比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int UsdToPointRate { get; init; }
/// <summary> /// <summary>
/// 用户注册是否需要人工确认 /// 用户注册是否需要人工确认
/// </summary> /// </summary>

View File

@ -1,115 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 充值订单表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_DepositOrder))]
[SqlIndex( //
$"{Chars.FLG_DB_INDEX_PREFIX}{nameof(ActualPayAmount)}_{nameof(FinishTimestamp)}", $"{nameof(ActualPayAmount)},{nameof(FinishTimestamp)}", true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(PaymentFinger), nameof(PaymentFinger), true, WhenNotNull = true)]
public record Sys_DepositOrder : LiteVersionEntity, IFieldOwner
{
/// <summary>
/// 实际支付金额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long ActualPayAmount { get; init; }
/// <summary>
/// 订单状态
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual DepositOrderStatues DepositOrderStatus { get; init; }
/// <summary>
/// 充值点数
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long DepositPoint { get; init; }
/// <summary>
/// 完成时间戳
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long FinishTimestamp { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 付款账号
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)]
[CsvIgnore]
[JsonIgnore]
public virtual string PaidAccount { get; init; }
/// <summary>
/// 付款时间
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual DateTime? PaidTime { get; init; }
/// <summary>
/// 付款指纹
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore]
[JsonIgnore]
public virtual string PaymentFinger { get; init; }
/// <summary>
/// 支付方式
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual PaymentModes PaymentMode { get; init; }
/// <summary>
/// 收款账号
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_127)]
[CsvIgnore]
[JsonIgnore]
public virtual string ReceiptAccount { get; init; }
/// <summary>
/// 兑点数比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int ToPointRate { get; init; }
}

View File

@ -44,7 +44,7 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleDept))] [Navigate(ManyToMany = typeof(Sys_RoleDept))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; } public ICollection<Sys_Role> Roles { get; init; }
/// <summary> /// <summary>
/// 发送给此部门的站内信集合 /// 发送给此部门的站内信集合
@ -52,7 +52,7 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgDept))] [Navigate(ManyToMany = typeof(Sys_SiteMsgDept))]
public IReadOnlyCollection<Sys_SiteMsg> SiteMsgs { get; init; } public ICollection<Sys_SiteMsg> SiteMsgs { get; init; }
/// <summary> /// <summary>
/// 排序值,越大越前 /// 排序值,越大越前

View File

@ -29,7 +29,7 @@ public record Sys_DicCatalog : VersionEntity
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(nameof(Sys_DicContent.CatalogId))] [Navigate(nameof(Sys_DicContent.CatalogId))]
public IReadOnlyCollection<Sys_DicContent> Contents { get; init; } public ICollection<Sys_DicContent> Contents { get; init; }
/// <summary> /// <summary>
/// 字典目录名称 /// 字典目录名称

View File

@ -29,7 +29,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(nameof(Sys_DocContent.CatalogId))] [Navigate(nameof(Sys_DocContent.CatalogId))]
public IReadOnlyCollection<Sys_DocContent> Contents { get; init; } public ICollection<Sys_DocContent> Contents { get; init; }
/// <summary> /// <summary>
/// 文档分类名称 /// 文档分类名称
@ -40,7 +40,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
public virtual string Name { get; init; } public virtual string Name { get; init; }
/// <summary> /// <summary>
/// 归属用户 /// 拥有者
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -48,7 +48,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
public Sys_User Owner { get; init; } public Sys_User Owner { get; init; }
/// <summary> /// <summary>
/// 归属部门编号 /// 拥有者部门编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -56,7 +56,7 @@ public record Sys_DocCatalog : VersionEntity, IFieldOwner
public virtual long? OwnerDeptId { get; init; } public virtual long? OwnerDeptId { get; init; }
/// <summary> /// <summary>
/// 归属用户编号 /// 拥有者用户编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]

View File

@ -41,7 +41,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public virtual bool Enabled { get; init; } public virtual bool Enabled { get; init; }
/// <summary> /// <summary>
/// 归属用户 /// 拥有者
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -49,7 +49,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public Sys_User Owner { get; init; } public Sys_User Owner { get; init; }
/// <summary> /// <summary>
/// 归属部门编号 /// 拥有者部门编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -57,7 +57,7 @@ public record Sys_DocContent : VersionEntity, IFieldEnabled, IFieldOwner
public virtual long? OwnerDeptId { get; init; } public virtual long? OwnerDeptId { get; init; }
/// <summary> /// <summary>
/// 归属用户编号 /// 拥有者用户编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]

View File

@ -35,7 +35,7 @@ public record Sys_JobRecord : LiteImmutableEntity
public int HttpStatusCode { get; init; } public int HttpStatusCode { get; init; }
/// <summary> /// <summary>
/// 归属信息 /// 拥有者信息
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]

View File

@ -66,7 +66,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public virtual string LoginUserName { get; protected init; } public virtual string LoginUserName { get; protected init; }
/// <summary> /// <summary>
/// 归属用户 /// 拥有者
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -74,7 +74,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public Sys_User Owner { get; init; } public Sys_User Owner { get; init; }
/// <summary> /// <summary>
/// 归属部门编号 /// 拥有者部门编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -82,7 +82,7 @@ public record Sys_LoginLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFiel
public virtual long? OwnerDeptId { get; init; } public virtual long? OwnerDeptId { get; init; }
/// <summary> /// <summary>
/// 归属用户编号 /// 拥有者用户编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]

View File

@ -111,7 +111,7 @@ public record Sys_Menu : VersionEntity, IFieldSort
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleMenu))] [Navigate(ManyToMany = typeof(Sys_RoleMenu))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; } public ICollection<Sys_Role> Roles { get; init; }
/// <summary> /// <summary>
/// 排序值,越大越前 /// 排序值,越大越前

View File

@ -76,7 +76,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public virtual int HttpStatusCode { get; init; } public virtual int HttpStatusCode { get; init; }
/// <summary> /// <summary>
/// 归属用户 /// 拥有者
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -84,7 +84,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public Sys_User Owner { get; init; } public Sys_User Owner { get; init; }
/// <summary> /// <summary>
/// 归属部门编号 /// 拥有者部门编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -92,7 +92,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public virtual long? OwnerDeptId { get; init; } public virtual long? OwnerDeptId { get; init; }
/// <summary> /// <summary>
/// 归属用户编号 /// 拥有者用户编号
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]
@ -100,7 +100,7 @@ public record Sys_RequestLog : SimpleEntity, IFieldCreatedTime, IFieldOwner, IFi
public virtual long? OwnerId { get; init; } public virtual long? OwnerId { get; init; }
/// <summary> /// <summary>
/// 请求踪标识 /// 请求踪标识
/// </summary> /// </summary>
[Column] [Column]
[CsvIgnore] [CsvIgnore]

View File

@ -16,7 +16,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleApi))] [Navigate(ManyToMany = typeof(Sys_RoleApi))]
public IReadOnlyCollection<Sys_Api> Apis { get; init; } public ICollection<Sys_Api> Apis { get; init; }
/// <summary> /// <summary>
/// 仪表板布局 /// 仪表板布局
@ -40,7 +40,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleDept))] [Navigate(ManyToMany = typeof(Sys_RoleDept))]
public IReadOnlyCollection<Sys_Dept> Depts { get; init; } public ICollection<Sys_Dept> Depts { get; init; }
/// <summary> /// <summary>
/// 是否显示仪表板 /// 是否显示仪表板
@ -72,7 +72,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_RoleMenu))] [Navigate(ManyToMany = typeof(Sys_RoleMenu))]
public IReadOnlyCollection<Sys_Menu> Menus { get; init; } public ICollection<Sys_Menu> Menus { get; init; }
/// <summary> /// <summary>
/// 角色名称 /// 角色名称
@ -88,7 +88,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgRole))] [Navigate(ManyToMany = typeof(Sys_SiteMsgRole))]
public IReadOnlyCollection<Sys_SiteMsg> SiteMsgs { get; init; } public ICollection<Sys_SiteMsg> SiteMsgs { get; init; }
/// <summary> /// <summary>
/// 排序值,越大越前 /// 排序值,越大越前
@ -112,7 +112,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_UserRole))] [Navigate(ManyToMany = typeof(Sys_UserRole))]
public IReadOnlyCollection<Sys_User> Users { get; init; } public ICollection<Sys_User> Users { get; init; }
/// <inheritdoc /> /// <inheritdoc />
public virtual void Register(TypeAdapterConfig config) public virtual void Register(TypeAdapterConfig config)

View File

@ -31,7 +31,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgDept))] [Navigate(ManyToMany = typeof(Sys_SiteMsgDept))]
public IReadOnlyCollection<Sys_Dept> Depts { get; init; } public ICollection<Sys_Dept> Depts { get; init; }
/// <summary> /// <summary>
/// 消息-标记映射 /// 消息-标记映射
@ -39,7 +39,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(nameof(Sys_SiteMsgFlag.SiteMsgId))] [Navigate(nameof(Sys_SiteMsgFlag.SiteMsgId))]
public IReadOnlyCollection<Sys_SiteMsgFlag> Flags { get; init; } public ICollection<Sys_SiteMsgFlag> Flags { get; init; }
/// <summary> /// <summary>
/// 消息类型 /// 消息类型
@ -54,7 +54,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgRole))] [Navigate(ManyToMany = typeof(Sys_SiteMsgRole))]
public IReadOnlyCollection<Sys_Role> Roles { get; init; } public ICollection<Sys_Role> Roles { get; init; }
/// <summary> /// <summary>
/// 消息摘要 /// 消息摘要
@ -78,7 +78,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgUser))] [Navigate(ManyToMany = typeof(Sys_SiteMsgUser))]
public IReadOnlyCollection<Sys_User> Users { get; init; } public ICollection<Sys_User> Users { get; init; }
/// <inheritdoc /> /// <inheritdoc />
public void Register(TypeAdapterConfig config) public void Register(TypeAdapterConfig config)

View File

@ -5,10 +5,9 @@ namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary> /// <summary>
/// 用户基本信息表 /// 用户基本信息表
/// </summary> /// </summary>
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Email), nameof(Email), true)] [SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Email), nameof(Email), true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Mobile), nameof(Mobile), true)] [SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(Mobile), nameof(Mobile), true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(InviteCode), nameof(InviteCode), true)] [SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(UserName), nameof(UserName), true)]
[SqlIndex(Chars.FLG_DB_INDEX_PREFIX + nameof(UserName), nameof(UserName), true)]
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_User))] [Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_User))]
public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
{ {
@ -21,7 +20,7 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
public virtual string Avatar { get; init; } public virtual string Avatar { get; init; }
/// <summary> /// <summary>
/// 属部门 /// 属部门
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -52,21 +51,6 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
[JsonIgnore] [JsonIgnore]
public virtual bool Enabled { get; init; } public virtual bool Enabled { get; init; }
/// <summary>
/// 用户邀请
/// </summary>
[CsvIgnore]
[JsonIgnore]
public Sys_UserInvite Invite { get; init; }
/// <summary>
/// 邀请码
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_CHAR_6)]
[CsvIgnore]
[JsonIgnore]
public virtual string InviteCode { get; init; }
/// <summary> /// <summary>
/// 最后登录时间 /// 最后登录时间
/// </summary> /// </summary>
@ -100,7 +84,7 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
public Sys_UserProfile Profile { get; init; } public Sys_UserProfile Profile { get; init; }
/// <summary> /// <summary>
/// 属角色 /// 属角色
/// </summary> /// </summary>
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
@ -113,7 +97,7 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
[Navigate(ManyToMany = typeof(Sys_SiteMsgUser))] [Navigate(ManyToMany = typeof(Sys_SiteMsgUser))]
public IReadOnlyCollection<Sys_SiteMsg> SiteMsgs { get; init; } public ICollection<Sys_SiteMsg> SiteMsgs { get; init; }
/// <summary> /// <summary>
/// 备注 /// 备注

View File

@ -1,56 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 用户邀请表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_UserInvite))]
public record Sys_UserInvite : VersionEntity, IFieldOwner
{
/// <summary>
/// 子节点
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public IEnumerable<Sys_UserInvite> Children { get; init; }
/// <summary>
/// 返佣比率
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual int CommissionRatio { get; init; }
/// <summary>
/// 归属
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(Id))]
public Sys_User User { get; init; }
}

View File

@ -112,14 +112,6 @@ public record Sys_UserProfile : VersionEntity, IRegister
[JsonIgnore] [JsonIgnore]
public virtual string EmergencyContactName { get; init; } public virtual string EmergencyContactName { get; init; }
/// <summary>
/// 性别
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual Genders? Gender { get; init; }
/// <summary> /// <summary>
/// 毕业学校 /// 毕业学校
/// </summary> /// </summary>
@ -209,6 +201,14 @@ public record Sys_UserProfile : VersionEntity, IRegister
[JsonIgnore] [JsonIgnore]
public virtual string RealName { get; init; } public virtual string RealName { get; init; }
/// <summary>
/// 性别
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual Sexes? Sex { get; init; }
/// <summary> /// <summary>
/// 用户基本信息 /// 用户基本信息
/// </summary> /// </summary>

View File

@ -1,72 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 用户钱包表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_UserWallet))]
public record Sys_UserWallet : LiteVersionEntity, IFieldOwner
{
/// <summary>
/// 可用余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long AvailableBalance { get; init; }
/// <summary>
/// 冻结余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long FrozenBalance { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 总余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long TotalBalance { get; init; }
/// <summary>
/// 总支出
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long TotalExpenditure { get; init; }
/// <summary>
/// 总收入
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long TotalIncome { get; init; }
}

View File

@ -1,80 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 钱包交易表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_WalletTrade))]
public record Sys_WalletTrade : ImmutableEntity, IFieldOwner, IFieldSummary
{
/// <summary>
/// 交易金额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long Amount { get; init; }
/// <summary>
/// 交易前余额
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long BalanceBefore { get; init; }
/// <summary>
/// 业务订单号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? BusinessOrderNumber { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 备注
/// </summary>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore]
[JsonIgnore]
public virtual string Summary { get; init; }
/// <summary>
/// 交易方向
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual TradeDirections TradeDirection { get; init; }
/// <summary>
/// 交易类型
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual TradeTypes TradeType { get; init; }
}

View File

@ -22,9 +22,4 @@ public record RestfulInfo<T> : DataAbstraction
/// </summary> /// </summary>
/// <example>请求成功</example> /// <example>请求成功</example>
public object Msg { get; init; } public object Msg { get; init; }
/// <summary>
/// 追踪标识
/// </summary>
public Guid? TraceId { get; set; }
} }

View File

@ -15,6 +15,11 @@ public sealed record CacheStatisticsRsp : DataAbstraction
, new("redis_version:(.+)", RegexOptions.Compiled) // , new("redis_version:(.+)", RegexOptions.Compiled) //
]; ];
/// <summary>
/// Initializes a new instance of the <see cref="CacheStatisticsRsp" /> class.
/// </summary>
public CacheStatisticsRsp() { }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="CacheStatisticsRsp" /> class. /// Initializes a new instance of the <see cref="CacheStatisticsRsp" /> class.
/// </summary> /// </summary>

View File

@ -7,6 +7,11 @@ namespace NetAdmin.Domain.Dto.Sys.Cache;
/// </summary> /// </summary>
public sealed record GetEntryRsp : DataAbstraction public sealed record GetEntryRsp : DataAbstraction
{ {
/// <summary>
/// Initializes a new instance of the <see cref="GetEntryRsp" /> class.
/// </summary>
public GetEntryRsp() { }
/// <summary> /// <summary>
/// 缓存值 /// 缓存值
/// </summary> /// </summary>

View File

@ -5,33 +5,10 @@ namespace NetAdmin.Domain.Dto.Sys.Config;
/// </summary> /// </summary>
public record CreateConfigReq : Sys_Config public record CreateConfigReq : Sys_Config
{ {
/// <inheritdoc cref="Sys_Config.CnyToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[Range(1, int.MaxValue)]
public override int CnyToPointRate { get; init; }
/// <inheritdoc cref="IFieldEnabled.Enabled" /> /// <inheritdoc cref="IFieldEnabled.Enabled" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool Enabled { get; init; } public override bool Enabled { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterInviteRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterInviteRequired { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterMobileRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterMobileRequired { get; init; }
/// <inheritdoc cref="Sys_Config.Trc20ReceiptAddress" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[Length(34, 34)]
public override string Trc20ReceiptAddress { get; init; }
/// <inheritdoc cref="Sys_Config.UsdToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[Range(1, int.MaxValue)]
public override int UsdToPointRate { get; init; }
/// <inheritdoc cref="Sys_Config.UserRegisterConfirm" /> /// <inheritdoc cref="Sys_Config.UserRegisterConfirm" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool UserRegisterConfirm { get; init; } public override bool UserRegisterConfirm { get; init; }

View File

@ -8,10 +8,6 @@ namespace NetAdmin.Domain.Dto.Sys.Config;
/// </summary> /// </summary>
public record QueryConfigRsp : Sys_Config public record QueryConfigRsp : Sys_Config
{ {
/// <inheritdoc cref="Sys_Config.CnyToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CnyToPointRate { get; init; }
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" /> /// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; } public override DateTime CreatedTime { get; init; }
@ -24,22 +20,6 @@ public record QueryConfigRsp : Sys_Config
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; } public override long Id { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterInviteRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterInviteRequired { get; init; }
/// <inheritdoc cref="Sys_Config.RegisterMobileRequired" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool RegisterMobileRequired { get; init; }
/// <inheritdoc cref="Sys_Config.Trc20ReceiptAddress" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Trc20ReceiptAddress { get; init; }
/// <inheritdoc cref="Sys_Config.UsdToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int UsdToPointRate { get; init; }
/// <inheritdoc cref="Sys_Config.UserRegisterConfirm" /> /// <inheritdoc cref="Sys_Config.UserRegisterConfirm" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override bool UserRegisterConfirm { get; init; } public override bool UserRegisterConfirm { get; init; }

View File

@ -1,36 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:创建充值订单
/// </summary>
public record CreateDepositOrderReq : Sys_DepositOrder, IValidatableObject
{
/// <inheritdoc cref="Sys_DepositOrder.ActualPayAmount" />
public override long ActualPayAmount { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.DepositOrderStatus" />
public override DepositOrderStatues DepositOrderStatus { get; init; } = DepositOrderStatues.WaitingForPayment;
/// <inheritdoc cref="Sys_DepositOrder.DepositPoint" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[Range(100, long.MaxValue)]
public override long DepositPoint { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaymentMode" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[EnumDataType(typeof(PaymentModes))]
public override PaymentModes PaymentMode { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.ToPointRate" />
public override int ToPointRate { get; init; }
/// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (PaymentMode != PaymentModes.USDT) {
yield return new ValidationResult(Ln., [nameof(PaymentMode)]);
}
yield return ValidationResult.Success;
}
}

View File

@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:编辑充值订单
/// </summary>
public record EditDepositOrderReq : CreateDepositOrderReq
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,19 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 响应:查询充值订单
/// </summary>
public sealed record GetDepositConfigRsp : Sys_Config
{
/// <inheritdoc cref="Sys_Config.CnyToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CnyToPointRate { get; init; }
/// <inheritdoc cref="Sys_Config.Trc20ReceiptAddress" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Trc20ReceiptAddress { get; init; }
/// <inheritdoc cref="Sys_Config.UsdToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int UsdToPointRate { get; init; }
}

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:支付确认
/// </summary>
public record PayConfirmReq : Sys_DepositOrder
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:查询充值订单
/// </summary>
public sealed record QueryDepositOrderReq : Sys_DepositOrder
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@ -1,73 +0,0 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 响应:查询充值订单
/// </summary>
public record QueryDepositOrderRsp : Sys_DepositOrder
{
/// <inheritdoc cref="Sys_DepositOrder.ActualPayAmount" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long ActualPayAmount { get; init; }
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.DepositOrderStatus" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DepositOrderStatues DepositOrderStatus { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.DepositPoint" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long DepositPoint { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? ModifiedTime { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.Owner" />
[CsvIgnore]
public new virtual QueryUserRsp Owner { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerDeptId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerDeptId { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerId { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaidAccount" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string PaidAccount { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaidTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? PaidTime { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaymentFinger" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string PaymentFinger { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.PaymentMode" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override PaymentModes PaymentMode { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.ReceiptAccount" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string ReceiptAccount { get; init; }
/// <inheritdoc cref="Sys_DepositOrder.ToPointRate" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int ToPointRate { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,12 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.DepositOrder;
/// <summary>
/// 请求:到账确认
/// </summary>
public record ReceivedConfirmationReq : DataAbstraction
{
/// <summary>
/// 读取前n条记录
/// </summary>
public int ReadRecordCount { get; init; }
}

View File

@ -1,17 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.File;
/// <summary>
/// 响应:文件上传
/// </summary>
public record UploadFileRsp : DataAbstraction
{
/// <summary>
/// 文件名
/// </summary>
public string FileName { get; init; }
/// <summary>
/// 可访问的url地址
/// </summary>
public string Url { get; init; }
}

View File

@ -5,7 +5,7 @@ namespace NetAdmin.Domain.Dto.Sys.Job;
/// </summary> /// </summary>
public sealed record EditJobReq : CreateJobReq public sealed record EditJobReq : CreateJobReq
{ {
/// <inheritdoc cref="IFieldVersion.Version" /> /// <inheritdoc cref="System.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; } public override long Version { get; init; }
} }

View File

@ -7,6 +7,11 @@ namespace NetAdmin.Domain.Dto.Sys.Menu;
/// </summary> /// </summary>
public sealed record MetaInfo : DataAbstraction public sealed record MetaInfo : DataAbstraction
{ {
/// <summary>
/// Initializes a new instance of the <see cref="MetaInfo" /> class.
/// </summary>
public MetaInfo() { }
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="MetaInfo" /> class. /// Initializes a new instance of the <see cref="MetaInfo" /> class.
/// </summary> /// </summary>

View File

@ -76,6 +76,6 @@ public sealed record ExportRequestLogRsp : QueryRequestLogRsp
/// <inheritdoc /> /// <inheritdoc />
[CsvIndex(7)] [CsvIndex(7)]
[CsvIgnore(false)] [CsvIgnore(false)]
[CsvName(nameof(Ln.踪标识))] [CsvName(nameof(Ln.踪标识))]
public override Guid TraceId { get; init; } public override Guid TraceId { get; init; }
} }

View File

@ -14,9 +14,4 @@ public record ExecuteSqlReq : DataAbstraction
/// 超时时间(秒) /// 超时时间(秒)
/// </summary> /// </summary>
public int TimeoutSecs { get; init; } public int TimeoutSecs { get; init; }
/// <summary>
/// 等待结果
/// </summary>
public bool WaitResult { get; init; } = true;
} }

View File

@ -1,13 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.User;
/// <summary>
/// 请求:检查邀请码是否正确
/// </summary>
public sealed record CheckInviterAvailableReq : DataAbstraction
{
/// <summary>
/// 邀请码
/// </summary>
[Required]
public string Code { get; init; }
}

View File

@ -1,4 +1,3 @@
using NetAdmin.Domain.Dto.Sys.UserInvite;
using NetAdmin.Domain.Dto.Sys.UserProfile; using NetAdmin.Domain.Dto.Sys.UserProfile;
namespace NetAdmin.Domain.Dto.Sys.User; namespace NetAdmin.Domain.Dto.Sys.User;
@ -8,15 +7,6 @@ namespace NetAdmin.Domain.Dto.Sys.User;
/// </summary> /// </summary>
public sealed record CreateUserReq : CreateEditUserReq public sealed record CreateUserReq : CreateEditUserReq
{ {
/// <inheritdoc />
public override bool Enabled { get; init; } = true;
/// <inheritdoc cref="Sys_User.Invite" />
public new CreateUserInviteReq Invite { get; init; }
/// <inheritdoc />
public override string InviteCode { get; init; } = ((long)new[] { 60466176, int.MaxValue }.Rand()).Sys36().ToUpperInvariant();
/// <inheritdoc cref="CreateEditUserReq.PasswordText" /> /// <inheritdoc cref="CreateEditUserReq.PasswordText" />
[Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.密码不能为空))] [Required(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.密码不能为空))]
public override string PasswordText { get; init; } public override string PasswordText { get; init; }
@ -28,7 +18,6 @@ public sealed record CreateUserReq : CreateEditUserReq
public override void Register(TypeAdapterConfig config) public override void Register(TypeAdapterConfig config)
{ {
_ = config.ForType<RegisterUserReq, CreateUserReq>() // _ = config.ForType<RegisterUserReq, CreateUserReq>() //
.Ignore(a => a.InviteCode)
.Map(d => d.Mobile, s => s.VerifySmsCodeReq.DestDevice) .Map(d => d.Mobile, s => s.VerifySmsCodeReq.DestDevice)
// //

View File

@ -19,10 +19,10 @@ public sealed record ExportUserRsp : QueryUserRsp
public override QueryDeptRsp Dept { get; init; } public override QueryDeptRsp Dept { get; init; }
/// <summary> /// <summary>
/// 属部门 /// 属部门
/// </summary> /// </summary>
[CsvIndex(5)] [CsvIndex(5)]
[CsvName(nameof(Ln.属部门))] [CsvName(nameof(Ln.属部门))]
public string DeptName { get; init; } public string DeptName { get; init; }
/// <inheritdoc /> /// <inheritdoc />
@ -56,10 +56,10 @@ public sealed record ExportUserRsp : QueryUserRsp
public override string Mobile { get; init; } public override string Mobile { get; init; }
/// <summary> /// <summary>
/// 属角色 /// 属角色
/// </summary> /// </summary>
[CsvIndex(4)] [CsvIndex(4)]
[CsvName(nameof(Ln.属角色))] [CsvName(nameof(Ln.属角色))]
public string RoleNames { get; init; } public string RoleNames { get; init; }
/// <inheritdoc /> /// <inheritdoc />

View File

@ -39,10 +39,6 @@ public record QueryUserRsp : Sys_User
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; } public override long Id { get; init; }
/// <inheritdoc cref="Sys_User.InviteCode" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string InviteCode { get; init; }
/// <inheritdoc cref="Sys_User.LastLoginTime" /> /// <inheritdoc cref="Sys_User.LastLoginTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? LastLoginTime { get; init; } public override DateTime? LastLoginTime { get; init; }

View File

@ -7,11 +7,6 @@ namespace NetAdmin.Domain.Dto.Sys.User;
/// </summary> /// </summary>
public sealed record RegisterUserReq : Sys_User public sealed record RegisterUserReq : Sys_User
{ {
/// <summary>
/// 邀请者的邀请码
/// </summary>
public string Inviter { get; init; }
/// <summary> /// <summary>
/// 密码 /// 密码
/// </summary> /// </summary>

View File

@ -11,7 +11,7 @@ public sealed record SetAvatarReq : Sys_User
[Url(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.网络地址不正确))] [Url(ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.网络地址不正确))]
public override string Avatar { get; init; } public override string Avatar { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" /> /// <inheritdoc cref="System.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; } public override long Version { get; init; }
} }

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:创建用户邀请
/// </summary>
public record CreateUserInviteReq : Sys_UserInvite
{
/// <inheritdoc cref="Sys_UserInvite.CommissionRatio" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CommissionRatio { get; init; }
}

View File

@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:编辑用户邀请
/// </summary>
public record EditUserInviteReq : CreateUserInviteReq
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,11 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:查询用户邀请
/// </summary>
public sealed record QueryUserInviteReq : Sys_UserInvite
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
}

View File

@ -1,64 +0,0 @@
using NetAdmin.Domain.Dto.Sys.User;
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 响应:查询用户邀请
/// </summary>
public record QueryUserInviteRsp : Sys_UserInvite
{
/// <inheritdoc cref="Sys_UserInvite.Children" />
public new virtual IEnumerable<QueryUserInviteRsp> Children { get; init; }
/// <inheritdoc cref="Sys_UserInvite.CommissionRatio" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override int CommissionRatio { get; init; }
/// <inheritdoc cref="IFieldCreatedTime.CreatedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override DateTime CreatedTime { get; init; }
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? CreatedUserId { get; init; }
/// <inheritdoc cref="IFieldCreatedUser.CreatedUserName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string CreatedUserName { get; init; }
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldModifiedTime.ModifiedTime" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override DateTime? ModifiedTime { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? ModifiedUserId { get; init; }
/// <inheritdoc cref="IFieldModifiedUser.ModifiedUserName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string ModifiedUserName { get; init; }
/// <inheritdoc cref="Sys_UserInvite.Owner" />
[CsvIgnore]
public new virtual QueryUserRsp Owner { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerDeptId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerDeptId { get; init; }
/// <inheritdoc cref="IFieldOwner.OwnerId" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override long? OwnerId { get; init; }
/// <inheritdoc cref="Sys_UserInvite.User" />
[CsvIgnore]
public new virtual QueryUserRsp User { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -1,15 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserInvite;
/// <summary>
/// 请求:设置返佣比率
/// </summary>
public record SetCommissionRatioReq : CreateUserInviteReq
{
/// <inheritdoc cref="EntityBase{T}.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; }
}

View File

@ -58,11 +58,6 @@ public record CreateUserProfileReq : Sys_UserProfile
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string EmergencyContactName { get; init; } public override string EmergencyContactName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Gender" />
[EnumDataType(typeof(Genders), ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.性别不正确))]
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override Genders? Gender { get; init; }
/// <inheritdoc cref="Sys_UserProfile.GraduateSchool" /> /// <inheritdoc cref="Sys_UserProfile.GraduateSchool" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string GraduateSchool { get; init; } public override string GraduateSchool { get; init; }
@ -109,4 +104,9 @@ public record CreateUserProfileReq : Sys_UserProfile
/// <inheritdoc cref="Sys_UserProfile.RealName" /> /// <inheritdoc cref="Sys_UserProfile.RealName" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string RealName { get; init; } public override string RealName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Sex" />
[EnumDataType(typeof(Sexes), ErrorMessageResourceType = typeof(Ln), ErrorMessageResourceName = nameof(Ln.性别不正确))]
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override Sexes? Sex { get; init; }
} }

View File

@ -57,10 +57,6 @@ public sealed record QueryUserProfileRsp : Sys_UserProfile
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string EmergencyContactName { get; init; } public override string EmergencyContactName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Gender" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override Genders? Gender { get; init; }
/// <inheritdoc cref="Sys_UserProfile.GraduateSchool" /> /// <inheritdoc cref="Sys_UserProfile.GraduateSchool" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string GraduateSchool { get; init; } public override string GraduateSchool { get; init; }
@ -107,6 +103,10 @@ public sealed record QueryUserProfileRsp : Sys_UserProfile
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string RealName { get; init; } public override string RealName { get; init; }
/// <inheritdoc cref="Sys_UserProfile.Sex" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override Sexes? Sex { get; init; }
/// <inheritdoc cref="IFieldVersion.Version" /> /// <inheritdoc cref="IFieldVersion.Version" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)] [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Version { get; init; } public override long Version { get; init; }

View File

@ -1,6 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.UserWallet;
/// <summary>
/// 请求:创建用户钱包
/// </summary>
public record CreateUserWalletReq : Sys_UserWallet;

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