1 Commits
tk ... v2.2.1

Author SHA1 Message Date
tk
81ea13fa9d chore(release): 2.2.1 2024-12-04 16:36:12 +08:00
824 changed files with 9384 additions and 21838 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,109 +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)
### Features
* ✨ 菜单复制 ([#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))
* ✨ 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))
* 🐛 导出界面报错 ([#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))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 修复一些样式问题 ([442a69f](https://github.com/nsnail/NetAdmin/commit/442a69f90de179539f78c01d967572f83bd2eff8))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 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))
* 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf))
* 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90))
## [2.3.0](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.3.0) (2024-12-12)
### Features
* ✨ 菜单复制 ([#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))
* ✨ 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))
* 🐛 导出界面报错 ([#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))
* 🐛 请求日志批量插入,漏写了登录日志 ([#210](https://github.com/nsnail/NetAdmin/issues/210)) ([6c71c74](https://github.com/nsnail/NetAdmin/commit/6c71c74a27617c7d0530a5f6eaff650ecfd4eaec))
* 🐛 用户选择器报错 ([#220](https://github.com/nsnail/NetAdmin/issues/220)) ([71bfdaa](https://github.com/nsnail/NetAdmin/commit/71bfdaafa8176cf686b03244ee758de058080a71))
* 🐛 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))
* 🐛 version 条件重复指定 ([01058ba](https://github.com/nsnail/NetAdmin/commit/01058ba7288bcc645f66de2f78e1d659d55333cf))
* 🐛 version lock ([4eecc0b](https://github.com/nsnail/NetAdmin/commit/4eecc0b4ce09f620f83109949e4c2b67b7f8ba90))
### [2.2.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.1) (2024-12-04) ### [2.2.1](https://github.com/nsnail/NetAdmin/compare/v2.1.0...v2.2.1) (2024-12-04)

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.7 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
@ -119,4 +117,4 @@ biz-infra-->infra
| JavaScript | JavaScript解析器 | [Terser](https://github.com/terser/terser) | | JavaScript | JavaScript解析器 | [Terser](https://github.com/terser/terser) |
| JavaScript | 代码质量检查 | [ESLint](https://github.com/eslint/eslint) | | JavaScript | 代码质量检查 | [ESLint](https://github.com/eslint/eslint) |
| JavaScript | 代码格式化工具 | [Prettier](https://github.com/prettier/prettier) | | JavaScript | 代码格式化工具 | [Prettier](https://github.com/prettier/prettier) |
| JavaScript | 标准加密库 | [crypto-js](https://github.com/brix/crypto-js) | | JavaScript | 标准加密库 | [crypto-js](https://github.com/brix/crypto-js) |

View File

@ -1,4 +1,3 @@
USDT
上次执行时间 上次执行时间
上次执行状态 上次执行状态
上次执行耗时 上次执行耗时
@ -13,18 +12,14 @@ USDT
中专 中专
中共党员 中共党员
为其中之一 为其中之一
交易
人工
人工审核 人工审核
代码模板导出
以什么开始 以什么开始
以什么结束 以什么结束
作业名称 作业名称
作业状态 作业状态
保密
信息 信息
倒序排序 倒序排序
充值成功
充值订单导出
全部数据 全部数据
公告 公告
共青团员 共青团员
@ -32,7 +27,6 @@ USDT
创建时间 创建时间
初中 初中
删除 删除
到账确认中
包含 包含
博士 博士
博士后 博士后
@ -51,22 +45,18 @@ USDT
字典内容导出 字典内容导出
宕机 宕机
客户端IP 客户端IP
小于 小于
小于等于 小于等于
小学 小学
已冻结
已发送 已发送
已婚 已婚
已校验 已校验
已解冻
已读 已读
并且 并且
归属角色
归属部门
微信支付
成功 成功
或者 或者
所属角色
所属部门
手机 手机
手机号 手机号
执行耗时 执行耗时
@ -81,10 +71,6 @@ USDT
接口路径 接口路径
插入种子数据 插入种子数据
操作系统 操作系统
支付宝
支付超时
支出
收入
数据范围 数据范围
文档内容 文档内容
文档内容导出 文档内容导出
@ -101,8 +87,7 @@ USDT
未读 未读
本人数据 本人数据
本科 本科
本部门和下级部门数据 本部门和下级部门数据
本部门和所有子部门数据
本部门数据 本部门数据
框架 框架
比较数据库结构 比较数据库结构
@ -114,29 +99,23 @@ USDT
用户代理 用户代理
用户名 用户名
用户导出 用户导出
用户邀请导出
用户钱包导出
电子邮箱 电子邮箱
登录 登录
登录名 登录名
登录日志导出 登录日志导出
硕士 硕士
示例导出
离异 离异
空闲 空闲
站内信导出 站内信导出
等于 等于
等待发送 等待发送
等待支付
管理员充值
管理员扣费
管理员赠送
管理模块 管理模块
系统模块 系统模块
绑定手机号码 绑定手机号码
结果非预期 结果非预期
群众 群众
自助充值
自定义 自定义
范围 范围
菜单 菜单
@ -149,20 +128,16 @@ USDT
请求方式 请求方式
请求日志导出 请求日志导出
调试 调试
跟踪
跟踪标识
身份证 身份证
转账支出
转账收入
运行 运行
追踪
追踪标识
通知 通知
邮箱号 邮箱号
部门名称 部门名称
部门导出 部门导出
配置导出 配置导出
重设密码 重设密码
钱包交易导出
钱包冻结导出
链接 链接
错误 错误
随机排序 随机排序

View File

@ -2,18 +2,14 @@
6位数字 6位数字
8位以上数字字母组合 8位以上数字字母组合
XML注释文件不存在 XML注释文件不存在
不能设置自己为上级
中文姓名 中文姓名
事务已回滚 事务已回滚
事务已提交 事务已提交
交易失败
交易金额不正确
人机校验请求不能为空 人机校验请求不能为空
人机验证未通过 人机验证未通过
作业名称不能为空 作业名称不能为空
允许的文件大小 允许的文件大小
允许的文件格式 允许的文件格式
冻结状态不正确
区号电话号码分机号 区号电话号码分机号
参数格式不正确 参数格式不正确
唯一编码不能为空 唯一编码不能为空
@ -33,10 +29,8 @@ XML注释文件不存在
性别不正确 性别不正确
手机号码不正确 手机号码不正确
手机号码不能为空 手机号码不能为空
指定的上级为该账号的下级用户
接口编码不存在 接口编码不存在
支付宝账号 支付宝账号
支付方式不正确
政治面貌不正确 政治面貌不正确
数据库同步开始 数据库同步开始
数据库服务器时钟偏移 数据库服务器时钟偏移
@ -61,22 +55,25 @@ XML注释文件不存在
未指定部门 未指定部门
未获取到待执行任务 未获取到待执行任务
档案可见性不正确 档案可见性不正确
此操作不被允许 模块名称不能为空
模块类型不能为空
模块说明不能为空
此节点已下线 此节点已下线
民族不正确 民族不正确
消息主题不能为空 消息主题不能为空
消息内容不能为空 消息内容不能为空
父节点不存在 父节点不存在
用户不存在 用户不存在
用户名不符合要求
用户名不能为空 用户名不能为空
用户名不能是手机号码 用户名不能是手机号码
用户名或密码错误 用户名或密码错误
用户名长度4位以上
用户头像不能为空 用户头像不能为空
用户编号不存在 用户编号不存在
登录用户 登录用户
目标设备不能为空 目标设备不能为空
短信验证请求不能为空 短信验证请求不能为空
种子数据插入完成
站内信不存在 站内信不存在
站内信状态不正确 站内信状态不正确
站内信类型不正确 站内信类型不正确
@ -101,6 +98,7 @@ XML注释文件不存在
请求地址不能为空 请求地址不能为空
请求对象不能为空 请求对象不能为空
请求方法不正确 请求方法不正确
请稍后重试
请联系管理员激活账号 请联系管理员激活账号
读取用户令牌出错 读取用户令牌出错
账号不能为空 账号不能为空
@ -110,7 +108,6 @@ XML注释文件不存在
部门可见 部门可见
部门名称不能为空 部门名称不能为空
配置文件初始化完毕 配置文件初始化完毕
钱包可用余额不足
键值不能为空 键值不能为空
键名称不能为空 键名称不能为空
随机延时结束时间不正确 随机延时结束时间不正确

View File

@ -1,16 +0,0 @@
[
{
"Enabled": true,
"Gender": 1,
"Id": 694360665923594,
"Name": "老王",
"Sort": 100,
},
{
"Enabled": true,
"Gender": 2,
"Id": 694360665923595,
"Name": "媳妇儿",
"Sort": 100,
}
]

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

@ -1,5 +1,5 @@
[ [
// ------------------------------ 主控面板 /home ------------------------------ // ------------------------------ 主控面板 ------------------------------
{ {
"Component": "home", "Component": "home",
"Icon": "el-icon-house", "Icon": "el-icon-house",
@ -8,9 +8,9 @@
"Path": "/home", "Path": "/home",
"Sort": 999, "Sort": 999,
"Title": "主控面板", "Title": "主控面板",
"Type": 1, "Type": 1
}, },
// ------------------------------ 权限管理 /power ------------------------------ // ------------------------------ 权限管理 ------------------------------
{ {
"Icon": "el-icon-setting", "Icon": "el-icon-setting",
"Id": 373837917724677, "Id": 373837917724677,
@ -18,222 +18,158 @@
"Path": "/power", "Path": "/power",
"Sort": 100, "Sort": 100,
"Title": "权限管理", "Title": "权限管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/power/user", "Component": "sys/user",
"Icon": "el-icon-user", "Icon": "el-icon-user",
"Id": 373837957840901, "Id": 373837957840901,
"Name": "sys/power/user", "Name": "sys/user",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/user", "Path": "/sys/user",
"Sort": 100, "Sort": 100,
"Title": "用户管理", "Title": "用户管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/power/role", "Component": "sys/role",
"Icon": "sc-icon-role", "Icon": "sc-icon-role",
"Id": 373838018527237, "Id": 373838018527237,
"Name": "sys/power/role", "Name": "sys/role",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/role", "Path": "/sys/role",
"Sort": 99, "Sort": 99,
"Title": "角色管理", "Title": "角色管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/power/dept", "Component": "sys/dept",
"Icon": "sc-icon-dept", "Icon": "sc-icon-dept",
"Id": 373838045605893, "Id": 373838045605893,
"Name": "sys/power/dept", "Name": "sys/dept",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/dept", "Path": "/sys/dept",
"Sort": 98, "Sort": 98,
"Title": "部门管理", "Title": "部门管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/power/menu", "Component": "sys/menu",
"Icon": "el-icon-fold", "Icon": "el-icon-fold",
"Id": 373838070898693, "Id": 373838070898693,
"Name": "sys/power/menu", "Name": "sys/menu",
"ParentId": 373837917724677, "ParentId": 373837917724677,
"Path": "/power/menu", "Path": "/sys/menu",
"Sort": 97, "Sort": 97,
"Title": "菜单管理", "Title": "菜单管理",
"Type": 1, "Type": 1
}, },
// ------------------------------ 财务管理 /finance ------------------------------ // ------------------------------ 系统管理 ------------------------------
{ {
"Icon": "el-icon-money", "Icon": "sc-icon-App",
"Id": 690906994118665,
"Name": "sys/finance",
"Path": "/finance",
"Sort": 99,
"Title": "财务管理",
"Type": 1,
},
{
"Component": "sys/finance/wallet",
"Icon": "el-icon-wallet",
"Id": 690907673255942,
"Name": "sys/finance/wallet",
"ParentId": 690906994118665,
"Path": "/finance/wallet",
"Sort": 100,
"Title": "钱包管理",
"Type": 1,
},
{
"Component": "sys/finance/trade",
"Icon": "el-icon-calendar",
"Id": 690907673255943,
"Name": "sys/finance/trade",
"ParentId": 690906994118665,
"Path": "/finance/trade",
"Sort": 99,
"Title": "交易流水",
"Type": 1,
},
{
"Component": "sys/finance/order",
"Icon": "el-icon-shopping-cart",
"Id": 690907673255944,
"Name": "sys/finance/order",
"ParentId": 690906994118665,
"Path": "/finance/order",
"Sort": 98,
"Title": "自助充值",
"Type": 1,
},
// ------------------------------ 营销管理 /market ------------------------------
{
"Icon": "el-icon-share",
"Id": 692575802241032,
"Name": "market",
"Path": "/market",
"Sort": 98,
"Title": "营销管理",
"Type": 1,
},
{
"Component": "sys/market/invite",
"Icon": "el-icon-connection",
"Id": 692575802245126,
"Name": "sys/market/invite",
"ParentId": 692575802241032,
"Path": "/market/invite",
"Sort": 100,
"Title": "粉丝管理",
"Type": 1,
},
// ------------------------------ 系统管理 /system ------------------------------
{
"Icon": "sc-icon-app",
"Id": 485278637670422, "Id": 485278637670422,
"Name": "system", "Name": "sys",
"Path": "/system", "Path": "/sys",
"Sort": 98, "Sort": 99,
"Title": "系统管理", "Title": "系统管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/system/config", "Component": "sys/config",
"Icon": "el-icon-set-up", "Icon": "el-icon-set-up",
"Id": 380415005847557, "Id": 380415005847557,
"Name": "sys/system/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/system/job", "Component": "sys/job",
"Icon": "sc-icon-scheduled-job", "Icon": "sc-icon-ScheduledJob",
"Id": 510067557638158, "Id": 510067557638158,
"Name": "sys/system/job", "Name": "sys/job",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/job", "Path": "/sys/job",
"Sort": 99, "Sort": 99,
"Title": "计划作业", "Title": "计划作业",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/system/dic", "Component": "sys/dic",
"Icon": "sc-icon-dic", "Icon": "sc-icon-dic",
"Id": 375315654221829, "Id": 375315654221829,
"Name": "sys/system/dic", "Name": "sys/dic",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/dic", "Path": "/sys/dic",
"Sort": 98, "Sort": 98,
"Title": "字典管理", "Title": "字典管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/system/msg", "Component": "sys/msg",
"Icon": "el-icon-message", "Icon": "el-icon-message",
"Id": 482779610341392, "Id": 482779610341392,
"Name": "sys/system/msg", "Name": "sys/msg",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/msg", "Path": "/sys/msg",
"Sort": 97, "Sort": 97,
"Title": "消息管理", "Title": "消息管理",
"Type": 1, "Type": 1,
}, },
{ {
"Component": "sys/system/api", "Component": "sys/api",
"Icon": "sc-icon-api", "Icon": "sc-icon-api",
"Id": 397880678895621, "Id": 397880678895621,
"Name": "sys/system/api", "Name": "sys/api",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/api", "Path": "/sys/api",
"Sort": 96, "Sort": 96,
"Title": "接口管理", "Title": "接口管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/system/cache", "Component": "sys/cache",
"Icon": "sc-icon-memory", "Icon": "sc-icon-memory",
"Id": 374911555702789, "Id": 374911555702789,
"Name": "sys/system/cache", "Name": "sys/cache",
"ParentId": 485278637670422, "ParentId": 485278637670422,
"Path": "/system/cache", "Path": "/sys/cache",
"Sort": 95, "Sort": 95,
"Title": "缓存管理", "Title": "缓存管理",
"Type": 1, "Type": 1
}, },
// ------------------------------ 档案管理 /archive ------------------------------ // ------------------------------ 档案管理 ------------------------------
{ {
"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
}, },
{ {
"Component": "sys/archive/doc", "Component": "sys/doc",
"Icon": "el-icon-document", "Icon": "el-icon-document",
"Id": 616214756757516, "Id": 616214756757516,
"Name": "sys/archive/doc", "Name": "archive/doc",
"ParentId": 616214756757512, "ParentId": 616214756757512,
"Path": "/archive/doc", "Path": "/archive/doc",
"Sort": 100, "Sort": 100,
"Title": "文档管理", "Title": "文档管理",
"Type": 1, "Type": 1
}, },
// ------------------------------ 日志管理 /log ------------------------------ // ------------------------------ 日志管理 ------------------------------
{ {
"Icon": "el-icon-tickets", "Icon": "el-icon-tickets",
"Id": 374792687640581, "Id": 374792687640581,
"Name": "log", "Name": "log",
"Path": "/log", "Path": "/log",
"Sort": 96, "Sort": 97,
"Title": "日志管理", "Title": "日志管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/log/operation", "Component": "sys/log/operation",
@ -241,53 +177,42 @@
"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,
}, },
// ------------------------------ 开发管理 /dev ------------------------------ // ------------------------------ 开发管理 ------------------------------
{ {
"Icon": "sc-icon-code", "Icon": "sc-icon-code",
"Id": 373838105399301, "Id": 373838105399301,
"Name": "dev", "Name": "dev",
"Path": "/dev", "Path": "/dev",
"Sort": 95, "Sort": 96,
"Title": "开发管理", "Title": "开发管理",
"Type": 1, "Type": 1
}, },
{ {
"Component": "sys/dev/code", "Component": "dev/code",
"Icon": "sc-icon-code2", "Icon": "sc-icon-code2",
"Id": 373838147022853, "Id": 373838147022853,
"Name": "sys/dev/code", "Name": "dev/code",
"ParentId": 373838105399301, "ParentId": 373838105399301,
"Path": "/dev/code", "Path": "/dev/code",
"Sort": 100, "Sort": 100,
"Title": "代码生成", "Title": "代码生成",
"Type": 1, "Type": 1
},
{
"Component": "sys/dev/template",
"Icon": "sc-icon-template",
"Id": 694076641718288,
"Name": "sys/dev/template",
"ParentId": 373838105399301,
"Path": "/dev/template",
"Sort": 99,
"Title": "页面模板",
"Type": 1,
}, },
{ {
"Id": 482777529417739, "Id": 482777529417739,
@ -295,17 +220,17 @@
"Icon": "el-icon-eleme-filled", "Icon": "el-icon-eleme-filled",
"Name": "dev/element", "Name": "dev/element",
"Path": "https://element-plus.org/zh-CN/component/overview.html", "Path": "https://element-plus.org/zh-CN/component/overview.html",
"Sort": 98, "Sort": 99,
"Title": "Element", "Title": "Element",
"Type": 3, "Type": 3,
}, },
{ {
"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": 97, "Sort": 99,
"Title": "FreeSql", "Title": "FreeSql",
"Type": 3, "Type": 3,
} }

View File

@ -42,81 +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,
},
{
"ApiId": "api/sys/wallet.frozen/get",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.frozen/paged.query",
"RoleId": 371729946431493,
},
{
"ApiId": "api/sys/wallet.frozen/count.by",
"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.14.0"> <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.15.0.120848"> <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.2.1",
"devDependencies": { "devDependencies": {
"cz-git": "^1.12.0", "cz-git": "^1.11.0",
"commitizen": "^4.3.1", "commitizen": "^4.3.1",
"prettier": "^3.6.2", "prettier": "^3.4.1",
"standard-version": "^9.5.0" "standard-version": "^9.5.0"
}, },
"config": { "config": {
@ -11,4 +11,4 @@
"path": "node_modules/cz-git" "path": "node_modules/cz-git"
} }
} }
} }

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 +0,0 @@
git config --local core.eol lf
git config --local core.autocrlf false
git config --local core.longpaths true
git config --local pull.rebase false

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

@ -1,24 +0,0 @@
using NetAdmin.Domain;
using NetAdmin.Domain.Dto.Dependency;
namespace NetAdmin.Application.Extensions;
/// <summary>
/// FreeSql Select 扩展方法
/// </summary>
public static class ISelectExtensions
{
/// <summary>
/// 附加其他过滤条件
/// </summary>
public static ISelect<T> AppendOtherFilters<T, TQuery>(this ISelect<T> me, QueryReq<TQuery> req)
where TQuery : DataAbstraction, new()
{
if (req.IgnoreOwner) {
me = me.DisableGlobalFilter(Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT
, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON);
}
return me;
}
}

View File

@ -8,14 +8,12 @@ namespace NetAdmin.Application.Modules;
/// </summary> /// </summary>
/// <typeparam name="TCreateReq">创建请求类型</typeparam> /// <typeparam name="TCreateReq">创建请求类型</typeparam>
/// <typeparam name="TCreateRsp">创建响应类型</typeparam> /// <typeparam name="TCreateRsp">创建响应类型</typeparam>
/// <typeparam name="TEditReq">编辑请求类型</typeparam>
/// <typeparam name="TQueryReq">查询请求类型</typeparam> /// <typeparam name="TQueryReq">查询请求类型</typeparam>
/// <typeparam name="TQueryRsp">查询响应类型</typeparam> /// <typeparam name="TQueryRsp">查询响应类型</typeparam>
/// <typeparam name="TDelReq">删除请求类型</typeparam> /// <typeparam name="TDelReq">删除请求类型</typeparam>
public interface ICrudModule<in TCreateReq, TCreateRsp, in TEditReq, TQueryReq, TQueryRsp, TDelReq> public interface ICrudModule<in TCreateReq, TCreateRsp, TQueryReq, TQueryRsp, TDelReq>
where TCreateReq : DataAbstraction, new() where TCreateReq : DataAbstraction, new()
where TCreateRsp : DataAbstraction where TCreateRsp : DataAbstraction
where TEditReq : DataAbstraction, new()
where TQueryReq : DataAbstraction, new() where TQueryReq : DataAbstraction, new()
where TQueryRsp : DataAbstraction where TQueryRsp : DataAbstraction
where TDelReq : DataAbstraction, new() where TDelReq : DataAbstraction, new()
@ -30,11 +28,6 @@ public interface ICrudModule<in TCreateReq, TCreateRsp, in TEditReq, TQueryReq,
/// </summary> /// </summary>
Task<long> CountAsync(QueryReq<TQueryReq> req); Task<long> CountAsync(QueryReq<TQueryReq> req);
/// <summary>
/// 实体分组计数
/// </summary>
Task<IOrderedEnumerable<KeyValuePair<IImmutableDictionary<string, string>, int>>> CountByAsync(QueryReq<TQueryReq> req);
/// <summary> /// <summary>
/// 创建实体 /// 创建实体
/// </summary> /// </summary>
@ -46,9 +39,9 @@ public interface ICrudModule<in TCreateReq, TCreateRsp, in TEditReq, TQueryReq,
Task<int> DeleteAsync(TDelReq req); Task<int> DeleteAsync(TDelReq req);
/// <summary> /// <summary>
/// 编辑实体 /// 判断实体是否存在
/// </summary> /// </summary>
Task<TQueryRsp> EditAsync(TEditReq req); Task<bool> ExistAsync(QueryReq<TQueryReq> req);
/// <summary> /// <summary>
/// 导出实体 /// 导出实体
@ -69,9 +62,4 @@ public interface ICrudModule<in TCreateReq, TCreateRsp, in TEditReq, TQueryReq,
/// 查询实体 /// 查询实体
/// </summary> /// </summary>
Task<IEnumerable<TQueryRsp>> QueryAsync(QueryReq<TQueryReq> req); Task<IEnumerable<TQueryRsp>> QueryAsync(QueryReq<TQueryReq> req);
/// <summary>
/// 实体求和
/// </summary>
Task<decimal> SumAsync(QueryReq<TQueryReq> req);
} }

View File

@ -0,0 +1,12 @@
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
namespace NetAdmin.Application.Modules.Tpl;
/// <summary>
/// 示例模块
/// </summary>
public interface IExampleModule : ICrudModule<CreateExampleReq, QueryExampleRsp // 创建类型
, QueryExampleReq, QueryExampleRsp // 查询类型
, DelReq // 删除类型
>;

View File

@ -2,11 +2,9 @@ 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;
using NetAdmin.Domain.Extensions;
namespace NetAdmin.Application.Services; namespace NetAdmin.Application.Services;
@ -49,36 +47,16 @@ 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) : await select.ToListAsync(listExp).ConfigureAwait(false);
list = listHandle?.Invoke(list) ?? list;
return await GetExportFileStreamAsync<TExport>(fileName, list).ConfigureAwait(false); return await GetExportFileStreamAsync<TExport>(fileName, list).ConfigureAwait(false);
} }
/// <summary>
/// 唯一索引冲突处理
/// </summary>
protected static async Task OnUniqueIndexConflictAsync(Func<Task> actionTry, Func<Task> actionCatch = null)
{
try {
await actionTry().ConfigureAwait(false);
}
catch (Exception ex) when (ex.Message.Contains(Chars.FLG_DB_EXCEPTION_PRIMARY_KEY_CONFLICT) ||
ex.Message.Contains(Chars.FLG_DB_EXCEPTION_UNIQUE_CONSTRAINT_CONFLICT) ||
ex.Message.Contains(Chars.FLG_DB_EXCEPTION_IDX)) {
if (actionCatch != null) {
await actionCatch().ConfigureAwait(false);
}
}
}
/// <summary> /// <summary>
/// 更新实体 /// 更新实体
/// </summary> /// </summary>
@ -88,7 +66,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 //
@ -96,17 +73,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(Chars.FLG_FREE_SQL_GLOBAL_FILTER_SELF, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT
, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_CHILDREN, Chars.FLG_FREE_SQL_GLOBAL_FILTER_DEPT_WITH_SON);
}
return update.ExecuteEffectsAsync();
} }
#if DBTYPE_SQLSERVER #if DBTYPE_SQLSERVER
@ -160,30 +132,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;
@ -194,7 +142,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,14 +38,4 @@ public abstract class ServiceBase : IScoped, IService
/// <inheritdoc /> /// <inheritdoc />
public ContextUserToken UserToken { get; set; } public ContextUserToken UserToken { get; set; }
/// <summary>
/// 获取服务
/// </summary>
protected static T S<T>()
#pragma warning restore S2325, CA1822
where T : class
{
return App.GetService<T>();
}
} }

View File

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

View File

@ -0,0 +1,107 @@
using NetAdmin.Application.Repositories;
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Domain.DbMaps.Tpl;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
namespace NetAdmin.Application.Services.Tpl;
/// <inheritdoc cref="IExampleService" />
public sealed class ExampleService(BasicRepository<Tpl_Example, long> rpo) //
: RepositoryService<Tpl_Example, long, IExampleService>(rpo), IExampleService
{
/// <inheritdoc />
public async Task<int> BulkDeleteAsync(BulkReq<DelReq> req)
{
req.ThrowIfInvalid();
var ret = 0;
// ReSharper disable once LoopCanBeConvertedToQuery
foreach (var item in req.Items) {
ret += await DeleteAsync(item).ConfigureAwait(false);
}
return ret;
}
/// <inheritdoc />
public Task<long> CountAsync(QueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
return QueryInternal(req).WithNoLockNoWait().CountAsync();
}
/// <inheritdoc />
public async Task<QueryExampleRsp> CreateAsync(CreateExampleReq req)
{
req.ThrowIfInvalid();
var ret = await Rpo.InsertAsync(req).ConfigureAwait(false);
return ret.Adapt<QueryExampleRsp>();
}
/// <inheritdoc />
public Task<int> DeleteAsync(DelReq req)
{
req.ThrowIfInvalid();
return Rpo.DeleteAsync(a => a.Id == req.Id);
}
/// <inheritdoc />
public Task<bool> ExistAsync(QueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
return QueryInternal(req).WithNoLockNoWait().AnyAsync();
}
/// <inheritdoc />
public Task<IActionResult> ExportAsync(QueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
return ExportAsync<QueryExampleReq, QueryExampleRsp>(QueryInternal, req, Ln.);
}
/// <inheritdoc />
public async Task<QueryExampleRsp> GetAsync(QueryExampleReq req)
{
req.ThrowIfInvalid();
var ret = await QueryInternal(new QueryReq<QueryExampleReq> { Filter = req, Order = Orders.None }).ToOneAsync().ConfigureAwait(false);
return ret.Adapt<QueryExampleRsp>();
}
/// <inheritdoc />
public async Task<PagedQueryRsp<QueryExampleRsp>> PagedQueryAsync(PagedQueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
var list = await QueryInternal(req).Page(req.Page, req.PageSize).WithNoLockNoWait().Count(out var total).ToListAsync().ConfigureAwait(false);
return new PagedQueryRsp<QueryExampleRsp>(req.Page, req.PageSize, total, list.Adapt<IEnumerable<QueryExampleRsp>>());
}
/// <inheritdoc />
public async Task<IEnumerable<QueryExampleRsp>> QueryAsync(QueryReq<QueryExampleReq> req)
{
req.ThrowIfInvalid();
var ret = await QueryInternal(req).WithNoLockNoWait().Take(req.Count).ToListAsync().ConfigureAwait(false);
return ret.Adapt<IEnumerable<QueryExampleRsp>>();
}
private ISelect<Tpl_Example> QueryInternal(QueryReq<QueryExampleReq> req)
{
var ret = Rpo.Select.WhereDynamicFilter(req.DynamicFilter).WhereDynamic(req.Filter);
// ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
switch (req.Order) {
case Orders.None:
return ret;
case Orders.Random:
return ret.OrderByRandom();
}
ret = ret.OrderByPropertyNameIf(req.Prop?.Length > 0, req.Prop, req.Order == Orders.Ascending);
if (!req.Prop?.Equals(nameof(req.Filter.Id), StringComparison.OrdinalIgnoreCase) ?? true) {
ret = ret.OrderByDescending(a => a.Id);
}
return ret;
}
}

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

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

View File

@ -0,0 +1,65 @@
using NetAdmin.Application.Services.Tpl.Dependency;
using NetAdmin.Cache.Tpl.Dependency;
using NetAdmin.Domain.Dto.Dependency;
using NetAdmin.Domain.Dto.Tpl.Example;
namespace NetAdmin.Cache.Tpl;
/// <inheritdoc cref="IExampleCache" />
public sealed class ExampleCache(IDistributedCache cache, IExampleService service)
: DistributedCache<IExampleService>(cache, service), IScoped, IExampleCache
{
/// <inheritdoc />
public Task<int> BulkDeleteAsync(BulkReq<DelReq> req)
{
return Service.BulkDeleteAsync(req);
}
/// <inheritdoc />
public Task<long> CountAsync(QueryReq<QueryExampleReq> req)
{
return Service.CountAsync(req);
}
/// <inheritdoc />
public Task<QueryExampleRsp> CreateAsync(CreateExampleReq req)
{
return Service.CreateAsync(req);
}
/// <inheritdoc />
public Task<int> DeleteAsync(DelReq req)
{
return Service.DeleteAsync(req);
}
/// <inheritdoc />
public Task<bool> ExistAsync(QueryReq<QueryExampleReq> req)
{
return Service.ExistAsync(req);
}
/// <inheritdoc />
public Task<IActionResult> ExportAsync(QueryReq<QueryExampleReq> req)
{
return Service.ExportAsync(req);
}
/// <inheritdoc />
public Task<QueryExampleRsp> GetAsync(QueryExampleReq req)
{
return Service.GetAsync(req);
}
/// <inheritdoc />
public Task<PagedQueryRsp<QueryExampleRsp>> PagedQueryAsync(PagedQueryReq<QueryExampleReq> req)
{
return Service.PagedQueryAsync(req);
}
/// <inheritdoc />
public Task<IEnumerable<QueryExampleRsp>> QueryAsync(QueryReq<QueryExampleReq> req)
{
return Service.QueryAsync(req);
}
}

View File

@ -11,8 +11,7 @@ public sealed class ApiIdAttribute : ValidationAttribute
/// <inheritdoc /> /// <inheritdoc />
protected override ValidationResult IsValid(object value, ValidationContext validationContext) protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{ {
var service = App.GetService( var service = App.GetService(App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Cache.Sys.Dependency.IApiCache"));
App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IApiService"));
var req = new QueryReq<QueryApiReq> { Filter = new QueryApiReq { Id = value as string } }; var req = new QueryReq<QueryApiReq> { Filter = new QueryApiReq { Id = value as string } };

View File

@ -11,8 +11,7 @@ public sealed class UserIdAttribute : ValidationAttribute
/// <inheritdoc /> /// <inheritdoc />
protected override ValidationResult IsValid(object value, ValidationContext validationContext) protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{ {
var service = App.GetService( var service = App.GetService(App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Cache.Sys.Dependency.IUserCache"));
App.EffectiveTypes.Single(x => x.FullName == "NetAdmin.SysComponent.Application.Services.Sys.Dependency.IUserService"));
var req = new QueryReq<QueryUserReq> { Filter = new QueryUserReq { Id = (long)value! } }; var req = new QueryReq<QueryUserReq> { Filter = new QueryUserReq { Id = (long)value! } };

View File

@ -19,7 +19,7 @@ public sealed class UserNameAttribute : RegexAttribute
public override bool IsValid(object value) public override bool IsValid(object value)
{ {
if (!base.IsValid(value)) { if (!base.IsValid(value)) {
ErrorMessageResourceName = nameof(Ln.); ErrorMessageResourceName = nameof(Ln.4);
return false; return false;
} }

View File

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

View File

@ -0,0 +1,14 @@
namespace NetAdmin.Domain.Attributes;
/// <summary>
/// 标记一个枚举的状态指示
/// </summary>
/// <inheritdoc />
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Enum)]
public sealed class IndicatorAttribute(string indicate) : Attribute
{
/// <summary>
/// 状态指示
/// </summary>
public string Indicate { get; } = indicate;
}

View File

@ -3,23 +3,14 @@ namespace NetAdmin.Domain;
/// <summary> /// <summary>
/// 数据基类 /// 数据基类
/// </summary> /// </summary>
public abstract record DataAbstraction : IValidatableObject public abstract record DataAbstraction
{ {
/// <summary>
/// 是否已验证
/// </summary>
protected bool HasValidated { get; set; }
/// <summary> /// <summary>
/// 如果数据校验失败,抛出异常 /// 如果数据校验失败,抛出异常
/// </summary> /// </summary>
/// <exception cref="NetAdminValidateException">NetAdminValidateException</exception> /// <exception cref="NetAdminValidateException">NetAdminValidateException</exception>
public void ThrowIfInvalid() public void ThrowIfInvalid()
{ {
if (HasValidated) {
return;
}
var validationResult = this.TryValidate(); var validationResult = this.TryValidate();
if (!validationResult.IsValid) { if (!validationResult.IsValid) {
throw new NetAdminValidateException(validationResult.ValidationResults.ToDictionary( // throw new NetAdminValidateException(validationResult.ValidationResults.ToDictionary( //
@ -54,19 +45,4 @@ public abstract record DataAbstraction : IValidatableObject
property.SetValue(this, s); property.SetValue(this, s);
} }
} }
/// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
HasValidated = true;
return ValidateInternal(validationContext);
}
/// <summary>
/// 内部验证
/// </summary>
protected virtual IEnumerable<ValidationResult> ValidateInternal(ValidationContext validationContext)
{
yield return ValidationResult.Success;
}
} }

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

@ -8,5 +8,5 @@ public interface IFieldSummary
/// <summary> /// <summary>
/// 备注 /// 备注
/// </summary> /// </summary>
string Summary { get; set; } string Summary { get; init; }
} }

View File

@ -25,7 +25,7 @@ public abstract record ImmutableEntity<T> : LiteImmutableEntity<T>, IFieldCreate
[Column(CanUpdate = false, Position = -1)] [Column(CanUpdate = false, Position = -1)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual long? CreatedUserId { get; init; } public long? CreatedUserId { get; init; }
/// <summary> /// <summary>
/// 创建者用户名 /// 创建者用户名

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>
/// 服务描述 /// 服务描述
@ -79,5 +79,5 @@ public record Sys_Api : ImmutableEntity<string>, IFieldSummary
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_63)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; set; } public virtual string Summary { get; init; }
} }

View File

@ -1,89 +0,0 @@
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 代码模板表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_CodeTemplate))]
public record Sys_CodeTemplate : VersionEntity, IFieldSort, IFieldSummary, IFieldEnabled, IFieldOwner
{
/// <summary>
/// 是否启用
/// </summary>
/// <example>true</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual bool Enabled { get; init; }
/// <summary>
/// 性别
/// </summary>
/// <example>Male</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual Genders? Gender { get; init; }
/// <summary>
/// 唯一编码
/// </summary>
/// <example>123456</example>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[JsonIgnore]
[Snowflake]
public override long Id { get; init; }
/// <summary>
/// 名称
/// </summary>
/// <example>老王</example>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_31)]
[CsvIgnore]
[JsonIgnore]
public virtual string Name { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
/// <example>370942943322181</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
/// <example>370942943322181</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 排序值,越大越前
/// </summary>
/// <example>100</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long Sort { get; init; }
/// <summary>
/// 备注
/// </summary>
/// <example>备注文字</example>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore]
[JsonIgnore]
public virtual string Summary { get; set; }
}

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>
/// 排序值,越大越前 /// 排序值,越大越前
@ -68,5 +68,5 @@ public record Sys_Dept : VersionEntity, IFieldEnabled, IFieldSummary, IFieldSort
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; set; } public virtual string Summary { get; init; }
} }

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

@ -45,7 +45,7 @@ public record Sys_DicContent : VersionEntity, IFieldEnabled, IFieldSummary
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; set; } public virtual string Summary { 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

@ -134,7 +134,7 @@ public record Sys_Job : VersionEntity, IFieldEnabled, IFieldSummary
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; set; } public virtual string Summary { get; init; }
/// <summary> /// <summary>
/// 执行用户 /// 执行用户

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>
/// 排序值,越大越前 /// 排序值,越大越前
@ -104,7 +104,7 @@ public record Sys_Role : VersionEntity, IFieldSort, IFieldEnabled, IFieldSummary
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; set; } public virtual string Summary { 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>
/// 消息摘要 /// 消息摘要
@ -62,7 +62,7 @@ public record Sys_SiteMsg : VersionEntity, IRegister, IFieldSummary
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; set; } public virtual string Summary { 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>
/// 备注 /// 备注
@ -121,7 +105,7 @@ public record Sys_User : VersionEntity, IFieldSummary, IFieldEnabled, IRegister
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)] [Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore] [CsvIgnore]
[JsonIgnore] [JsonIgnore]
public virtual string Summary { get; set; } public virtual string Summary { get; init; }
/// <summary> /// <summary>
/// 授权验证Token全局唯一可以随时重置强制下线 /// 授权验证Token全局唯一可以随时重置强制下线

View File

@ -1,64 +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>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual bool SelfRechargeAllowed { 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,64 +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 TotalExpenditure { get; init; }
/// <summary>
/// 总收入
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long TotalIncome { get; init; }
}

View File

@ -1,99 +0,0 @@
using NetAdmin.Domain.Enums.Sys;
namespace NetAdmin.Domain.DbMaps.Sys;
/// <summary>
/// 钱包冻结表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Sys_WalletFrozen))]
public record Sys_WalletFrozen : LiteVersionEntity, IFieldOwner, IFieldSummary
{
/// <summary>
/// 冻结金额
/// </summary>
/// <example>100</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long Amount { get; init; }
/// <summary>
/// 冻结前数值
/// </summary>
/// <example>100</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long FrozenBalanceBefore { get; init; }
/// <summary>
/// 冻结编号
/// </summary>
/// <example>123456</example>
[Column(IsIdentity = false, IsPrimary = true, Position = 1)]
[CsvIgnore]
[JsonIgnore]
[Snowflake]
public override long Id { get; init; }
/// <summary>
/// 归属用户
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_User Owner { get; init; }
/// <summary>
/// 归属部门编号
/// </summary>
/// <example>370942943322181</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerDeptId { get; init; }
/// <summary>
/// 归属用户编号
/// </summary>
/// <example>370942943322181</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual long? OwnerId { get; init; }
/// <summary>
/// 冻结原因
/// </summary>
/// <example>Trade</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual WalletFrozenReasons Reason { get; init; }
/// <summary>
/// 冻结状态
/// </summary>
/// <example>Frozen</example>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual WalletFrozenStatues Status { get; init; }
/// <summary>
/// 备注
/// </summary>
/// <example>备注文字</example>
[Column(DbType = Chars.FLG_DB_FIELD_TYPE_VARCHAR_255)]
[CsvIgnore]
[JsonIgnore]
public virtual string Summary { get; set; }
/// <summary>
/// 钱包
/// </summary>
[CsvIgnore]
[JsonIgnore]
[Navigate(nameof(OwnerId))]
public Sys_UserWallet Wallet { 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; set; }
/// <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; set; }
/// <summary>
/// 交易方向
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual TradeDirections TradeDirection { get; init; }
/// <summary>
/// 交易类型
/// </summary>
[Column]
[CsvIgnore]
[JsonIgnore]
public virtual TradeTypes TradeType { get; init; }
}

View File

@ -0,0 +1,7 @@
namespace NetAdmin.Domain.DbMaps.Tpl;
/// <summary>
/// 示例表
/// </summary>
[Table(Name = Chars.FLG_DB_TABLE_NAME_PREFIX + nameof(Tpl_Example))]
public record Tpl_Example : VersionEntity;

View File

@ -1,22 +0,0 @@
namespace NetAdmin.Domain.Dto.Dependency;
/// <summary>
/// 工作批请求
/// </summary>
public record JobReq : DataAbstraction
{
/// <summary>
/// 处理数量
/// </summary>
public int? Count { get; init; }
/// <summary>
/// n秒以前
/// </summary>
public int? SecondsAgo { get; init; }
/// <summary>
/// 直到n秒前
/// </summary>
public int? UntilSecondsAgo { get; init; }
}

View File

@ -22,12 +22,6 @@ public record QueryReq<T> : DataAbstraction
/// </summary> /// </summary>
public T Filter { get; init; } public T Filter { get; init; }
/// <summary>
/// 忽略归属
/// </summary>
[JsonIgnore]
public bool IgnoreOwner { get; init; }
/// <summary> /// <summary>
/// 查询关键字 /// 查询关键字
/// </summary> /// </summary>
@ -46,24 +40,7 @@ public record QueryReq<T> : DataAbstraction
/// <summary> /// <summary>
/// 所需字段 /// 所需字段
/// </summary> /// </summary>
public string[] RequiredFields { get; init; } public string[] RequiredFields { get; set; }
/// <summary>
/// 求和表达式
/// </summary>
public Expression<Func<TEntity, long>> GetSumExp<TEntity>()
{
if (RequiredFields.NullOrEmpty()) {
return null;
}
var field = RequiredFields[0];
var leftParameter = Expression.Parameter(typeof(TEntity), "a");
var prop = typeof(TEntity).GetRecursiveProperty(field);
return prop == null || prop.GetCustomAttribute<DangerFieldAttribute>() != null
? null
: Expression.Lambda<Func<TEntity, long>>(CreatePropertyExpression(leftParameter, field), leftParameter);
}
/// <summary> /// <summary>
/// 列表表达式 /// 列表表达式
@ -75,30 +52,21 @@ public record QueryReq<T> : DataAbstraction
} }
var expParameter = Expression.Parameter(typeof(TEntity), "a"); var expParameter = Expression.Parameter(typeof(TEntity), "a");
var bindings = new List<(PropertyInfo, MemberInitExpression)>(); var bindings = new List<MemberBinding>();
// ReSharper disable once LoopCanBeConvertedToQuery // ReSharper disable once LoopCanBeConvertedToQuery
foreach (var field in RequiredFields) { foreach (var field in RequiredFields) {
var prop = typeof(TEntity).GetRecursiveProperty(field); var prop = typeof(TEntity).GetProperty(field);
if (prop == null || prop.GetCustomAttribute<DangerFieldAttribute>() != null) { if (prop == null || prop.GetCustomAttribute<DangerFieldAttribute>() != null) {
continue; continue;
} }
var parentPath = field[..field.LastIndexOf('.').Is(-1, field.Length)]; var propExp = Expression.Property(expParameter, prop);
var parentProperty = typeof(TEntity).GetRecursiveProperty(parentPath); var binding = Expression.Bind(prop, propExp);
var propExp = Expression.Property(Expression.Parameter(prop.DeclaringType!, parentPath), prop); bindings.Add(binding);
bindings.Add((parentProperty, Expression.MemberInit(Expression.New(prop.DeclaringType), Expression.Bind(prop, propExp))));
} }
var expBody = Expression.MemberInit( // var expBody = Expression.MemberInit(Expression.New(typeof(TEntity)), bindings);
Expression.New(typeof(TEntity))
, bindings.SelectMany(x => x.Item1.PropertyType == x.Item2.Type ? [Expression.Bind(x.Item1, x.Item2)] : x.Item2.Bindings.ToArray()));
return Expression.Lambda<Func<TEntity, TEntity>>(expBody, expParameter); return Expression.Lambda<Func<TEntity, TEntity>>(expBody, expParameter);
} }
private static Expression CreatePropertyExpression(ParameterExpression param, string propertyPath)
{
return propertyPath.Split('.').Aggregate<string, Expression>(param, Expression.PropertyOrField);
}
} }

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

@ -1,3 +1,5 @@
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Api; namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary> /// <summary>

View File

@ -1,6 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary>
/// 请求:编辑接口
/// </summary>
public sealed record EditApiReq : Sys_Api;

View File

@ -31,5 +31,5 @@ public sealed record ExportApiRsp : QueryApiRsp
[CsvIndex(3)] [CsvIndex(3)]
[CsvIgnore(false)] [CsvIgnore(false)]
[CsvName(nameof(Ln.接口描述))] [CsvName(nameof(Ln.接口描述))]
public override string Summary { get; set; } public override string Summary { get; init; }
} }

View File

@ -1,3 +1,5 @@
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Api; namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary> /// <summary>

View File

@ -1,3 +1,5 @@
using NetAdmin.Domain.DbMaps.Sys;
namespace NetAdmin.Domain.Dto.Sys.Api; namespace NetAdmin.Domain.Dto.Sys.Api;
/// <summary> /// <summary>
@ -33,5 +35,5 @@ public record QueryApiRsp : Sys_Api
/// <inheritdoc cref="IFieldSummary.Summary" /> /// <inheritdoc cref="IFieldSummary.Summary" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Summary { get; set; } public override string Summary { get; init; }
} }

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

@ -1,30 +0,0 @@
namespace NetAdmin.Domain.Dto.Sys.CodeTemplate;
/// <summary>
/// 请求:创建代码模板
/// </summary>
public record CreateCodeTemplateReq : Sys_CodeTemplate
{
/// <inheritdoc cref="IFieldEnabled.Enabled" />
public override bool Enabled { get; init; } = true;
/// <inheritdoc cref="Sys_CodeTemplate.Gender" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override Genders? Gender { get; init; }
/// <inheritdoc cref="Sys_CodeTemplate.Id" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Id { get; init; }
/// <inheritdoc cref="Sys_CodeTemplate.Name" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Name { get; init; }
/// <inheritdoc cref="IFieldSort.Sort" />
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public override long Sort { get; init; }
/// <inheritdoc cref="IFieldSummary.Summary" />
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public override string Summary { get; set; }
}

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