commit
7df0c40259
339 changed files with 69140 additions and 0 deletions
@ -0,0 +1,66 @@ |
|||
*.js linguist-language=csharp |
|||
*.css linguist-language=csharp |
|||
*.html linguist-language=csharp |
|||
############################################################################### |
|||
# Set default behavior to automatically normalize line endings. |
|||
############################################################################### |
|||
* text=auto |
|||
|
|||
############################################################################### |
|||
# Set default behavior for command prompt diff. |
|||
# |
|||
# This is need for earlier builds of msysgit that does not have it on by |
|||
# default for csharp files. |
|||
# Note: This is only used by command line |
|||
############################################################################### |
|||
#*.cs diff=csharp |
|||
|
|||
############################################################################### |
|||
# Set the merge driver for project and solution files |
|||
# |
|||
# Merging from the command prompt will add diff markers to the files if there |
|||
# are conflicts (Merging from VS is not affected by the settings below, in VS |
|||
# the diff markers are never inserted). Diff markers may cause the following |
|||
# file extensions to fail to load in VS. An alternative would be to treat |
|||
# these files as binary and thus will always conflict and require user |
|||
# intervention with every merge. To do so, just uncomment the entries below |
|||
############################################################################### |
|||
#*.sln merge=binary |
|||
#*.csproj merge=binary |
|||
#*.vbproj merge=binary |
|||
#*.vcxproj merge=binary |
|||
#*.vcproj merge=binary |
|||
#*.dbproj merge=binary |
|||
#*.fsproj merge=binary |
|||
#*.lsproj merge=binary |
|||
#*.wixproj merge=binary |
|||
#*.modelproj merge=binary |
|||
#*.sqlproj merge=binary |
|||
#*.wwaproj merge=binary |
|||
|
|||
############################################################################### |
|||
# behavior for image files |
|||
# |
|||
# image files are treated as binary by default. |
|||
############################################################################### |
|||
#*.jpg binary |
|||
#*.png binary |
|||
#*.gif binary |
|||
|
|||
############################################################################### |
|||
# diff behavior for common document formats |
|||
# |
|||
# Convert binary document formats to text before diffing them. This feature |
|||
# is only available from the command line. Turn it on by uncommenting the |
|||
# entries below. |
|||
############################################################################### |
|||
#*.doc diff=astextplain |
|||
#*.DOC diff=astextplain |
|||
#*.docx diff=astextplain |
|||
#*.DOCX diff=astextplain |
|||
#*.dot diff=astextplain |
|||
#*.DOT diff=astextplain |
|||
#*.pdf diff=astextplain |
|||
#*.PDF diff=astextplain |
|||
#*.rtf diff=astextplain |
|||
#*.RTF diff=astextplain |
@ -0,0 +1,263 @@ |
|||
## Ignore Visual Studio temporary files, build results, and |
|||
## files generated by popular Visual Studio add-ons. |
|||
|
|||
# User-specific files |
|||
*.suo |
|||
*.user |
|||
*.userosscache |
|||
*.sln.docstates |
|||
|
|||
# User-specific files (MonoDevelop/Xamarin Studio) |
|||
*.userprefs |
|||
|
|||
# Build results |
|||
[Dd]ebug/ |
|||
[Dd]ebugPublic/ |
|||
[Rr]elease/ |
|||
[Rr]eleases/ |
|||
x64/ |
|||
x86/ |
|||
bld/ |
|||
[Bb]in/ |
|||
[Oo]bj/ |
|||
[Ll]og/ |
|||
|
|||
# Visual Studio 2015 cache/options directory |
|||
.vs/ |
|||
# Uncomment if you have tasks that create the project's static files in wwwroot |
|||
#wwwroot/ |
|||
|
|||
# MSTest test Results |
|||
[Tt]est[Rr]esult*/ |
|||
[Bb]uild[Ll]og.* |
|||
|
|||
# NUNIT |
|||
*.VisualState.xml |
|||
TestResult.xml |
|||
|
|||
# Build Results of an ATL Project |
|||
[Dd]ebugPS/ |
|||
[Rr]eleasePS/ |
|||
dlldata.c |
|||
|
|||
# DNX |
|||
project.lock.json |
|||
project.fragment.lock.json |
|||
artifacts/ |
|||
|
|||
*_i.c |
|||
*_p.c |
|||
*_i.h |
|||
*.ilk |
|||
*.meta |
|||
*.obj |
|||
*.pch |
|||
*.pdb |
|||
*.pgc |
|||
*.pgd |
|||
*.rsp |
|||
*.sbr |
|||
*.tlb |
|||
*.tli |
|||
*.tlh |
|||
*.tmp |
|||
*.tmp_proj |
|||
*.log |
|||
*.vspscc |
|||
*.vssscc |
|||
.builds |
|||
*.pidb |
|||
*.svclog |
|||
*.scc |
|||
|
|||
# Chutzpah Test files |
|||
_Chutzpah* |
|||
|
|||
# Visual C++ cache files |
|||
ipch/ |
|||
*.aps |
|||
*.ncb |
|||
*.opendb |
|||
*.opensdf |
|||
*.sdf |
|||
*.cachefile |
|||
*.VC.db |
|||
*.VC.VC.opendb |
|||
|
|||
# Visual Studio profiler |
|||
*.psess |
|||
*.vsp |
|||
*.vspx |
|||
*.sap |
|||
|
|||
# TFS 2012 Local Workspace |
|||
$tf/ |
|||
|
|||
# Guidance Automation Toolkit |
|||
*.gpState |
|||
|
|||
# ReSharper is a .NET coding add-in |
|||
_ReSharper*/ |
|||
*.[Rr]e[Ss]harper |
|||
*.DotSettings.user |
|||
|
|||
# JustCode is a .NET coding add-in |
|||
.JustCode |
|||
|
|||
# TeamCity is a build add-in |
|||
_TeamCity* |
|||
|
|||
# DotCover is a Code Coverage Tool |
|||
*.dotCover |
|||
|
|||
# NCrunch |
|||
_NCrunch_* |
|||
.*crunch*.local.xml |
|||
nCrunchTemp_* |
|||
|
|||
# MightyMoose |
|||
*.mm.* |
|||
AutoTest.Net/ |
|||
|
|||
# Web workbench (sass) |
|||
.sass-cache/ |
|||
|
|||
# Installshield output folder |
|||
[Ee]xpress/ |
|||
|
|||
# DocProject is a documentation generator add-in |
|||
DocProject/buildhelp/ |
|||
DocProject/Help/*.HxT |
|||
DocProject/Help/*.HxC |
|||
DocProject/Help/*.hhc |
|||
DocProject/Help/*.hhk |
|||
DocProject/Help/*.hhp |
|||
DocProject/Help/Html2 |
|||
DocProject/Help/html |
|||
|
|||
# Click-Once directory |
|||
publish/ |
|||
|
|||
# Publish Web Output |
|||
*.[Pp]ublish.xml |
|||
*.azurePubxml |
|||
# TODO: Comment the next line if you want to checkin your web deploy settings |
|||
# but database connection strings (with potential passwords) will be unencrypted |
|||
#*.pubxml |
|||
*.publishproj |
|||
|
|||
# Microsoft Azure Web App publish settings. Comment the next line if you want to |
|||
# checkin your Azure Web App publish settings, but sensitive information contained |
|||
# in these scripts will be unencrypted |
|||
PublishScripts/ |
|||
|
|||
# NuGet Packages |
|||
*.nupkg |
|||
# The packages folder can be ignored because of Package Restore |
|||
**/packages/* |
|||
# except build/, which is used as an MSBuild target. |
|||
!**/packages/build/ |
|||
# Uncomment if necessary however generally it will be regenerated when needed |
|||
#!**/packages/repositories.config |
|||
# NuGet v3's project.json files produces more ignoreable files |
|||
*.nuget.props |
|||
*.nuget.targets |
|||
|
|||
# Microsoft Azure Build Output |
|||
csx/ |
|||
*.build.csdef |
|||
|
|||
# Microsoft Azure Emulator |
|||
ecf/ |
|||
rcf/ |
|||
|
|||
# Windows Store app package directories and files |
|||
AppPackages/ |
|||
BundleArtifacts/ |
|||
Package.StoreAssociation.xml |
|||
_pkginfo.txt |
|||
|
|||
# Visual Studio cache files |
|||
# files ending in .cache can be ignored |
|||
*.[Cc]ache |
|||
# but keep track of directories ending in .cache |
|||
!*.[Cc]ache/ |
|||
|
|||
# Others |
|||
ClientBin/ |
|||
~$* |
|||
*~ |
|||
*.dbmdl |
|||
*.dbproj.schemaview |
|||
*.jfm |
|||
*.pfx |
|||
*.publishsettings |
|||
node_modules/ |
|||
orleans.codegen.cs |
|||
|
|||
# Since there are multiple workflows, uncomment next line to ignore bower_components |
|||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) |
|||
#bower_components/ |
|||
|
|||
# RIA/Silverlight projects |
|||
Generated_Code/ |
|||
|
|||
# Backup & report files from converting an old project file |
|||
# to a newer Visual Studio version. Backup files are not needed, |
|||
# because we have git ;-) |
|||
_UpgradeReport_Files/ |
|||
Backup*/ |
|||
UpgradeLog*.XML |
|||
UpgradeLog*.htm |
|||
|
|||
# SQL Server files |
|||
*.mdf |
|||
*.ldf |
|||
|
|||
# Business Intelligence projects |
|||
*.rdl.data |
|||
*.bim.layout |
|||
*.bim_*.settings |
|||
|
|||
# Microsoft Fakes |
|||
FakesAssemblies/ |
|||
|
|||
# GhostDoc plugin setting file |
|||
*.GhostDoc.xml |
|||
|
|||
# Node.js Tools for Visual Studio |
|||
.ntvs_analysis.dat |
|||
|
|||
# Visual Studio 6 build log |
|||
*.plg |
|||
|
|||
# Visual Studio 6 workspace options file |
|||
*.opt |
|||
|
|||
# Visual Studio LightSwitch build output |
|||
**/*.HTMLClient/GeneratedArtifacts |
|||
**/*.DesktopClient/GeneratedArtifacts |
|||
**/*.DesktopClient/ModelManifest.xml |
|||
**/*.Server/GeneratedArtifacts |
|||
**/*.Server/ModelManifest.xml |
|||
_Pvt_Extensions |
|||
|
|||
# Paket dependency manager |
|||
.paket/paket.exe |
|||
paket-files/ |
|||
|
|||
# FAKE - F# Make |
|||
.fake/ |
|||
|
|||
# JetBrains Rider |
|||
.idea/ |
|||
*.sln.iml |
|||
|
|||
# CodeRush |
|||
.cr/ |
|||
|
|||
# Python Tools for Visual Studio (PTVS) |
|||
__pycache__/ |
|||
*.pyc |
|||
/src/Coldairarrow.Web/wwwroot/Upload/File |
|||
/src/Coldairarrow.Api/wwwroot/Upload |
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<configuration> |
|||
<solution> |
|||
<add key="disableSourceControlIntegration" value="true" /> |
|||
</solution> |
|||
</configuration> |
@ -0,0 +1,2 @@ |
|||
\packages |
|||
!\packages\repositories.config |
@ -0,0 +1,49 @@ |
|||
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00 |
|||
# Visual Studio Version 16 |
|||
VisualStudioVersion = 16.0.29123.88 |
|||
MinimumVisualStudioVersion = 10.0.40219.1 |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "01.Coldairarrow.Util", "src\Coldairarrow.Util\01.Coldairarrow.Util.csproj", "{3F8163F9-0513-4DD5-8761-D62294A72BAC}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "02.Coldairarrow.Entity", "src\Coldairarrow.Entity\02.Coldairarrow.Entity.csproj", "{0313E651-ADE8-4357-AE39-AADEC575F241}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "04.Coldairarrow.Business", "src\Coldairarrow.Business\04.Coldairarrow.Business.csproj", "{1920BFF8-DE4A-4871-A564-64356A5997BF}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "05.Coldairarrow.Api", "src\Coldairarrow.Api\05.Coldairarrow.Api.csproj", "{BEA1BF0D-B063-4931-89C7-22F92973143A}" |
|||
EndProject |
|||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "03.Coldairarrow.IBusiness", "src\Coldairarrow.IBusiness\03.Coldairarrow.IBusiness.csproj", "{4422EF5A-9E20-450D-B0BD-643DED2B9219}" |
|||
EndProject |
|||
Global |
|||
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|||
Debug|Any CPU = Debug|Any CPU |
|||
Release|Any CPU = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|||
{3F8163F9-0513-4DD5-8761-D62294A72BAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{3F8163F9-0513-4DD5-8761-D62294A72BAC}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{3F8163F9-0513-4DD5-8761-D62294A72BAC}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{3F8163F9-0513-4DD5-8761-D62294A72BAC}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{0313E651-ADE8-4357-AE39-AADEC575F241}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{0313E651-ADE8-4357-AE39-AADEC575F241}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{0313E651-ADE8-4357-AE39-AADEC575F241}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{0313E651-ADE8-4357-AE39-AADEC575F241}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{1920BFF8-DE4A-4871-A564-64356A5997BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{1920BFF8-DE4A-4871-A564-64356A5997BF}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{1920BFF8-DE4A-4871-A564-64356A5997BF}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{1920BFF8-DE4A-4871-A564-64356A5997BF}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{BEA1BF0D-B063-4931-89C7-22F92973143A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{BEA1BF0D-B063-4931-89C7-22F92973143A}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{BEA1BF0D-B063-4931-89C7-22F92973143A}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{BEA1BF0D-B063-4931-89C7-22F92973143A}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
{4422EF5A-9E20-450D-B0BD-643DED2B9219}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|||
{4422EF5A-9E20-450D-B0BD-643DED2B9219}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|||
{4422EF5A-9E20-450D-B0BD-643DED2B9219}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|||
{4422EF5A-9E20-450D-B0BD-643DED2B9219}.Release|Any CPU.Build.0 = Release|Any CPU |
|||
EndGlobalSection |
|||
GlobalSection(SolutionProperties) = preSolution |
|||
HideSolutionNode = FALSE |
|||
EndGlobalSection |
|||
GlobalSection(ExtensibilityGlobals) = postSolution |
|||
SolutionGuid = {7557970B-2675-4EDD-B2EF-EA28744BC050} |
|||
EndGlobalSection |
|||
EndGlobal |
@ -0,0 +1,8 @@ |
|||
<Project> |
|||
|
|||
<PropertyGroup> |
|||
<!--默认统一输出XML注释文档,不需要输出的项目可以单独关闭--> |
|||
<GenerateDocumentationFile>true</GenerateDocumentationFile> |
|||
</PropertyGroup> |
|||
|
|||
</Project> |
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2019 Coldairarrow |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,8 @@ |
|||
# Colder.Admin.AntdVue |
|||
Web后台快速开发框架,.NET5+Ant Design Vue版本 |
|||
|
|||
**代码(GitHub):**<https://github.com/Coldairarrow/Colder.Admin.AntdVue> |
|||
**文档(GitHub):**<https://github.com/Coldairarrow/Colder.Admin.AntdVue/wiki> |
|||
**代码(码云镜像):**<https://gitee.com/Coldairarrow/Colder.Admin.AntdVue> |
|||
**文档(码云镜像):**<https://gitee.com/Coldairarrow/Colder.Admin.AntdVue/wikis> |
|||
**在线预览地址**:<http://coldairarrow.gitee.io/colder.amin.antdvue.preview.web/> (账号/密码:Admin 123456) |
@ -0,0 +1,12 @@ |
|||
::删除所有bin与obj下的文件 |
|||
@echo off |
|||
set nowpath=%cd% |
|||
cd \ |
|||
cd %nowpath% |
|||
::delete specify file(*.pdb,*.vshost.*) |
|||
for /r %nowpath% %%i in (*.pdb,*.vshost.*) do (del %%i && echo delete %%i) |
|||
|
|||
::delete specify folder(obj,bin) |
|||
for /r %nowpath% %%i in (obj,bin) do (IF EXIST %%i (RD /s /q %%i && echo delete %%i)) |
|||
|
|||
pause |
@ -0,0 +1,288 @@ |
|||
/* |
|||
Navicat MySQL Data Transfer |
|||
|
|||
Source Server : 47.97.152.69@root |
|||
Source Server Version : 50727 |
|||
Source Host : 47.97.152.69:3306 |
|||
Source Database : Colder.Admin.AntdVue |
|||
|
|||
Target Server Type : MYSQL |
|||
Target Server Version : 50727 |
|||
File Encoding : 65001 |
|||
|
|||
Date: 2020-04-19 16:44:48 |
|||
*/ |
|||
|
|||
SET FOREIGN_KEY_CHECKS=0; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Action |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_Action`; |
|||
CREATE TABLE `Base_Action` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`ParentId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父级Id' , |
|||
`Type` int(11) NOT NULL COMMENT '类型,菜单=0,页面=1,权限=2' , |
|||
`Name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限名/菜单名' , |
|||
`Url` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '菜单地址' , |
|||
`Value` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限值' , |
|||
`NeedAction` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否需要权限(仅页面有效)' , |
|||
`Icon` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标' , |
|||
`Sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='系统权限表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Action |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_Action` VALUES ('1178957405992521728', '2019-10-01 16:58:44', null, '0', null, '0', '系统管理', '', null, '1', 'setting', '1'), ('1178957553778823168', '2019-10-01 16:59:19', null, '0', '1178957405992521728', '1', '权限管理', '/Base_Manage/Base_Action/List', null, '1', null, '20'), ('1179018395304071168', '2019-10-01 21:01:05', null, '0', '1178957405992521728', '1', '密钥管理', '/Base_Manage/Base_AppSecret/List', null, '1', null, '15'), ('1182652266117599232', '2019-10-11 21:40:47', null, '0', '1178957405992521728', '1', '用户管理', '/Base_Manage/Base_User/List', null, '1', null, '0'), ('1182652367447789568', '2019-10-11 21:41:11', null, '0', '1178957405992521728', '1', '角色管理', '/Base_Manage/Base_Role/List', null, '1', null, '5'), ('1182652433302556672', '2019-10-11 21:41:27', null, '0', '1178957405992521728', '1', '部门管理', '/Base_Manage/Base_Department/List', null, '1', null, '10'), ('1188801057778569216', '2019-10-28 20:53:53', null, '0', '1182652367447789568', '2', '增', null, 'Base_Role.Add', '1', null, '0'), ('1188801057778569217', '2019-10-28 20:53:53', null, '0', '1182652367447789568', '2', '改', null, 'Base_Role.Edit', '1', null, '0'), ('1188801057778569218', '2019-10-28 20:53:53', null, '0', '1182652367447789568', '2', '删', null, 'Base_Role.Delete', '1', null, '0'), ('1188801109783744512', '2019-10-28 20:54:06', null, '0', '1182652433302556672', '2', '增', null, 'Base_Department.Add', '1', null, '0'), ('1188801109783744513', '2019-10-28 20:54:06', null, '0', '1182652433302556672', '2', '改', null, 'Base_Department.Edit', '1', null, '0'), ('1188801109783744514', '2019-10-28 20:54:06', null, '0', '1182652433302556672', '2', '删', null, 'Base_Department.Delete', '1', null, '0'), ('1188801273885888512', '2019-10-28 20:54:45', null, '0', '1179018395304071168', '2', '增', null, 'Base_AppSecret.Add', '1', null, '0'), ('1188801273885888513', '2019-10-28 20:54:45', null, '0', '1179018395304071168', '2', '改', null, 'Base_AppSecret.Edit', '1', null, '0'), ('1188801273885888514', '2019-10-28 20:54:45', null, '0', '1179018395304071168', '2', '删', null, 'Base_AppSecret.Delete', '1', null, '0'), ('1188801341661646848', '2019-10-28 20:55:01', null, '0', '1178957553778823168', '2', '增', null, 'Base_Action.Add', '1', null, '0'), ('1188801341661646849', '2019-10-28 20:55:01', null, '0', '1178957553778823168', '2', '改', null, 'Base_Action.Edit', '1', null, '0'), ('1188801341661646850', '2019-10-28 20:55:01', null, '0', '1178957553778823168', '2', '删', null, 'Base_Action.Delete', '1', null, '0'), ('1193158266167758848', '2019-11-09 21:27:53', 'Admin', '0', null, '0', '首页', null, null, '1', 'home', '0'), ('1193158630615027712', '2019-11-09 21:29:20', 'Admin', '0', '1193158266167758848', '1', '框架介绍', '/Home/Introduce', null, '0', null, '0'), ('1193158780011941888', '2019-11-09 21:29:55', 'Admin', '0', '1193158266167758848', '1', '运营统计', '/Home/Statis', null, '0', null, '0'), ('1251792477787000832', '2020-04-19 16:39:19', null, '0', '1182652266117599232', '2', '增', null, 'Base_User.Add', '1', null, '0'), ('1251792477787000833', '2020-04-19 16:39:19', null, '0', '1182652266117599232', '2', '改', null, 'Base_User.Edit', '1', null, '0'), ('1251792477787000834', '2020-04-19 16:39:19', null, '0', '1182652266117599232', '2', '删', null, 'Base_User.Delete', '1', null, '0'), ('1251792721769664512', '2020-04-19 16:40:17', 'Admin', '0', '1178957405992521728', '1', '操作日志', '/Base_Manage/Base_UserLog/List', null, '0', null, '23'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_AppSecret |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_AppSecret`; |
|||
CREATE TABLE `Base_AppSecret` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '自然主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`AppId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '应用Id' , |
|||
`AppSecret` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '应用密钥' , |
|||
`AppName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '应用名' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='应用密钥表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_AppSecret |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_AppSecret` VALUES ('1172497995938271232', '2019-09-13 21:11:20', 'Admin', '0', 'PcAdmin', 'wtMaiTRPTT3hrf5e', '后台AppId'), ('1173937877642383360', '2019-09-17 20:32:55', 'Admin', '0', 'AppAdmin', 'IVh9LLSVFcoQPQ5K', 'APP密钥'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_BuildTest |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_BuildTest`; |
|||
CREATE TABLE `Base_BuildTest` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '自然主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`Column1` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列1' , |
|||
`Column2` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列2' , |
|||
`Column3` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列3' , |
|||
`Column4` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列4' , |
|||
`Column5` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '列5' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='生成测试表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_BuildTest |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_DbLink |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_DbLink`; |
|||
CREATE TABLE `Base_DbLink` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '自然主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`LinkName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '连接名' , |
|||
`ConnectionStr` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '连接字符串' , |
|||
`DbType` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据库类型' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='数据库连接表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_DbLink |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_DbLink` VALUES ('1183373232498020352', '2019-10-13 21:25:39', 'Admin', '0', 'BaseDb', 'Data Source=.;Initial Catalog=Colder.Admin.AntdVue;Integrated Security=True', 'SqlServer'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Department |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_Department`; |
|||
CREATE TABLE `Base_Department` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`Name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门名' , |
|||
`ParentId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '上级部门Id' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='部门表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Department |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_Department` VALUES ('1181175685528424448', '2019-10-07 19:53:23', null, '0', '宁波分公司', null), ('1181175803631636480', '2019-10-07 19:53:51', null, '0', '鄞州事业部', '1181175685528424448'), ('1181175865409540096', '2019-10-07 19:54:06', null, '0', '海曙事业部', '1181175685528424448'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Role |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_Role`; |
|||
CREATE TABLE `Base_Role` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`RoleName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色名' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='系统角色表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Role |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_Role` VALUES ('1180486275199668224', '2019-10-05 22:13:55', null, '0', '超级管理员'), ('1180819481383931904', '2019-10-06 20:17:57', null, '0', '部门管理员'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_RoleAction |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_RoleAction`; |
|||
CREATE TABLE `Base_RoleAction` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`RoleId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户Id' , |
|||
`ActionId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限Id' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='角色权限表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_RoleAction |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_RoleAction` VALUES ('1188801858282459136', '2019-10-28 20:57:04', null, '0', '1180486275199668224', '1182654049414025216'), ('1188801858282459137', '2019-10-28 20:57:04', null, '0', '1180486275199668224', '1182654208411701248'), ('1188801858282459138', '2019-10-28 20:57:04', null, '0', '1180486275199668224', '1183370665412005888'), ('1188801984434540544', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188044797802188800'), ('1188801984434540545', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188044797802188801'), ('1188801984434540546', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1182652433302556672'), ('1188801984434540547', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1178957405992521728'), ('1188801984434540548', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188801109783744512'), ('1188801984434540549', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188801109783744513'), ('1188801984434540550', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188801109783744514'), ('1188801984434540551', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1182652266117599232'), ('1188801984434540552', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188800845714558976'), ('1188801984434540553', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188800845714558977'), ('1188801984434540554', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188800845714558978'), ('1188801984434540555', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1182652367447789568'), ('1188801984434540556', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188801057778569216'), ('1188801984434540557', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188801057778569217'), ('1188801984434540558', '2019-10-28 20:57:34', null, '0', '1180819481383931904', '1188801057778569218'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_User |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_User`; |
|||
CREATE TABLE `Base_User` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`UserName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名' , |
|||
`Password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码' , |
|||
`RealName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名' , |
|||
`Sex` int(11) NOT NULL DEFAULT 0 COMMENT '性别(1为男,0为女)' , |
|||
`Birthday` date NULL DEFAULT NULL COMMENT '出生日期' , |
|||
`DepartmentId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属部门Id' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='系统用户表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_User |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_User` VALUES ('1181928860648738816', '2019-10-09 21:46:14', null, '0', 'xiaohua', 'e10adc3949ba59abbe56e057f20f883e', '小花', '0', null, null), ('1183363221872971776', '2019-10-13 20:45:52', 'Admin', '0', 'aa', null, 'aaa', '0', null, null), ('Admin', '2019-09-13 21:10:03', 'Admin', '0', 'Admin', 'e10adc3949ba59abbe56e057f20f883e', '超级管理员', '1', '2019-09-13', null); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_UserLog |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_UserLog`; |
|||
CREATE TABLE `Base_UserLog` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '自然主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`CreatorRealName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人姓名' , |
|||
`LogType` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '日志类型' , |
|||
`LogContent` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '日志内容' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='系统日志表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_UserLog |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_UserRole |
|||
-- ---------------------------- |
|||
DROP TABLE IF EXISTS `Base_UserRole`; |
|||
CREATE TABLE `Base_UserRole` ( |
|||
`Id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键' , |
|||
`CreateTime` datetime NOT NULL COMMENT '创建时间' , |
|||
`CreatorId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人Id' , |
|||
`Deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '否已删除' , |
|||
`UserId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户Id' , |
|||
`RoleId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色Id' , |
|||
PRIMARY KEY (`Id`) |
|||
) |
|||
ENGINE=InnoDB |
|||
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci |
|||
COMMENT='用户角色表' |
|||
|
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_UserRole |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO `Base_UserRole` VALUES ('1181927367719784448', '2019-10-09 21:40:18', null, '0', '1181922344629702656', '1180819481383931904'), ('1181927367719784449', '2019-10-09 21:40:18', null, '0', '1181922344629702656', '1180486275199668224'), ('1181927783786352640', '2019-10-09 21:41:57', null, '0', '1181927783727632384', '1180819481383931904'), ('1251792318642524160', '2020-04-19 16:38:41', null, '0', '1181928860648738816', '1180819481383931904'); |
|||
COMMIT; |
@ -0,0 +1,671 @@ |
|||
/* |
|||
Navicat Oracle Data Transfer |
|||
Oracle Client Version : 10.2.0.5.0 |
|||
|
|||
Source Server : 127.0.0.1@SYSTEM |
|||
Source Server Version : 110200 |
|||
Source Host : 127.0.0.1:1521 |
|||
Source Schema : COLDER.ADMIN.ANTDVUE |
|||
|
|||
Target Server Type : ORACLE |
|||
Target Server Version : 110200 |
|||
File Encoding : 65001 |
|||
|
|||
Date: 2020-04-19 16:14:00 |
|||
*/ |
|||
|
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Action |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_Action" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"ParentId" NVARCHAR2(50) NULL , |
|||
"Type" NUMBER(11) NOT NULL , |
|||
"Name" NVARCHAR2(50) NULL , |
|||
"Url" NVARCHAR2(500) NULL , |
|||
"Value" NVARCHAR2(50) NULL , |
|||
"NeedAction" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"Icon" NVARCHAR2(50) NULL , |
|||
"Sort" NUMBER(11) NOT NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_Action" IS '系统权限表'; |
|||
COMMENT ON COLUMN "Base_Action"."Id" IS '主键'; |
|||
COMMENT ON COLUMN "Base_Action"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_Action"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_Action"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_Action"."ParentId" IS '父级Id'; |
|||
COMMENT ON COLUMN "Base_Action"."Type" IS '类型,菜单=0,页面=1,权限=2'; |
|||
COMMENT ON COLUMN "Base_Action"."Name" IS '权限名/菜单名'; |
|||
COMMENT ON COLUMN "Base_Action"."Url" IS '菜单地址'; |
|||
COMMENT ON COLUMN "Base_Action"."Value" IS '权限值'; |
|||
COMMENT ON COLUMN "Base_Action"."NeedAction" IS '是否需要权限(仅页面有效)'; |
|||
COMMENT ON COLUMN "Base_Action"."Icon" IS '图标'; |
|||
COMMENT ON COLUMN "Base_Action"."Sort" IS '排序'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Action |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_Action" VALUES ('1178957405992521728', TO_DATE('2019-10-01 16:58:44', 'YYYY-MM-DD HH24:MI:SS'), null, '0', null, '0', '系统管理', null, null, '1', 'setting', '1'); |
|||
INSERT INTO "Base_Action" VALUES ('1178957553778823168', TO_DATE('2019-10-01 16:59:19', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957405992521728', '1', '权限管理', '/Base_Manage/Base_Action/List', null, '1', null, '20'); |
|||
INSERT INTO "Base_Action" VALUES ('1179018395304071168', TO_DATE('2019-10-01 21:01:05', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957405992521728', '1', '密钥管理', '/Base_Manage/Base_AppSecret/List', null, '1', null, '15'); |
|||
INSERT INTO "Base_Action" VALUES ('1182652266117599232', TO_DATE('2019-10-11 21:40:47', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957405992521728', '1', '用户管理', '/Base_Manage/Base_User/List', null, '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1182652367447789568', TO_DATE('2019-10-11 21:41:11', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957405992521728', '1', '角色管理', '/Base_Manage/Base_Role/List', null, '1', null, '5'); |
|||
INSERT INTO "Base_Action" VALUES ('1182652433302556672', TO_DATE('2019-10-11 21:41:27', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957405992521728', '1', '部门管理', '/Base_Manage/Base_Department/List', null, '1', null, '10'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801057778569216', TO_DATE('2019-10-28 20:53:53', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652367447789568', '2', '增', null, 'Base_Role.Add', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801057778569217', TO_DATE('2019-10-28 20:53:53', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652367447789568', '2', '改', null, 'Base_Role.Edit', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801057778569218', TO_DATE('2019-10-28 20:53:53', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652367447789568', '2', '删', null, 'Base_Role.Delete', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801109783744512', TO_DATE('2019-10-28 20:54:06', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652433302556672', '2', '增', null, 'Base_Department.Add', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801109783744513', TO_DATE('2019-10-28 20:54:06', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652433302556672', '2', '改', null, 'Base_Department.Edit', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801109783744514', TO_DATE('2019-10-28 20:54:06', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652433302556672', '2', '删', null, 'Base_Department.Delete', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801273885888512', TO_DATE('2019-10-28 20:54:45', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1179018395304071168', '2', '增', null, 'Base_AppSecret.Add', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801273885888513', TO_DATE('2019-10-28 20:54:45', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1179018395304071168', '2', '改', null, 'Base_AppSecret.Edit', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801273885888514', TO_DATE('2019-10-28 20:54:45', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1179018395304071168', '2', '删', null, 'Base_AppSecret.Delete', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801341661646848', TO_DATE('2019-10-28 20:55:01', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957553778823168', '2', '增', null, 'Base_Action.Add', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801341661646849', TO_DATE('2019-10-28 20:55:01', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957553778823168', '2', '改', null, 'Base_Action.Edit', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1188801341661646850', TO_DATE('2019-10-28 20:55:01', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1178957553778823168', '2', '删', null, 'Base_Action.Delete', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1193158266167758848', TO_DATE('2019-11-09 21:27:53', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', null, '0', '首页', null, null, '1', 'home', '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1193158630615027712', TO_DATE('2019-11-09 21:29:20', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', '1193158266167758848', '1', '框架介绍', '/Home/Introduce', null, '0', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1193158780011941888', TO_DATE('2019-11-09 21:29:55', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', '1193158266167758848', '1', '运营统计', '/Home/Statis', null, '0', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1251785113994268674', TO_DATE('2020-04-19 16:10:02', 'YYYY-MM-DD HH24:MI:SS'), null, '1', '1182652266117599232', '2', '删', null, 'Base_User.Delete', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1251785113994268673', TO_DATE('2020-04-19 16:10:02', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652266117599232', '2', '改', null, 'Base_User.Edit', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1251785113994268672', TO_DATE('2020-04-19 16:10:02', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1182652266117599232', '2', '增', null, 'Base_User.Add', '1', null, '0'); |
|||
INSERT INTO "Base_Action" VALUES ('1251785605155655680', TO_DATE('2020-04-19 16:11:59', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', '1178957405992521728', '1', '操作日志', '/Base_Manage/Base_UserLog/List', null, '0', null, '23'); |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_AppSecret |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_AppSecret" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"AppId" VARCHAR2(50 CHAR) NULL , |
|||
"AppSecret" VARCHAR2(50 CHAR) NULL , |
|||
"AppName" VARCHAR2(50 CHAR) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_AppSecret" IS '应用密钥表'; |
|||
COMMENT ON COLUMN "Base_AppSecret"."Id" IS '自然主键'; |
|||
COMMENT ON COLUMN "Base_AppSecret"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_AppSecret"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_AppSecret"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_AppSecret"."AppId" IS '应用Id'; |
|||
COMMENT ON COLUMN "Base_AppSecret"."AppSecret" IS '应用密钥'; |
|||
COMMENT ON COLUMN "Base_AppSecret"."AppName" IS '应用名'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_AppSecret |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_AppSecret" VALUES ('1172497995938271232', TO_DATE('2019-09-13 21:11:20', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', 'PcAdmin', 'wtMaiTRPTT3hrf5e', '后台AppId'); |
|||
INSERT INTO "Base_AppSecret" VALUES ('1173937877642383360', TO_DATE('2019-09-17 20:32:55', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', 'AppAdmin', 'IVh9LLSVFcoQPQ5K', 'APP密钥'); |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_BuildTest |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_BuildTest" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"Column1" VARCHAR2(50 CHAR) NULL , |
|||
"Column2" VARCHAR2(50 CHAR) NULL , |
|||
"Column3" VARCHAR2(50 CHAR) NULL , |
|||
"Column4" VARCHAR2(50 CHAR) NULL , |
|||
"Column5" VARCHAR2(50 CHAR) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_BuildTest" IS '生成测试表'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."Id" IS '自然主键'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."Column1" IS '列1'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."Column2" IS '列2'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."Column3" IS '列3'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."Column4" IS '列4'; |
|||
COMMENT ON COLUMN "Base_BuildTest"."Column5" IS '列5'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_BuildTest |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_DbLink |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_DbLink" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"LinkName" VARCHAR2(50 CHAR) NULL , |
|||
"ConnectionStr" VARCHAR2(500 CHAR) NULL , |
|||
"DbType" VARCHAR2(50 CHAR) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_DbLink" IS '数据库连接表'; |
|||
COMMENT ON COLUMN "Base_DbLink"."Id" IS '自然主键'; |
|||
COMMENT ON COLUMN "Base_DbLink"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_DbLink"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_DbLink"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_DbLink"."LinkName" IS '连接名'; |
|||
COMMENT ON COLUMN "Base_DbLink"."ConnectionStr" IS '连接字符串'; |
|||
COMMENT ON COLUMN "Base_DbLink"."DbType" IS '数据库类型'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_DbLink |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_DbLink" VALUES ('1183373232498020352', TO_DATE('2019-10-13 21:25:39', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', 'BaseDb', 'Data Source=.;Initial Catalog=Colder.Admin.AntdVue;Integrated Security=True', 'SqlServer'); |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Department |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_Department" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER DEFAULT 0 NOT NULL , |
|||
"Name" VARCHAR2(50 CHAR) NULL , |
|||
"ParentId" VARCHAR2(50 CHAR) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_Department" IS '部门表'; |
|||
COMMENT ON COLUMN "Base_Department"."Id" IS '主键'; |
|||
COMMENT ON COLUMN "Base_Department"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_Department"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_Department"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_Department"."Name" IS '部门名'; |
|||
COMMENT ON COLUMN "Base_Department"."ParentId" IS '上级部门Id'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Department |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_Department" VALUES ('1181175685528424448', TO_DATE('2019-10-07 19:53:23', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '宁波分公司', null); |
|||
INSERT INTO "Base_Department" VALUES ('1181175803631636480', TO_DATE('2019-10-07 19:53:51', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '鄞州事业部', '1181175685528424448'); |
|||
INSERT INTO "Base_Department" VALUES ('1181175865409540096', TO_DATE('2019-10-07 19:54:06', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '海曙事业部', '1181175685528424448'); |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Role |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_Role" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"RoleName" NVARCHAR2(50) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_Role" IS '系统角色表'; |
|||
COMMENT ON COLUMN "Base_Role"."Id" IS '主键'; |
|||
COMMENT ON COLUMN "Base_Role"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_Role"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_Role"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_Role"."RoleName" IS '角色名'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Role |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_Role" VALUES ('1180486275199668224', TO_DATE('2019-10-05 22:13:55', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '超级管理员'); |
|||
INSERT INTO "Base_Role" VALUES ('1180819481383931904', TO_DATE('2019-10-06 20:17:57', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '部门管理员'); |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_RoleAction |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_RoleAction" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"RoleId" VARCHAR2(50 CHAR) NULL , |
|||
"ActionId" VARCHAR2(50 CHAR) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_RoleAction" IS '角色权限表'; |
|||
COMMENT ON COLUMN "Base_RoleAction"."Id" IS '主键'; |
|||
COMMENT ON COLUMN "Base_RoleAction"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_RoleAction"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_RoleAction"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_RoleAction"."RoleId" IS '用户Id'; |
|||
COMMENT ON COLUMN "Base_RoleAction"."ActionId" IS '权限Id'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_RoleAction |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540544', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188044797802188800'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540545', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188044797802188801'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540546', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1182652433302556672'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540547', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1178957405992521728'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540548', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188801109783744512'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540549', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188801109783744513'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540550', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188801109783744514'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540551', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1182652266117599232'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540552', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188800845714558976'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540553', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188800845714558977'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540554', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188800845714558978'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540555', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1182652367447789568'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540556', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188801057778569216'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540557', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188801057778569217'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1188801984434540558', TO_DATE('2019-10-28 20:57:34', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180819481383931904', '1188801057778569218'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728962', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1179018395304071168'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728990', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1179018395304071168'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728991', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652266117599232'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728992', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652367447789568'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728993', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652433302556672'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728994', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652599069839360'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728995', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188800845714558976'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728996', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188800845714558977'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728997', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188800845714558978'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728998', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801057778569216'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728999', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801057778569217'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729000', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801057778569218'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728989', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1178957553778823168'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729001', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801109783744512'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729003', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801109783744514'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729004', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801273885888512'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729005', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801273885888513'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729006', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801273885888514'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729007', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801341661646848'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729008', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801341661646849'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729009', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801341661646850'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729010', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193158266167758848'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729011', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193158630615027712'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729012', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193158780011941888'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729013', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193527101521661952'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729002', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801109783744513'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728988', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1178957405992521728'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728987', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193527101521661954'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728986', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193527101521661953'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728961', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1178957553778823168'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728960', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1178957405992521728'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728963', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652266117599232'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728964', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652367447789568'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728965', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652433302556672'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728966', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1182652599069839360'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728967', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188800845714558976'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728968', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188800845714558977'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728969', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188800845714558978'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728970', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801057778569216'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728971', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801057778569217'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728972', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801057778569218'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728973', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801109783744512'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728974', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801109783744513'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728975', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801109783744514'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728976', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801273885888512'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728977', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801273885888513'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728978', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801273885888514'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728979', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801341661646848'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728980', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801341661646849'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728981', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1188801341661646850'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728982', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193158266167758848'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728983', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193158630615027712'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728984', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193158780011941888'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050728985', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193527101521661952'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729014', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193527101521661953'); |
|||
INSERT INTO "Base_RoleAction" VALUES ('1251784960050729015', TO_DATE('2020-04-19 16:09:26', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1180486275199668224', '1193527101521661954'); |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_User |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_User" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"UserName" VARCHAR2(50 CHAR) NULL , |
|||
"Password" VARCHAR2(50 CHAR) NULL , |
|||
"RealName" NVARCHAR2(50) NULL , |
|||
"Sex" NUMBER(11) NOT NULL , |
|||
"Birthday" DATE NULL , |
|||
"DepartmentId" VARCHAR2(50 CHAR) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_User" IS '系统用户表'; |
|||
COMMENT ON COLUMN "Base_User"."Id" IS '主键'; |
|||
COMMENT ON COLUMN "Base_User"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_User"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_User"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_User"."UserName" IS '用户名'; |
|||
COMMENT ON COLUMN "Base_User"."Password" IS '密码'; |
|||
COMMENT ON COLUMN "Base_User"."RealName" IS '姓名'; |
|||
COMMENT ON COLUMN "Base_User"."Sex" IS '性别(1为男,0为女)'; |
|||
COMMENT ON COLUMN "Base_User"."Birthday" IS '出生日期'; |
|||
COMMENT ON COLUMN "Base_User"."DepartmentId" IS '所属部门Id'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_User |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_User" VALUES ('1181928860648738816', TO_DATE('2019-10-09 21:46:14', 'YYYY-MM-DD HH24:MI:SS'), null, '0', 'xiaohua', 'e10adc3949ba59abbe56e057f20f883e', '小花', '0', null, null); |
|||
INSERT INTO "Base_User" VALUES ('Admin', TO_DATE('2019-09-13 21:10:03', 'YYYY-MM-DD HH24:MI:SS'), 'Admin', '0', 'Admin', 'e10adc3949ba59abbe56e057f20f883e', '超级管理员', '1', TO_DATE('2019-09-13 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null); |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_UserLog |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_UserLog" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"CreatorRealName" NVARCHAR2(50) NULL , |
|||
"LogType" VARCHAR2(50 CHAR) NULL , |
|||
"LogContent" CLOB NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_UserLog" IS '系统日志表'; |
|||
COMMENT ON COLUMN "Base_UserLog"."Id" IS '自然主键'; |
|||
COMMENT ON COLUMN "Base_UserLog"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_UserLog"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_UserLog"."CreatorRealName" IS '创建人姓名'; |
|||
COMMENT ON COLUMN "Base_UserLog"."LogType" IS '日志类型'; |
|||
COMMENT ON COLUMN "Base_UserLog"."LogContent" IS '日志内容'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_UserLog |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_UserRole |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_UserRole" ( |
|||
"Id" VARCHAR2(50 CHAR) NOT NULL , |
|||
"CreateTime" DATE NOT NULL , |
|||
"CreatorId" VARCHAR2(50 CHAR) NULL , |
|||
"Deleted" NUMBER(1) DEFAULT 0 NOT NULL , |
|||
"UserId" VARCHAR2(50 CHAR) NULL , |
|||
"RoleId" VARCHAR2(50 CHAR) NULL |
|||
) |
|||
LOGGING |
|||
NOCOMPRESS |
|||
NOCACHE |
|||
|
|||
; |
|||
COMMENT ON TABLE "Base_UserRole" IS '用户角色表'; |
|||
COMMENT ON COLUMN "Base_UserRole"."Id" IS '主键'; |
|||
COMMENT ON COLUMN "Base_UserRole"."CreateTime" IS '创建时间'; |
|||
COMMENT ON COLUMN "Base_UserRole"."CreatorId" IS '创建人Id'; |
|||
COMMENT ON COLUMN "Base_UserRole"."Deleted" IS '否已删除'; |
|||
COMMENT ON COLUMN "Base_UserRole"."UserId" IS '用户Id'; |
|||
COMMENT ON COLUMN "Base_UserRole"."RoleId" IS '角色Id'; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_UserRole |
|||
-- ---------------------------- |
|||
INSERT INTO "Base_UserRole" VALUES ('1181927367719784448', TO_DATE('2019-10-09 21:40:18', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1181922344629702656', '1180819481383931904'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1181927367719784449', TO_DATE('2019-10-09 21:40:18', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1181922344629702656', '1180486275199668224'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1181927783786352640', TO_DATE('2019-10-09 21:41:57', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1181927783727632384', '1180819481383931904'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1251784944565358592', TO_DATE('2020-04-19 16:09:22', 'YYYY-MM-DD HH24:MI:SS'), null, '0', '1181928860648738816', '1180819481383931904'); |
|||
|
|||
-- ---------------------------- |
|||
-- Indexes structure for table Base_Action |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_Action |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Type" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("NeedAction" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Sort" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Type" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("NeedAction" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Sort" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Type" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("NeedAction" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Sort" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Type" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("NeedAction" IS NOT NULL); |
|||
ALTER TABLE "Base_Action" ADD CHECK ("Sort" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_Action |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Action" ADD PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Indexes structure for table Base_AppSecret |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_AppSecret |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_AppSecret" ADD CHECK ("Deleted" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_AppSecret |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_AppSecret" ADD PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Indexes structure for table Base_BuildTest |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_BuildTest |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_BuildTest" ADD CHECK ("Deleted" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_BuildTest |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_BuildTest" ADD PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Indexes structure for table Base_DbLink |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_DbLink |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_DbLink" ADD CHECK ("Deleted" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_DbLink |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_DbLink" ADD PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Indexes structure for table Base_Department |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_Department |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Department" ADD CHECK ("Deleted" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_Department |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Department" ADD PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Indexes structure for table Base_Role |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_Role |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_Role" ADD CHECK ("Deleted" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_Role |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Role" ADD PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_RoleAction |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_RoleAction" ADD CHECK ("Deleted" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_User |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_User" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Sex" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Sex" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Sex" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_User" ADD CHECK ("Sex" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Indexes structure for table Base_UserLog |
|||
-- ---------------------------- |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_UserLog |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserLog" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_UserLog |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_UserLog" ADD PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Checks structure for table Base_UserRole |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Deleted" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Id" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("CreateTime" IS NOT NULL); |
|||
ALTER TABLE "Base_UserRole" ADD CHECK ("Deleted" IS NOT NULL); |
@ -0,0 +1,331 @@ |
|||
/* |
|||
Navicat Premium Data Transfer |
|||
|
|||
Source Server : 192.168.56.103 |
|||
Source Server Type : PostgreSQL |
|||
Source Server Version : 120003 |
|||
Source Host : 192.168.56.103:9999 |
|||
Source Catalog : Colder.Admin.AntdVue |
|||
Source Schema : public |
|||
|
|||
Target Server Type : PostgreSQL |
|||
Target Server Version : 120003 |
|||
File Encoding : 65001 |
|||
|
|||
Date: 14/06/2020 22:06:21 |
|||
*/ |
|||
|
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Action |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_Action" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"ParentId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Type" int4 NOT NULL DEFAULT 0, |
|||
"Name" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Url" varchar(500) COLLATE "pg_catalog"."default", |
|||
"Value" varchar(50) COLLATE "pg_catalog"."default", |
|||
"NeedAction" bool NOT NULL DEFAULT false, |
|||
"Icon" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Sort" int4 NOT NULL DEFAULT 0 |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Action |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_Action" VALUES ('1178957405992521728', '2019-10-01 16:58:44', NULL, 'f', NULL, 0, '系统管理', '', NULL, 't', 'setting', 1); |
|||
INSERT INTO "Base_Action" VALUES ('1178957553778823168', '2019-10-01 16:59:19', NULL, 'f', '1178957405992521728', 1, '权限管理', '/Base_Manage/Base_Action/List', NULL, 't', NULL, 20); |
|||
INSERT INTO "Base_Action" VALUES ('1179018395304071168', '2019-10-01 21:01:05', NULL, 'f', '1178957405992521728', 1, '密钥管理', '/Base_Manage/Base_AppSecret/List', NULL, 't', NULL, 15); |
|||
INSERT INTO "Base_Action" VALUES ('1182652367447789568', '2019-10-11 21:41:11', NULL, 'f', '1178957405992521728', 1, '角色管理', '/Base_Manage/Base_Role/List', NULL, 't', NULL, 5); |
|||
INSERT INTO "Base_Action" VALUES ('1182652433302556672', '2019-10-11 21:41:27', NULL, 'f', '1178957405992521728', 1, '部门管理', '/Base_Manage/Base_Department/List', NULL, 't', NULL, 10); |
|||
INSERT INTO "Base_Action" VALUES ('1188801057778569216', '2019-10-28 20:53:53.687', NULL, 'f', '1182652367447789568', 2, '增', NULL, 'Base_Role.Add', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801057778569217', '2019-10-28 20:53:53.687', NULL, 'f', '1182652367447789568', 2, '改', NULL, 'Base_Role.Edit', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801057778569218', '2019-10-28 20:53:53.687', NULL, 'f', '1182652367447789568', 2, '删', NULL, 'Base_Role.Delete', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801109783744512', '2019-10-28 20:54:06.087', NULL, 'f', '1182652433302556672', 2, '增', NULL, 'Base_Department.Add', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801109783744513', '2019-10-28 20:54:06.087', NULL, 'f', '1182652433302556672', 2, '改', NULL, 'Base_Department.Edit', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801109783744514', '2019-10-28 20:54:06.087', NULL, 'f', '1182652433302556672', 2, '删', NULL, 'Base_Department.Delete', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801273885888512', '2019-10-28 20:54:45.213', NULL, 'f', '1179018395304071168', 2, '增', NULL, 'Base_AppSecret.Add', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801273885888513', '2019-10-28 20:54:45.213', NULL, 'f', '1179018395304071168', 2, '改', NULL, 'Base_AppSecret.Edit', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801273885888514', '2019-10-28 20:54:45.213', NULL, 'f', '1179018395304071168', 2, '删', NULL, 'Base_AppSecret.Delete', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801341661646848', '2019-10-28 20:55:01.37', NULL, 'f', '1178957553778823168', 2, '增', NULL, 'Base_Action.Add', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801341661646849', '2019-10-28 20:55:01.37', NULL, 'f', '1178957553778823168', 2, '改', NULL, 'Base_Action.Edit', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1188801341661646850', '2019-10-28 20:55:01.37', NULL, 'f', '1178957553778823168', 2, '删', NULL, 'Base_Action.Delete', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1193158266167758848', '2019-11-09 21:27:53', 'Admin', 'f', NULL, 0, '首页', NULL, NULL, 't', 'home', 0); |
|||
INSERT INTO "Base_Action" VALUES ('1193158630615027712', '2019-11-09 21:29:20.013', 'Admin', 'f', '1193158266167758848', 1, '框架介绍', '/Home/Introduce', NULL, 'f', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1193158780011941888', '2019-11-09 21:29:55.63', 'Admin', 'f', '1193158266167758848', 1, '运营统计', '/Home/Statis', NULL, 'f', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1251789009936453632', '2020-04-19 16:25:31.741292', 'Admin', 'f', '1178957405992521728', 1, '操作日志', '/Base_Manage/Base_UserLog/List', NULL, 'f', NULL, 23); |
|||
INSERT INTO "Base_Action" VALUES ('1182652266117599232', '2019-10-11 21:40:47', NULL, 'f', '1178957405992521728', 1, '用户管理', '/Base_Manage/Base_User/List', NULL, 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1272041182930669568', '2020-06-14 13:40:26.050826', NULL, 'f', '1182652266117599232', 2, '增', NULL, 'Base_User.Add', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1272041182930669569', '2020-06-14 13:40:26.050854', NULL, 'f', '1182652266117599232', 2, '改', NULL, 'Base_User.Edit', 't', NULL, 0); |
|||
INSERT INTO "Base_Action" VALUES ('1272041182930669570', '2020-06-14 13:40:26.050856', NULL, 'f', '1182652266117599232', 2, '删', NULL, 'Base_User.Delete', 't', NULL, 0); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_AppSecret |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_AppSecret" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"AppId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"AppSecret" varchar(50) COLLATE "pg_catalog"."default", |
|||
"AppName" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_AppSecret |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_AppSecret" VALUES ('1172497995938271232', '2019-09-13 21:11:20', 'Admin', 'f', 'PcAdmin', 'wtMaiTRPTT3hrf5e', '后台AppId'); |
|||
INSERT INTO "Base_AppSecret" VALUES ('1173937877642383360', '2019-09-17 20:32:55', 'Admin', 'f', 'AppAdmin', 'IVh9LLSVFcoQPQ5K', 'APP密钥'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_BuildTest |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_BuildTest" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"Column1" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Column2" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Column3" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Column4" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Column5" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_BuildTest |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_DbLink |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_DbLink" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"LinkName" varchar(50) COLLATE "pg_catalog"."default", |
|||
"ConnectionStr" varchar(500) COLLATE "pg_catalog"."default", |
|||
"DbType" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_DbLink |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_DbLink" VALUES ('1183373232498020352', '2019-10-13 21:25:39', 'Admin', 'f', 'BaseDb', 'Data Source=.;Initial Catalog=Colder.Admin.AntdVue;Integrated Security=True', 'SqlServer'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Department |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_Department" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"Name" varchar(50) COLLATE "pg_catalog"."default", |
|||
"ParentId" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Department |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_Department" VALUES ('1181175685528424448', '2019-10-07 19:53:23', NULL, 'f', '宁波分公司', NULL); |
|||
INSERT INTO "Base_Department" VALUES ('1181175803631636480', '2019-10-07 19:53:51.427', NULL, 'f', '鄞州事业部', '1181175685528424448'); |
|||
INSERT INTO "Base_Department" VALUES ('1181175865409540096', '2019-10-07 19:54:06', NULL, 'f', '海曙事业部', '1181175685528424448'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_Role |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_Role" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"RoleName" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_Role |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_Role" VALUES ('1180486275199668224', '2019-10-05 22:13:55', NULL, 'f', '超级管理员'); |
|||
INSERT INTO "Base_Role" VALUES ('1180819481383931904', '2019-10-06 20:17:57', NULL, 'f', '部门管理员'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_RoleAction |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_RoleAction" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"RoleId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"ActionId" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_RoleAction |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_User |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_User" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"UserName" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Password" varchar(50) COLLATE "pg_catalog"."default", |
|||
"RealName" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Sex" int4 NOT NULL DEFAULT 0, |
|||
"Birthday" date, |
|||
"DepartmentId" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_User |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_User" VALUES ('Admin', '2019-09-13 21:10:03', 'Admin', 'f', 'Admin', 'e10adc3949ba59abbe56e057f20f883e', '超级管理员', 1, '2019-09-13', NULL); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_UserLog |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_UserLog" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"CreatorRealName" varchar(50) COLLATE "pg_catalog"."default", |
|||
"LogType" varchar(50) COLLATE "pg_catalog"."default", |
|||
"LogContent" text COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_UserLog |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_UserLog" VALUES ('1272029420646830080', '2020-06-14 12:53:41.703516', 'Admin', '超级管理员', '系统用户管理', '添加用户:sadsadsa'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272029650280779776', '2020-06-14 12:54:36.452629', 'Admin', '超级管理员', '系统用户管理', '修改用户:sadsadsa'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272030872345776128', '2020-06-14 12:59:27.815138', 'Admin', '超级管理员', '系统角色管理', '修改角色:超级管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272030891475996672', '2020-06-14 12:59:32.376166', 'Admin', '超级管理员', '系统角色管理', '修改角色:超级管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272030918021746688', '2020-06-14 12:59:38.705268', 'Admin', '超级管理员', '系统角色管理', '修改角色:超级管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272030948765995008', '2020-06-14 12:59:46.03599', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272030966604369920', '2020-06-14 12:59:50.288714', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272030994970447872', '2020-06-14 12:59:57.05113', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272033561364402176', '2020-06-14 13:10:08.927689', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272033590300905472', '2020-06-14 13:10:15.826545', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272033850259673088', '2020-06-14 13:11:17.805003', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272036901221568512', '2020-06-14 13:23:25.211097', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272036916170067968', '2020-06-14 13:23:28.775327', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272037356295163904', '2020-06-14 13:25:13.709362', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272037462578827264', '2020-06-14 13:25:39.049447', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272037849323016192', '2020-06-14 13:27:11.256078', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272040662048444416', '2020-06-14 13:38:21.862887', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272040701143552000', '2020-06-14 13:38:31.183958', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
INSERT INTO "Base_UserLog" VALUES ('1272040740783919104', '2020-06-14 13:38:40.634052', 'Admin', '超级管理员', '系统角色管理', '修改角色:部门管理员'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Table structure for Base_UserRole |
|||
-- ---------------------------- |
|||
CREATE TABLE "Base_UserRole" ( |
|||
"Id" varchar(50) COLLATE "pg_catalog"."default" NOT NULL, |
|||
"CreateTime" timestamp(6) NOT NULL, |
|||
"CreatorId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"Deleted" bool NOT NULL DEFAULT false, |
|||
"UserId" varchar(50) COLLATE "pg_catalog"."default", |
|||
"RoleId" varchar(50) COLLATE "pg_catalog"."default" |
|||
) |
|||
; |
|||
|
|||
-- ---------------------------- |
|||
-- Records of Base_UserRole |
|||
-- ---------------------------- |
|||
BEGIN; |
|||
INSERT INTO "Base_UserRole" VALUES ('1181927367719784448', '2019-10-09 21:40:18.27', NULL, 'f', '1181922344629702656', '1180819481383931904'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1181927367719784449', '2019-10-09 21:40:18.27', NULL, 'f', '1181922344629702656', '1180486275199668224'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1181927783786352640', '2019-10-09 21:41:57.47', NULL, 'f', '1181927783727632384', '1180819481383931904'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1251788815895367680', '2020-04-19 16:24:45.478714', NULL, 'f', '1181928860648738816', '1180819481383931904'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1251788815895367681', '2020-04-19 16:24:45.478899', NULL, 'f', '1181928860648738816', '1180819481383931904'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1272029650192699392', '2020-06-14 12:54:36.431934', NULL, 'f', '1272029420349034496', '1180486275199668224'); |
|||
INSERT INTO "Base_UserRole" VALUES ('1272029650196893696', '2020-06-14 12:54:36.432072', NULL, 'f', '1272029420349034496', '1180819481383931904'); |
|||
COMMIT; |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_Action |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Action" ADD CONSTRAINT "Base_Action_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_AppSecret |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_AppSecret" ADD CONSTRAINT "Base_AppSecret_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_BuildTest |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_BuildTest" ADD CONSTRAINT "Base_BuildTest_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_DbLink |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_DbLink" ADD CONSTRAINT "Base_DbLink_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_Department |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Department" ADD CONSTRAINT "Base_Department_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_Role |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_Role" ADD CONSTRAINT "Base_Role_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_RoleAction |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_RoleAction" ADD CONSTRAINT "Base_RoleAction_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_User |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_User" ADD CONSTRAINT "Base_User_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_UserLog |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_UserLog" ADD CONSTRAINT "Base_UserLog_pkey" PRIMARY KEY ("Id"); |
|||
|
|||
-- ---------------------------- |
|||
-- Primary Key structure for table Base_UserRole |
|||
-- ---------------------------- |
|||
ALTER TABLE "Base_UserRole" ADD CONSTRAINT "Base_UserRole_pkey" PRIMARY KEY ("Id"); |
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -0,0 +1,10 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<?PowerDesigner signature="Workspace" version="16.5.0.3982"?> |
|||
<!-- do not edit this file --> |
|||
|
|||
<Workspace> |
|||
<Local Expanded="Yes"> |
|||
<Model Expanded="Yes" ID="{160EB092-2F96-4235-852F-052B990C5A86}" Name="Base_Table" Selected="Yes" Type="{CDE44E21-9669-11D1-9914-006097355D9B}" URL="Base_Table.pdm"/> |
|||
</Local> |
|||
<BrowserModule Name="Repository"/> |
|||
</Workspace> |
@ -0,0 +1,73 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk.Web"> |
|||
|
|||
<PropertyGroup> |
|||
<ServerGarbageCollection>true</ServerGarbageCollection> |
|||
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection> |
|||
<TargetFramework>net5.0</TargetFramework> |
|||
<RootNamespace>Coldairarrow.Api</RootNamespace> |
|||
<AssemblyName>Coldairarrow.Api</AssemblyName> |
|||
</PropertyGroup> |
|||
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> |
|||
<NoWarn>1701;1702;CS1591</NoWarn> |
|||
</PropertyGroup> |
|||
|
|||
<!--输出依赖包的xml--> |
|||
<Target Name="CopyReferenceFiles" BeforeTargets="Build"> |
|||
<ItemGroup> |
|||
<ReferenceFiles Include="%(Reference.RelativeDir)%(Reference.Filename).xml;%(Reference.RelativeDir)%(Reference.Filename).pdb" /> |
|||
</ItemGroup> |
|||
|
|||
<Message Text="Copying reference files to $(OutputPath)" Importance="High" /> |
|||
<Copy SourceFiles="@(ReferenceFiles)" DestinationFolder="$(OutputPath)" Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')" /> |
|||
<Message Text="Copying reference files to $(PublishDir)" Importance="High" /> |
|||
<Copy SourceFiles="@(ReferenceFiles)" DestinationFolder="$(PublishDir)" Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')" /> |
|||
</Target> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Colder.Logging.Serilog" Version="1.2.17" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.5" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.5" /> |
|||
<PackageReference Include="NSwag.AspNetCore" Version="13.10.9" /> |
|||
<PackageReference Include="Caching.CSRedis" Version="3.6.60" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Coldairarrow.Business\04.Coldairarrow.Business.csproj" /> |
|||
<ProjectReference Include="..\Coldairarrow.Entity\02.Coldairarrow.Entity.csproj" /> |
|||
<ProjectReference Include="..\Coldairarrow.Util\01.Coldairarrow.Util.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<None Update="0_install.bat"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="0_uninstall.bat"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="BuildCodeTemplate\Business.txt"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="BuildCodeTemplate\Controller.txt"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="BuildCodeTemplate\EditForm.txt"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="BuildCodeTemplate\IBusiness.txt"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="BuildCodeTemplate\List.txt"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="Dockerfile"> |
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="nssm.exe"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</None> |
|||
</ItemGroup> |
|||
|
|||
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions> |
|||
|
|||
</Project> |
@ -0,0 +1,7 @@ |
|||
cd /d %~dp0 |
|||
set serviceName="Coldairarrow.Api" |
|||
set exePath="Coldairarrow.Api.exe" |
|||
nssm install %serviceName% %~dp0\%exePath% |
|||
::参数设置 |
|||
::nssm set emqx AppParameters start |
|||
nssm start %serviceName% |
@ -0,0 +1,4 @@ |
|||
cd /d %~dp0 |
|||
set serviceName="Coldairarrow.Api" |
|||
nssm stop %serviceName% |
|||
nssm remove %serviceName% confirm |
@ -0,0 +1,65 @@ |
|||
using Coldairarrow.Entity.%areaName%; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Linq.Dynamic.Core; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.%areaName% |
|||
{ |
|||
public class %entityName%Business : BaseBusiness<%entityName%>, I%entityName%Business, ITransientDependency |
|||
{ |
|||
public %entityName%Business(IDbAccessor db) |
|||
: base(db) |
|||
{ |
|||
} |
|||
|
|||
#region 外部接口 |
|||
|
|||
public async Task<PageResult<%entityName%>> GetDataListAsync(PageInput<ConditionDTO> input) |
|||
{ |
|||
var q = GetIQueryable(); |
|||
var where = LinqHelper.True<%entityName%>(); |
|||
var search = input.Search; |
|||
|
|||
//筛选 |
|||
if (!search.Condition.IsNullOrEmpty() && !search.Keyword.IsNullOrEmpty()) |
|||
{ |
|||
var newWhere = DynamicExpressionParser.ParseLambda<%entityName%, bool>( |
|||
ParsingConfig.Default, false, $@"{search.Condition}.Contains(@0)", search.Keyword); |
|||
where = where.And(newWhere); |
|||
} |
|||
|
|||
return await q.Where(where).GetPageResultAsync(input); |
|||
} |
|||
|
|||
public async Task<%entityName%> GetTheDataAsync(string id) |
|||
{ |
|||
return await GetEntityAsync(id); |
|||
} |
|||
|
|||
public async Task AddDataAsync(%entityName% data) |
|||
{ |
|||
await InsertAsync(data); |
|||
} |
|||
|
|||
public async Task UpdateDataAsync(%entityName% data) |
|||
{ |
|||
await UpdateAsync(data); |
|||
} |
|||
|
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
await DeleteAsync(ids); |
|||
} |
|||
|
|||
#endregion |
|||
|
|||
#region 私有成员 |
|||
|
|||
#endregion |
|||
} |
|||
} |
@ -0,0 +1,65 @@ |
|||
using Coldairarrow.Business.%areaName%; |
|||
using Coldairarrow.Entity.%areaName%; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.%areaName% |
|||
{ |
|||
[Route("/%areaName%/[controller]/[action]")] |
|||
public class %entityName%Controller : BaseApiController |
|||
{ |
|||
#region DI |
|||
|
|||
public %entityName%Controller(I%entityName%Business %busName%) |
|||
{ |
|||
%_busName% = %busName%; |
|||
} |
|||
|
|||
I%entityName%Business %_busName% { get; } |
|||
|
|||
#endregion |
|||
|
|||
#region 获取 |
|||
|
|||
[HttpPost] |
|||
public async Task<PageResult<%entityName%>> GetDataList(PageInput<ConditionDTO> input) |
|||
{ |
|||
return await %_busName%.GetDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<%entityName%> GetTheData(IdInputDTO input) |
|||
{ |
|||
return await %_busName%.GetTheDataAsync(input.id); |
|||
} |
|||
|
|||
#endregion |
|||
|
|||
#region 提交 |
|||
|
|||
[HttpPost] |
|||
public async Task SaveData(%entityName% data) |
|||
{ |
|||
if (data.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(data); |
|||
|
|||
await %_busName%.AddDataAsync(data); |
|||
} |
|||
else |
|||
{ |
|||
await %_busName%.UpdateDataAsync(data); |
|||
} |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await %_busName%.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
#endregion |
|||
} |
|||
} |
@ -0,0 +1,78 @@ |
|||
<template> |
|||
<a-modal |
|||
:title="title" |
|||
width="40%" |
|||
:visible="visible" |
|||
:confirmLoading="loading" |
|||
@ok="handleSubmit" |
|||
@cancel="()=>{this.visible=false}" |
|||
> |
|||
<a-spin :spinning="loading"> |
|||
<a-form-model ref="form" :model="entity" :rules="rules" v-bind="layout"> |
|||
%formColumns% |
|||
</a-form-model> |
|||
</a-spin> |
|||
</a-modal> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
props: { |
|||
parentObj: Object |
|||
}, |
|||
data() { |
|||
return { |
|||
layout: { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 } |
|||
}, |
|||
visible: false, |
|||
loading: false, |
|||
entity: {}, |
|||
rules: {}, |
|||
title: '' |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.entity = {} |
|||
this.$nextTick(() => { |
|||
this.$refs['form'].clearValidate() |
|||
}) |
|||
}, |
|||
openForm(id, title) { |
|||
this.init() |
|||
|
|||
if (id) { |
|||
this.loading = true |
|||
this.$http.post('/%areaName%/%entityName%/GetTheData', { id: id }).then(resJson => { |
|||
this.loading = false |
|||
|
|||
this.entity = resJson.Data |
|||
}) |
|||
} |
|||
}, |
|||
handleSubmit() { |
|||
this.$refs['form'].validate(valid => { |
|||
if (!valid) { |
|||
return |
|||
} |
|||
this.loading = true |
|||
this.$http.post('/%areaName%/%entityName%/SaveData', this.entity).then(resJson => { |
|||
this.loading = false |
|||
|
|||
if (resJson.Success) { |
|||
this.$message.success('操作成功!') |
|||
this.visible = false |
|||
|
|||
this.parentObj.getDataList() |
|||
} else { |
|||
this.$message.error(resJson.Msg) |
|||
} |
|||
}) |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -0,0 +1,16 @@ |
|||
using Coldairarrow.Entity.%areaName%; |
|||
using Coldairarrow.Util; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.%areaName% |
|||
{ |
|||
public interface I%entityName%Business |
|||
{ |
|||
Task<PageResult<%entityName%>> GetDataListAsync(PageInput<ConditionDTO> input); |
|||
Task<%entityName%> GetTheDataAsync(string id); |
|||
Task AddDataAsync(%entityName% data); |
|||
Task UpdateDataAsync(%entityName% data); |
|||
Task DeleteDataAsync(List<string> ids); |
|||
} |
|||
} |
@ -0,0 +1,157 @@ |
|||
<template> |
|||
<a-card :bordered="false"> |
|||
<div class="table-operator"> |
|||
<a-button type="primary" icon="plus" @click="hanldleAdd()">新建</a-button> |
|||
<a-button |
|||
type="primary" |
|||
icon="minus" |
|||
@click="handleDelete(selectedRowKeys)" |
|||
:disabled="!hasSelected()" |
|||
:loading="loading" |
|||
>删除</a-button> |
|||
<a-button type="primary" icon="redo" @click="getDataList()">刷新</a-button> |
|||
</div> |
|||
|
|||
<div class="table-page-search-wrapper"> |
|||
<a-form layout="inline"> |
|||
<a-row :gutter="10"> |
|||
<a-col :md="4" :sm="24"> |
|||
<a-form-item label="查询类别"> |
|||
<a-select allowClear v-model="queryParam.condition"> |
|||
%selectOptions% |
|||
</a-select> |
|||
</a-form-item> |
|||
</a-col> |
|||
<a-col :md="4" :sm="24"> |
|||
<a-form-item> |
|||
<a-input v-model="queryParam.keyword" placeholder="关键字" /> |
|||
</a-form-item> |
|||
</a-col> |
|||
<a-col :md="6" :sm="24"> |
|||
<a-button type="primary" @click="() => {this.pagination.current = 1; this.getDataList()}">查询</a-button> |
|||
<a-button style="margin-left: 8px" @click="() => (queryParam = {})">重置</a-button> |
|||
</a-col> |
|||
</a-row> |
|||
</a-form> |
|||
</div> |
|||
|
|||
<a-table |
|||
ref="table" |
|||
:columns="columns" |
|||
:rowKey="row => row.Id" |
|||
:dataSource="data" |
|||
:pagination="pagination" |
|||
:loading="loading" |
|||
@change="handleTableChange" |
|||
:rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" |
|||
:bordered="true" |
|||
size="small" |
|||
> |
|||
<span slot="action" slot-scope="text, record"> |
|||
<template> |
|||
<a @click="handleEdit(record.Id)">编辑</a> |
|||
<a-divider type="vertical" /> |
|||
<a @click="handleDelete([record.Id])">删除</a> |
|||
</template> |
|||
</span> |
|||
</a-table> |
|||
|
|||
<edit-form ref="editForm" :parentObj="this"></edit-form> |
|||
</a-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import EditForm from './EditForm' |
|||
|
|||
const columns = [ |
|||
%listColumns% |
|||
{ title: '操作', dataIndex: 'action', scopedSlots: { customRender: 'action' } } |
|||
] |
|||
|
|||
export default { |
|||
components: { |
|||
EditForm |
|||
}, |
|||
mounted() { |
|||
this.getDataList() |
|||
}, |
|||
data() { |
|||
return { |
|||
data: [], |
|||
pagination: { |
|||
current: 1, |
|||
pageSize: 10, |
|||
showTotal: (total, range) => `总数:${total} 当前:${range[0]}-${range[1]}` |
|||
}, |
|||
filters: {}, |
|||
sorter: { field: 'Id', order: 'asc' }, |
|||
loading: false, |
|||
columns, |
|||
queryParam: {}, |
|||
selectedRowKeys: [] |
|||
} |
|||
}, |
|||
methods: { |
|||
handleTableChange(pagination, filters, sorter) { |
|||
this.pagination = { ...pagination } |
|||
this.filters = { ...filters } |
|||
this.sorter = { ...sorter } |
|||
this.getDataList() |
|||
}, |
|||
getDataList() { |
|||
this.selectedRowKeys = [] |
|||
|
|||
this.loading = true |
|||
this.$http |
|||
.post('/%areaName%/%entityName%/GetDataList', { |
|||
PageIndex: this.pagination.current, |
|||
PageRows: this.pagination.pageSize, |
|||
SortField: this.sorter.field || 'Id', |
|||
SortType: this.sorter.order, |
|||
Search: this.queryParam, |
|||
...this.filters |
|||
}) |
|||
.then(resJson => { |
|||
this.loading = false |
|||
this.data = resJson.Data |
|||
const pagination = { ...this.pagination } |
|||
pagination.total = resJson.Total |
|||
this.pagination = pagination |
|||
}) |
|||
}, |
|||
onSelectChange(selectedRowKeys) { |
|||
this.selectedRowKeys = selectedRowKeys |
|||
}, |
|||
hasSelected() { |
|||
return this.selectedRowKeys.length > 0 |
|||
}, |
|||
hanldleAdd() { |
|||
this.$refs.editForm.openForm() |
|||
}, |
|||
handleEdit(id) { |
|||
this.$refs.editForm.openForm(id) |
|||
}, |
|||
handleDelete(ids) { |
|||
var thisObj = this |
|||
this.$confirm({ |
|||
title: '确认删除吗?', |
|||
onOk() { |
|||
return new Promise((resolve, reject) => { |
|||
thisObj.$http.post('/%areaName%/%entityName%/DeleteData', ids).then(resJson => { |
|||
resolve() |
|||
|
|||
if (resJson.Success) { |
|||
thisObj.$message.success('操作成功!') |
|||
|
|||
thisObj.getDataList() |
|||
} else { |
|||
thisObj.$message.error(resJson.Msg) |
|||
} |
|||
}) |
|||
}) |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -0,0 +1,13 @@ |
|||
using Microsoft.AspNetCore.Mvc; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 对外接口基控制器
|
|||
/// </summary>
|
|||
[ApiController] |
|||
public class BaseApiController : BaseController |
|||
{ |
|||
|
|||
} |
|||
} |
@ -0,0 +1,142 @@ |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Hosting; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System; |
|||
using System.IO; |
|||
using System.Text; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 基控制器
|
|||
/// </summary>
|
|||
[FormatResponse] |
|||
public class BaseController : ControllerBase |
|||
{ |
|||
protected void InitEntity(object obj) |
|||
{ |
|||
var op = HttpContext.RequestServices.GetService<IOperator>(); |
|||
if (obj.ContainsProperty("Id")) |
|||
obj.SetPropertyValue("Id", IdHelper.GetId()); |
|||
if (obj.ContainsProperty("CreateTime")) |
|||
obj.SetPropertyValue("CreateTime", DateTime.Now); |
|||
if (obj.ContainsProperty("CreatorId")) |
|||
obj.SetPropertyValue("CreatorId", op?.UserId); |
|||
if (obj.ContainsProperty("CreatorRealName")) |
|||
obj.SetPropertyValue("CreatorRealName", op?.Property?.RealName); |
|||
} |
|||
|
|||
protected string GetAbsolutePath(string virtualPath) |
|||
{ |
|||
string path = virtualPath.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); |
|||
if (path[0] == '~') |
|||
path = path.Remove(0, 2); |
|||
string rootPath = HttpContext.RequestServices.GetService<IWebHostEnvironment>().WebRootPath; |
|||
|
|||
return Path.Combine(rootPath, path); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回JSON
|
|||
/// </summary>
|
|||
/// <param name="jsonStr">json字符串</param>
|
|||
/// <returns></returns>
|
|||
protected ContentResult JsonContent(string jsonStr) |
|||
{ |
|||
return base.Content(jsonStr, "application/json", Encoding.UTF8); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回html
|
|||
/// </summary>
|
|||
/// <param name="body">html内容</param>
|
|||
/// <returns></returns>
|
|||
protected ContentResult HtmlContent(string body) |
|||
{ |
|||
return base.Content(body); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
protected AjaxResult Success() |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = true, |
|||
Msg = "请求成功!", |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <param name="data">返回数据</param>
|
|||
/// <returns></returns>
|
|||
protected AjaxResult<T> Success<T>(T data) |
|||
{ |
|||
AjaxResult<T> res = new AjaxResult<T> |
|||
{ |
|||
Success = true, |
|||
Msg = "操作成功", |
|||
Data = data |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <param name="data">返回数据</param>
|
|||
/// <param name="msg">返回消息</param>
|
|||
/// <returns></returns>
|
|||
protected AjaxResult<T> Success<T>(T data, string msg) |
|||
{ |
|||
AjaxResult<T> res = new AjaxResult<T> |
|||
{ |
|||
Success = true, |
|||
Msg = msg, |
|||
Data = data |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回错误
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
protected AjaxResult Error() |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = false, |
|||
Msg = "请求失败!", |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回错误
|
|||
/// </summary>
|
|||
/// <param name="msg">错误提示</param>
|
|||
/// <returns></returns>
|
|||
protected AjaxResult Error(string msg) |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = false, |
|||
Msg = msg, |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,100 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 系统权限
|
|||
/// </summary>
|
|||
/// <seealso cref="Coldairarrow.Api.BaseApiController" />
|
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("系统权限")] |
|||
public class Base_ActionController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public Base_ActionController(IBase_ActionBusiness actionBus) |
|||
{ |
|||
_actionBus = actionBus; |
|||
} |
|||
|
|||
IBase_ActionBusiness _actionBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<Base_Action> GetTheData(IdInputDTO input) |
|||
{ |
|||
return (await _actionBus.GetTheDataAsync(input.id)) ?? new Base_Action(); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<Base_Action>> GetPermissionList(Base_ActionsInputDTO input) |
|||
{ |
|||
input.types = new ActionType[] { Entity.ActionType.权限 }; |
|||
|
|||
return await _actionBus.GetDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<Base_Action>> GetAllActionList() |
|||
{ |
|||
return await _actionBus.GetDataListAsync(new Base_ActionsInputDTO |
|||
{ |
|||
types = new ActionType[] { ActionType.菜单, ActionType.页面, ActionType.权限 } |
|||
}); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<Base_ActionDTO>> GetMenuTreeList(Base_ActionsInputDTO input) |
|||
{ |
|||
input.selectable = true; |
|||
input.types = new ActionType[] { ActionType.菜单, ActionType.页面 }; |
|||
|
|||
return await _actionBus.GetTreeDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<Base_ActionDTO>> GetActionTreeList(Base_ActionsInputDTO input) |
|||
{ |
|||
input.selectable = false; |
|||
|
|||
return await _actionBus.GetTreeDataListAsync(input); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
[HttpPost] |
|||
public async Task SaveData(ActionEditInputDTO input) |
|||
{ |
|||
if (input.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(input); |
|||
|
|||
await _actionBus.AddDataAsync(input); |
|||
} |
|||
else |
|||
{ |
|||
await _actionBus.UpdateDataAsync(input); |
|||
} |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await _actionBus.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,79 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 应用密钥
|
|||
/// </summary>
|
|||
/// <seealso cref="Coldairarrow.Api.BaseApiController" />
|
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("应用密钥")] |
|||
public class Base_AppSecretController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public Base_AppSecretController(IBase_AppSecretBusiness appSecretBus) |
|||
{ |
|||
_appSecretBus = appSecretBus; |
|||
} |
|||
|
|||
IBase_AppSecretBusiness _appSecretBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<PageResult<Base_AppSecret>> GetDataList(PageInput<AppSecretsInputDTO> input) |
|||
{ |
|||
return await _appSecretBus.GetDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<Base_AppSecret> GetTheData(IdInputDTO input) |
|||
{ |
|||
return await _appSecretBus.GetTheDataAsync(input.id) ?? new Base_AppSecret(); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
/// <summary>
|
|||
/// 保存
|
|||
/// </summary>
|
|||
/// <param name="theData">保存的数据</param>
|
|||
[HttpPost] |
|||
public async Task SaveData(Base_AppSecret theData) |
|||
{ |
|||
if (theData.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(theData); |
|||
|
|||
await _appSecretBus.AddDataAsync(theData); |
|||
} |
|||
else |
|||
{ |
|||
await _appSecretBus.UpdateDataAsync(theData); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除数据
|
|||
/// </summary>
|
|||
/// <param name="ids">id数组,JSON数组</param>
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await _appSecretBus.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,79 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 数据库连接
|
|||
/// </summary>
|
|||
/// <seealso cref="Coldairarrow.Api.BaseApiController" />
|
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("数据库连接")] |
|||
public class Base_DbLinkController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public Base_DbLinkController(IBase_DbLinkBusiness dbLinkBus) |
|||
{ |
|||
_dbLinkBus = dbLinkBus; |
|||
} |
|||
|
|||
IBase_DbLinkBusiness _dbLinkBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<AjaxResult<List<Base_DbLink>>> GetDataList(PageInput input) |
|||
{ |
|||
return await _dbLinkBus.GetDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<Base_DbLink> GetTheData(IdInputDTO input) |
|||
{ |
|||
return await _dbLinkBus.GetTheDataAsync(input.id) ?? new Base_DbLink(); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
/// <summary>
|
|||
/// 保存
|
|||
/// </summary>
|
|||
/// <param name="theData">保存的数据</param>
|
|||
[HttpPost] |
|||
public async Task SaveData(Base_DbLink theData) |
|||
{ |
|||
if (theData.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(theData); |
|||
|
|||
await _dbLinkBus.AddDataAsync(theData); |
|||
} |
|||
else |
|||
{ |
|||
await _dbLinkBus.UpdateDataAsync(theData); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除数据
|
|||
/// </summary>
|
|||
/// <param name="ids">id数组,JSON数组</param>
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await _dbLinkBus.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,70 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 部门
|
|||
/// </summary>
|
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("部门")] |
|||
public class Base_DepartmentController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public Base_DepartmentController(IBase_DepartmentBusiness departmentBus) |
|||
{ |
|||
_departmentBus = departmentBus; |
|||
} |
|||
|
|||
IBase_DepartmentBusiness _departmentBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<Base_Department> GetTheData(IdInputDTO input) |
|||
{ |
|||
return await _departmentBus.GetTheDataAsync(input.id) ?? new Base_Department(); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<Base_DepartmentTreeDTO>> GetTreeDataList(DepartmentsTreeInputDTO input) |
|||
{ |
|||
return await _departmentBus.GetTreeDataListAsync(input); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
[HttpPost] |
|||
public async Task SaveData(Base_Department theData) |
|||
{ |
|||
if (theData.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(theData); |
|||
|
|||
await _departmentBus.AddDataAsync(theData); |
|||
} |
|||
else |
|||
{ |
|||
await _departmentBus.UpdateDataAsync(theData); |
|||
} |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await _departmentBus.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,70 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 系统角色
|
|||
/// </summary>
|
|||
/// <seealso cref="Coldairarrow.Api.BaseApiController" />
|
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("系统角色")] |
|||
public class Base_RoleController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public Base_RoleController(IBase_RoleBusiness roleBus) |
|||
{ |
|||
_roleBus = roleBus; |
|||
} |
|||
|
|||
IBase_RoleBusiness _roleBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<PageResult<Base_RoleInfoDTO>> GetDataList(PageInput<RolesInputDTO> input) |
|||
{ |
|||
return await _roleBus.GetDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<Base_RoleInfoDTO> GetTheData(IdInputDTO input) |
|||
{ |
|||
return await _roleBus.GetTheDataAsync(input.id) ?? new Base_RoleInfoDTO(); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
[HttpPost] |
|||
public async Task SaveData(Base_RoleInfoDTO input) |
|||
{ |
|||
if (input.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(input); |
|||
|
|||
await _roleBus.AddDataAsync(input); |
|||
} |
|||
else |
|||
{ |
|||
await _roleBus.UpdateDataAsync(input); |
|||
} |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await _roleBus.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,75 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("系统用户")] |
|||
public class Base_UserController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public Base_UserController(IBase_UserBusiness userBus) |
|||
{ |
|||
_userBus = userBus; |
|||
} |
|||
|
|||
IBase_UserBusiness _userBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<PageResult<Base_UserDTO>> GetDataList(PageInput<Base_UsersInputDTO> input) |
|||
{ |
|||
return await _userBus.GetDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<Base_UserDTO> GetTheData(IdInputDTO input) |
|||
{ |
|||
return await _userBus.GetTheDataAsync(input.id) ?? new Base_UserDTO(); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<SelectOption>> GetOptionList(OptionListInputDTO input) |
|||
{ |
|||
return await _userBus.GetOptionListAsync(input); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
[HttpPost] |
|||
public async Task SaveData(UserEditInputDTO input) |
|||
{ |
|||
if (!input.newPwd.IsNullOrEmpty()) |
|||
input.Password = input.newPwd.ToMD5String(); |
|||
if (input.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(input); |
|||
|
|||
await _userBus.AddDataAsync(input); |
|||
} |
|||
else |
|||
{ |
|||
await _userBus.UpdateDataAsync(input); |
|||
} |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await _userBus.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,49 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("审计日志")] |
|||
public class Base_UserLogController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public Base_UserLogController(IBase_UserLogBusiness logBus) |
|||
{ |
|||
_logBus = logBus; |
|||
} |
|||
|
|||
IBase_UserLogBusiness _logBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<PageResult<Base_UserLog>> GetLogList(PageInput<UserLogsInputDTO> input) |
|||
{ |
|||
input.SortField = "CreateTime"; |
|||
input.SortType = "desc"; |
|||
|
|||
return await _logBus.GetLogListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public List<SelectOption> GetLogTypeList() |
|||
{ |
|||
return EnumHelper.ToOptionList(typeof(UserLogType)); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,43 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using NSwag.Annotations; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("代码生成")] |
|||
public class BuildCodeController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public BuildCodeController(IBuildCodeBusiness buildCodeBus) |
|||
{ |
|||
_buildCodeBus = buildCodeBus; |
|||
} |
|||
|
|||
IBuildCodeBusiness _buildCodeBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
[HttpPost] |
|||
public List<Base_DbLink> GetAllDbLink() |
|||
{ |
|||
return _buildCodeBus.GetAllDbLink(); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public List<DbTableInfo> GetDbTableList(DbTablesInputDTO input) |
|||
{ |
|||
return _buildCodeBus.GetDbTableList(input.linkId); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public void Build(BuildInputDTO input) |
|||
{ |
|||
_buildCodeBus.Build(input); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,95 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.IBusiness; |
|||
using Microsoft.AspNetCore.Authorization; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.Extensions.Options; |
|||
using Microsoft.IdentityModel.Tokens; |
|||
using NSwag.Annotations; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IdentityModel.Tokens.Jwt; |
|||
using System.Security.Claims; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 首页控制器
|
|||
/// </summary>
|
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("主页")] |
|||
public class HomeController : BaseApiController |
|||
{ |
|||
readonly IHomeBusiness _homeBus; |
|||
readonly IPermissionBusiness _permissionBus; |
|||
readonly IBase_UserBusiness _userBus; |
|||
readonly IOperator _operator; |
|||
private readonly JwtOptions _jwtOptions; |
|||
public HomeController( |
|||
IHomeBusiness homeBus, |
|||
IPermissionBusiness permissionBus, |
|||
IBase_UserBusiness userBus, |
|||
IOperator @operator, |
|||
IOptions<JwtOptions> jwtOptions |
|||
) |
|||
{ |
|||
_homeBus = homeBus; |
|||
_permissionBus = permissionBus; |
|||
_userBus = userBus; |
|||
_operator = @operator; |
|||
_jwtOptions = jwtOptions.Value; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 用户登录(获取token)
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
[HttpPost] |
|||
[AllowAnonymous] |
|||
public async Task<string> SubmitLogin(LoginInputDTO input) |
|||
{ |
|||
var userId = await _homeBus.SubmitLoginAsync(input); |
|||
|
|||
var claims = new[] |
|||
{ |
|||
new Claim("userId",userId) |
|||
}; |
|||
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtOptions.Secret)); |
|||
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); |
|||
var jwtToken = new JwtSecurityToken( |
|||
string.Empty, |
|||
string.Empty, |
|||
claims, |
|||
expires: DateTime.Now.AddHours(_jwtOptions.AccessExpireHours), |
|||
signingCredentials: credentials); |
|||
|
|||
return new JwtSecurityTokenHandler().WriteToken(jwtToken); |
|||
} |
|||
[HttpPost] |
|||
public async Task ChangePwd(ChangePwdInputDTO input) |
|||
{ |
|||
await _homeBus.ChangePwdAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<object> GetOperatorInfo() |
|||
{ |
|||
var theInfo = await _userBus.GetTheDataAsync(_operator.UserId); |
|||
var permissions = await _permissionBus.GetUserPermissionValuesAsync(_operator.UserId); |
|||
var resObj = new |
|||
{ |
|||
UserInfo = theInfo, |
|||
Permissions = permissions |
|||
}; |
|||
|
|||
return resObj; |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<Base_ActionDTO>> GetOperatorMenuList() |
|||
{ |
|||
return await _permissionBus.GetUserMenuListAsync(_operator.UserId); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,51 @@ |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.Extensions.Configuration; |
|||
using NSwag.Annotations; |
|||
using System; |
|||
using System.IO; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.Base_Manage |
|||
{ |
|||
[Route("/Base_Manage/[controller]/[action]")]
|
|||
[OpenApiTag("上传")] |
|||
public class UploadController : BaseApiController |
|||
{ |
|||
readonly IConfiguration _configuration; |
|||
public UploadController(IConfiguration configuration) |
|||
{ |
|||
_configuration = configuration; |
|||
} |
|||
|
|||
[HttpPost] |
|||
//[AllowAnonymous]
|
|||
public IActionResult UploadFileByForm(IFormFile formFile) |
|||
{ |
|||
var file = formFile; |
|||
if (file == null) |
|||
return JsonContent(new { status = "error" }.ToJson()); |
|||
|
|||
string path = $"/Upload/{Guid.NewGuid().ToString("N")}/{file.FileName}"; |
|||
string physicPath = GetAbsolutePath($"~{path}"); |
|||
string dir = Path.GetDirectoryName(physicPath); |
|||
if (!Directory.Exists(dir)) |
|||
Directory.CreateDirectory(dir); |
|||
using (FileStream fs = new FileStream(physicPath, FileMode.Create)) |
|||
{ |
|||
file.CopyTo(fs); |
|||
} |
|||
|
|||
string url = $"{_configuration["WebRootUrl"]}{path}"; |
|||
var res = new |
|||
{ |
|||
name = file.FileName, |
|||
status = "done", |
|||
thumbUrl = url, |
|||
url = url |
|||
}; |
|||
|
|||
return JsonContent(res.ToJson()); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,85 @@ |
|||
using Coldairarrow.Business.HuiYan; |
|||
using Coldairarrow.Entity.DTO; |
|||
using Coldairarrow.Entity.HuiYan; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers.HuiYan |
|||
{ |
|||
[Route("/HuiYan/[controller]/[action]")]
|
|||
public class catsController : BaseApiController |
|||
{ |
|||
#region DI
|
|||
|
|||
public catsController(IcatsBusiness catsBus) |
|||
{ |
|||
_catsBus = catsBus; |
|||
} |
|||
|
|||
IcatsBusiness _catsBus { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 获取
|
|||
|
|||
[HttpPost] |
|||
public async Task<PageResult<cats>> GetDataList(PageInput<ConditionDTO> input) |
|||
{ |
|||
return await _catsBus.GetDataListAsync(input); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<cats> GetTheData(IdInputDTO input) |
|||
{ |
|||
return await _catsBus.GetTheDataAsync(input.id); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 提交
|
|||
|
|||
[HttpPost] |
|||
public async Task SaveData(cats data) |
|||
{ |
|||
if (data.Id.IsNullOrEmpty()) |
|||
{ |
|||
InitEntity(data); |
|||
|
|||
await _catsBus.AddDataAsync(data); |
|||
} |
|||
else |
|||
{ |
|||
await _catsBus.UpdateDataAsync(data); |
|||
} |
|||
} |
|||
|
|||
[HttpPost] |
|||
public AjaxResult AddKeyWord([FromBody]CatDto model) |
|||
{ |
|||
return _catsBus.AddKeyWord(model); |
|||
} |
|||
|
|||
|
|||
[HttpPost] |
|||
public async Task DeleteData(List<string> ids) |
|||
{ |
|||
await _catsBus.DeleteDataAsync(ids); |
|||
} |
|||
|
|||
[HttpPost] |
|||
public async Task<List<CatTreeDTO>> GetTreeDataListAsync(CatsTreeInputDTO input) |
|||
{ |
|||
return await _catsBus.GetTreeDataListAsync(input); |
|||
} |
|||
|
|||
[HttpGet] |
|||
public AjaxResult GetParentCatList() |
|||
{ |
|||
return _catsBus.GetParentCatList(); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,51 @@ |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using Microsoft.AspNetCore.Authorization; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api.Controllers |
|||
{ |
|||
[Route("/[controller]/[action]")]
|
|||
[AllowAnonymous] |
|||
public class TestController : BaseController |
|||
{ |
|||
readonly IDbAccessor _repository; |
|||
public TestController(IDbAccessor repository) |
|||
{ |
|||
_repository = repository; |
|||
} |
|||
|
|||
[HttpGet] |
|||
public async Task PressTest() |
|||
{ |
|||
Base_User base_User = new Base_User |
|||
{ |
|||
Id = Guid.NewGuid().ToString(), |
|||
Birthday = DateTime.Now, |
|||
CreateTime = DateTime.Now, |
|||
CreatorId = Guid.NewGuid().ToString(), |
|||
DepartmentId = Guid.NewGuid().ToString(), |
|||
Password = Guid.NewGuid().ToString(), |
|||
RealName = Guid.NewGuid().ToString(), |
|||
Sex = Sex.Man, |
|||
UserName = Guid.NewGuid().ToString() |
|||
}; |
|||
|
|||
await _repository.InsertAsync(base_User); |
|||
await _repository.UpdateAsync(base_User); |
|||
await _repository.GetIQueryable<Base_User>().Where(x => x.Id == base_User.Id).FirstOrDefaultAsync(); |
|||
await _repository.DeleteAsync(base_User); |
|||
} |
|||
|
|||
[HttpGet] |
|||
public async Task<PageResult<Base_UserLog>> GetLogList() |
|||
{ |
|||
return await _repository.GetIQueryable<Base_UserLog>().GetPageResultAsync(new PageInput()); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,98 @@ |
|||
using Coldairarrow.Business.Cache; |
|||
using Coldairarrow.Entity; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 操作者
|
|||
/// </summary>
|
|||
public class Operator : IOperator, IScopedDependency |
|||
{ |
|||
readonly IBase_UserCache _userCache; |
|||
readonly IServiceProvider _serviceProvider; |
|||
public Operator(IBase_UserCache userCache, IHttpContextAccessor httpContextAccessor, IServiceProvider serviceProvider) |
|||
{ |
|||
_serviceProvider = serviceProvider; |
|||
_userCache = userCache; |
|||
UserId = httpContextAccessor?.HttpContext?.User.Claims |
|||
.Where(x => x.Type == "userId").FirstOrDefault()?.Value; |
|||
} |
|||
|
|||
private Base_UserDTO _property; |
|||
private object _lockObj = new object(); |
|||
|
|||
/// <summary>
|
|||
/// 当前操作者UserId
|
|||
/// </summary>
|
|||
public string UserId { get; } |
|||
|
|||
/// <summary>
|
|||
/// 属性
|
|||
/// </summary>
|
|||
public Base_UserDTO Property |
|||
{ |
|||
get |
|||
{ |
|||
if (UserId.IsNullOrEmpty()) |
|||
return default; |
|||
|
|||
if (_property == null) |
|||
{ |
|||
lock (_lockObj) |
|||
{ |
|||
if (_property == null) |
|||
{ |
|||
_property = AsyncHelper.RunSync(() => _userCache.GetCacheAsync(UserId)); |
|||
} |
|||
} |
|||
} |
|||
|
|||
return _property; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 判断是否为超级管理员
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public bool IsAdmin() |
|||
{ |
|||
var role = Property.RoleType; |
|||
if (UserId == GlobalAssemblies.ADMINID || role.HasFlag(RoleTypes.超级管理员)) |
|||
return true; |
|||
else |
|||
return false; |
|||
} |
|||
|
|||
public void WriteUserLog(UserLogType userLogType, string msg) |
|||
{ |
|||
var log = new Base_UserLog |
|||
{ |
|||
Id = IdHelper.GetId(), |
|||
CreateTime = DateTime.Now, |
|||
CreatorId = UserId, |
|||
CreatorRealName = Property.RealName, |
|||
LogContent = msg, |
|||
LogType = userLogType.ToString() |
|||
}; |
|||
|
|||
Task.Factory.StartNew(async () => |
|||
{ |
|||
using (var scop = _serviceProvider.CreateScope()) |
|||
{ |
|||
var db = scop.ServiceProvider.GetService<IDbAccessor>(); |
|||
await db.InsertAsync(log); |
|||
} |
|||
}, TaskCreationOptions.LongRunning); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,8 @@ |
|||
#使用阿里云镜像,微软镜像太慢 |
|||
#FROM docker pull mcr.microsoft.com/dotnet/aspnet:5.0.2 |
|||
FROM registry.cn-hangzhou.aliyuncs.com/colder-public/aspnet:5.0.2 |
|||
RUN rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone |
|||
WORKDIR /app |
|||
COPY . . |
|||
EXPOSE 5000 |
|||
ENTRYPOINT ["dotnet","Coldairarrow.Api.dll"] |
@ -0,0 +1,61 @@ |
|||
using Coldairarrow.Util; |
|||
using CSRedis; |
|||
using Microsoft.Extensions.Caching.Distributed; |
|||
using Microsoft.Extensions.Caching.Redis; |
|||
using Microsoft.Extensions.Configuration; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.Extensions.Hosting; |
|||
using System; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public static class HostExtentions |
|||
{ |
|||
/// <summary>
|
|||
/// 使用IdHelper
|
|||
/// </summary>
|
|||
/// <param name="hostBuilder">建造者</param>
|
|||
/// <returns></returns>
|
|||
public static IHostBuilder UseIdHelper(this IHostBuilder hostBuilder) |
|||
{ |
|||
hostBuilder.ConfigureServices((buidler, services) => |
|||
{ |
|||
new IdHelperBootstrapper() |
|||
//设置WorkerId
|
|||
.SetWorkderId(buidler.Configuration["WorkerId"].ToLong()) |
|||
//使用Zookeeper
|
|||
//.UseZookeeper("127.0.0.1:2181", 200, GlobalSwitch.ProjectName)
|
|||
.Boot(); |
|||
}); |
|||
|
|||
return hostBuilder; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 使用缓存
|
|||
/// </summary>
|
|||
/// <param name="hostBuilder">建造者</param>
|
|||
/// <returns></returns>
|
|||
public static IHostBuilder UseCache(this IHostBuilder hostBuilder) |
|||
{ |
|||
hostBuilder.ConfigureServices((buidlerContext, services) => |
|||
{ |
|||
var cacheOption = buidlerContext.Configuration.GetSection("Cache").Get<CacheOptions>(); |
|||
switch (cacheOption.CacheType) |
|||
{ |
|||
case CacheType.Memory: services.AddDistributedMemoryCache(); break; |
|||
case CacheType.Redis: |
|||
{ |
|||
var csredis = new CSRedisClient(cacheOption.RedisEndpoint); |
|||
RedisHelper.Initialization(csredis); |
|||
services.AddSingleton(csredis); |
|||
services.AddSingleton<IDistributedCache>(new CSRedisCache(RedisHelper.Instance)); |
|||
}; break; |
|||
default: throw new Exception("缓存类型无效"); |
|||
} |
|||
}); |
|||
|
|||
return hostBuilder; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
using Microsoft.AspNetCore.Authentication.JwtBearer; |
|||
using Microsoft.Extensions.Configuration; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.IdentityModel.Tokens; |
|||
using System; |
|||
using System.Text; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public static class JwtExtentions |
|||
{ |
|||
public static IServiceCollection AddJwt(this IServiceCollection services, IConfiguration configuration) |
|||
{ |
|||
services.Configure<JwtOptions>(configuration.GetSection("jwt")); |
|||
var jwtOptions = configuration.GetSection("jwt").Get<JwtOptions>(); |
|||
|
|||
services.AddAuthentication(x => |
|||
{ |
|||
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; |
|||
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; |
|||
}).AddJwtBearer(x => |
|||
{ |
|||
x.RequireHttpsMetadata = false; |
|||
x.SaveToken = false; |
|||
//Token Validation Parameters
|
|||
x.TokenValidationParameters = new TokenValidationParameters |
|||
{ |
|||
ClockSkew = TimeSpan.Zero,//到时间立即过期
|
|||
ValidateIssuerSigningKey = true, |
|||
//获取或设置要使用的Microsoft.IdentityModel.Tokens.SecurityKey用于签名验证。
|
|||
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8. |
|||
GetBytes(jwtOptions.Secret)), |
|||
ValidateIssuer = false, |
|||
ValidateAudience = false, |
|||
}; |
|||
}); |
|||
|
|||
return services; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,138 @@ |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public abstract class BaseActionFilterAsync : Attribute, IAsyncActionFilter |
|||
{ |
|||
public async virtual Task OnActionExecuting(ActionExecutingContext context) |
|||
{ |
|||
await Task.CompletedTask; |
|||
} |
|||
|
|||
public async virtual Task OnActionExecuted(ActionExecutedContext context) |
|||
{ |
|||
await Task.CompletedTask; |
|||
} |
|||
|
|||
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) |
|||
{ |
|||
await OnActionExecuting(context); |
|||
if (context.Result == null) |
|||
{ |
|||
var nextContext = await next(); |
|||
await OnActionExecuted(nextContext); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回JSON
|
|||
/// </summary>
|
|||
/// <param name="json">json字符串</param>
|
|||
/// <returns></returns>
|
|||
public ContentResult JsonContent(string json) |
|||
{ |
|||
return new ContentResult { Content = json, StatusCode = 200, ContentType = "application/json; charset=utf-8" }; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public ContentResult Success() |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = true, |
|||
Msg = "请求成功!" |
|||
}; |
|||
|
|||
return JsonContent(res.ToJson()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <param name="msg">消息</param>
|
|||
/// <returns></returns>
|
|||
public ContentResult Success(string msg) |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = true, |
|||
Msg = msg |
|||
}; |
|||
|
|||
return JsonContent(res.ToJson()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <param name="data">返回的数据</param>
|
|||
/// <returns></returns>
|
|||
public ContentResult Success<T>(T data) |
|||
{ |
|||
AjaxResult<T> res = new AjaxResult<T> |
|||
{ |
|||
Success = true, |
|||
Msg = "请求成功!", |
|||
Data = data |
|||
}; |
|||
|
|||
return JsonContent(res.ToJson()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回错误
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public ContentResult Error() |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = false, |
|||
Msg = "请求失败!" |
|||
}; |
|||
|
|||
return JsonContent(res.ToJson()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回错误
|
|||
/// </summary>
|
|||
/// <param name="msg">错误提示</param>
|
|||
/// <returns></returns>
|
|||
public ContentResult Error(string msg) |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = false, |
|||
Msg = msg, |
|||
}; |
|||
|
|||
return JsonContent(res.ToJson()); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回错误
|
|||
/// </summary>
|
|||
/// <param name="msg">错误提示</param>
|
|||
/// <param name="errorCode">错误代码</param>
|
|||
/// <returns></returns>
|
|||
public ContentResult Error(string msg, int errorCode) |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = false, |
|||
Msg = msg, |
|||
ErrorCode = errorCode |
|||
}; |
|||
|
|||
return JsonContent(res.ToJson()); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,19 @@ |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using System.Linq; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public static class FilterExtentions |
|||
{ |
|||
/// <summary>
|
|||
/// 是否拥有某过滤器
|
|||
/// </summary>
|
|||
/// <typeparam name="T">过滤器类型</typeparam>
|
|||
/// <param name="actionExecutingContext">上下文</param>
|
|||
/// <returns></returns>
|
|||
public static bool ContainsFilter<T>(this FilterContext actionExecutingContext) |
|||
{ |
|||
return actionExecutingContext.Filters.Any(x => x.GetType() == typeof(T)); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,35 @@ |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using Microsoft.Extensions.Logging; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class GlobalExceptionFilter : BaseActionFilterAsync, IAsyncExceptionFilter |
|||
{ |
|||
readonly ILogger _logger; |
|||
public GlobalExceptionFilter(ILogger<GlobalExceptionFilter> logger) |
|||
{ |
|||
_logger = logger; |
|||
} |
|||
|
|||
public async Task OnExceptionAsync(ExceptionContext context) |
|||
{ |
|||
Exception ex = context.Exception; |
|||
|
|||
if (ex is BusException busEx) |
|||
{ |
|||
_logger.LogInformation(busEx.Message); |
|||
context.Result = Error(busEx.Message, busEx.ErrorCode); |
|||
} |
|||
else |
|||
{ |
|||
_logger.LogError(ex, ""); |
|||
context.Result = Error("系统繁忙"); |
|||
} |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class ValidFilterAttribute : BaseActionFilterAsync |
|||
{ |
|||
public override async Task OnActionExecuting(ActionExecutingContext context) |
|||
{ |
|||
if (!context.ModelState.IsValid) |
|||
{ |
|||
var msgList = context.ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage); |
|||
|
|||
context.Result = Error(string.Join(",", msgList)); |
|||
} |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,157 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using Microsoft.Extensions.Caching.Distributed; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.Extensions.Logging; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/* |
|||
==== 签名校验 ==== |
|||
|
|||
为保证接口安全,每次请求必带以下header |
|||
|
|||
| header名 | 类型 | 描述 | |
|||
| appId | string | 应用Id | |
|||
| time | string | 当前时间,格式为:2017-01-01 23:00:00 | |
|||
| guid | string | GUID字符串,作为请求唯一标志,防止重复请求 | |
|||
| sign| string | 签名,签名算法如下 | |
|||
|
|||
签名算法示例: |
|||
|
|||
令: |
|||
|
|||
appId=xxx |
|||
|
|||
appSecret=xxx |
|||
|
|||
time=2017-01-01 23:00:00 |
|||
|
|||
guid=d0595245-60db-495d-9c0e-fea931b8d69a |
|||
|
|||
请求的body={"aaa":"aaa"} |
|||
|
|||
1: 依次拼接appId+time+guid+body+appSecret得到xxx2017-01-01 23:00:00d0595245-60db-495d-9c0e-fea931b8d69a{"aaa":"aaa"}xxx |
|||
2: 将上面拼接字符串进行MD5(32位)即可得到签名 |
|||
sign=MD5(xxx2017-01-01 23:00:00d0595245-60db-495d-9c0e-fea931b8d69a{"aaa":"aaa"}xxx) |
|||
=4e30f1eca521485c208f642a7d927ff0 |
|||
3: 在header中携带上述的appId、time、guid、sign即可 |
|||
|
|||
详细使用Demo请看: |
|||
src\Coldairarrow.Web\src\utils\plugin\axios-plugin.js |
|||
*/ |
|||
/// <summary>
|
|||
/// 校验签名、十分严格
|
|||
/// 防抵赖、防伪造、防重复调用
|
|||
/// </summary>
|
|||
public class CheckSignAttribute : BaseActionFilterAsync |
|||
{ |
|||
/// <summary>
|
|||
/// Action执行之前执行
|
|||
/// </summary>
|
|||
/// <param name="filterContext"></param>
|
|||
public async override Task OnActionExecuting(ActionExecutingContext filterContext) |
|||
{ |
|||
//判断是否需要签名
|
|||
if (filterContext.ContainsFilter<IgnoreSignAttribute>()) |
|||
return; |
|||
var request = filterContext.HttpContext.Request; |
|||
IServiceProvider serviceProvider = filterContext.HttpContext.RequestServices; |
|||
IBase_AppSecretBusiness appSecretBus = serviceProvider.GetService<IBase_AppSecretBusiness>(); |
|||
ILogger logger = serviceProvider.GetService<ILogger<CheckSignAttribute>>(); |
|||
var cache = serviceProvider.GetService<IDistributedCache>(); |
|||
|
|||
string appId = request.Headers["appId"].ToString(); |
|||
if (appId.IsNullOrEmpty()) |
|||
{ |
|||
ReturnError("缺少header:appId"); |
|||
return; |
|||
} |
|||
string time = request.Headers["time"].ToString(); |
|||
if (time.IsNullOrEmpty()) |
|||
{ |
|||
ReturnError("缺少header:time"); |
|||
return; |
|||
} |
|||
if (time.ToDateTime() < DateTime.Now.AddMinutes(-5) || time.ToDateTime() > DateTime.Now.AddMinutes(5)) |
|||
{ |
|||
ReturnError("time过期"); |
|||
return; |
|||
} |
|||
|
|||
string guid = request.Headers["guid"].ToString(); |
|||
if (guid.IsNullOrEmpty()) |
|||
{ |
|||
ReturnError("缺少header:guid"); |
|||
return; |
|||
} |
|||
|
|||
string guidKey = $"ApiGuid_{guid}"; |
|||
if (cache.GetString(guidKey).IsNullOrEmpty()) |
|||
cache.SetString(guidKey, "1", new DistributedCacheEntryOptions |
|||
{ |
|||
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10) |
|||
}); |
|||
else |
|||
{ |
|||
ReturnError("禁止重复调用!"); |
|||
return; |
|||
} |
|||
|
|||
request.EnableBuffering(); |
|||
string body = await request.Body.ReadToStringAsync(); |
|||
|
|||
string sign = request.Headers["sign"].ToString(); |
|||
if (sign.IsNullOrEmpty()) |
|||
{ |
|||
ReturnError("缺少header:sign"); |
|||
return; |
|||
} |
|||
|
|||
string appSecret = await appSecretBus.GetAppSecretAsync(appId); |
|||
if (appSecret.IsNullOrEmpty()) |
|||
{ |
|||
ReturnError("header:appId无效"); |
|||
return; |
|||
} |
|||
|
|||
string newSign = BuildApiSign(appId, appSecret, guid, time.ToDateTime(), body); |
|||
if (sign != newSign) |
|||
{ |
|||
string log = |
|||
$@"sign签名错误!
|
|||
headers:{request.Headers.ToJson()} |
|||
body:{body} |
|||
正确sign:{newSign} |
|||
";
|
|||
logger.LogWarning(log); |
|||
ReturnError("header:sign签名错误"); |
|||
return; |
|||
} |
|||
|
|||
void ReturnError(string msg) |
|||
{ |
|||
filterContext.Result = Error(msg); |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 生成接口签名sign
|
|||
/// 注:md5(appId+time+guid+body+appSecret)
|
|||
/// </summary>
|
|||
/// <param name="appId">应用Id</param>
|
|||
/// <param name="appSecret">应用密钥</param>
|
|||
/// <param name="guid">唯一GUID</param>
|
|||
/// <param name="time">时间</param>
|
|||
/// <param name="body">请求体</param>
|
|||
/// <returns></returns>
|
|||
private string BuildApiSign(string appId, string appSecret, string guid, DateTime time, string body) |
|||
{ |
|||
return $"{appId}{time.ToString("yyyy-MM-dd HH:mm:ss")}{guid}{body}{appSecret}".ToMD5String(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,10 @@ |
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 忽略接口签名校验
|
|||
/// </summary>
|
|||
public class IgnoreSignAttribute : BaseActionFilterAsync |
|||
{ |
|||
|
|||
} |
|||
} |
@ -0,0 +1,44 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 接口权限校验
|
|||
/// </summary>
|
|||
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] |
|||
public class ApiPermissionAttribute : BaseActionFilterAsync |
|||
{ |
|||
public ApiPermissionAttribute(string permissionValue) |
|||
{ |
|||
if (permissionValue.IsNullOrEmpty()) |
|||
throw new Exception("permissionValue不能为空"); |
|||
|
|||
_permissionValue = permissionValue; |
|||
} |
|||
|
|||
public string _permissionValue { get; } |
|||
|
|||
/// <summary>
|
|||
/// Action执行之前执行
|
|||
/// </summary>
|
|||
/// <param name="context">过滤器上下文</param>
|
|||
public async override Task OnActionExecuting(ActionExecutingContext context) |
|||
{ |
|||
if (context.ContainsFilter<NoApiPermissionAttribute>()) |
|||
return; |
|||
IServiceProvider serviceProvider = context.HttpContext.RequestServices; |
|||
IPermissionBusiness _permissionBus = serviceProvider.GetService<IPermissionBusiness>(); |
|||
IOperator _operator = serviceProvider.GetService<IOperator>(); |
|||
|
|||
var permissions = await _permissionBus.GetUserPermissionValuesAsync(_operator.UserId); |
|||
if (!permissions.Contains(_permissionValue)) |
|||
context.Result = Error("权限不足!"); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,10 @@ |
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 忽略接口权限校验
|
|||
/// </summary>
|
|||
public class NoApiPermissionAttribute : BaseActionFilterAsync |
|||
{ |
|||
|
|||
} |
|||
} |
@ -0,0 +1,31 @@ |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 若Action返回对象为自定义对象,则将其转为JSON
|
|||
/// </summary>
|
|||
public class FormatResponseAttribute : BaseActionFilterAsync |
|||
{ |
|||
public override async Task OnActionExecuted(ActionExecutedContext context) |
|||
{ |
|||
if (context.ContainsFilter<NoFormatResponseAttribute>()) |
|||
return; |
|||
|
|||
if (context.Result is EmptyResult) |
|||
context.Result = Success(); |
|||
else if (context.Result is ObjectResult res) |
|||
{ |
|||
if (res.Value is AjaxResult) |
|||
context.Result = JsonContent(res.Value.ToJson()); |
|||
else |
|||
context.Result = Success(res.Value); |
|||
} |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,29 @@ |
|||
using Microsoft.AspNetCore.Mvc.Filters; |
|||
using System; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 返回结果不进行格式化
|
|||
/// </summary>
|
|||
public class NoFormatResponseAttribute : Attribute, IActionFilter |
|||
{ |
|||
/// <summary>
|
|||
/// Action执行之前执行
|
|||
/// </summary>
|
|||
/// <param name="context">过滤器上下文</param>
|
|||
public void OnActionExecuting(ActionExecutingContext context) |
|||
{ |
|||
|
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Action执行完毕之后执行
|
|||
/// </summary>
|
|||
/// <param name="context"></param>
|
|||
public void OnActionExecuted(ActionExecutedContext context) |
|||
{ |
|||
|
|||
} |
|||
} |
|||
} |
@ -0,0 +1,9 @@ |
|||
using Coldairarrow.Util; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class RequestBody : IScopedDependency |
|||
{ |
|||
public string Body { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,30 @@ |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class RequestBodyMiddleware |
|||
{ |
|||
private readonly RequestDelegate _next; |
|||
|
|||
public RequestBodyMiddleware(RequestDelegate next) |
|||
{ |
|||
_next = next; |
|||
} |
|||
|
|||
public async Task Invoke(HttpContext context) |
|||
{ |
|||
if ((context.Request.ContentType ?? string.Empty).Contains("application/json")) |
|||
{ |
|||
context.Request.EnableBuffering(); |
|||
string body = await context.Request.Body?.ReadToStringAsync(Encoding.UTF8); |
|||
context.RequestServices.GetService<RequestBody>().Body = body; |
|||
} |
|||
|
|||
await _next(context); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,83 @@ |
|||
using Coldairarrow.Util; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.Extensions.Logging; |
|||
using System.Diagnostics; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class RequestLogMiddleware |
|||
{ |
|||
private readonly RequestDelegate _next; |
|||
private readonly ILogger _logger; |
|||
|
|||
public RequestLogMiddleware(RequestDelegate next, ILogger<RequestLogMiddleware> logger) |
|||
{ |
|||
_next = next; |
|||
_logger = logger; |
|||
} |
|||
|
|||
public async Task Invoke(HttpContext context) |
|||
{ |
|||
Stopwatch watch = Stopwatch.StartNew(); |
|||
string resContent = string.Empty; |
|||
|
|||
//返回Body需特殊处理
|
|||
Stream originalResponseBody = context.Response.Body; |
|||
using var memStream = new MemoryStream(); |
|||
context.Response.Body = memStream; |
|||
|
|||
try |
|||
{ |
|||
await _next(context); |
|||
|
|||
memStream.Position = 0; |
|||
resContent = new StreamReader(memStream).ReadToEnd(); |
|||
|
|||
memStream.Position = 0; |
|||
await memStream.CopyToAsync(originalResponseBody); |
|||
} |
|||
catch |
|||
{ |
|||
throw; |
|||
} |
|||
finally |
|||
{ |
|||
context.Response.Body = originalResponseBody; |
|||
|
|||
watch.Stop(); |
|||
|
|||
if (resContent?.Length > 1000) |
|||
{ |
|||
resContent = new string(resContent.Copy(0, 1000).ToArray()); |
|||
resContent += "......内容太长已忽略"; |
|||
} |
|||
|
|||
string log = |
|||
@"方向:请求本系统
|
|||
Url:{Url} |
|||
Time:{Time}ms |
|||
Method:{Method} |
|||
ContentType:{ContentType} |
|||
Body:{Body} |
|||
StatusCode:{StatusCode} |
|||
|
|||
Response:{Response} |
|||
";
|
|||
_logger.LogInformation( |
|||
log, |
|||
context.Request.Path, |
|||
(int)watch.ElapsedMilliseconds, |
|||
context.Request.Method, |
|||
context.Request.ContentType, |
|||
context.RequestServices.GetService<RequestBody>().Body, |
|||
context.Response.StatusCode, |
|||
resContent |
|||
); |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,8 @@ |
|||
namespace Coldairarrow.Api |
|||
{ |
|||
internal class CacheOptions |
|||
{ |
|||
public CacheType CacheType { get; set; } |
|||
public string RedisEndpoint { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,18 @@ |
|||
namespace Coldairarrow.Api |
|||
{ |
|||
/// <summary>
|
|||
/// 缓存类型
|
|||
/// </summary>
|
|||
public enum CacheType |
|||
{ |
|||
/// <summary>
|
|||
/// 使用内存缓存(不支持分布式)
|
|||
/// </summary>
|
|||
Memory, |
|||
|
|||
/// <summary>
|
|||
/// 使用Redis缓存(支持分布式)
|
|||
/// </summary>
|
|||
Redis |
|||
} |
|||
} |
@ -0,0 +1,10 @@ |
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class JwtOptions |
|||
{ |
|||
public string Secret { get; set; } |
|||
public int AccessExpireHours { get; set; } |
|||
public int RefreshExpireHours { get; set; } |
|||
} |
|||
} |
|||
|
@ -0,0 +1,39 @@ |
|||
using Coldairarrow.Util; |
|||
using Colder.Logging.Serilog; |
|||
using EFCore.Sharding; |
|||
using Microsoft.AspNetCore.Hosting; |
|||
using Microsoft.Extensions.Configuration; |
|||
using Microsoft.Extensions.Hosting; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class Program |
|||
{ |
|||
public static void Main(string[] args) |
|||
{ |
|||
Host.CreateDefaultBuilder(args) |
|||
.ConfigureLoggingDefaults() |
|||
.UseIdHelper() |
|||
.UseCache() |
|||
.ConfigureServices((hostContext, services) => |
|||
{ |
|||
services.AddFxServices(); |
|||
services.AddAutoMapper(); |
|||
services.AddEFCoreSharding(config => |
|||
{ |
|||
config.SetEntityAssemblies(GlobalAssemblies.AllAssemblies); |
|||
|
|||
var dbOptions = hostContext.Configuration.GetSection("Database:BaseDb").Get<DatabaseOptions>(); |
|||
|
|||
config.UseDatabase(dbOptions.ConnectionString, dbOptions.DatabaseType); |
|||
}); |
|||
}) |
|||
.ConfigureWebHostDefaults(webBuilder => |
|||
{ |
|||
webBuilder.UseStartup<Startup>(); |
|||
}) |
|||
.Build() |
|||
.Run(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- |
|||
此文件由 Web 项目的发布/打包过程使用。可以通过编辑此 MSBuild 文件 |
|||
自定义此过程的行为。为了解与此相关的更多内容,请访问 https://go.microsoft.com/fwlink/?LinkID=208121。 |
|||
--> |
|||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|||
<PropertyGroup> |
|||
<WebPublishMethod>FileSystem</WebPublishMethod> |
|||
<PublishProvider>FileSystem</PublishProvider> |
|||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> |
|||
<LastUsedPlatform>Any CPU</LastUsedPlatform> |
|||
<SiteUrlToLaunchAfterPublish /> |
|||
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> |
|||
<ExcludeApp_Data>False</ExcludeApp_Data> |
|||
<ProjectGuid>bea1bf0d-b063-4931-89c7-22f92973143a</ProjectGuid> |
|||
<publishUrl>bin\Release\netcoreapp3.1\publish\</publishUrl> |
|||
<DeleteExistingFiles>False</DeleteExistingFiles> |
|||
</PropertyGroup> |
|||
</Project> |
@ -0,0 +1,13 @@ |
|||
{ |
|||
"profiles": { |
|||
"Coldairarrow.Api": { |
|||
"commandName": "Project", |
|||
"launchBrowser": true, |
|||
"launchUrl": "swagger", |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
}, |
|||
"applicationUrl": "http://localhost:5000" |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,93 @@ |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using Microsoft.AspNetCore.Builder; |
|||
using Microsoft.AspNetCore.Hosting; |
|||
using Microsoft.AspNetCore.HttpOverrides; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Microsoft.Extensions.Configuration; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using NSwag; |
|||
using System.Linq; |
|||
|
|||
namespace Coldairarrow.Api |
|||
{ |
|||
public class Startup |
|||
{ |
|||
public Startup(IConfiguration configuration) |
|||
{ |
|||
_configuration = configuration; |
|||
} |
|||
|
|||
private readonly IConfiguration _configuration; |
|||
|
|||
public void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true); |
|||
services.AddControllers(options => |
|||
{ |
|||
options.Filters.Add<ValidFilterAttribute>(); |
|||
options.Filters.Add<GlobalExceptionFilter>(); |
|||
}) |
|||
.AddNewtonsoftJson(options => |
|||
{ |
|||
options.SerializerSettings.GetType().GetProperties().ForEach(aProperty => |
|||
{ |
|||
var value = aProperty.GetValue(JsonExtention.DefaultJsonSetting); |
|||
aProperty.SetValue(options.SerializerSettings, value); |
|||
}); |
|||
}); |
|||
services.AddHttpContextAccessor(); |
|||
|
|||
//swagger
|
|||
services.AddOpenApiDocument(settings => |
|||
{ |
|||
settings.AllowReferencesWithProperties = true; |
|||
settings.AddSecurity("身份认证Token", Enumerable.Empty<string>(), new OpenApiSecurityScheme() |
|||
{ |
|||
Scheme = "bearer", |
|||
Description = "Authorization:Bearer {your JWT token}<br/><b>授权地址:/Base_Manage/Home/SubmitLogin</b>", |
|||
Name = "Authorization", |
|||
In = OpenApiSecurityApiKeyLocation.Header, |
|||
Type = OpenApiSecuritySchemeType.Http |
|||
}); |
|||
}); |
|||
|
|||
//jwt
|
|||
services.AddJwt(_configuration); |
|||
} |
|||
|
|||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) |
|||
{ |
|||
//跨域
|
|||
app.UseCors(x => |
|||
{ |
|||
x.AllowAnyOrigin() |
|||
.AllowAnyHeader() |
|||
.AllowAnyMethod() |
|||
.DisallowCredentials(); |
|||
}) |
|||
.UseForwardedHeaders(new ForwardedHeadersOptions |
|||
{ |
|||
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto |
|||
}) |
|||
.UseMiddleware<RequestBodyMiddleware>() |
|||
.UseMiddleware<RequestLogMiddleware>() |
|||
.UseDeveloperExceptionPage() |
|||
.UseStaticFiles(new StaticFileOptions |
|||
{ |
|||
ServeUnknownFileTypes = true, |
|||
DefaultContentType = "application/octet-stream" |
|||
}) |
|||
.UseRouting() |
|||
.UseAuthentication() |
|||
.UseAuthorization() |
|||
.UseEndpoints(endpoints => |
|||
{ |
|||
endpoints.MapControllers().RequireAuthorization(); |
|||
}) |
|||
.UseOpenApi()//添加swagger生成api文档(默认路由文档 /swagger/v1/swagger.json)
|
|||
.UseSwaggerUi3()//添加Swagger UI到请求管道中(默认路由: /swagger).
|
|||
; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
{ |
|||
|
|||
} |
@ -0,0 +1,59 @@ |
|||
{ |
|||
"urls": "http://*:5000", |
|||
"AllowedHosts": "*", |
|||
"log": { //日志配置 |
|||
"minlevel": "Trace", //定义详见Microsoft.Extensions.Logging.LogLevel |
|||
"console": { |
|||
"enabled": true |
|||
}, |
|||
"debug": { |
|||
"enabled": true |
|||
}, |
|||
"file": { |
|||
"enabled": true |
|||
}, |
|||
"elasticsearch": { |
|||
"enabled": false, |
|||
"nodes": [ "http://elastic:123456@localhost:9200/" ], |
|||
"indexformat": "colder.{0:yyyyMMdd}" |
|||
}, |
|||
"overrides": [ //重写日志输出级别 |
|||
{ |
|||
"source": "Microsoft.AspNetCore", |
|||
"minlevel": "Warning" |
|||
}, |
|||
{ |
|||
"source": "Microsoft.EntityFrameworkCore", |
|||
"minlevel": "Warning" |
|||
}, |
|||
{ |
|||
"source": "Microsoft.EntityFrameworkCore.Infrastructure", |
|||
"minlevel": "Warning" |
|||
} |
|||
] |
|||
}, |
|||
"Cache": { |
|||
"CacheType": "Memory", //定义详见Coldairarrow.Util.CacheType |
|||
"RedisEndpoint": "127.0.0.1:6379" //Redis节点地址,定义详见 https://github.com/2881099/csredis |
|||
}, |
|||
"Database": { |
|||
"BaseDb": { |
|||
//"DatabaseType": "SqlServer", //定义详见EFCore.Sharding.DatabaseType |
|||
//"ConnectionString": "Data Source=.;Initial Catalog=Colder.Admin.AntdVue;Integrated Security=True;Pooling=true;" |
|||
//"DatabaseType": "PostgreSql", |
|||
//"ConnectionString": "Server=127.0.0.1;Port=5432;Database=Colder.Admin.AntdVue;User Id=postgres;Password=postgres;" |
|||
"DatabaseType": "MySql", |
|||
"ConnectionString": "server=116.62.61.68;user id=jdhy;password=kaicn1132+-;persistsecurityinfo=True;database=jdhy;SslMode=none;AllowLoadLocalInfile=true" |
|||
//"DatabaseType": "Oracle", |
|||
//"ConnectionString": "Data Source=127.0.0.1/ORCL;User ID=COLDER.ADMIN.ANTDVUE;Password=123456;Connect Timeout=3" |
|||
} |
|||
}, |
|||
//雪花Id,,以进程为单位,不同进程数据中心Id和机器Id不能同时重复 |
|||
"WorkerId": 1, //机器Id |
|||
"WebRootUrl": "http://localhost:5000", //接口根地址, |
|||
"jwt": { |
|||
"secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0", |
|||
"accessExpireHours": 24, |
|||
"refreshExpireHours": 24 |
|||
} |
|||
} |
Binary file not shown.
@ -0,0 +1,17 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net5.0</TargetFramework> |
|||
<RootNamespace>Coldairarrow.Business</RootNamespace> |
|||
<AssemblyName>Coldairarrow.Business</AssemblyName> |
|||
</PropertyGroup> |
|||
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> |
|||
<NoWarn>1701;1702;CS1591</NoWarn> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Coldairarrow.IBusiness\03.Coldairarrow.IBusiness.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
@ -0,0 +1,24 @@ |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business |
|||
{ |
|||
public class DataAddLogAttribute : WriteDataLogAttribute |
|||
{ |
|||
public DataAddLogAttribute(UserLogType logType, string nameField, string dataName) |
|||
: base(logType, nameField, dataName) |
|||
{ |
|||
} |
|||
|
|||
public override async Task After(IAOPContext context) |
|||
{ |
|||
var op = context.ServiceProvider.GetService<IOperator>(); |
|||
var obj = context.Arguments[0]; |
|||
op.WriteUserLog(_logType, $"添加{_dataName}:{obj.GetPropertyValue(_nameField)?.ToString()}"); |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,38 @@ |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Linq.Dynamic.Core; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business |
|||
{ |
|||
public class DataDeleteLogAttribute : WriteDataLogAttribute |
|||
{ |
|||
public DataDeleteLogAttribute(UserLogType logType, string nameField, string dataName) |
|||
: base(logType, nameField, dataName) |
|||
{ |
|||
} |
|||
|
|||
private string _names; |
|||
public override async Task Befor(IAOPContext context) |
|||
{ |
|||
List<string> ids = context.Arguments[0] as List<string>; |
|||
var q = context.InvocationTarget.GetType().GetMethod("GetIQueryable").Invoke(context.InvocationTarget, new object[] { }) as IQueryable; |
|||
var deleteList = q.Where("@0.Contains(Id)", ids).CastToList<object>(); |
|||
|
|||
_names = string.Join(",", deleteList.Select(x => x.GetPropertyValue(_nameField)?.ToString())); |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
public override async Task After(IAOPContext context) |
|||
{ |
|||
var op = context.ServiceProvider.GetService<IOperator>(); |
|||
|
|||
op.WriteUserLog(_logType, $"删除{_dataName}:{_names}"); |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business |
|||
{ |
|||
public class DataEditLogAttribute : WriteDataLogAttribute |
|||
{ |
|||
public DataEditLogAttribute(UserLogType logType, string nameField, string dataName) |
|||
: base(logType, nameField, dataName) |
|||
{ |
|||
} |
|||
|
|||
public override async Task After(IAOPContext context) |
|||
{ |
|||
var op = context.ServiceProvider.GetService<IOperator>(); |
|||
var obj = context.Arguments[0]; |
|||
op.WriteUserLog(_logType, $"修改{_dataName}:{obj.GetPropertyValue(_nameField)?.ToString()}"); |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,68 @@ |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Linq.Dynamic.Core; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business |
|||
{ |
|||
public class DataRepeatValidateAttribute : BaseAOPAttribute |
|||
{ |
|||
public DataRepeatValidateAttribute(string[] validateFields, string[] validateFieldNames, bool allData = false, bool matchOr = true) |
|||
{ |
|||
if (validateFields.Length != validateFieldNames.Length) |
|||
throw new Exception("校验列与列描述信息不对应!"); |
|||
|
|||
_allData = allData; |
|||
_matchOr = matchOr; |
|||
for (int i = 0; i < validateFields.Length; i++) |
|||
{ |
|||
_validateFields.Add(validateFields[i], validateFieldNames[i]); |
|||
} |
|||
} |
|||
private bool _allData { get; } |
|||
private bool _matchOr { get; } |
|||
private Dictionary<string, string> _validateFields { get; } = new Dictionary<string, string>(); |
|||
|
|||
public override async Task Befor(IAOPContext context) |
|||
{ |
|||
Type entityType = context.Arguments[0].GetType(); |
|||
var data = context.Arguments[0]; |
|||
List<string> whereList = new List<string>(); |
|||
var properties = _validateFields |
|||
.Where(x => !data.GetPropertyValue(x.Key).IsNullOrEmpty()) |
|||
.ToList(); |
|||
properties.ForEach((aProperty, index) => |
|||
{ |
|||
whereList.Add($" {aProperty.Key} = @{index} "); |
|||
}); |
|||
IQueryable q = null; |
|||
if (_allData) |
|||
{ |
|||
var repository = context.Proxy.GetPropertyValue("Service") as IDbAccessor; |
|||
var method = repository.GetMethod("GetIQueryable"); |
|||
q = method.MakeGenericMethod(entityType).Invoke(repository, new object[] { }) as IQueryable; |
|||
} |
|||
else |
|||
q = context.InvocationTarget.GetType().GetMethod("GetIQueryable").Invoke(context.InvocationTarget, new object[] { }) as IQueryable; |
|||
q = q.Where("Id != @0", data.GetPropertyValue("Id")); |
|||
q = q.Where( |
|||
string.Join(_matchOr ? " || " : " && ", whereList), |
|||
properties.Select(x => data.GetPropertyValue(x.Key)).ToArray()); |
|||
var list = q.CastToList<object>(); |
|||
if (list.Count > 0) |
|||
{ |
|||
var repeatList = properties |
|||
.Where(x => list.Any(y => !y.GetPropertyValue(x.Key).IsNullOrEmpty())) |
|||
.Select(x => x.Value) |
|||
.ToList(); |
|||
|
|||
throw new BusException($"{string.Join(_matchOr ? "或" : "与", repeatList)}已存在!"); |
|||
} |
|||
|
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,19 @@ |
|||
using Coldairarrow.Util; |
|||
using System; |
|||
|
|||
namespace Coldairarrow.Business |
|||
{ |
|||
public abstract class WriteDataLogAttribute : BaseAOPAttribute |
|||
{ |
|||
public WriteDataLogAttribute(UserLogType logType, string nameField, string dataName) |
|||
{ |
|||
_logType = logType; |
|||
_dataName = dataName; |
|||
_nameField = nameField; |
|||
} |
|||
protected UserLogType _logType { get; } |
|||
protected string _dataName { get; } |
|||
protected string _nameField { get; } |
|||
protected Type _entityType { get; } |
|||
} |
|||
} |
@ -0,0 +1,536 @@ |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Data; |
|||
using System.Linq; |
|||
using System.Linq.Dynamic.Core; |
|||
using System.Linq.Expressions; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business |
|||
{ |
|||
/// <summary>
|
|||
/// 描述:业务处理基类
|
|||
/// </summary>
|
|||
/// <typeparam name="T">泛型约束(数据库实体)</typeparam>
|
|||
public abstract class BaseBusiness<T> where T : class, new() |
|||
{ |
|||
#region 构造函数
|
|||
|
|||
/// <summary>
|
|||
/// 构造函数
|
|||
/// </summary>
|
|||
/// <param name="db">注入数据库</param>
|
|||
public BaseBusiness(IDbAccessor db) |
|||
{ |
|||
Db = db; |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
protected virtual string _valueField { get; } = "Id"; |
|||
protected virtual string _textField { get => throw new Exception("请在子类重写"); } |
|||
|
|||
#endregion
|
|||
|
|||
#region 外部属性
|
|||
|
|||
/// <summary>
|
|||
/// 业务仓储接口(支持软删除),支持联表操作
|
|||
/// 注:若需要访问逻辑删除的数据,请使用IDbAccessor.FullRepository
|
|||
/// 注:仅支持单线程操作
|
|||
/// </summary>
|
|||
public IDbAccessor Db { get; } |
|||
|
|||
#endregion
|
|||
|
|||
#region 事物提交
|
|||
|
|||
public (bool Success, Exception ex) RunTransaction(Action action, IsolationLevel isolationLevel = IsolationLevel.ReadCommitted) |
|||
{ |
|||
return Db.RunTransaction(action, isolationLevel); |
|||
} |
|||
public async Task<(bool Success, Exception ex)> RunTransactionAsync(Func<Task> action, IsolationLevel isolationLevel = IsolationLevel.ReadCommitted) |
|||
{ |
|||
return await Db.RunTransactionAsync(action, isolationLevel); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 增加数据
|
|||
|
|||
/// <summary>
|
|||
/// 添加数据
|
|||
/// </summary>
|
|||
/// <param name="entity">实体对象</param>
|
|||
public int Insert(T entity) |
|||
{ |
|||
return Db.Insert(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 添加数据
|
|||
/// </summary>
|
|||
/// <param name="entity">实体对象</param>
|
|||
public async Task<int> InsertAsync(T entity) |
|||
{ |
|||
return await Db.InsertAsync(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 添加多条数据
|
|||
/// </summary>
|
|||
/// <param name="entities">实体对象集合</param>
|
|||
public int Insert(List<T> entities) |
|||
{ |
|||
return Db.Insert(entities); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 添加多条数据
|
|||
/// </summary>
|
|||
/// <param name="entities">实体对象集合</param>
|
|||
public async Task<int> InsertAsync(List<T> entities) |
|||
{ |
|||
return await Db.InsertAsync(entities); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 批量添加数据,速度快
|
|||
/// </summary>
|
|||
/// <param name="entities"></param>
|
|||
public void BulkInsert(List<T> entities) |
|||
{ |
|||
Db.BulkInsert(entities); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 删除数据
|
|||
|
|||
/// <summary>
|
|||
/// 删除所有数据
|
|||
/// </summary>
|
|||
public int DeleteAll() |
|||
{ |
|||
return Db.DeleteAll<T>(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除所有数据
|
|||
/// </summary>
|
|||
public async Task<int> DeleteAllAsync() |
|||
{ |
|||
return await Db.DeleteAllAsync<T>(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除指定主键数据
|
|||
/// </summary>
|
|||
/// <param name="key"></param>
|
|||
public int Delete(string key) |
|||
{ |
|||
return Db.Delete<T>(key); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除指定主键数据
|
|||
/// </summary>
|
|||
/// <param name="key"></param>
|
|||
public async Task<int> DeleteAsync(string key) |
|||
{ |
|||
return await Db.DeleteAsync<T>(key); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 通过主键删除多条数据
|
|||
/// </summary>
|
|||
/// <param name="keys"></param>
|
|||
public int Delete(List<string> keys) |
|||
{ |
|||
return Db.Delete<T>(keys); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 通过主键删除多条数据
|
|||
/// </summary>
|
|||
/// <param name="keys"></param>
|
|||
public async Task<int> DeleteAsync(List<string> keys) |
|||
{ |
|||
return await Db.DeleteAsync<T>(keys); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除单条数据
|
|||
/// </summary>
|
|||
/// <param name="entity">实体对象</param>
|
|||
public int Delete(T entity) |
|||
{ |
|||
return Db.Delete<T>(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除单条数据
|
|||
/// </summary>
|
|||
/// <param name="entity">实体对象</param>
|
|||
public async Task<int> DeleteAsync(T entity) |
|||
{ |
|||
return await Db.DeleteAsync(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除多条数据
|
|||
/// </summary>
|
|||
/// <param name="entities">实体对象集合</param>
|
|||
public int Delete(List<T> entities) |
|||
{ |
|||
return Db.Delete<T>(entities); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除多条数据
|
|||
/// </summary>
|
|||
/// <param name="entities">实体对象集合</param>
|
|||
public async Task<int> DeleteAsync(List<T> entities) |
|||
{ |
|||
return await Db.DeleteAsync<T>(entities); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除指定条件数据
|
|||
/// </summary>
|
|||
/// <param name="condition">筛选条件</param>
|
|||
public int Delete(Expression<Func<T, bool>> condition) |
|||
{ |
|||
return Db.Delete(condition); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 删除指定条件数据
|
|||
/// </summary>
|
|||
/// <param name="condition">筛选条件</param>
|
|||
public async Task<int> DeleteAsync(Expression<Func<T, bool>> condition) |
|||
{ |
|||
return await Db.DeleteAsync(condition); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 使用SQL语句按照条件删除数据
|
|||
/// 用法:Delete_Sql"Base_User"(x=>x.Id == "Admin")
|
|||
/// 注:生成的SQL类似于DELETE FROM [Base_User] WHERE [Name] = 'xxx' WHERE [Id] = 'Admin'
|
|||
/// </summary>
|
|||
/// <param name="where">条件</param>
|
|||
/// <returns>
|
|||
/// 影响条数
|
|||
/// </returns>
|
|||
public int DeleteSql(Expression<Func<T, bool>> where) |
|||
{ |
|||
return Db.DeleteSql(where); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 使用SQL语句按照条件删除数据
|
|||
/// 用法:Delete_Sql"Base_User"(x=>x.Id == "Admin")
|
|||
/// 注:生成的SQL类似于DELETE FROM [Base_User] WHERE [Name] = 'xxx' WHERE [Id] = 'Admin'
|
|||
/// </summary>
|
|||
/// <param name="where">条件</param>
|
|||
/// <returns>
|
|||
/// 影响条数
|
|||
/// </returns>
|
|||
public async Task<int> DeleteSqlAsync(Expression<Func<T, bool>> where) |
|||
{ |
|||
return await Db.DeleteSqlAsync(where); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 更新数据
|
|||
|
|||
/// <summary>
|
|||
/// 更新一条数据
|
|||
/// </summary>
|
|||
/// <param name="entity">实体对象</param>
|
|||
public int Update(T entity) |
|||
{ |
|||
return Db.Update(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 更新一条数据
|
|||
/// </summary>
|
|||
/// <param name="entity">实体对象</param>
|
|||
public async Task<int> UpdateAsync(T entity) |
|||
{ |
|||
return await Db.UpdateAsync(entity); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 更新多条数据
|
|||
/// </summary>
|
|||
/// <param name="entities">数据列表</param>
|
|||
public int Update(List<T> entities) |
|||
{ |
|||
return Db.Update(entities); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 更新多条数据
|
|||
/// </summary>
|
|||
/// <param name="entities">数据列表</param>
|
|||
public async Task<int> UpdateAsync(List<T> entities) |
|||
{ |
|||
return await Db.UpdateAsync(entities); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 指定条件更新
|
|||
/// </summary>
|
|||
/// <param name="whereExpre">筛选表达式</param>
|
|||
/// <param name="set">更改属性回调</param>
|
|||
public int Update(Expression<Func<T, bool>> whereExpre, Action<T> set) |
|||
{ |
|||
return Db.Update(whereExpre, set); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 指定条件更新
|
|||
/// </summary>
|
|||
/// <param name="whereExpre">筛选表达式</param>
|
|||
/// <param name="set">更改属性回调</param>
|
|||
public async Task<int> UpdateAsync(Expression<Func<T, bool>> whereExpre, Action<T> set) |
|||
{ |
|||
return await Db.UpdateAsync(whereExpre, set); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 使用SQL语句按照条件更新
|
|||
/// 用法:UpdateWhere_Sql"Base_User"(x=>x.Id == "Admin",("Name","小明"))
|
|||
/// 注:生成的SQL类似于UPDATE [TABLE] SET [Name] = 'xxx' WHERE [Id] = 'Admin'
|
|||
/// </summary>
|
|||
/// <param name="where">筛选条件</param>
|
|||
/// <param name="values">字段值设置</param>
|
|||
/// <returns>影响条数</returns>
|
|||
public int UpdateSql(Expression<Func<T, bool>> where, params (string field, UpdateType updateType, object value)[] values) |
|||
{ |
|||
return Db.UpdateSql(where, values); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 使用SQL语句按照条件更新
|
|||
/// 用法:UpdateWhere_Sql"Base_User"(x=>x.Id == "Admin",("Name","小明"))
|
|||
/// 注:生成的SQL类似于UPDATE [TABLE] SET [Name] = 'xxx' WHERE [Id] = 'Admin'
|
|||
/// </summary>
|
|||
/// <param name="where">筛选条件</param>
|
|||
/// <param name="values">字段值设置</param>
|
|||
/// <returns>影响条数</returns>
|
|||
public async Task<int> UpdateSqlAsync(Expression<Func<T, bool>> where, params (string field, UpdateType updateType, object value)[] values) |
|||
{ |
|||
return await Db.UpdateSqlAsync(where, values); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 查询数据
|
|||
|
|||
/// <summary>
|
|||
/// 获取实体
|
|||
/// </summary>
|
|||
/// <param name="keyValue">主键</param>
|
|||
/// <returns></returns>
|
|||
public T GetEntity(params object[] keyValue) |
|||
{ |
|||
return Db.GetEntity<T>(keyValue); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取实体
|
|||
/// </summary>
|
|||
/// <param name="keyValue">主键</param>
|
|||
/// <returns></returns>
|
|||
public async Task<T> GetEntityAsync(params object[] keyValue) |
|||
{ |
|||
return await Db.GetEntityAsync<T>(keyValue); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取表的所有数据,当数据量很大时不要使用!
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public List<T> GetList() |
|||
{ |
|||
return Db.GetIQueryable<T>().ToList(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取表的所有数据,当数据量很大时不要使用!
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public async Task<List<T>> GetListAsync() |
|||
{ |
|||
return await Db.GetIQueryable<T>().ToListAsync(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取实体对应的表,延迟加载,主要用于支持Linq查询操作
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public virtual IQueryable<T> GetIQueryable() |
|||
{ |
|||
return Db.GetIQueryable<T>(); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 执行Sql语句
|
|||
|
|||
#endregion
|
|||
|
|||
#region 业务返回
|
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public AjaxResult Success() |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = true, |
|||
Msg = "请求成功!", |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <param name="data">返回数据</param>
|
|||
/// <returns></returns>
|
|||
public AjaxResult<U> Success<U>(U data) |
|||
{ |
|||
AjaxResult<U> res = new AjaxResult<U> |
|||
{ |
|||
Success = true, |
|||
Msg = "操作成功", |
|||
Data = data |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回成功
|
|||
/// </summary>
|
|||
/// <param name="data">返回数据</param>
|
|||
/// <param name="msg">返回消息</param>
|
|||
/// <returns></returns>
|
|||
public AjaxResult<U> Success<U>(U data, string msg) |
|||
{ |
|||
AjaxResult<U> res = new AjaxResult<U> |
|||
{ |
|||
Success = true, |
|||
Msg = msg, |
|||
Data = data |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回错误
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public AjaxResult Error() |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = false, |
|||
Msg = "请求失败!", |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 返回错误
|
|||
/// </summary>
|
|||
/// <param name="msg">错误提示</param>
|
|||
/// <returns></returns>
|
|||
public AjaxResult Error(string msg) |
|||
{ |
|||
AjaxResult res = new AjaxResult |
|||
{ |
|||
Success = false, |
|||
Msg = msg, |
|||
}; |
|||
|
|||
return res; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 构建前端Select远程搜索数据
|
|||
/// </summary>
|
|||
/// <param name="input">查询参数</param>
|
|||
/// <returns></returns>
|
|||
public async Task<List<SelectOption>> GetOptionListAsync(OptionListInputDTO input) |
|||
{ |
|||
return await GetOptionListAsync(input, _textField, _valueField, null); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 构建前端Select远程搜索数据
|
|||
/// </summary>
|
|||
/// <param name="input">查询参数</param>
|
|||
/// <param name="textFiled">文本字段</param>
|
|||
/// <param name="valueField">值字段</param>
|
|||
/// <param name="source">指定数据源</param>
|
|||
/// <returns></returns>
|
|||
public async Task<List<SelectOption>> GetOptionListAsync(OptionListInputDTO input, string textFiled, string valueField, IQueryable<T> source = null) |
|||
{ |
|||
PageInput pageInput = new PageInput |
|||
{ |
|||
PageRows = 10 |
|||
}; |
|||
|
|||
List<T> selectedList = new List<T>(); |
|||
string where = " 1=1 "; |
|||
List<string> ids = input.selectedValues; |
|||
if (ids.Count > 0) |
|||
{ |
|||
selectedList = await GetNewQ().Where($"@0.Contains({valueField})", ids).ToListAsync(); |
|||
|
|||
where += $" && !@0.Contains({valueField})"; |
|||
} |
|||
|
|||
if (!input.q.IsNullOrEmpty()) |
|||
{ |
|||
where += $" && it.{textFiled}.Contains(@1)"; |
|||
} |
|||
List<T> newQList = await GetNewQ().Where(where, ids, input.q).GetPageListAsync(pageInput); |
|||
|
|||
var resList = selectedList.Concat(newQList).Select(x => new SelectOption |
|||
{ |
|||
value = x.GetPropertyValue(valueField)?.ToString(), |
|||
text = x.GetPropertyValue(textFiled)?.ToString() |
|||
}).ToList(); |
|||
|
|||
return resList; |
|||
|
|||
IQueryable<T> GetNewQ() |
|||
{ |
|||
return source ?? GetIQueryable(); |
|||
} |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 其它操作
|
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,138 @@ |
|||
using AutoMapper; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class Base_ActionBusiness : BaseBusiness<Base_Action>, IBase_ActionBusiness, ITransientDependency |
|||
{ |
|||
readonly IMapper _mapper; |
|||
public Base_ActionBusiness(IDbAccessor db, IMapper mapper) |
|||
: base(db) |
|||
{ |
|||
_mapper = mapper; |
|||
} |
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<List<Base_Action>> GetDataListAsync(Base_ActionsInputDTO input) |
|||
{ |
|||
var q = GetIQueryable(); |
|||
q = q |
|||
.WhereIf(!input.parentId.IsNullOrEmpty(), x => x.ParentId == input.parentId) |
|||
.WhereIf(input.types?.Length > 0, x => input.types.Contains(x.Type)) |
|||
.WhereIf(input.ActionIds?.Length > 0, x => input.ActionIds.Contains(x.Id)) |
|||
; |
|||
|
|||
return await q.OrderBy(x => x.Sort).ToListAsync(); |
|||
} |
|||
|
|||
public async Task<List<Base_ActionDTO>> GetTreeDataListAsync(Base_ActionsInputDTO input) |
|||
{ |
|||
var qList = await GetDataListAsync(input); |
|||
|
|||
var treeList = qList.Select(x => new Base_ActionDTO |
|||
{ |
|||
Id = x.Id, |
|||
NeedAction = x.NeedAction, |
|||
Text = x.Name, |
|||
ParentId = x.ParentId, |
|||
Type = x.Type, |
|||
Url = x.Url, |
|||
Value = x.Id, |
|||
Icon = x.Icon, |
|||
Sort = x.Sort, |
|||
selectable = input.selectable |
|||
}).ToList(); |
|||
|
|||
//菜单节点中,若子节点为空则移除父节点
|
|||
if (input.checkEmptyChildren) |
|||
treeList = treeList.Where(x => x.Type != 0 || TreeHelper.GetChildren(treeList, x, false).Count > 0).ToList(); |
|||
|
|||
await SetProperty(treeList); |
|||
|
|||
return TreeHelper.BuildTree(treeList); |
|||
|
|||
async Task SetProperty(List<Base_ActionDTO> _list) |
|||
{ |
|||
var ids = _list.Select(x => x.Id).ToList(); |
|||
var allPermissions = await GetIQueryable() |
|||
.Where(x => ids.Contains(x.ParentId) && (int)x.Type == 2) |
|||
.ToListAsync(); |
|||
|
|||
_list.ForEach(aData => |
|||
{ |
|||
var permissionValues = allPermissions |
|||
.Where(x => x.ParentId == aData.Id) |
|||
.Select(x => $"{x.Name}({x.Value})") |
|||
.ToList(); |
|||
|
|||
aData.PermissionValues = permissionValues; |
|||
}); |
|||
} |
|||
} |
|||
|
|||
public async Task<Base_Action> GetTheDataAsync(string id) |
|||
{ |
|||
return await GetEntityAsync(id); |
|||
} |
|||
|
|||
[Transactional] |
|||
public async Task AddDataAsync(ActionEditInputDTO input) |
|||
{ |
|||
await InsertAsync(_mapper.Map<Base_Action>(input)); |
|||
await SavePermissionAsync(input.Id, input.permissionList); |
|||
} |
|||
|
|||
[Transactional] |
|||
public async Task UpdateDataAsync(ActionEditInputDTO input) |
|||
{ |
|||
await UpdateAsync(_mapper.Map<Base_Action>(input)); |
|||
await SavePermissionAsync(input.Id, input.permissionList); |
|||
} |
|||
|
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
await DeleteAsync(ids); |
|||
await DeleteAsync(x => ids.Contains(x.ParentId)); |
|||
} |
|||
|
|||
public async Task SavePermissionAsync(string parentId, List<Base_Action> permissionList) |
|||
{ |
|||
permissionList.ForEach(aData => |
|||
{ |
|||
aData.Id = IdHelper.GetId(); |
|||
aData.CreateTime = DateTime.Now; |
|||
aData.CreatorId = null; |
|||
aData.ParentId = parentId; |
|||
aData.NeedAction = true; |
|||
}); |
|||
//删除原来
|
|||
await DeleteAsync(x => x.ParentId == parentId && (int)x.Type == 2); |
|||
//新增
|
|||
await InsertAsync(permissionList); |
|||
|
|||
//权限值必须唯一
|
|||
var repeatValues = await GetIQueryable() |
|||
.GroupBy(x => x.Value) |
|||
.Where(x => !string.IsNullOrEmpty(x.Key) && x.Count() > 1) |
|||
.Select(x => x.Key) |
|||
.ToListAsync(); |
|||
if (repeatValues.Count > 0) |
|||
throw new Exception($"以下权限值重复:{string.Join(",", repeatValues)}"); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
#endregion
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,77 @@ |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class Base_AppSecretBusiness : BaseBusiness<Base_AppSecret>, IBase_AppSecretBusiness, ITransientDependency |
|||
{ |
|||
public Base_AppSecretBusiness(IDbAccessor db) |
|||
: base(db) |
|||
{ |
|||
} |
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<PageResult<Base_AppSecret>> GetDataListAsync(PageInput<AppSecretsInputDTO> input) |
|||
{ |
|||
var q = GetIQueryable(); |
|||
var where = LinqHelper.True<Base_AppSecret>(); |
|||
var search = input.Search; |
|||
if (!search.keyword.IsNullOrEmpty()) |
|||
{ |
|||
where = where.And(x => |
|||
x.AppId.Contains(search.keyword) |
|||
|| x.AppSecret.Contains(search.keyword) |
|||
|| x.AppName.Contains(search.keyword)); |
|||
} |
|||
|
|||
return await q.Where(where).GetPageResultAsync(input); |
|||
} |
|||
|
|||
public async Task<Base_AppSecret> GetTheDataAsync(string id) |
|||
{ |
|||
return await GetEntityAsync(id); |
|||
} |
|||
|
|||
public async Task<string> GetAppSecretAsync(string appId) |
|||
{ |
|||
var theData = await GetIQueryable().Where(x => x.AppId == appId).FirstOrDefaultAsync(); |
|||
|
|||
return theData?.AppSecret; |
|||
} |
|||
|
|||
[DataRepeatValidate(new string[] { "AppId" }, |
|||
new string[] { "应用Id" })] |
|||
[DataAddLog(UserLogType.接口密钥管理, "AppId", "应用Id")] |
|||
public async Task AddDataAsync(Base_AppSecret newData) |
|||
{ |
|||
await InsertAsync(newData); |
|||
} |
|||
|
|||
[DataRepeatValidate(new string[] { "AppId" }, |
|||
new string[] { "应用Id" })] |
|||
[DataEditLog(UserLogType.接口密钥管理, "AppId", "应用Id")] |
|||
public async Task UpdateDataAsync(Base_AppSecret theData) |
|||
{ |
|||
await UpdateAsync(theData); |
|||
} |
|||
|
|||
[DataDeleteLog(UserLogType.接口密钥管理, "AppId", "应用Id")] |
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
await DeleteAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,53 @@ |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class Base_DbLinkBusiness : BaseBusiness<Base_DbLink>, IBase_DbLinkBusiness, ITransientDependency |
|||
{ |
|||
public Base_DbLinkBusiness(IDbAccessor db) |
|||
: base(db) |
|||
{ |
|||
} |
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<PageResult<Base_DbLink>> GetDataListAsync(PageInput input) |
|||
{ |
|||
return await GetIQueryable().GetPageResultAsync(input); |
|||
} |
|||
|
|||
public async Task<Base_DbLink> GetTheDataAsync(string id) |
|||
{ |
|||
return await GetEntityAsync(id); |
|||
} |
|||
|
|||
public async Task AddDataAsync(Base_DbLink newData) |
|||
{ |
|||
await InsertAsync(newData); |
|||
} |
|||
|
|||
public async Task UpdateDataAsync(Base_DbLink theData) |
|||
{ |
|||
await UpdateAsync(theData); |
|||
} |
|||
|
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
await DeleteAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
#endregion
|
|||
|
|||
#region 数据模型
|
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,88 @@ |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class Base_DepartmentBusiness : BaseBusiness<Base_Department>, IBase_DepartmentBusiness, ITransientDependency |
|||
{ |
|||
public Base_DepartmentBusiness(IDbAccessor db) |
|||
: base(db) |
|||
{ |
|||
} |
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<List<Base_DepartmentTreeDTO>> GetTreeDataListAsync(DepartmentsTreeInputDTO input) |
|||
{ |
|||
var where = LinqHelper.True<Base_Department>(); |
|||
if (!input.parentId.IsNullOrEmpty()) |
|||
where = where.And(x => x.ParentId == input.parentId); |
|||
|
|||
var list = await GetIQueryable().Where(where).ToListAsync(); |
|||
var treeList = list |
|||
.Select(x => new Base_DepartmentTreeDTO |
|||
{ |
|||
Id = x.Id, |
|||
ParentId = x.ParentId, |
|||
Text = x.Name, |
|||
Value = x.Id |
|||
}).ToList(); |
|||
|
|||
return TreeHelper.BuildTree(treeList); |
|||
} |
|||
|
|||
public async Task<List<string>> GetChildrenIdsAsync(string departmentId) |
|||
{ |
|||
var allNode = await GetIQueryable().Select(x => new TreeModel |
|||
{ |
|||
Id = x.Id, |
|||
ParentId = x.ParentId, |
|||
Text = x.Name, |
|||
Value = x.Id |
|||
}).ToListAsync(); |
|||
|
|||
var children = TreeHelper |
|||
.GetChildren(allNode, allNode.Where(x => x.Id == departmentId).FirstOrDefault(), true) |
|||
.Select(x => x.Id) |
|||
.ToList(); |
|||
|
|||
return children; |
|||
} |
|||
|
|||
public async Task<Base_Department> GetTheDataAsync(string id) |
|||
{ |
|||
return await GetEntityAsync(id); |
|||
} |
|||
|
|||
[DataRepeatValidate(new string[] { "Name" }, new string[] { "部门名" })] |
|||
[DataAddLog(UserLogType.部门管理, "Name", "部门名")] |
|||
public async Task AddDataAsync(Base_Department newData) |
|||
{ |
|||
await InsertAsync(newData); |
|||
} |
|||
|
|||
[DataRepeatValidate(new string[] { "Name" }, new string[] { "部门名" })] |
|||
[DataEditLog(UserLogType.部门管理, "Name", "部门名")] |
|||
public async Task UpdateDataAsync(Base_Department theData) |
|||
{ |
|||
await UpdateAsync(theData); |
|||
} |
|||
|
|||
[DataDeleteLog(UserLogType.部门管理, "Name", "部门名")] |
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
if (await GetIQueryable().AnyAsync(x => ids.Contains(x.ParentId))) |
|||
throw new BusException("禁止删除!请先删除所有子级!"); |
|||
|
|||
await DeleteAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,117 @@ |
|||
using AutoMapper; |
|||
using AutoMapper.QueryableExtensions; |
|||
using Coldairarrow.Entity; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class Base_RoleBusiness : BaseBusiness<Base_Role>, IBase_RoleBusiness, ITransientDependency |
|||
{ |
|||
readonly IMapper _mapper; |
|||
public Base_RoleBusiness(IDbAccessor db, IMapper mapper) |
|||
: base(db) |
|||
{ |
|||
_mapper = mapper; |
|||
} |
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<PageResult<Base_RoleInfoDTO>> GetDataListAsync(PageInput<RolesInputDTO> input) |
|||
{ |
|||
var where = LinqHelper.True<Base_Role>(); |
|||
var search = input.Search; |
|||
if (!search.roleId.IsNullOrEmpty()) |
|||
where = where.And(x => x.Id == search.roleId); |
|||
if (!search.roleName.IsNullOrEmpty()) |
|||
where = where.And(x => x.RoleName.Contains(search.roleName)); |
|||
|
|||
var page = await GetIQueryable() |
|||
.Where(where) |
|||
.ProjectTo<Base_RoleInfoDTO>(_mapper.ConfigurationProvider) |
|||
.GetPageResultAsync(input); |
|||
|
|||
await SetProperty(page.Data); |
|||
|
|||
return page; |
|||
|
|||
async Task SetProperty(List<Base_RoleInfoDTO> _list) |
|||
{ |
|||
var allActionIds = await Db.GetIQueryable<Base_Action>().Select(x => x.Id).ToListAsync(); |
|||
|
|||
var ids = _list.Select(x => x.Id).ToList(); |
|||
var roleActions = await Db.GetIQueryable<Base_RoleAction>() |
|||
.Where(x => ids.Contains(x.RoleId)) |
|||
.ToListAsync(); |
|||
_list.ForEach(aData => |
|||
{ |
|||
if (aData.RoleName == RoleTypes.超级管理员.ToString()) |
|||
aData.Actions = allActionIds; |
|||
else |
|||
aData.Actions = roleActions.Where(x => x.RoleId == aData.Id).Select(x => x.ActionId).ToList(); |
|||
}); |
|||
} |
|||
} |
|||
|
|||
public async Task<Base_RoleInfoDTO> GetTheDataAsync(string id) |
|||
{ |
|||
return (await GetDataListAsync(new PageInput<RolesInputDTO> { Search = new RolesInputDTO { roleId = id } })).Data.FirstOrDefault(); |
|||
} |
|||
|
|||
[DataAddLog(UserLogType.系统角色管理, "RoleName", "角色")] |
|||
[DataRepeatValidate(new string[] { "RoleName" }, new string[] { "角色名" })] |
|||
public async Task AddDataAsync(Base_RoleInfoDTO input) |
|||
{ |
|||
await InsertAsync(_mapper.Map<Base_Role>(input)); |
|||
await SetRoleActionAsync(input.Id, input.Actions); |
|||
} |
|||
|
|||
[DataEditLog(UserLogType.系统角色管理, "RoleName", "角色")] |
|||
[DataRepeatValidate(new string[] { "RoleName" }, new string[] { "角色名" })] |
|||
[Transactional] |
|||
public async Task UpdateDataAsync(Base_RoleInfoDTO input) |
|||
{ |
|||
await UpdateAsync(_mapper.Map<Base_Role>(input)); |
|||
await SetRoleActionAsync(input.Id, input.Actions); |
|||
} |
|||
|
|||
[DataDeleteLog(UserLogType.系统角色管理, "RoleName", "角色")] |
|||
[Transactional] |
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
await DeleteAsync(ids); |
|||
await Db.DeleteAsync<Base_RoleAction>(x => ids.Contains(x.RoleId)); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
private async Task SetRoleActionAsync(string roleId, List<string> actions) |
|||
{ |
|||
var roleActions = (actions ?? new List<string>()) |
|||
.Select(x => new Base_RoleAction |
|||
{ |
|||
Id = IdHelper.GetId(), |
|||
ActionId = x, |
|||
CreateTime = DateTime.Now, |
|||
RoleId = roleId |
|||
}).ToList(); |
|||
await Db.DeleteAsync<Base_RoleAction>(x => x.RoleId == roleId); |
|||
await Db.InsertAsync(roleActions); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 数据模型
|
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,166 @@ |
|||
using AutoMapper; |
|||
using Coldairarrow.Business.Cache; |
|||
using Coldairarrow.Entity; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Linq.Expressions; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class Base_UserBusiness : BaseBusiness<Base_User>, IBase_UserBusiness, ITransientDependency |
|||
{ |
|||
readonly IOperator _operator; |
|||
readonly IMapper _mapper; |
|||
public Base_UserBusiness( |
|||
IDbAccessor db, |
|||
IBase_UserCache userCache, |
|||
IOperator @operator, |
|||
IMapper mapper |
|||
) |
|||
: base(db) |
|||
{ |
|||
_userCache = userCache; |
|||
_operator = @operator; |
|||
_mapper = mapper; |
|||
} |
|||
IBase_UserCache _userCache { get; } |
|||
protected override string _textField => "RealName"; |
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<PageResult<Base_UserDTO>> GetDataListAsync(PageInput<Base_UsersInputDTO> input) |
|||
{ |
|||
Expression<Func<Base_User, Base_Department, Base_UserDTO>> select = (a, b) => new Base_UserDTO |
|||
{ |
|||
DepartmentName = b.Name |
|||
}; |
|||
var search = input.Search; |
|||
select = select.BuildExtendSelectExpre(); |
|||
var q_User = search.all ? Db.GetIQueryable<Base_User>() : GetIQueryable(); |
|||
var q = from a in q_User.AsExpandable() |
|||
join b in Db.GetIQueryable<Base_Department>() on a.DepartmentId equals b.Id into ab |
|||
from b in ab.DefaultIfEmpty() |
|||
select @select.Invoke(a, b); |
|||
|
|||
q = q.WhereIf(!search.userId.IsNullOrEmpty(), x => x.Id == search.userId); |
|||
if (!search.keyword.IsNullOrEmpty()) |
|||
{ |
|||
var keyword = $"%{search.keyword}%"; |
|||
q = q.Where(x => |
|||
EF.Functions.Like(x.UserName, keyword) |
|||
|| EF.Functions.Like(x.RealName, keyword)); |
|||
} |
|||
|
|||
var list = await q.GetPageResultAsync(input); |
|||
|
|||
await SetProperty(list.Data); |
|||
|
|||
return list; |
|||
|
|||
async Task SetProperty(List<Base_UserDTO> users) |
|||
{ |
|||
//补充用户角色属性
|
|||
List<string> userIds = users.Select(x => x.Id).ToList(); |
|||
var userRoles = await (from a in Db.GetIQueryable<Base_UserRole>() |
|||
join b in Db.GetIQueryable<Base_Role>() on a.RoleId equals b.Id |
|||
where userIds.Contains(a.UserId) |
|||
select new |
|||
{ |
|||
a.UserId, |
|||
RoleId = b.Id, |
|||
b.RoleName |
|||
}).ToListAsync(); |
|||
users.ForEach(aUser => |
|||
{ |
|||
var roleList = userRoles.Where(x => x.UserId == aUser.Id); |
|||
aUser.RoleIdList = roleList.Select(x => x.RoleId).ToList(); |
|||
aUser.RoleNameList = roleList.Select(x => x.RoleName).ToList(); |
|||
}); |
|||
} |
|||
} |
|||
|
|||
public async Task<Base_UserDTO> GetTheDataAsync(string id) |
|||
{ |
|||
if (id.IsNullOrEmpty()) |
|||
return null; |
|||
else |
|||
{ |
|||
PageInput<Base_UsersInputDTO> input = new PageInput<Base_UsersInputDTO> |
|||
{ |
|||
Search = new Base_UsersInputDTO |
|||
{ |
|||
all = true, |
|||
userId = id |
|||
} |
|||
}; |
|||
return (await GetDataListAsync(input)).Data.FirstOrDefault(); |
|||
} |
|||
} |
|||
|
|||
[DataAddLog(UserLogType.系统用户管理, "RealName", "用户")] |
|||
[DataRepeatValidate( |
|||
new string[] { "UserName" }, |
|||
new string[] { "用户名" })] |
|||
[Transactional] |
|||
public async Task AddDataAsync(UserEditInputDTO input) |
|||
{ |
|||
await InsertAsync(_mapper.Map<Base_User>(input)); |
|||
await SetUserRoleAsync(input.Id, input.RoleIdList); |
|||
} |
|||
|
|||
[DataEditLog(UserLogType.系统用户管理, "RealName", "用户")] |
|||
[DataRepeatValidate( |
|||
new string[] { "UserName" }, |
|||
new string[] { "用户名" })] |
|||
[Transactional] |
|||
public async Task UpdateDataAsync(UserEditInputDTO input) |
|||
{ |
|||
if (input.Id == GlobalAssemblies.ADMINID && _operator?.UserId != input.Id) |
|||
throw new BusException("禁止更改超级管理员!"); |
|||
|
|||
await UpdateAsync(_mapper.Map<Base_User>(input)); |
|||
await SetUserRoleAsync(input.Id, input.RoleIdList); |
|||
await _userCache.UpdateCacheAsync(input.Id); |
|||
} |
|||
|
|||
[DataDeleteLog(UserLogType.系统用户管理, "RealName", "用户")] |
|||
[Transactional] |
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
if (ids.Contains(GlobalAssemblies.ADMINID)) |
|||
throw new BusException("超级管理员是内置账号,禁止删除!"); |
|||
|
|||
await DeleteAsync(ids); |
|||
|
|||
await _userCache.UpdateCacheAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
private async Task SetUserRoleAsync(string userId, List<string> roleIds) |
|||
{ |
|||
roleIds = roleIds ?? new List<string>(); |
|||
var userRoleList = roleIds.Select(x => new Base_UserRole |
|||
{ |
|||
Id = IdHelper.GetId(), |
|||
CreateTime = DateTime.Now, |
|||
UserId = userId, |
|||
RoleId = x |
|||
}).ToList(); |
|||
await Db.DeleteAsync<Base_UserRole>(x => x.UserId == userId); |
|||
await Db.InsertAsync(userRoleList); |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,35 @@ |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class Base_UserLogBusiness : BaseBusiness<Base_UserLog>, IBase_UserLogBusiness, ITransientDependency |
|||
{ |
|||
public Base_UserLogBusiness(IDbAccessor db) |
|||
: base(db) |
|||
{ |
|||
} |
|||
|
|||
public async Task<PageResult<Base_UserLog>> GetLogListAsync(PageInput<UserLogsInputDTO> input) |
|||
{ |
|||
var whereExp = LinqHelper.True<Base_UserLog>(); |
|||
var search = input.Search; |
|||
if (!search.logContent.IsNullOrEmpty()) |
|||
whereExp = whereExp.And(x => x.LogContent.Contains(search.logContent)); |
|||
if (!search.logType.IsNullOrEmpty()) |
|||
whereExp = whereExp.And(x => x.LogType == search.logType); |
|||
if (!search.opUserName.IsNullOrEmpty()) |
|||
whereExp = whereExp.And(x => x.CreatorRealName.Contains(search.opUserName)); |
|||
if (!search.startTime.IsNullOrEmpty()) |
|||
whereExp = whereExp.And(x => x.CreateTime >= search.startTime); |
|||
if (!search.endTime.IsNullOrEmpty()) |
|||
whereExp = whereExp.And(x => x.CreateTime <= search.endTime); |
|||
|
|||
return await GetIQueryable().Where(whereExp).GetPageResultAsync(input); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,220 @@ |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using Microsoft.Extensions.Hosting; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Text; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class BuildCodeBusiness : BaseBusiness<Base_DbLink>, IBuildCodeBusiness, ITransientDependency |
|||
{ |
|||
public BuildCodeBusiness(IDbAccessor db, IHostEnvironment evn) |
|||
: base(db) |
|||
{ |
|||
var projectPath = evn.ContentRootPath; |
|||
_solutionPath = Directory.GetParent(projectPath).ToString(); |
|||
} |
|||
|
|||
private static readonly List<string> ignoreProperties = |
|||
new List<string> { "Id", "CreateTime", "CreatorId", "CreatorRealName", "Deleted" }; |
|||
|
|||
#region 外部接口
|
|||
|
|||
/// <summary>
|
|||
/// 获取所有数据库连接
|
|||
/// </summary>
|
|||
/// <returns></returns>
|
|||
public List<Base_DbLink> GetAllDbLink() |
|||
{ |
|||
return GetList(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// 获取数据库所有表
|
|||
/// </summary>
|
|||
/// <param name="linkId">数据库连接Id</param>
|
|||
/// <returns></returns>
|
|||
public List<DbTableInfo> GetDbTableList(string linkId) |
|||
{ |
|||
if (linkId.IsNullOrEmpty()) |
|||
return new List<DbTableInfo>(); |
|||
else |
|||
return GetTheDbHelper(linkId).GetDbAllTables(); |
|||
} |
|||
|
|||
public void Build(BuildInputDTO input) |
|||
{ |
|||
string linkId = input.linkId; |
|||
string areaName = input.areaName; |
|||
List<string> tables = input.tables; |
|||
List<int> buildTypes = input.buildTypes; |
|||
_areaName = areaName; |
|||
//内部成员初始化
|
|||
_dbHelper = GetTheDbHelper(linkId); |
|||
GetDbTableList(linkId).ForEach(aTable => |
|||
{ |
|||
_dbTableInfoDic.Add(aTable.TableName, aTable); |
|||
}); |
|||
|
|||
tables.ForEach(aTable => |
|||
{ |
|||
var tableFieldInfo = _dbHelper.GetDbTableInfo(aTable); |
|||
|
|||
//实体名
|
|||
string entityName = aTable; |
|||
//业务逻辑参数名
|
|||
string busName = $"{entityName.ToFirstLowerStr()}Bus"; |
|||
//业务逻辑变量名
|
|||
string _busName = $"_{busName}"; |
|||
List<string> selectOptionsList = new List<string>(); |
|||
List<string> listColumnsList = new List<string>(); |
|||
List<string> formColumnsList = new List<string>(); |
|||
tableFieldInfo.Where(x => !ignoreProperties.Contains(x.Name)).ToList().ForEach(aField => |
|||
{ |
|||
if (_dbHelper.DbTypeStr_To_CsharpType(aField.Type) == typeof(string)) |
|||
selectOptionsList.Add( |
|||
$" <a-select-option key=\"{aField.Name}\">{aField.Description}</a-select-option>"); |
|||
listColumnsList.Add( |
|||
$" {{ title: '{aField.Description}', dataIndex: '{aField.Name}', width: '10%' }},"); |
|||
formColumnsList.Add( |
|||
$@" <a-form-model-item label=""{aField.Description}"" prop=""{aField.Name}"">
|
|||
<a-input v-model=""entity.{aField.Name}"" autocomplete=""off"" /> |
|||
</a-form-model-item>");
|
|||
Dictionary<string, string> renderParamters = new Dictionary<string, string> |
|||
{ |
|||
{$"%{nameof(areaName)}%",areaName }, |
|||
{$"%{nameof(entityName)}%",entityName }, |
|||
{$"%{nameof(busName)}%",busName }, |
|||
{$"%{nameof(_busName)}%",_busName }, |
|||
{$"%selectOptions%",string.Join("\r\n",selectOptionsList) }, |
|||
{$"%listColumns%",string.Join("\r\n",listColumnsList) }, |
|||
{$"%formColumns%",string.Join("\r\n",formColumnsList) } |
|||
}; |
|||
|
|||
//buildTypes,实体层=0,业务层=1,接口层=2,页面层=3
|
|||
//实体层
|
|||
if (buildTypes.Contains(0)) |
|||
{ |
|||
BuildEntity(tableFieldInfo, aTable); |
|||
} |
|||
string tmpFileName = string.Empty; |
|||
string savePath = string.Empty; |
|||
//业务层
|
|||
if (buildTypes.Contains(1)) |
|||
{ |
|||
//接口
|
|||
tmpFileName = "IBusiness.txt"; |
|||
savePath = Path.Combine( |
|||
_solutionPath, |
|||
"Coldairarrow.IBusiness", |
|||
areaName, |
|||
$"I{entityName}Business.cs"); |
|||
WriteCode(renderParamters, tmpFileName, savePath); |
|||
|
|||
//实现
|
|||
tmpFileName = "Business.txt"; |
|||
savePath = Path.Combine( |
|||
_solutionPath, |
|||
"Coldairarrow.Business", |
|||
areaName, |
|||
$"{entityName}Business.cs"); |
|||
WriteCode(renderParamters, tmpFileName, savePath); |
|||
} |
|||
//接口层
|
|||
if (buildTypes.Contains(2)) |
|||
{ |
|||
tmpFileName = "Controller.txt"; |
|||
savePath = Path.Combine( |
|||
_solutionPath, |
|||
"Coldairarrow.Api", |
|||
"Controllers", |
|||
areaName, |
|||
$"{entityName}Controller.cs"); |
|||
WriteCode(renderParamters, tmpFileName, savePath); |
|||
} |
|||
//页面层
|
|||
if (buildTypes.Contains(3)) |
|||
{ |
|||
//表格页
|
|||
tmpFileName = "List.txt"; |
|||
savePath = Path.Combine( |
|||
_solutionPath, |
|||
"Coldairarrow.Web", |
|||
"src", |
|||
"views", |
|||
areaName, |
|||
entityName, |
|||
"List.vue"); |
|||
WriteCode(renderParamters, tmpFileName, savePath); |
|||
|
|||
//表单页
|
|||
tmpFileName = "EditForm.txt"; |
|||
savePath = Path.Combine( |
|||
_solutionPath, |
|||
"Coldairarrow.Web", |
|||
"src", |
|||
"views", |
|||
areaName, |
|||
entityName, |
|||
"EditForm.vue"); |
|||
WriteCode(renderParamters, tmpFileName, savePath); |
|||
} |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
readonly string _solutionPath; |
|||
private string _areaName { get; set; } |
|||
private void BuildEntity(List<TableInfo> tableInfo, string tableName) |
|||
{ |
|||
string nameSpace = $@"Coldairarrow.Entity.{_areaName}"; |
|||
string filePath = Path.Combine(_solutionPath, "Coldairarrow.Entity", _areaName, $"{tableName}.cs"); |
|||
|
|||
_dbHelper.SaveEntityToFile(tableInfo, tableName, _dbTableInfoDic[tableName].Description, filePath, nameSpace); |
|||
} |
|||
private DbHelper GetTheDbHelper(string linkId) |
|||
{ |
|||
var theLink = GetTheLink(linkId); |
|||
DbHelper dbHelper = DbHelperFactory.GetDbHelper(theLink.DbType.ToEnum<DatabaseType>(), theLink.ConnectionStr); |
|||
|
|||
return dbHelper; |
|||
} |
|||
private Base_DbLink GetTheLink(string linkId) |
|||
{ |
|||
Base_DbLink resObj = new Base_DbLink(); |
|||
var theModule = GetIQueryable().Where(x => x.Id == linkId).FirstOrDefault(); |
|||
resObj = theModule ?? resObj; |
|||
|
|||
return resObj; |
|||
} |
|||
private DbHelper _dbHelper { get; set; } |
|||
private Dictionary<string, DbTableInfo> _dbTableInfoDic { get; set; } = new Dictionary<string, DbTableInfo>(); |
|||
private void WriteCode(Dictionary<string, string> paramters, string templateFileName, string savePath) |
|||
{ |
|||
string content = File.ReadAllText(Path.Combine(_solutionPath, "Coldairarrow.Api", "BuildCodeTemplate", templateFileName)); |
|||
paramters.ForEach(aParamter => |
|||
{ |
|||
content = content.Replace(aParamter.Key, aParamter.Value); |
|||
}); |
|||
var dir = Path.GetDirectoryName(savePath); |
|||
if (!Directory.Exists(dir)) |
|||
{ |
|||
Directory.CreateDirectory(dir); |
|||
} |
|||
File.WriteAllText(savePath, content, Encoding.UTF8); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 数据模型
|
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,52 @@ |
|||
using AutoMapper; |
|||
using Coldairarrow.Business.Cache; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.IBusiness; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
public class HomeBusiness : BaseBusiness<Base_User>, IHomeBusiness, ITransientDependency |
|||
{ |
|||
readonly IOperator _operator; |
|||
readonly IMapper _mapper; |
|||
private readonly IBase_UserCache _base_UserCache; |
|||
public HomeBusiness(IDbAccessor db, IOperator @operator, IMapper mapper, IBase_UserCache base_UserCache) |
|||
: base(db) |
|||
{ |
|||
_operator = @operator; |
|||
_mapper = mapper; |
|||
_base_UserCache = base_UserCache; |
|||
} |
|||
|
|||
public async Task<string> SubmitLoginAsync(LoginInputDTO input) |
|||
{ |
|||
input.password = input.password.ToMD5String(); |
|||
var theUser = await GetIQueryable() |
|||
.Where(x => x.UserName == input.userName && x.Password == input.password) |
|||
.FirstOrDefaultAsync(); |
|||
|
|||
if (theUser.IsNullOrEmpty()) |
|||
throw new BusException("账号或密码不正确!"); |
|||
|
|||
return theUser.Id; |
|||
} |
|||
|
|||
public async Task ChangePwdAsync(ChangePwdInputDTO input) |
|||
{ |
|||
var theUser = _operator.Property; |
|||
if (theUser.Password != input.oldPwd?.ToMD5String()) |
|||
throw new BusException("原密码错误!"); |
|||
|
|||
theUser.Password = input.newPwd.ToMD5String(); |
|||
await UpdateAsync(_mapper.Map<Base_User>(theUser)); |
|||
|
|||
//更新缓存
|
|||
await _base_UserCache.UpdateCacheAsync(theUser.Id); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,71 @@ |
|||
using Coldairarrow.Entity; |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Base_Manage |
|||
{ |
|||
class PermissionBusiness : BaseBusiness<Base_Action>, IPermissionBusiness, ITransientDependency |
|||
{ |
|||
public PermissionBusiness(IDbAccessor db, IBase_ActionBusiness actionBus, IBase_UserBusiness userBus) |
|||
: base(db) |
|||
{ |
|||
_actionBus = actionBus; |
|||
_userBus = userBus; |
|||
} |
|||
IBase_ActionBusiness _actionBus { get; } |
|||
IBase_UserBusiness _userBus { get; } |
|||
|
|||
async Task<string[]> GetUserActionIds(string userId) |
|||
{ |
|||
var where = LinqHelper.False<Base_Action>(); |
|||
var theUser = await _userBus.GetTheDataAsync(userId); |
|||
|
|||
//不需要权限的菜单
|
|||
where = where.Or(x => x.NeedAction == false); |
|||
|
|||
if (userId == GlobalAssemblies.ADMINID || theUser.RoleType.HasFlag(RoleTypes.超级管理员)) |
|||
where = where.Or(x => true); |
|||
else |
|||
{ |
|||
var actionIds = from a in Db.GetIQueryable<Base_UserRole>() |
|||
join b in Db.GetIQueryable<Base_RoleAction>() on a.RoleId equals b.RoleId |
|||
where a.UserId == userId |
|||
select b.ActionId; |
|||
|
|||
where = where.Or(x => actionIds.Contains(x.Id)); |
|||
} |
|||
|
|||
return await GetIQueryable().Where(where).Select(x => x.Id).ToArrayAsync(); |
|||
} |
|||
|
|||
public async Task<List<Base_ActionDTO>> GetUserMenuListAsync(string userId) |
|||
{ |
|||
var actionIds = await GetUserActionIds(userId); |
|||
return await _actionBus.GetTreeDataListAsync(new Base_ActionsInputDTO |
|||
{ |
|||
types = new ActionType[] { ActionType.菜单, ActionType.页面 }, |
|||
ActionIds = actionIds, |
|||
checkEmptyChildren = true |
|||
}); |
|||
} |
|||
|
|||
public async Task<List<string>> GetUserPermissionValuesAsync(string userId) |
|||
{ |
|||
var actionIds = await GetUserActionIds(userId); |
|||
return (await _actionBus |
|||
.GetDataListAsync(new Base_ActionsInputDTO |
|||
{ |
|||
types = new ActionType[] { ActionType.权限 }, |
|||
ActionIds = actionIds |
|||
})) |
|||
.Select(x => x.Value) |
|||
.ToList(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,60 @@ |
|||
using Coldairarrow.Util; |
|||
using Microsoft.Extensions.Caching.Distributed; |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Cache |
|||
{ |
|||
public abstract class BaseCache<T> : IBaseCache<T> where T : class |
|||
{ |
|||
readonly IDistributedCache _cache; |
|||
public BaseCache(IDistributedCache cache) |
|||
{ |
|||
_cache = cache; |
|||
} |
|||
|
|||
#region 私有成员
|
|||
|
|||
protected abstract Task<T> GetDbDataAsync(string key); |
|||
protected string BuildKey(string idKey) |
|||
{ |
|||
return $"Cache_{GetType().FullName}_{idKey}"; |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<T> GetCacheAsync(string idKey) |
|||
{ |
|||
if (idKey.IsNullOrEmpty()) |
|||
return null; |
|||
|
|||
string cacheKey = BuildKey(idKey); |
|||
var cache = (await _cache.GetStringAsync(cacheKey))?.ToObject<T>(); |
|||
if (cache == null) |
|||
{ |
|||
cache = await GetDbDataAsync(idKey); |
|||
if (cache != null) |
|||
await _cache.SetStringAsync(cacheKey, cache.ToJson()); |
|||
} |
|||
|
|||
return cache; |
|||
} |
|||
|
|||
public async Task UpdateCacheAsync(string idKey) |
|||
{ |
|||
await _cache.RemoveAsync(BuildKey(idKey)); |
|||
} |
|||
|
|||
public async Task UpdateCacheAsync(List<string> idKeys) |
|||
{ |
|||
foreach (var aKey in idKeys) |
|||
{ |
|||
await UpdateCacheAsync(aKey); |
|||
} |
|||
} |
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,36 @@ |
|||
using Coldairarrow.Business.Base_Manage; |
|||
using Coldairarrow.Entity; |
|||
using Coldairarrow.Util; |
|||
using Microsoft.Extensions.Caching.Distributed; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using System; |
|||
using System.Linq; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Cache |
|||
{ |
|||
class Base_UserCache : BaseCache<Base_UserDTO>, IBase_UserCache, ITransientDependency |
|||
{ |
|||
readonly IServiceProvider _serviceProvider; |
|||
public Base_UserCache(IServiceProvider serviceProvider, IDistributedCache cache) |
|||
: base(cache) |
|||
{ |
|||
_serviceProvider = serviceProvider; |
|||
} |
|||
|
|||
protected override async Task<Base_UserDTO> GetDbDataAsync(string key) |
|||
{ |
|||
PageInput<Base_UsersInputDTO> input = new PageInput<Base_UsersInputDTO> |
|||
{ |
|||
Search = new Base_UsersInputDTO |
|||
{ |
|||
all = true, |
|||
userId = key |
|||
} |
|||
}; |
|||
var list = await _serviceProvider.GetService<IBase_UserBusiness>().GetDataListAsync(input); |
|||
|
|||
return list.Data.FirstOrDefault(); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
using System.Collections.Generic; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.Cache |
|||
{ |
|||
public interface IBaseCache<T> where T : class |
|||
{ |
|||
Task<T> GetCacheAsync(string idKey); |
|||
Task UpdateCacheAsync(string idKey); |
|||
Task UpdateCacheAsync(List<string> idKeys); |
|||
} |
|||
} |
@ -0,0 +1,9 @@ |
|||
using Coldairarrow.Entity; |
|||
|
|||
namespace Coldairarrow.Business.Cache |
|||
{ |
|||
public interface IBase_UserCache : IBaseCache<Base_UserDTO> |
|||
{ |
|||
|
|||
} |
|||
} |
@ -0,0 +1,204 @@ |
|||
using Coldairarrow.Entity.DTO; |
|||
using Coldairarrow.Entity.HuiYan; |
|||
using Coldairarrow.Util; |
|||
using EFCore.Sharding; |
|||
using LinqKit; |
|||
using Microsoft.EntityFrameworkCore; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Linq.Dynamic.Core; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Business.HuiYan |
|||
{ |
|||
public class catsBusiness : BaseBusiness<cats>, IcatsBusiness, ITransientDependency |
|||
{ |
|||
public catsBusiness(IDbAccessor db) |
|||
: base(db) |
|||
{ |
|||
} |
|||
|
|||
#region 外部接口
|
|||
|
|||
public async Task<List<CatTreeDTO>> GetTreeDataListAsync(CatsTreeInputDTO input) |
|||
{ |
|||
var where = LinqHelper.True<cats>(); |
|||
if (!input.parentId.IsNullOrEmpty()) |
|||
where = where.And(x => x.ParentId == input.parentId); |
|||
|
|||
var list = await GetIQueryable().Where(where).ToListAsync(); |
|||
var treeList = list |
|||
.Select(x => new CatTreeDTO |
|||
{ |
|||
Id = x.Id, |
|||
ParentId = x.ParentId, |
|||
Text = x.Name, |
|||
Value = x.Id |
|||
}).ToList(); |
|||
|
|||
return TreeHelper.BuildTree(treeList); |
|||
} |
|||
|
|||
|
|||
public AjaxResult GetParentCatList() |
|||
{ |
|||
var list = GetIQueryable().Where(c => string.IsNullOrEmpty(c.ParentId)).ToList(); |
|||
return Success(list); |
|||
} |
|||
|
|||
|
|||
public AjaxResult AddKeyWord(CatDto model) |
|||
{ |
|||
var result= Db.RunTransaction(() => |
|||
{ |
|||
/* |
|||
///判断是否需要添加一级类目
|
|||
*/ |
|||
cats oneCat = null; |
|||
if (!string.IsNullOrEmpty(model.OneCat.Id)) |
|||
{ |
|||
oneCat = GetIQueryable().FirstOrDefault(c => c.Id == model.OneCat.Id); |
|||
} |
|||
|
|||
if (oneCat == null) |
|||
{ |
|||
oneCat = new cats() |
|||
{ |
|||
Id = IdHelper.GetId(), |
|||
CreateTime = DateTime.Now, |
|||
CreatorId = "admin", |
|||
Deleted = false, |
|||
Name = model.OneCat.Text, |
|||
ParentId = null |
|||
}; |
|||
|
|||
int row = Db.Insert(oneCat); |
|||
if (row <= 0) |
|||
{ |
|||
throw new Exception("一级类目添加失败!"); |
|||
} |
|||
} |
|||
|
|||
/* |
|||
///判断是否需要添加二级类目
|
|||
*/ |
|||
cats twoCat = null; |
|||
if (!string.IsNullOrEmpty(model.TwoCat.Id)) |
|||
{ |
|||
twoCat = GetIQueryable().FirstOrDefault(c => c.Id == model.TwoCat.Id); |
|||
} |
|||
|
|||
if (twoCat == null) |
|||
{ |
|||
twoCat = new cats() |
|||
{ |
|||
Id = IdHelper.GetId(), |
|||
CreateTime = DateTime.Now, |
|||
CreatorId = "admin", |
|||
Deleted = false, |
|||
Name = model.TwoCat.Text, |
|||
ParentId = oneCat.Id |
|||
}; |
|||
|
|||
int row= Db.Insert(twoCat); |
|||
if (row <= 0) |
|||
{ |
|||
throw new Exception("二级类目添加失败!"); |
|||
} |
|||
} |
|||
|
|||
/* |
|||
///判断是否需要添加三级类目
|
|||
*/ |
|||
cats lastCat = null; |
|||
if (!string.IsNullOrEmpty(model.LastCat.Id)) |
|||
{ |
|||
lastCat = GetIQueryable().FirstOrDefault(c => c.Id == model.LastCat.Id); |
|||
} |
|||
|
|||
if (lastCat == null) |
|||
{ |
|||
lastCat = new cats() |
|||
{ |
|||
Id = IdHelper.GetId(), |
|||
CreateTime = DateTime.Now, |
|||
CreatorId = "admin", |
|||
Deleted = false, |
|||
Name = model.LastCat.Text, |
|||
ParentId = twoCat.Id |
|||
}; |
|||
|
|||
int row = Db.Insert(lastCat); |
|||
if (row <= 0) |
|||
{ |
|||
throw new Exception("三级类目添加失败!"); |
|||
} |
|||
} |
|||
|
|||
var list = new List<cats>(); |
|||
|
|||
model.KeyWords.ForEach(key => { |
|||
list.Add(new cats() { |
|||
Id = IdHelper.GetId(), |
|||
CreateTime = DateTime.Now, |
|||
CreatorId = "admin", |
|||
Deleted = false, |
|||
Name = key, |
|||
ParentId = lastCat.Id |
|||
}); |
|||
}); |
|||
|
|||
Db.BulkInsert(list); |
|||
}); |
|||
if(result.Success) |
|||
{ |
|||
return Success(); |
|||
} |
|||
return Error(); |
|||
} |
|||
|
|||
public async Task<PageResult<cats>> GetDataListAsync(PageInput<ConditionDTO> input) |
|||
{ |
|||
var q = GetIQueryable(); |
|||
var where = LinqHelper.True<cats>(); |
|||
var search = input.Search; |
|||
|
|||
//筛选
|
|||
if (!search.Condition.IsNullOrEmpty() && !search.Keyword.IsNullOrEmpty()) |
|||
{ |
|||
var newWhere = DynamicExpressionParser.ParseLambda<cats, bool>( |
|||
ParsingConfig.Default, false, $@"{search.Condition}.Contains(@0)", search.Keyword); |
|||
where = where.And(newWhere); |
|||
} |
|||
|
|||
return await q.Where(where).GetPageResultAsync(input); |
|||
} |
|||
|
|||
public async Task<cats> GetTheDataAsync(string id) |
|||
{ |
|||
return await GetEntityAsync(id); |
|||
} |
|||
|
|||
public async Task AddDataAsync(cats data) |
|||
{ |
|||
await InsertAsync(data); |
|||
} |
|||
|
|||
public async Task UpdateDataAsync(cats data) |
|||
{ |
|||
await UpdateAsync(data); |
|||
} |
|||
|
|||
public async Task DeleteDataAsync(List<string> ids) |
|||
{ |
|||
await DeleteAsync(ids); |
|||
} |
|||
|
|||
#endregion
|
|||
|
|||
#region 私有成员
|
|||
|
|||
#endregion
|
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net5.0</TargetFramework> |
|||
<RootNamespace>Coldairarrow.Entity</RootNamespace> |
|||
<AssemblyName>Coldairarrow.Entity</AssemblyName> |
|||
</PropertyGroup> |
|||
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> |
|||
<NoWarn>1701;1702;CS1591</NoWarn> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\Coldairarrow.Util\01.Coldairarrow.Util.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
@ -0,0 +1,75 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 系统权限表
|
|||
/// </summary>
|
|||
[Table("Base_Action")] |
|||
public class Base_Action |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 父级Id
|
|||
/// </summary>
|
|||
public String ParentId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 类型,菜单=0,页面=1,权限=2
|
|||
/// </summary>
|
|||
public ActionType Type { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 权限名/菜单名
|
|||
/// </summary>
|
|||
public String Name { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 菜单地址
|
|||
/// </summary>
|
|||
public String Url { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 权限值
|
|||
/// </summary>
|
|||
public String Value { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 是否需要权限(仅页面有效)
|
|||
/// </summary>
|
|||
public bool NeedAction { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 图标
|
|||
/// </summary>
|
|||
public string Icon { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 排序
|
|||
/// </summary>
|
|||
public int Sort { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,51 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 应用密钥表
|
|||
/// </summary>
|
|||
[Table("Base_AppSecret")] |
|||
public class Base_AppSecret |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 自然主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 应用Id
|
|||
/// </summary>
|
|||
public String AppId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 应用密钥
|
|||
/// </summary>
|
|||
public String AppSecret { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 应用名
|
|||
/// </summary>
|
|||
public String AppName { get; set; } |
|||
|
|||
} |
|||
} |
@ -0,0 +1,50 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 数据库连接表
|
|||
/// </summary>
|
|||
[Table("Base_DbLink")] |
|||
public class Base_DbLink |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 自然主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 连接名
|
|||
/// </summary>
|
|||
public String LinkName { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 连接字符串
|
|||
/// </summary>
|
|||
public String ConnectionStr { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 数据库类型
|
|||
/// </summary>
|
|||
public String DbType { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,46 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 部门表
|
|||
/// </summary>
|
|||
[Table("Base_Department")] |
|||
public class Base_Department |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 部门名
|
|||
/// </summary>
|
|||
public String Name { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 上级部门Id
|
|||
/// </summary>
|
|||
public String ParentId { get; set; } |
|||
|
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 系统角色表
|
|||
/// </summary>
|
|||
[Table("Base_Role")] |
|||
public class Base_Role |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 角色名
|
|||
/// </summary>
|
|||
public String RoleName { get; set; } |
|||
|
|||
} |
|||
} |
@ -0,0 +1,46 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 角色权限表
|
|||
/// </summary>
|
|||
[Table("Base_RoleAction")] |
|||
public class Base_RoleAction |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 用户Id
|
|||
/// </summary>
|
|||
public String RoleId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 权限Id
|
|||
/// </summary>
|
|||
public String ActionId { get; set; } |
|||
|
|||
} |
|||
} |
@ -0,0 +1,75 @@ |
|||
using System; |
|||
using System.ComponentModel; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 系统用户表
|
|||
/// </summary>
|
|||
[Table("Base_User")] |
|||
public class Base_User |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 用户名
|
|||
/// </summary>
|
|||
public String UserName { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 密码
|
|||
/// </summary>
|
|||
public String Password { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 姓名
|
|||
/// </summary>
|
|||
public String RealName { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 性别
|
|||
/// </summary>
|
|||
public Sex Sex { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 出生日期
|
|||
/// </summary>
|
|||
public DateTime? Birthday { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 所属部门Id
|
|||
/// </summary>
|
|||
public String DepartmentId { get; set; } |
|||
} |
|||
|
|||
public enum Sex |
|||
{ |
|||
[Description("男人")] |
|||
Man = 1, |
|||
|
|||
[Description("女人")] |
|||
Woman = 0 |
|||
} |
|||
} |
@ -0,0 +1,44 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 操作记录表
|
|||
/// </summary>
|
|||
[Table("Base_UserLog")] |
|||
public class Base_UserLog |
|||
{ |
|||
/// <summary>
|
|||
/// 自然主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人姓名
|
|||
/// </summary>
|
|||
public String CreatorRealName { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 日志类型
|
|||
/// </summary>
|
|||
public String LogType { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 日志内容
|
|||
/// </summary>
|
|||
public String LogContent { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,46 @@ |
|||
using System; |
|||
using System.ComponentModel.DataAnnotations; |
|||
using System.ComponentModel.DataAnnotations.Schema; |
|||
|
|||
namespace Coldairarrow.Entity.Base_Manage |
|||
{ |
|||
/// <summary>
|
|||
/// 用户角色表
|
|||
/// </summary>
|
|||
[Table("Base_UserRole")] |
|||
public class Base_UserRole |
|||
{ |
|||
|
|||
/// <summary>
|
|||
/// 主键
|
|||
/// </summary>
|
|||
[Key, Column(Order = 1)] |
|||
public String Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建时间
|
|||
/// </summary>
|
|||
public DateTime CreateTime { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 创建人Id
|
|||
/// </summary>
|
|||
public String CreatorId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 否已删除
|
|||
/// </summary>
|
|||
public Boolean Deleted { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 用户Id
|
|||
/// </summary>
|
|||
public String UserId { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 角色Id
|
|||
/// </summary>
|
|||
public String RoleId { get; set; } |
|||
|
|||
} |
|||
} |
@ -0,0 +1,33 @@ |
|||
using Coldairarrow.Entity.Base_Manage; |
|||
using Coldairarrow.Util; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Coldairarrow.Entity |
|||
{ |
|||
[Map(typeof(Base_User))] |
|||
public class Base_UserDTO : Base_User |
|||
{ |
|||
public string RoleNames { get => string.Join(",", RoleNameList ?? new List<string>()); } |
|||
public List<string> RoleIdList { get; set; } |
|||
public List<string> RoleNameList { get; set; } |
|||
public RoleTypes RoleType |
|||
{ |
|||
get |
|||
{ |
|||
int type = 0; |
|||
|
|||
var values = typeof(RoleTypes).GetEnumValues(); |
|||
foreach (var aValue in values) |
|||
{ |
|||
if (RoleNames.Contains(aValue.ToString())) |
|||
type += (int)aValue; |
|||
} |
|||
|
|||
return (RoleTypes)type; |
|||
} |
|||
} |
|||
public string DepartmentName { get; set; } |
|||
public string SexText { get => Sex.GetDescription(); } |
|||
public string BirthdayText { get => Birthday?.ToString("yyyy-MM-dd"); } |
|||
} |
|||
} |
@ -0,0 +1,32 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Coldairarrow.Entity.DTO |
|||
{ |
|||
public class CatDto |
|||
{ |
|||
public CatModel OneCat { get; set; } |
|||
|
|||
public CatModel TwoCat { get; set; } |
|||
|
|||
public CatModel LastCat { get; set; } |
|||
|
|||
public List<string> KeyWords { get; set; } |
|||
} |
|||
|
|||
public class CatModel |
|||
{ |
|||
/// <summary>
|
|||
/// 类目ID
|
|||
/// </summary>
|
|||
public string Id { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// 类目名称
|
|||
/// </summary>
|
|||
public string Text { get; set; } |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
namespace Coldairarrow.Entity |
|||
{ |
|||
/// <summary>
|
|||
/// 类型,菜单=0,页面=1,权限=2
|
|||
/// </summary>
|
|||
public enum ActionType |
|||
{ |
|||
菜单 = 0, |
|||
页面 = 1, |
|||
权限 = 2 |
|||
} |
|||
} |
@ -0,0 +1,14 @@ |
|||
using System; |
|||
|
|||
namespace Coldairarrow.Entity |
|||
{ |
|||
/// <summary>
|
|||
/// 系统角色类型
|
|||
/// </summary>
|
|||
[Flags] |
|||
public enum RoleTypes |
|||
{ |
|||
超级管理员 = 1, |
|||
部门管理员 = 2 |
|||
} |
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue