init
This commit is contained in:
commit
d3d65603ac
18
.gitignore
vendored
Normal file
18
.gitignore
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Build and Release Folders
|
||||||
|
bin-debug/
|
||||||
|
bin-release/
|
||||||
|
[Oo]bj/
|
||||||
|
[Bb]in/
|
||||||
|
|
||||||
|
# Other files and folders
|
||||||
|
.settings/
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.swf
|
||||||
|
*.air
|
||||||
|
*.ipa
|
||||||
|
*.apk
|
||||||
|
|
||||||
|
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
|
||||||
|
# should NOT be excluded as they contain compiler settings and other important
|
||||||
|
# information for Eclipse / Flash Builder.
|
63
ARW-net/.gitattributes
vendored
Normal file
63
ARW-net/.gitattributes
vendored
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
###############################################################################
|
||||||
|
# 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
|
273
ARW-net/.gitignore
vendored
Normal file
273
ARW-net/.gitignore
vendored
Normal file
@ -0,0 +1,273 @@
|
|||||||
|
## 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
|
||||||
|
/ZR.Admin.WebApi/appsettings.Stage.json
|
||||||
|
/CodeGenerate
|
||||||
|
/ZR.Admin.WebApi/appsettings.Production.json
|
||||||
|
/ZR.Admin.WebApi/wwwroot/uploads
|
||||||
|
/ZR.Admin.WebApi/wwwroot/Generatecode
|
||||||
|
/ZR.Admin.WebApi/wwwroot/export
|
||||||
|
/ZR.Vue/src/views/business/Gendemo.vue
|
||||||
|
/ZR.Admin.WebApi/Properties/launchSettings.json
|
||||||
|
/ZR.Admin.WebApi/ZRAdmin.xml
|
||||||
|
/ZR.Admin.WebApi/DataProtection
|
||||||
|
/Quartz.NET.WindowsService
|
||||||
|
/ZRAdmin-vue
|
10
ARW-net/.net_run.bat
Normal file
10
ARW-net/.net_run.bat
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
"age": 10,
|
||||||
|
"classId": "1547502470350114800",
|
||||||
|
"className": "1班",
|
||||||
|
"sex": "1",
|
||||||
|
"studentDescribe": "<p>啊实打实大苏打实打实实打实上的</p>",
|
||||||
|
"studentId": 1548629251954184200,
|
||||||
|
"studentImg": "/url",
|
||||||
|
"studentName": "张思1",
|
||||||
|
"studentService": [{service_name: "特殊服务", service_price: "999"}],
|
||||||
|
"studentTag": "a,v,c"
|
19
ARW-net/ARW.CodeGenerator/ARW.CodeGenerator.csproj
Normal file
19
ARW-net/ARW.CodeGenerator/ARW.CodeGenerator.csproj
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<AssemblyName>ARW.CodeGenerator</AssemblyName>
|
||||||
|
<RootNamespace>ARW.CodeGenerator</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
|
||||||
|
<ProjectReference Include="..\ARW.Common\ARW.Common.csproj" />
|
||||||
|
<ProjectReference Include="..\ARW.Model\ARW.Model.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="JinianNet.JNTemplate" Version="2.3.0" />
|
||||||
|
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.3.21" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
52
ARW-net/ARW.CodeGenerator/CodeGenerateOption.cs
Normal file
52
ARW-net/ARW.CodeGenerator/CodeGenerateOption.cs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
namespace ARW.CodeGenerator
|
||||||
|
{
|
||||||
|
public class CodeGenerateOption
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 项目命名空间
|
||||||
|
/// </summary>
|
||||||
|
public string BaseNamespace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 下级命名空间
|
||||||
|
/// </summary>
|
||||||
|
public string SubNamespace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 数据实体命名空间
|
||||||
|
/// </summary>
|
||||||
|
public string ModelsNamespace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 输入输出数据实体名称空间
|
||||||
|
/// </summary>
|
||||||
|
public string DtosNamespace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 仓储接口命名空间
|
||||||
|
/// </summary>
|
||||||
|
public string IRepositoriesNamespace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 仓储实现名称空间
|
||||||
|
/// </summary>
|
||||||
|
public string RepositoriesNamespace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 服务接口命名空间
|
||||||
|
/// </summary>
|
||||||
|
public string IServicsNamespace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 服务接口实现命名空间
|
||||||
|
/// </summary>
|
||||||
|
public string ServicesNamespace { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Api控制器命名空间
|
||||||
|
/// </summary>
|
||||||
|
public string ApiControllerNamespace { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 去掉的表头字符
|
||||||
|
/// </summary>
|
||||||
|
public string ReplaceTableNameStr { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 要生数据的表,用“,”分割
|
||||||
|
/// </summary>
|
||||||
|
//public string TableList { get; set; }
|
||||||
|
}
|
||||||
|
}
|
48
ARW-net/ARW.CodeGenerator/CodeGenerateTemplate.cs
Normal file
48
ARW-net/ARW.CodeGenerator/CodeGenerateTemplate.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using ARW.Model.System.Generate;
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成模板
|
||||||
|
/// </summary>
|
||||||
|
public class CodeGenerateTemplate
|
||||||
|
{
|
||||||
|
//模板调用
|
||||||
|
public static string QueryExp(string propertyName, string queryType)
|
||||||
|
{
|
||||||
|
if (queryType.Equals("EQ"))
|
||||||
|
{
|
||||||
|
return $"it => it.{ propertyName} == parm.{propertyName})";
|
||||||
|
}
|
||||||
|
if (queryType.Equals("GTE"))
|
||||||
|
{
|
||||||
|
return $"it => it.{ propertyName} >= parm.{propertyName})";
|
||||||
|
}
|
||||||
|
if (queryType.Equals("GT"))
|
||||||
|
{
|
||||||
|
return $"it => it.{ propertyName} > parm.{propertyName})";
|
||||||
|
}
|
||||||
|
if (queryType.Equals("LT"))
|
||||||
|
{
|
||||||
|
return $"it => it.{ propertyName} < parm.{propertyName})";
|
||||||
|
}
|
||||||
|
if (queryType.Equals("LTE"))
|
||||||
|
{
|
||||||
|
return $"it => it.{ propertyName} <= parm.{propertyName})";
|
||||||
|
}
|
||||||
|
if (queryType.Equals("NE"))
|
||||||
|
{
|
||||||
|
return $"it => it.{ propertyName} != parm.{propertyName})";
|
||||||
|
}
|
||||||
|
if (queryType.Equals("ARWKE"))
|
||||||
|
{
|
||||||
|
return $"it => it.{ propertyName}.Contains(parm.{propertyName}))";
|
||||||
|
}
|
||||||
|
return $"it => it.{ propertyName} == parm.{propertyName})";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
582
ARW-net/ARW.CodeGenerator/CodeGeneratorTool.cs
Normal file
582
ARW-net/ARW.CodeGenerator/CodeGeneratorTool.cs
Normal file
@ -0,0 +1,582 @@
|
|||||||
|
using Infrastructure;
|
||||||
|
using Infrastructure.Extensions;
|
||||||
|
using JinianNet.JNTemplate;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using ARW.CodeGenerator.Model;
|
||||||
|
using ARW.Model.System.Generate;
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成器
|
||||||
|
/// </remarks>
|
||||||
|
/// </summary>
|
||||||
|
public class CodeGeneratorTool
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成器配置
|
||||||
|
/// </summary>
|
||||||
|
private static CodeGenerateOption _option = new CodeGenerateOption();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成器入口方法
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dto"></param>
|
||||||
|
public static void Generate(GenerateDto dto)
|
||||||
|
{
|
||||||
|
_option.BaseNamespace = dto.GenTable.BaseNameSpace;
|
||||||
|
_option.SubNamespace = dto.GenTable.ModuleName.FirstUpperCase();
|
||||||
|
_option.DtosNamespace = _option.BaseNamespace + "Model";
|
||||||
|
_option.ModelsNamespace = _option.BaseNamespace + "Model";
|
||||||
|
_option.RepositoriesNamespace = _option.BaseNamespace + "Repository";
|
||||||
|
_option.IRepositoriesNamespace = _option.BaseNamespace + "Repository";
|
||||||
|
_option.IServicsNamespace = _option.BaseNamespace + "Service";
|
||||||
|
_option.ServicesNamespace = _option.BaseNamespace + "Service";
|
||||||
|
_option.ApiControllerNamespace = _option.BaseNamespace + "Admin.WebApi";
|
||||||
|
|
||||||
|
var vuePath = AppSettings.GetConfig("gen:vuePath");
|
||||||
|
dto.VueParentPath = dto.VueVersion == 3 ? "ARWAdmin-vue" : "ARW.Vue";
|
||||||
|
if (!vuePath.IsEmpty())
|
||||||
|
{
|
||||||
|
dto.VueParentPath = vuePath;
|
||||||
|
}
|
||||||
|
dto.GenOptions = _option;
|
||||||
|
|
||||||
|
string PKName = "Id";
|
||||||
|
string PKType = "int";
|
||||||
|
ReplaceDto replaceDto = new()
|
||||||
|
{
|
||||||
|
ModelTypeName = dto.GenTable.ClassName,//表名对应C# 实体类名
|
||||||
|
PermissionPrefix = dto.GenTable?.Options?.PermissionPrefix,
|
||||||
|
Author = dto.GenTable.FunctionAuthor,
|
||||||
|
ShowBtnAdd = dto.GenTable.Options.CheckedBtn.Any(f => f == 1),
|
||||||
|
ShowBtnEdit = dto.GenTable.Options.CheckedBtn.Any(f => f == 2),
|
||||||
|
ShowBtnDelete = dto.GenTable.Options.CheckedBtn.Any(f => f == 3),
|
||||||
|
ShowBtnExport = dto.GenTable.Options.CheckedBtn.Any(f => f == 4),
|
||||||
|
ShowBtnView = dto.GenTable.Options.CheckedBtn.Any(f => f == 5)
|
||||||
|
};
|
||||||
|
|
||||||
|
//循环表字段信息
|
||||||
|
foreach (GenTableColumn dbFieldInfo in dto.GenTable.Columns.OrderBy(x => x.Sort))
|
||||||
|
{
|
||||||
|
if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement)
|
||||||
|
{
|
||||||
|
PKName = dbFieldInfo.CsharpField;
|
||||||
|
PKType = dbFieldInfo.CsharpType;
|
||||||
|
}
|
||||||
|
if (dbFieldInfo.HtmlType.Equals(GenConstants.HTML_IMAGE_UPLOAD) || dbFieldInfo.HtmlType.Equals(GenConstants.HTML_FILE_UPLOAD))
|
||||||
|
{
|
||||||
|
replaceDto.UploadFile = 1;
|
||||||
|
}
|
||||||
|
dbFieldInfo.CsharpFieldFl = dbFieldInfo.CsharpField.FirstLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
replaceDto.PKName = PKName;
|
||||||
|
replaceDto.PKType = PKType;
|
||||||
|
replaceDto.FistLowerPk = PKName.FirstLowerCase();
|
||||||
|
InitJntTemplate(dto, replaceDto);
|
||||||
|
|
||||||
|
GenerateModels(replaceDto, dto);
|
||||||
|
GenerateRepository(replaceDto, dto);
|
||||||
|
GenerateService(replaceDto, dto);
|
||||||
|
GenerateControllers(replaceDto, dto);
|
||||||
|
if (dto.VueVersion == 3)
|
||||||
|
{
|
||||||
|
GenerateVue3Views(replaceDto, dto);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
replaceDto.VueViewListHtml = GenerateVueTableList();
|
||||||
|
replaceDto.VueQueryFormHtml = GenerateVueQueryForm();
|
||||||
|
replaceDto.VueViewFormHtml = GenerateCurdForm();
|
||||||
|
|
||||||
|
GenerateVueViews(replaceDto, dto);
|
||||||
|
}
|
||||||
|
GenerateVueJs(replaceDto, dto);
|
||||||
|
GenerateSql(replaceDto, dto);
|
||||||
|
|
||||||
|
if (dto.IsPreview) return;
|
||||||
|
|
||||||
|
foreach (var item in dto.GenCodes)
|
||||||
|
{
|
||||||
|
item.Path = Path.Combine(dto.GenCodePath, item.Path);
|
||||||
|
FileHelper.WriteAndSave(item.Path, item.Content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#region 读取模板
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生成实体类Model
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="generateDto"></param>
|
||||||
|
/// <param name="replaceDto">替换实体</param>
|
||||||
|
private static void GenerateModels(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("TplModel.txt");
|
||||||
|
var tplDto = FileHelper.ReadJtTemplate("TplDto.txt");
|
||||||
|
|
||||||
|
string fullPath = Path.Combine(_option.ModelsNamespace, "Models", _option.SubNamespace, replaceDto.ModelTypeName + ".cs");
|
||||||
|
string fullPathDto = Path.Combine(_option.ModelsNamespace, "Dto", _option.SubNamespace, $"{replaceDto.ModelTypeName}Dto.cs");
|
||||||
|
|
||||||
|
generateDto.GenCodes.Add(new GenCode(1, "Model.cs", fullPath, tpl.Render()));
|
||||||
|
generateDto.GenCodes.Add(new GenCode(2, "Dto.cs", fullPathDto, tplDto.Render()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生成Repository层代码文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="generateDto"></param>
|
||||||
|
/// <param name="replaceDto">替换实体</param>
|
||||||
|
private static void GenerateRepository(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("TplRepository.txt");
|
||||||
|
var result = tpl.Render();
|
||||||
|
var fullPath = Path.Combine(_option.RepositoriesNamespace, _option.SubNamespace, $"{replaceDto.ModelTypeName}Repository.cs");
|
||||||
|
|
||||||
|
generateDto.GenCodes.Add(new GenCode(3, "Repository.cs", fullPath, result));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生成Service文件
|
||||||
|
/// </summary>
|
||||||
|
private static void GenerateService(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("TplService.txt");
|
||||||
|
var tpl2 = FileHelper.ReadJtTemplate("TplIService.txt");
|
||||||
|
var result = tpl.Render();
|
||||||
|
var result2 = tpl2.Render();
|
||||||
|
|
||||||
|
var fullPath = Path.Combine(_option.ServicesNamespace, _option.SubNamespace, $"{replaceDto.ModelTypeName}Service.cs");
|
||||||
|
var fullPath2 = Path.Combine(_option.IServicsNamespace, _option.SubNamespace, $"I{_option.SubNamespace}Service", $"I{replaceDto.ModelTypeName}Service.cs");
|
||||||
|
|
||||||
|
generateDto.GenCodes.Add(new GenCode(4, "Service.cs", fullPath, result));
|
||||||
|
generateDto.GenCodes.Add(new GenCode(4, "IService.cs", fullPath2, result2));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生成控制器ApiControllers文件
|
||||||
|
/// </summary>
|
||||||
|
private static void GenerateControllers(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("TplControllers.txt");
|
||||||
|
tpl.Set("QueryCondition", replaceDto.QueryCondition);
|
||||||
|
var result = tpl.Render();
|
||||||
|
|
||||||
|
var fullPath = Path.Combine(_option.ApiControllerNamespace, "Controllers", _option.SubNamespace, $"{replaceDto.ModelTypeName}Controller.cs");
|
||||||
|
generateDto.GenCodes.Add(new GenCode(5, "Controller.cs", fullPath, result));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生成Vue页面
|
||||||
|
private static void GenerateVueViews(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
string fileName = string.Empty;
|
||||||
|
switch (generateDto.GenTable.TplCategory)
|
||||||
|
{
|
||||||
|
case "tree":
|
||||||
|
fileName = "TplTreeVue.txt";
|
||||||
|
break;
|
||||||
|
case "crud":
|
||||||
|
fileName = "TplVue.txt";
|
||||||
|
break;
|
||||||
|
case "subNav":
|
||||||
|
fileName = "TplVue.txt";
|
||||||
|
break;
|
||||||
|
case "subNavMore":
|
||||||
|
fileName = "TplVue.txt";
|
||||||
|
break;
|
||||||
|
case "select":
|
||||||
|
fileName = "TplVueSelect.txt";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var tpl = FileHelper.ReadJtTemplate(fileName);
|
||||||
|
tpl.Set("vueQueryFormHtml", replaceDto.VueQueryFormHtml);
|
||||||
|
tpl.Set("VueViewFormContent", replaceDto.VueViewFormHtml);//添加、修改表单
|
||||||
|
tpl.Set("VueViewListContent", replaceDto.VueViewListHtml);//查询 table列
|
||||||
|
|
||||||
|
var result = tpl.Render();
|
||||||
|
var fullPath = Path.Combine(generateDto.VueParentPath, "src", "views", generateDto.GenTable.ModuleName.FirstLowerCase(), $"{generateDto.GenTable.BusinessName.FirstUpperCase()}.vue");
|
||||||
|
|
||||||
|
generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, result));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// vue3
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="replaceDto"></param>
|
||||||
|
/// <param name="generateDto"></param>
|
||||||
|
private static void GenerateVue3Views(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
string fileName = generateDto.GenTable.TplCategory switch
|
||||||
|
{
|
||||||
|
"tree" => "TreeVue.txt",
|
||||||
|
"crud" => "Vue.txt",
|
||||||
|
//case "select":
|
||||||
|
// fileName = "TplVueSelect.txt";
|
||||||
|
// break;
|
||||||
|
_ => "Vue.txt",
|
||||||
|
};
|
||||||
|
fileName = Path.Combine("v3", fileName);
|
||||||
|
var tpl = FileHelper.ReadJtTemplate(fileName);
|
||||||
|
tpl.Set("treeCode", generateDto.GenTable?.Options?.TreeCode?.FirstLowerCase());
|
||||||
|
tpl.Set("treeName", generateDto.GenTable?.Options?.TreeName?.FirstLowerCase());
|
||||||
|
tpl.Set("treeParentCode", generateDto.GenTable?.Options?.TreeParentCode?.FirstLowerCase());
|
||||||
|
tpl.Set("options", generateDto.GenTable?.Options);
|
||||||
|
|
||||||
|
var result = tpl.Render();
|
||||||
|
var fullPath = Path.Combine(generateDto.VueParentPath, "src", "views", generateDto.GenTable.ModuleName.FirstLowerCase(), $"{generateDto.GenTable.BusinessName.FirstUpperCase()}.vue");
|
||||||
|
generateDto.GenCodes.Add(new GenCode(16, "index.vue", fullPath, result));
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 生成vue页面api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="replaceDto"></param>
|
||||||
|
/// <param name="generateDto"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static void GenerateVueJs(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("TplVueApi.txt");
|
||||||
|
var result = tpl.Render();
|
||||||
|
|
||||||
|
string fileName;
|
||||||
|
if (generateDto.VueVersion == 3)
|
||||||
|
{
|
||||||
|
fileName = generateDto.GenTable.BusinessName.ToLower() + ".js";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fileName = generateDto.GenTable.BusinessName.FirstLowerCase() + ".js";
|
||||||
|
}
|
||||||
|
string fullPath = Path.Combine(generateDto.VueParentPath, "src", "api", generateDto.GenTable.ModuleName.FirstLowerCase(), fileName);
|
||||||
|
|
||||||
|
generateDto.GenCodes.Add(new GenCode(7, "api.js", fullPath, result));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生成SQL
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="replaceDto"></param>
|
||||||
|
/// <param name="generateDto"></param>
|
||||||
|
public static void GenerateSql(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||||
|
{
|
||||||
|
var tempName = "";
|
||||||
|
switch (generateDto.DbType)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
tempName = "MySqlTemplate";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
tempName = "SqlTemplate";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
var tpl = FileHelper.ReadJtTemplate($"{tempName}.txt");
|
||||||
|
tpl.Set("parentId", generateDto.GenTable?.Options?.ParentMenuId ?? 0);
|
||||||
|
var result = tpl.Render();
|
||||||
|
string fullPath = Path.Combine(generateDto.GenCodePath, "sql", generateDto.GenTable.BusinessName + ".sql");
|
||||||
|
|
||||||
|
generateDto.GenCodes.Add(new GenCode(8, "sql", fullPath, result));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 生成vue页面查询form
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GenerateVueQueryForm()
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("QueryForm.txt");
|
||||||
|
var result = tpl.Render();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 生成vue页面table
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GenerateVueTableList()
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("TableList.txt");
|
||||||
|
var result = tpl.Render();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 生成vue表单
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GenerateCurdForm()
|
||||||
|
{
|
||||||
|
var tpl = FileHelper.ReadJtTemplate("CurdForm.txt");
|
||||||
|
var result = tpl.Render();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 帮助方法
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 如果有前缀替换将前缀替换成空,替换下划线"_"为空再将首字母大写
|
||||||
|
/// 表名转换成C#类名
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tableName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetClassName(string tableName)
|
||||||
|
{
|
||||||
|
bool autoRemovePre = AppSettings.GetAppConfig(GenConstants.Gen_autoPre, false);
|
||||||
|
string tablePrefix = AppSettings.GetAppConfig<string>(GenConstants.Gen_tablePrefix);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(tablePrefix) && autoRemovePre)
|
||||||
|
{
|
||||||
|
string[] prefixList = tablePrefix.Split(",", StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
for (int i = 0; i < prefixList.Length; i++)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(prefixList[i].ToString()))
|
||||||
|
{
|
||||||
|
tableName = tableName.Replace(prefixList[i], "", StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tableName.UnderScoreToCamelCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取前端标签名
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="columnDescription"></param>
|
||||||
|
/// <param name="columnName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetLabelName(string columnDescription, string columnName)
|
||||||
|
{
|
||||||
|
return string.IsNullOrEmpty(columnDescription) ? columnName : columnDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 首字母转小写,模板使用(勿删)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string FirstLowerCase(string str)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return string.IsNullOrEmpty(str) ? str : str.Substring(0, 1).ToLower() + str[1..];
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取C# 类型
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sDatatype"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetCSharpDatatype(string sDatatype)
|
||||||
|
{
|
||||||
|
sDatatype = sDatatype.ToLower();
|
||||||
|
string sTempDatatype = sDatatype switch
|
||||||
|
{
|
||||||
|
"int" or "number" or "integer" or "smallint" => "int",
|
||||||
|
"bigint" => "long",
|
||||||
|
"tinyint" => "byte",
|
||||||
|
"numeric" or "real" or "float" => "float",
|
||||||
|
"decimal" or "numer(8,2)" or "numeric" => "decimal",
|
||||||
|
"bit" => "bool",
|
||||||
|
"date" or "datetime" or "datetime2" or "smalldatetime" or "timestamp" => "DateTime",
|
||||||
|
"money" or "smallmoney" => "decimal",
|
||||||
|
_ => "string",
|
||||||
|
};
|
||||||
|
return sTempDatatype;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsNumber(string tableDataType)
|
||||||
|
{
|
||||||
|
string[] arr = new string[] { "int", "long" };
|
||||||
|
return arr.Any(f => f.Contains(GetCSharpDatatype(tableDataType)));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 初始化信息
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化表信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dbName"></param>
|
||||||
|
/// <param name="userName"></param>
|
||||||
|
/// <param name="tableName"></param>
|
||||||
|
/// <param name="desc"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static GenTable InitTable(string dbName, string userName, string tableName, string desc)
|
||||||
|
{
|
||||||
|
GenTable genTable = new()
|
||||||
|
{
|
||||||
|
DbName = dbName,
|
||||||
|
BaseNameSpace = "ARW.",//导入默认命名空间前缀
|
||||||
|
ModuleName = "business",//导入默认模块名
|
||||||
|
ClassName = GetClassName(tableName).FirstUpperCase(),
|
||||||
|
BusinessName = tableName.UnderScoreToCamelCase().FirstUpperCase(),
|
||||||
|
FunctionAuthor = AppSettings.GetConfig(GenConstants.Gen_author),
|
||||||
|
TableName = tableName,
|
||||||
|
TableComment = desc,
|
||||||
|
FunctionName = desc,
|
||||||
|
Create_by = userName,
|
||||||
|
Options = new Options()
|
||||||
|
{
|
||||||
|
SortType = "asc",
|
||||||
|
CheckedBtn = new int[] { 1, 2, 3 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
genTable.Options.PermissionPrefix = $"{genTable.ModuleName.ToLower()}:{genTable.ClassName.ToLower()}";//权限
|
||||||
|
|
||||||
|
return genTable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化列属性字段数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="genTable"></param>
|
||||||
|
/// <param name="dbColumnInfos"></param>
|
||||||
|
public static List<GenTableColumn> InitGenTableColumn(GenTable genTable, List<DbColumnInfo> dbColumnInfos)
|
||||||
|
{
|
||||||
|
List<GenTableColumn> genTableColumns = new();
|
||||||
|
foreach (var column in dbColumnInfos)
|
||||||
|
{
|
||||||
|
genTableColumns.Add(InitColumnField(genTable, column));
|
||||||
|
}
|
||||||
|
return genTableColumns;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化表字段数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="genTable"></param>
|
||||||
|
/// <param name="column"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static GenTableColumn InitColumnField(GenTable genTable, DbColumnInfo column)
|
||||||
|
{
|
||||||
|
GenTableColumn genTableColumn = new()
|
||||||
|
{
|
||||||
|
ColumnName = column.DbColumnName.FirstLowerCase(),
|
||||||
|
ColumnComment = column.ColumnDescription,
|
||||||
|
IsPk = column.IsPrimarykey,
|
||||||
|
ColumnType = column.DataType,
|
||||||
|
TableId = genTable.TableId,
|
||||||
|
TableName = genTable.TableName,
|
||||||
|
CsharpType = GetCSharpDatatype(column.DataType),
|
||||||
|
CsharpField = column.DbColumnName.ConvertToPascal("_"),
|
||||||
|
IsRequired = !column.IsNullable,
|
||||||
|
IsIncrement = column.IsIdentity,
|
||||||
|
Create_by = genTable.Create_by,
|
||||||
|
Create_time = DateTime.Now,
|
||||||
|
IsInsert = !column.IsIdentity || GenConstants.inputDtoNoField.Any(f => f.Contains(column.DbColumnName, StringComparison.OrdinalIgnoreCase)),//非自增字段都需要插入
|
||||||
|
IsEdit = true,
|
||||||
|
IsQuery = false,
|
||||||
|
HtmlType = GenConstants.HTML_INPUT,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (GenConstants.imageFiled.Any(f => column.DbColumnName.ToLower().Contains(f.ToLower())))
|
||||||
|
{
|
||||||
|
genTableColumn.HtmlType = GenConstants.HTML_IMAGE_UPLOAD;
|
||||||
|
}
|
||||||
|
else if (GenConstants.COLUMNTYPE_TIME.Any(f => genTableColumn.CsharpType.ToLower().Contains(f.ToLower())))
|
||||||
|
{
|
||||||
|
genTableColumn.HtmlType = GenConstants.HTML_DATETIME;
|
||||||
|
}
|
||||||
|
else if (GenConstants.radioFiled.Any(f => column.DbColumnName.EndsWith(f, StringComparison.OrdinalIgnoreCase)) ||
|
||||||
|
GenConstants.radioFiled.Any(f => column.DbColumnName.StartsWith(f, StringComparison.OrdinalIgnoreCase)))
|
||||||
|
{
|
||||||
|
genTableColumn.HtmlType = GenConstants.HTML_RADIO;
|
||||||
|
}
|
||||||
|
else if (GenConstants.selectFiled.Any(f => column.DbColumnName == f) ||
|
||||||
|
GenConstants.selectFiled.Any(f => column.DbColumnName.EndsWith(f, StringComparison.OrdinalIgnoreCase)))
|
||||||
|
{
|
||||||
|
genTableColumn.HtmlType = GenConstants.HTML_SELECT;
|
||||||
|
}
|
||||||
|
else if (column.Length > 500)
|
||||||
|
{
|
||||||
|
genTableColumn.HtmlType = GenConstants.HTML_TEXTAREA;
|
||||||
|
}
|
||||||
|
//编辑字段
|
||||||
|
if (column.IsIdentity || column.IsPrimarykey || GenConstants.COLUMNNAME_NOT_EDIT.Any(f => column.DbColumnName.Contains(f)))
|
||||||
|
{
|
||||||
|
genTableColumn.IsEdit = false;
|
||||||
|
}
|
||||||
|
//列表字段
|
||||||
|
if (!GenConstants.COLUMNNAME_NOT_ARWST.Any(f => column.DbColumnName.Contains(f) && !column.IsPrimarykey))
|
||||||
|
{
|
||||||
|
genTableColumn.IsList = true;
|
||||||
|
}
|
||||||
|
//时间类型初始化between范围查询
|
||||||
|
if (genTableColumn.CsharpType == GenConstants.TYPE_DATE)
|
||||||
|
{
|
||||||
|
genTableColumn.QueryType = "BETWEEN";
|
||||||
|
}
|
||||||
|
|
||||||
|
return genTableColumn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 初始化Jnt模板
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dto"></param>
|
||||||
|
/// <param name="replaceDto"></param>
|
||||||
|
private static void InitJntTemplate(GenerateDto dto, ReplaceDto replaceDto)
|
||||||
|
{
|
||||||
|
Engine.Current.Clean();
|
||||||
|
dto.GenTable.Columns = dto.GenTable.Columns.OrderBy(x => x.Sort).ToList();
|
||||||
|
bool showCustomInput = dto.GenTable.Columns.Any(f => f.HtmlType.Equals(GenConstants.HTML_CUSTOM_INPUT, StringComparison.OrdinalIgnoreCase));
|
||||||
|
//jnt模板引擎全局变量
|
||||||
|
Engine.Configure((options) =>
|
||||||
|
{
|
||||||
|
options.TagPrefix = "${";
|
||||||
|
options.TagSuffix = "}";
|
||||||
|
options.TagFlag = '$';
|
||||||
|
options.OutMode = OutMode.Auto;
|
||||||
|
//options.DisableeLogogram = true;//禁用简写
|
||||||
|
options.Data.Set("refs", "$");//特殊标签替换
|
||||||
|
options.Data.Set("t", "$");//特殊标签替换
|
||||||
|
options.Data.Set("modal", "$");//特殊标签替换
|
||||||
|
options.Data.Set("index", "$");//特殊标签替换
|
||||||
|
options.Data.Set("confirm", "$");//特殊标签替换
|
||||||
|
options.Data.Set("nextTick", "$");
|
||||||
|
options.Data.Set("replaceDto", replaceDto);
|
||||||
|
options.Data.Set("options", dto.GenOptions);
|
||||||
|
options.Data.Set("genTable", dto.GenTable);
|
||||||
|
//options.Data.Set("btns", dto.CheckedBtn);
|
||||||
|
options.Data.Set("showCustomInput", showCustomInput);
|
||||||
|
options.Data.Set("tool", new CodeGeneratorTool());
|
||||||
|
options.Data.Set("codeTool", new CodeGenerateTemplate());
|
||||||
|
options.EnableCache = true;
|
||||||
|
//...其它数据
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#region 模板用
|
||||||
|
/// <summary>
|
||||||
|
/// 模板用
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool CheckInputDtoNoField(string str)
|
||||||
|
{
|
||||||
|
return GenConstants.inputDtoNoField.Any(f => f.Contains(str, StringComparison.OrdinalIgnoreCase));
|
||||||
|
}
|
||||||
|
public static bool CheckTree(GenTable genTable, string csharpField)
|
||||||
|
{
|
||||||
|
return (genTable.TplCategory.Equals("tree", StringComparison.OrdinalIgnoreCase) && genTable?.Options?.TreeParentCode != null && csharpField.Equals(genTable?.Options?.TreeParentCode));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
70
ARW-net/ARW.CodeGenerator/DbProvider.cs
Normal file
70
ARW-net/ARW.CodeGenerator/DbProvider.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
using Infrastructure;
|
||||||
|
using Infrastructure.Extensions;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成数据库连接
|
||||||
|
/// </summary>
|
||||||
|
public class DbProvider
|
||||||
|
{
|
||||||
|
protected static SqlSugarClient CodeDb;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取动态连接字符串
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dbName">数据库名</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public SqlSugarClient GetSugarDbContext(string dbName = "")
|
||||||
|
{
|
||||||
|
string connStr = AppSettings.GetConfig(GenConstants.Gen_conn);
|
||||||
|
int dbType = AppSettings.GetAppConfig(GenConstants.Gen_conn_dbType, 0);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(dbName))
|
||||||
|
{
|
||||||
|
string replaceStr = GetValue(connStr, "Database=", ";");
|
||||||
|
string replaceStr2 = GetValue(connStr, "Initial Catalog=", ";");
|
||||||
|
if (replaceStr.IsNotEmpty())
|
||||||
|
{
|
||||||
|
connStr = connStr.Replace(replaceStr, dbName, StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
if (replaceStr2.IsNotEmpty())
|
||||||
|
{
|
||||||
|
connStr = connStr.Replace(replaceStr2, dbName, StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var db = new SqlSugarClient(new List<ConnectionConfig>()
|
||||||
|
{
|
||||||
|
new ConnectionConfig(){
|
||||||
|
ConnectionString = connStr,
|
||||||
|
DbType = (DbType)dbType,
|
||||||
|
IsAutoCloseConnection = true,//开启自动释放模式和EF原理一样
|
||||||
|
InitKeyType = InitKeyType.Attribute,//从特性读取主键和自增列信息
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
CodeDb = db;
|
||||||
|
return db;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获得字符串中开始和结束字符串中间得值
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str">字符串</param>
|
||||||
|
/// <param name="s">开始</param>
|
||||||
|
/// <param name="e">结束</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetValue(string str, string s, string e)
|
||||||
|
{
|
||||||
|
Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);
|
||||||
|
return rg.Match(str).Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
190
ARW-net/ARW.CodeGenerator/FileHelper.cs
Normal file
190
ARW-net/ARW.CodeGenerator/FileHelper.cs
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
using JinianNet.JNTemplate;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator
|
||||||
|
{
|
||||||
|
public class FileHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 创建文件夹
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool CreateDirectory(string path)
|
||||||
|
{
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||||
|
{
|
||||||
|
path = path.Replace("\\", "/").Replace("//", "/");
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(path))
|
||||||
|
{
|
||||||
|
DirectoryInfo info = Directory.CreateDirectory(path);
|
||||||
|
Console.WriteLine("不存在创建文件夹" + info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"创建文件夹出错了,{ex.Message}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 写文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">完整路径带扩展名的</param>
|
||||||
|
/// <param name="content"></param>
|
||||||
|
public static void WriteAndSave(string path, string content)
|
||||||
|
{
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||||
|
{
|
||||||
|
path = path.Replace("\\", "/").Replace("//", "/");
|
||||||
|
}
|
||||||
|
if (!Directory.Exists(Path.GetDirectoryName(path)))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(Path.GetDirectoryName(path));
|
||||||
|
}
|
||||||
|
Console.WriteLine("写入文件:" + path);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//实例化一个文件流--->与写入文件相关联
|
||||||
|
using var fs = new FileStream(path, FileMode.Create, FileAccess.Write);
|
||||||
|
//实例化一个StreamWriter-->与fs相关联
|
||||||
|
using var sw = new StreamWriter(fs);
|
||||||
|
//开始写入
|
||||||
|
sw.Write(content);
|
||||||
|
//清空缓冲区
|
||||||
|
sw.Flush();
|
||||||
|
//关闭流
|
||||||
|
sw.Close();
|
||||||
|
fs.Close();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("写入文件出错了:" + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从代码模板中读取内容
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="templateName">模板名称,应包括文件扩展名称。比如:template.txt</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string ReadTemplate(string tplName)
|
||||||
|
{
|
||||||
|
string path = Environment.CurrentDirectory;
|
||||||
|
string fullName = Path.Combine(path, "wwwroot", "CodeGenTemplate", tplName);
|
||||||
|
|
||||||
|
Console.WriteLine("开始读取模板=" + fullName);
|
||||||
|
string temp = fullName;
|
||||||
|
string str = "";
|
||||||
|
if (!File.Exists(temp))
|
||||||
|
{
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
StreamReader sr = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
sr = new StreamReader(temp);
|
||||||
|
str = sr.ReadToEnd(); // 读取文件
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"读取模板出错了{ex.Message}");
|
||||||
|
}
|
||||||
|
sr?.Close();
|
||||||
|
sr?.Dispose();
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ITemplate ReadJtTemplate(string tplName)
|
||||||
|
{
|
||||||
|
string path = Environment.CurrentDirectory;
|
||||||
|
string fullName = Path.Combine(path, "wwwroot", "CodeGenTemplate", tplName);
|
||||||
|
if (File.Exists(fullName))
|
||||||
|
{
|
||||||
|
return Engine.LoadTemplate(fullName);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 压缩代码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="zipPath"></param>
|
||||||
|
/// <param name="genCodePath"></param>
|
||||||
|
/// <param name="zipFileName">压缩后的文件名</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool ZipGenCode(string zipPath, string genCodePath,string zipFileName)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(zipPath)) return false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CreateDirectory(genCodePath);
|
||||||
|
string zipFileFullName = Path.Combine(zipPath, zipFileName);
|
||||||
|
if (File.Exists(zipFileFullName))
|
||||||
|
{
|
||||||
|
File.Delete(zipFileFullName);
|
||||||
|
}
|
||||||
|
|
||||||
|
ZipFile.CreateFromDirectory(genCodePath, zipFileFullName);
|
||||||
|
DeleteDirectory(genCodePath);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("压缩文件出错。" + ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除指定目录下的所有文件及文件夹(保留目录)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="file">文件目录</param>
|
||||||
|
public static void DeleteDirectory(string file)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//判断文件夹是否还存在
|
||||||
|
if (Directory.Exists(file))
|
||||||
|
{
|
||||||
|
DirectoryInfo fileInfo = new DirectoryInfo(file);
|
||||||
|
//去除文件夹的只读属性
|
||||||
|
fileInfo.Attributes = FileAttributes.Normal & FileAttributes.Directory;
|
||||||
|
foreach (string f in Directory.GetFileSystemEntries(file))
|
||||||
|
{
|
||||||
|
if (File.Exists(f))
|
||||||
|
{
|
||||||
|
//去除文件的只读属性
|
||||||
|
File.SetAttributes(file, FileAttributes.Normal);
|
||||||
|
//如果有子文件删除文件
|
||||||
|
File.Delete(f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//循环递归删除子文件夹
|
||||||
|
DeleteDirectory(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//删除空文件夹
|
||||||
|
Directory.Delete(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex) // 异常处理
|
||||||
|
{
|
||||||
|
Console.WriteLine("代码生成异常" + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
144
ARW-net/ARW.CodeGenerator/GenConstants.cs
Normal file
144
ARW-net/ARW.CodeGenerator/GenConstants.cs
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成常量
|
||||||
|
/// </summary>
|
||||||
|
public class GenConstants
|
||||||
|
{
|
||||||
|
public static string Gen_conn = "gen:conn";
|
||||||
|
public static string Gen_conn_dbType = "gen:dbType";
|
||||||
|
public static string Gen_author = "gen:author";
|
||||||
|
public static string Gen_autoPre = "gen:autoPre";
|
||||||
|
public static string Gen_tablePrefix = "gen:tablePrefix";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// InputDto输入实体是不包含字段
|
||||||
|
/// </summary>
|
||||||
|
public static readonly string[] inputDtoNoField = new string[] { "createTime", "updateTime", "addtime", "create_time", "update_time" };
|
||||||
|
/// <summary>
|
||||||
|
/// 图片字段
|
||||||
|
/// </summary>
|
||||||
|
public static readonly string[] imageFiled = new string[] { "icon", "img", "image", "url", "pic", "photo", "avatar" };
|
||||||
|
/// <summary>
|
||||||
|
/// 下拉框字段
|
||||||
|
/// </summary>
|
||||||
|
public static readonly string[] selectFiled = new string[] { "status", "type", "state", "sex", "gender" };
|
||||||
|
/// <summary>
|
||||||
|
/// 单选按钮字段
|
||||||
|
/// </summary>
|
||||||
|
public static readonly string[] radioFiled = new string[] { "status", "state", "is"};
|
||||||
|
|
||||||
|
|
||||||
|
/** 单表(增删改查) */
|
||||||
|
public static string TPL_CRUD = "crud";
|
||||||
|
|
||||||
|
/** 树表(增删改查) */
|
||||||
|
public static string TPL_TREE = "tree";
|
||||||
|
|
||||||
|
/** 主子表(增删改查) */
|
||||||
|
public static string TPL_SUB = "sub";
|
||||||
|
|
||||||
|
/** 树编码字段 */
|
||||||
|
public static string TREE_CODE = "treeCode";
|
||||||
|
|
||||||
|
/** 树父编码字段 */
|
||||||
|
public static string TREE_PARENT_CODE = "treeParentCode";
|
||||||
|
|
||||||
|
/** 树名称字段 */
|
||||||
|
public static string TREE_NAME = "treeName";
|
||||||
|
|
||||||
|
/** 上级菜单ID字段 */
|
||||||
|
public static string PARENT_MENU_ID = "parentMenuId";
|
||||||
|
|
||||||
|
/** 上级菜单名称字段 */
|
||||||
|
public static string PARENT_MENU_NAME = "parentMenuName";
|
||||||
|
|
||||||
|
/** 数据库字符串类型 */
|
||||||
|
public static string[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" };
|
||||||
|
|
||||||
|
/** 数据库文本类型 */
|
||||||
|
public static string[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" };
|
||||||
|
|
||||||
|
/** 数据库时间类型 */
|
||||||
|
public static string[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
|
||||||
|
|
||||||
|
/** 页面不需要编辑字段 */
|
||||||
|
public static string[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "delFlag" };
|
||||||
|
|
||||||
|
/** 页面不需要显示的列表字段 */
|
||||||
|
public static string[] COLUMNNAME_NOT_ARWST = { "create_by", "create_time", "delFlag", "update_by",
|
||||||
|
"update_time" , "password"};
|
||||||
|
|
||||||
|
/** 页面不需要查询字段 */
|
||||||
|
public static string[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "delFlag", "update_by",
|
||||||
|
"update_time", "remark" };
|
||||||
|
|
||||||
|
/** Entity基类字段 */
|
||||||
|
public static string[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
|
||||||
|
|
||||||
|
/** Tree基类字段 */
|
||||||
|
public static string[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" };
|
||||||
|
|
||||||
|
/** 文本框 */
|
||||||
|
public static string HTML_INPUT = "input";
|
||||||
|
/** 数字框 */
|
||||||
|
public static string HTML_INPUT_NUMBER = "inputNumber";
|
||||||
|
|
||||||
|
/** 文本域 */
|
||||||
|
public static string HTML_TEXTAREA = "textarea";
|
||||||
|
|
||||||
|
/** 下拉框 */
|
||||||
|
public static string HTML_SELECT = "select";
|
||||||
|
|
||||||
|
/** 单选框 */
|
||||||
|
public static string HTML_RADIO = "radio";
|
||||||
|
|
||||||
|
/** 复选框 */
|
||||||
|
public static string HTML_CHECKBOX = "checkbox";
|
||||||
|
|
||||||
|
/** 日期控件 */
|
||||||
|
public static string HTML_DATETIME = "datetime";
|
||||||
|
|
||||||
|
/** 图片上传控件 */
|
||||||
|
public static string HTML_IMAGE_UPLOAD = "imageUpload";
|
||||||
|
|
||||||
|
/** 文件上传控件 */
|
||||||
|
public static string HTML_FILE_UPLOAD = "fileUpload";
|
||||||
|
|
||||||
|
/** 富文本控件 */
|
||||||
|
public static string HTML_EDITOR = "editor";
|
||||||
|
// 自定义排序
|
||||||
|
public static string HTML_SORT = "sort";
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义输入框
|
||||||
|
/// </summary>
|
||||||
|
public static string HTML_CUSTOM_INPUT = "customInput";
|
||||||
|
//颜色选择器
|
||||||
|
public static string HTML_COLORPICKER = "colorPicker";
|
||||||
|
//switch开关
|
||||||
|
public static string HTML_SWITCH { get; set; }
|
||||||
|
|
||||||
|
/** 字符串类型 */
|
||||||
|
public static string TYPE_STRING = "string";
|
||||||
|
|
||||||
|
/** 整型 */
|
||||||
|
public static string TYPE_INT = "int";
|
||||||
|
|
||||||
|
/** 长整型 */
|
||||||
|
public static string TYPE_LONG = "long";
|
||||||
|
|
||||||
|
/** 浮点型 */
|
||||||
|
public static string TYPE_DOUBLE = "Double";
|
||||||
|
|
||||||
|
/** 时间类型 */
|
||||||
|
public static string TYPE_DATE = "DateTime";
|
||||||
|
|
||||||
|
/** 模糊查询 */
|
||||||
|
public static string QUERY_ARWKE = "ARWKE";
|
||||||
|
|
||||||
|
/** 需要 */
|
||||||
|
public static string REQUIRE = "1";
|
||||||
|
}
|
||||||
|
}
|
71
ARW-net/ARW.CodeGenerator/Model/GenerateDto.cs
Normal file
71
ARW-net/ARW.CodeGenerator/Model/GenerateDto.cs
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using ARW.Model.System.Generate;
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator.Model
|
||||||
|
{
|
||||||
|
public class GenerateDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// vue版本
|
||||||
|
/// </summary>
|
||||||
|
public int VueVersion { get; set; }
|
||||||
|
public long TableId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否预览代码
|
||||||
|
/// </summary>
|
||||||
|
public bool IsPreview { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成代码的数据库类型 0、mysql 1、sqlserver
|
||||||
|
/// </summary>
|
||||||
|
public int DbType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成的按钮功能
|
||||||
|
/// </summary>
|
||||||
|
public int[] CheckedBtn { get; set; } = System.Array.Empty<int>();
|
||||||
|
public GenTable GenTable { get; set; }
|
||||||
|
public CodeGenerateOption GenOptions { get; set; }
|
||||||
|
#region 存储路径
|
||||||
|
/// <summary>
|
||||||
|
/// 代码模板预览存储路径存放
|
||||||
|
/// </summary>
|
||||||
|
public List<GenCode> GenCodes { get; set; } = new List<GenCode>();
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成路径
|
||||||
|
/// </summary>
|
||||||
|
public string GenCodePath { get; set; } = string.Empty;
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成压缩包路径
|
||||||
|
/// </summary>
|
||||||
|
public string ZipPath { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成压缩包名称
|
||||||
|
/// </summary>
|
||||||
|
public string ZipFileName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成代码方式(0zip压缩包 1自定义路径)
|
||||||
|
/// </summary>
|
||||||
|
public string GenType { get; set; }
|
||||||
|
public string GenPath { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// vue代码路径
|
||||||
|
/// </summary>
|
||||||
|
public string VueParentPath { get; set; }
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GenCode
|
||||||
|
{
|
||||||
|
public int Type { get; set; }
|
||||||
|
public string Title { get; set; }
|
||||||
|
public string Path { get; set; }
|
||||||
|
public string Content { get; set; }
|
||||||
|
|
||||||
|
public GenCode(int type, string title, string path, string content)
|
||||||
|
{
|
||||||
|
Type = type;
|
||||||
|
Title = title;
|
||||||
|
Path = path;
|
||||||
|
Content = content;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
59
ARW-net/ARW.CodeGenerator/Model/ReplaceDto.cs
Normal file
59
ARW-net/ARW.CodeGenerator/Model/ReplaceDto.cs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator.Model
|
||||||
|
{
|
||||||
|
public class ReplaceDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 主键字段
|
||||||
|
/// </summary>
|
||||||
|
public string PKName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 首字母小写主键
|
||||||
|
/// </summary>
|
||||||
|
public string FistLowerPk{ get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 主键类型
|
||||||
|
/// </summary>
|
||||||
|
public string PKType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 控制器权限
|
||||||
|
/// </summary>
|
||||||
|
public string PermissionPrefix { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// C#类名
|
||||||
|
/// </summary>
|
||||||
|
public string ModelTypeName { get; set; }
|
||||||
|
//vue、api
|
||||||
|
//public string VueViewFormResetHtml { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 前端列表查询html
|
||||||
|
/// </summary>
|
||||||
|
public string VueViewListHtml { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 前端添加、编辑表格html
|
||||||
|
/// </summary>
|
||||||
|
public string VueViewFormHtml { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 前端搜索表单html
|
||||||
|
/// </summary>
|
||||||
|
public string VueQueryFormHtml { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询条件
|
||||||
|
/// </summary>
|
||||||
|
public string QueryCondition { get; set; } = "";
|
||||||
|
public bool ShowBtnExport { get; set; }
|
||||||
|
public bool ShowBtnAdd { get; set; }
|
||||||
|
public bool ShowBtnEdit { get; set; }
|
||||||
|
public bool ShowBtnDelete { get; set; }
|
||||||
|
public bool ShowBtnView { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 上传URL data
|
||||||
|
/// </summary>
|
||||||
|
//public string VueUploadUrl { get; set; }
|
||||||
|
public int UploadFile { get; set; } = 0;
|
||||||
|
public string Author { get; set; }
|
||||||
|
public string AddTime { get; set; } = DateTime.Now.ToString("yyyy-MM-dd");
|
||||||
|
}
|
||||||
|
}
|
68
ARW-net/ARW.CodeGenerator/Service/CodeGeneraterService.cs
Normal file
68
ARW-net/ARW.CodeGenerator/Service/CodeGeneraterService.cs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using ARW.Model;
|
||||||
|
|
||||||
|
namespace ARW.CodeGenerator.Service
|
||||||
|
{
|
||||||
|
public class CodeGeneraterService : DbProvider
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有数据库名
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<string> GetAllDataBases()
|
||||||
|
{
|
||||||
|
var db = GetSugarDbContext();
|
||||||
|
var templist = db.DbMaintenance.GetDataBaseList(db);
|
||||||
|
|
||||||
|
return templist;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取所有表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dbName"></param>
|
||||||
|
/// <param name="tableName"></param>
|
||||||
|
/// <param name="pager"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<DbTableInfo> GetAllTables(string dbName, string tableName, PagerInfo pager)
|
||||||
|
{
|
||||||
|
var tableList = GetSugarDbContext(dbName).DbMaintenance.GetTableInfoList(true);
|
||||||
|
if (!string.IsNullOrEmpty(tableName))
|
||||||
|
{
|
||||||
|
tableList = tableList.Where(f => f.Name.ToLower().Contains(tableName.ToLower())).ToList();
|
||||||
|
}
|
||||||
|
//tableList = tableList.Where(f => !new string[] { "gen", "sys_" }.Contains(f.Name)).ToList();
|
||||||
|
pager.TotalNum = tableList.Count;
|
||||||
|
return tableList.Skip(pager.PageSize * (pager.PageNum - 1)).Take(pager.PageSize).OrderBy(f => f.Name).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取单表数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dbName"></param>
|
||||||
|
/// <param name="tableName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public DbTableInfo GetTableInfo(string dbName, string tableName)
|
||||||
|
{
|
||||||
|
var tableList = GetSugarDbContext(dbName).DbMaintenance.GetTableInfoList(true);
|
||||||
|
if (!string.IsNullOrEmpty(tableName))
|
||||||
|
{
|
||||||
|
return tableList.Where(f => f.Name.Equals(tableName, System.StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获取列信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dbName"></param>
|
||||||
|
/// <param name="tableName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<DbColumnInfo> GetColumnInfo(string dbName, string tableName)
|
||||||
|
{
|
||||||
|
return GetSugarDbContext(dbName).DbMaintenance.GetColumnInfosByTableName(tableName, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
ARW-net/ARW.Common/ARW.Common.csproj
Normal file
20
ARW-net/ARW.Common/ARW.Common.csproj
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<AssemblyName>ARW.Common</AssemblyName>
|
||||||
|
<RootNamespace>ARW.Common</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
|
||||||
|
<PackageReference Include="CSRedisCore" Version="3.8.3" />
|
||||||
|
<PackageReference Include="EPPlus" Version="6.0.5" />
|
||||||
|
<PackageReference Include="MailKit" Version="3.3.0" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
67
ARW-net/ARW.Common/AliyunOssHelper.cs
Normal file
67
ARW-net/ARW.Common/AliyunOssHelper.cs
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
using Aliyun.OSS;
|
||||||
|
using Aliyun.OSS.Common;
|
||||||
|
using Infrastructure;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace ARW.Common
|
||||||
|
{
|
||||||
|
public class AliyunOssHelper
|
||||||
|
{
|
||||||
|
static string accessKeyId = AppSettings.GetConfig("AARWYUN_OSS:KEY");
|
||||||
|
static string accessKeySecret = AppSettings.GetConfig("AARWYUN_OSS:SECRET");
|
||||||
|
static string endpoint = AppSettings.GetConfig("AARWYUN_OSS:REGIONID");
|
||||||
|
static string bucketName1 = AppSettings.GetConfig("AARWYUN_OSS:bucketName");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 上传到阿里云
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="filestreams"></param>
|
||||||
|
/// <param name="dirPath">存储路径 eg: upload/2020/01/01/xxx.png</param>
|
||||||
|
/// <param name="bucketName">存储桶 如果为空默认取配置文件</param>
|
||||||
|
public static System.Net.HttpStatusCode PutObjectFromFile(Stream filestreams, string dirPath, string bucketName = "")
|
||||||
|
{
|
||||||
|
OssClient client = new(endpoint, accessKeyId, accessKeySecret);
|
||||||
|
if (string.IsNullOrEmpty(bucketName)) { bucketName = bucketName1; }
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dirPath = dirPath.Replace("\\", "/");
|
||||||
|
PutObjectResult putObjectResult = client.PutObject(bucketName, dirPath, filestreams);
|
||||||
|
// Console.WriteLine("Put object:{0} succeeded", directory);
|
||||||
|
|
||||||
|
return putObjectResult.HttpStatusCode;
|
||||||
|
}
|
||||||
|
catch (OssException ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
|
||||||
|
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Failed with error info: {0}", ex.Message);
|
||||||
|
}
|
||||||
|
return System.Net.HttpStatusCode.BadRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除资源
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dirPath"></param>
|
||||||
|
/// <param name="bucketName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static System.Net.HttpStatusCode DeleteFile(string dirPath, string bucketName = "")
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(bucketName)) { bucketName = bucketName1; }
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OssClient client = new(endpoint, accessKeyId, accessKeySecret);
|
||||||
|
DeleteObjectResult putObjectResult = client.DeleteObject(bucketName, dirPath);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
|
return System.Net.HttpStatusCode.BadRequest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
111
ARW-net/ARW.Common/Cache/CacheHelper.cs
Normal file
111
ARW-net/ARW.Common/Cache/CacheHelper.cs
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ARW.Common
|
||||||
|
{
|
||||||
|
public class CacheHelper
|
||||||
|
{
|
||||||
|
public static MemoryCache Cache { get; set; }
|
||||||
|
static CacheHelper()
|
||||||
|
{
|
||||||
|
Cache = new MemoryCache(new MemoryCacheOptions
|
||||||
|
{
|
||||||
|
//SizeLimit = 1024
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取缓存
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static T GetCache<T>(string key) where T : class
|
||||||
|
{
|
||||||
|
if (key == null)
|
||||||
|
throw new ArgumentNullException(nameof(key));
|
||||||
|
//return Cache.Get(key) as T; //或者
|
||||||
|
return Cache.Get<T>(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取缓存
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CacheKey"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static object GetCache(string CacheKey)
|
||||||
|
{
|
||||||
|
return Cache.Get<object>(CacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object Get(string CacheKey)
|
||||||
|
{
|
||||||
|
return Cache.Get(CacheKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置缓存,永久缓存
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CacheKey">key</param>
|
||||||
|
/// <param name="objObject">值</param>
|
||||||
|
public static object SetCache(string CacheKey, object objObject)
|
||||||
|
{
|
||||||
|
return Cache.Set(CacheKey, objObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置缓存
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CacheKey">key</param>
|
||||||
|
/// <param name="objObject">值</param>
|
||||||
|
/// <param name="Timeout">过期时间(分钟)</param>
|
||||||
|
public static object SetCache(string CacheKey, object objObject, int Timeout)
|
||||||
|
{
|
||||||
|
return Cache.Set(CacheKey, objObject, DateTime.Now.AddMinutes(Timeout));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置缓存(秒)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CacheKey">key</param>
|
||||||
|
/// <param name="objObject">值</param>
|
||||||
|
/// <param name="Timeout">过期时间(秒)</param>
|
||||||
|
public static void SetCaches(string CacheKey, object objObject, int Timeout)
|
||||||
|
{
|
||||||
|
Cache.Set(CacheKey, objObject, DateTime.Now.AddSeconds(Timeout));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设置缓存
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CacheKey">key</param>
|
||||||
|
/// <param name="objObject">值</param>
|
||||||
|
/// <param name="absoluteExpiration">过期时间</param>
|
||||||
|
/// <param name="slidingExpiration">过期时间间隔</param>
|
||||||
|
public static object SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
|
||||||
|
{
|
||||||
|
return Cache.Set(CacheKey, objObject, absoluteExpiration);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设定绝对的过期时间
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CacheKey"></param>
|
||||||
|
/// <param name="objObject"></param>
|
||||||
|
/// <param name="Seconds">超过多少秒后过期</param>
|
||||||
|
public static void SetCacheDateTime(string CacheKey, object objObject, long Seconds)
|
||||||
|
{
|
||||||
|
Cache.Set(CacheKey, objObject, DateTime.Now.AddSeconds(Seconds));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除缓存
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">key</param>
|
||||||
|
public static void Remove(string key)
|
||||||
|
{
|
||||||
|
Cache.Remove(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
17
ARW-net/ARW.Common/Cache/RedisServer.cs
Normal file
17
ARW-net/ARW.Common/Cache/RedisServer.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using CSRedis;
|
||||||
|
using Infrastructure;
|
||||||
|
|
||||||
|
namespace ARW.Common.Cache
|
||||||
|
{
|
||||||
|
public class RedisServer
|
||||||
|
{
|
||||||
|
public static CSRedisClient Cache;
|
||||||
|
public static CSRedisClient Session;
|
||||||
|
|
||||||
|
public static void Initalize()
|
||||||
|
{
|
||||||
|
Cache = new CSRedisClient(AppSettings.GetConfig("RedisServer:Cache"));
|
||||||
|
Session = new CSRedisClient(AppSettings.GetConfig("RedisServer:Session"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
829
ARW-net/ARW.Common/CrawlerHelper.cs
Normal file
829
ARW-net/ARW.Common/CrawlerHelper.cs
Normal file
@ -0,0 +1,829 @@
|
|||||||
|
/// <summary>
|
||||||
|
/// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
|
||||||
|
/// 重要提示:请不要自行修改本类,如果因为你自己修改后将无法升级到新版本。如果确实有什么问题请到官方网站提建议,
|
||||||
|
/// 我们一定会及时修改
|
||||||
|
/// 编码日期:2011-09-20
|
||||||
|
/// 编 码 人:苏飞
|
||||||
|
/// 联系方式:361983679
|
||||||
|
/// 官方网址:http://www.sufeinet.com/thread-3-1-1.html
|
||||||
|
/// 修改日期:2018-11-06
|
||||||
|
/// 版 本 号:1.9.9
|
||||||
|
/// </summary>
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Net;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
|
using System.Net.Security;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Cache;
|
||||||
|
|
||||||
|
namespace ARW.Common
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Http连接操作帮助类
|
||||||
|
/// </summary>
|
||||||
|
public class CrawlerHelper
|
||||||
|
{
|
||||||
|
|
||||||
|
#region 预定义方变量
|
||||||
|
//默认的编码
|
||||||
|
private Encoding encoding = Encoding.Default;
|
||||||
|
//Post数据编码
|
||||||
|
private Encoding postencoding = Encoding.Default;
|
||||||
|
//HttpWebRequest对象用来发起请求
|
||||||
|
private HttpWebRequest request = null;
|
||||||
|
//获取影响流的数据对象
|
||||||
|
private HttpWebResponse response = null;
|
||||||
|
//设置本地的出口ip和端口
|
||||||
|
private IPEndPoint _IPEndPoint = null;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据相传入的数据,得到相应页面数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">参数类对象</param>
|
||||||
|
/// <returns>返回HttpResult类型</returns>
|
||||||
|
public HttpResult GetHtml(HttpItem item)
|
||||||
|
{
|
||||||
|
//返回参数
|
||||||
|
HttpResult result = new HttpResult();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//准备参数
|
||||||
|
SetRequest(item);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
//配置参数时出错
|
||||||
|
return new HttpResult() { Cookie = string.Empty, Header = null, Html = ex.Message, StatusDescription = "配置参数时出错:" + ex.Message };
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//请求数据
|
||||||
|
using (response = (HttpWebResponse)request.GetResponse())
|
||||||
|
{
|
||||||
|
GetData(item, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (WebException ex)
|
||||||
|
{
|
||||||
|
if (ex.Response != null)
|
||||||
|
{
|
||||||
|
using (response = (HttpWebResponse)ex.Response)
|
||||||
|
{
|
||||||
|
GetData(item, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.Html = ex.Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
result.Html = ex.Message;
|
||||||
|
}
|
||||||
|
if (item.IsToLower) result.Html = result.Html.ToLower();
|
||||||
|
//重置request,response为空
|
||||||
|
if (item.IsReset)
|
||||||
|
{
|
||||||
|
request = null;
|
||||||
|
response = null;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region GetData
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取数据的并解析的方法
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
/// <param name="result"></param>
|
||||||
|
private void GetData(HttpItem item, HttpResult result)
|
||||||
|
{
|
||||||
|
if (response == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#region base
|
||||||
|
//获取StatusCode
|
||||||
|
result.StatusCode = response.StatusCode;
|
||||||
|
//获取StatusDescription
|
||||||
|
result.StatusDescription = response.StatusDescription;
|
||||||
|
//获取Headers
|
||||||
|
result.Header = response.Headers;
|
||||||
|
//获取最后访问的URl
|
||||||
|
result.ResponseUri = response.ResponseUri.ToString();
|
||||||
|
//获取CookieCollection
|
||||||
|
if (response.Cookies != null) result.CookieCollection = response.Cookies;
|
||||||
|
//获取set-cookie
|
||||||
|
if (response.Headers["set-cookie"] != null) result.Cookie = response.Headers["set-cookie"];
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region byte
|
||||||
|
|
||||||
|
//处理网页Byte
|
||||||
|
byte[] ResponseByte = GetByte();
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Html
|
||||||
|
if (ResponseByte != null && ResponseByte.Length > 0)
|
||||||
|
{
|
||||||
|
//设置编码
|
||||||
|
SetEncoding(item, result, ResponseByte);
|
||||||
|
//得到返回的HTML
|
||||||
|
result.Html = encoding.GetString(ResponseByte);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//没有返回任何Html代码
|
||||||
|
result.Html = string.Empty;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置编码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">HttpItem</param>
|
||||||
|
/// <param name="result">HttpResult</param>
|
||||||
|
/// <param name="ResponseByte">byte[]</param>
|
||||||
|
private void SetEncoding(HttpItem item, HttpResult result, byte[] ResponseByte)
|
||||||
|
{
|
||||||
|
//是否返回Byte类型数据
|
||||||
|
if (item.ResultType == ResultType.Byte) result.ResultByte = ResponseByte;
|
||||||
|
//从这里开始我们要无视编码了
|
||||||
|
if (encoding == null)
|
||||||
|
{
|
||||||
|
Match meta = Regex.Match(Encoding.Default.GetString(ResponseByte), "<meta[^<]*charset=([^<]*)[\"']", RegexOptions.IgnoreCase);
|
||||||
|
string c = string.Empty;
|
||||||
|
if (meta != null && meta.Groups.Count > 0)
|
||||||
|
{
|
||||||
|
c = meta.Groups[1].Value.ToLower().Trim();
|
||||||
|
}
|
||||||
|
if (c.Length > 2)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
encoding = Encoding.GetEncoding(c.Replace("\"", string.Empty).Replace("'", "").Replace(";", "").Replace("iso-8859-1", "gbk").Trim());
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(response.CharacterSet))
|
||||||
|
{
|
||||||
|
encoding = Encoding.UTF8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encoding = Encoding.GetEncoding(response.CharacterSet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(response.CharacterSet))
|
||||||
|
{
|
||||||
|
encoding = Encoding.UTF8;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encoding = Encoding.GetEncoding(response.CharacterSet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 提取网页Byte
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private byte[] GetByte()
|
||||||
|
{
|
||||||
|
byte[] ResponseByte = null;
|
||||||
|
using (MemoryStream _stream = new MemoryStream())
|
||||||
|
{
|
||||||
|
//GZIIP处理
|
||||||
|
if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))
|
||||||
|
{
|
||||||
|
//开始读取流并设置编码方式
|
||||||
|
new GZipStream(response.GetResponseStream(), CompressionMode.Decompress).CopyTo(_stream, 10240);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//开始读取流并设置编码方式
|
||||||
|
response.GetResponseStream().CopyTo(_stream, 10240);
|
||||||
|
}
|
||||||
|
//获取Byte
|
||||||
|
ResponseByte = _stream.ToArray();
|
||||||
|
}
|
||||||
|
return ResponseByte;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region SetRequest
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 为请求准备参数
|
||||||
|
/// </summary>
|
||||||
|
///<param name="item">参数列表</param>
|
||||||
|
private void SetRequest(HttpItem item)
|
||||||
|
{
|
||||||
|
|
||||||
|
// 验证证书
|
||||||
|
SetCer(item);
|
||||||
|
if (item.IPEndPoint != null)
|
||||||
|
{
|
||||||
|
_IPEndPoint = item.IPEndPoint;
|
||||||
|
//设置本地的出口ip和端口
|
||||||
|
request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
|
||||||
|
}
|
||||||
|
//设置Header参数
|
||||||
|
if (item.Header != null && item.Header.Count > 0) foreach (string key in item.Header.AllKeys)
|
||||||
|
{
|
||||||
|
request.Headers.Add(key, item.Header[key]);
|
||||||
|
}
|
||||||
|
// 设置代理
|
||||||
|
SetProxy(item);
|
||||||
|
if (item.ProtocolVersion != null) request.ProtocolVersion = item.ProtocolVersion;
|
||||||
|
request.ServicePoint.Expect100Continue = item.Expect100Continue;
|
||||||
|
//请求方式Get或者Post
|
||||||
|
request.Method = item.Method;
|
||||||
|
request.Timeout = item.Timeout;
|
||||||
|
request.KeepAlive = item.KeepAlive;
|
||||||
|
request.ReadWriteTimeout = item.ReadWriteTimeout;
|
||||||
|
if (!string.IsNullOrWhiteSpace(item.Host))
|
||||||
|
{
|
||||||
|
request.Host = item.Host;
|
||||||
|
}
|
||||||
|
if (item.IfModifiedSince != null) request.IfModifiedSince = Convert.ToDateTime(item.IfModifiedSince);
|
||||||
|
//Accept
|
||||||
|
request.Accept = item.Accept;
|
||||||
|
//ContentType返回类型
|
||||||
|
request.ContentType = item.ContentType;
|
||||||
|
//UserAgent客户端的访问类型,包括浏览器版本和操作系统信息
|
||||||
|
request.UserAgent = item.UserAgent;
|
||||||
|
// 编码
|
||||||
|
encoding = item.Encoding;
|
||||||
|
//设置安全凭证
|
||||||
|
request.Credentials = item.ICredentials;
|
||||||
|
//设置Cookie
|
||||||
|
SetCookie(item);
|
||||||
|
//来源地址
|
||||||
|
request.Referer = item.Referer;
|
||||||
|
//是否执行跳转功能
|
||||||
|
request.AllowAutoRedirect = item.Allowautoredirect;
|
||||||
|
if (item.MaximumAutomaticRedirections > 0)
|
||||||
|
{
|
||||||
|
request.MaximumAutomaticRedirections = item.MaximumAutomaticRedirections;
|
||||||
|
}
|
||||||
|
//设置Post数据
|
||||||
|
SetPostData(item);
|
||||||
|
//设置最大连接
|
||||||
|
if (item.Connectionlimit > 0) request.ServicePoint.ConnectionLimit = item.Connectionlimit;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置证书
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
private void SetCer(HttpItem item)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrWhiteSpace(item.CerPath))
|
||||||
|
{
|
||||||
|
//这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。
|
||||||
|
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);
|
||||||
|
//初始化对像,并设置请求的URL地址
|
||||||
|
request = (HttpWebRequest)WebRequest.Create(item.URL);
|
||||||
|
SetCerList(item);
|
||||||
|
//将证书添加到请求里
|
||||||
|
request.ClientCertificates.Add(new X509Certificate(item.CerPath));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//初始化对像,并设置请求的URL地址
|
||||||
|
request = (HttpWebRequest)WebRequest.Create(item.URL);
|
||||||
|
SetCerList(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置多个证书
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
private void SetCerList(HttpItem item)
|
||||||
|
{
|
||||||
|
if (item.ClentCertificates != null && item.ClentCertificates.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (X509Certificate c in item.ClentCertificates)
|
||||||
|
{
|
||||||
|
request.ClientCertificates.Add(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置Cookie
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">Http参数</param>
|
||||||
|
private void SetCookie(HttpItem item)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(item.Cookie)) request.Headers[HttpRequestHeader.Cookie] = item.Cookie;
|
||||||
|
//设置CookieCollection
|
||||||
|
if (item.ResultCookieType == ResultCookieType.CookieCollection)
|
||||||
|
{
|
||||||
|
request.CookieContainer = new CookieContainer();
|
||||||
|
if (item.CookieCollection != null && item.CookieCollection.Count > 0)
|
||||||
|
request.CookieContainer.Add(item.CookieCollection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置Post数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">Http参数</param>
|
||||||
|
private void SetPostData(HttpItem item)
|
||||||
|
{
|
||||||
|
//验证在得到结果时是否有传入数据
|
||||||
|
if (!request.Method.Trim().ToLower().Contains("get"))
|
||||||
|
{
|
||||||
|
if (item.PostEncoding != null)
|
||||||
|
{
|
||||||
|
postencoding = item.PostEncoding;
|
||||||
|
}
|
||||||
|
byte[] buffer = null;
|
||||||
|
//写入Byte类型
|
||||||
|
if (item.PostDataType == PostDataType.Byte && item.PostdataByte != null && item.PostdataByte.Length > 0)
|
||||||
|
{
|
||||||
|
//验证在得到结果时是否有传入数据
|
||||||
|
buffer = item.PostdataByte;
|
||||||
|
}//写入文件
|
||||||
|
else if (item.PostDataType == PostDataType.FilePath && !string.IsNullOrWhiteSpace(item.Postdata))
|
||||||
|
{
|
||||||
|
StreamReader r = new StreamReader(item.Postdata, postencoding);
|
||||||
|
buffer = postencoding.GetBytes(r.ReadToEnd());
|
||||||
|
r.Close();
|
||||||
|
} //写入字符串
|
||||||
|
else if (!string.IsNullOrWhiteSpace(item.Postdata))
|
||||||
|
{
|
||||||
|
buffer = postencoding.GetBytes(item.Postdata);
|
||||||
|
}
|
||||||
|
if (buffer != null)
|
||||||
|
{
|
||||||
|
request.ContentLength = buffer.Length;
|
||||||
|
request.GetRequestStream().Write(buffer, 0, buffer.Length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
request.ContentLength = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置代理
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">参数对象</param>
|
||||||
|
private void SetProxy(HttpItem item)
|
||||||
|
{
|
||||||
|
bool isIeProxy = false;
|
||||||
|
if (!string.IsNullOrWhiteSpace(item.ProxyIp))
|
||||||
|
{
|
||||||
|
isIeProxy = item.ProxyIp.ToLower().Contains("ieproxy");
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(item.ProxyIp) && !isIeProxy)
|
||||||
|
{
|
||||||
|
//设置代理服务器
|
||||||
|
if (item.ProxyIp.Contains(":"))
|
||||||
|
{
|
||||||
|
string[] plist = item.ProxyIp.Split(':');
|
||||||
|
WebProxy myProxy = new WebProxy(plist[0].Trim(), Convert.ToInt32(plist[1].Trim()));
|
||||||
|
//建议连接
|
||||||
|
myProxy.Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd);
|
||||||
|
//给当前请求对象
|
||||||
|
request.Proxy = myProxy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WebProxy myProxy = new WebProxy(item.ProxyIp, false);
|
||||||
|
//建议连接
|
||||||
|
myProxy.Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd);
|
||||||
|
//给当前请求对象
|
||||||
|
request.Proxy = myProxy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (isIeProxy)
|
||||||
|
{
|
||||||
|
//设置为IE代理
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
request.Proxy = item.WebProxy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region private main
|
||||||
|
/// <summary>
|
||||||
|
/// 回调验证证书问题
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">流对象</param>
|
||||||
|
/// <param name="certificate">证书</param>
|
||||||
|
/// <param name="chain">X509Chain</param>
|
||||||
|
/// <param name="errors">SslPolicyErrors</param>
|
||||||
|
/// <returns>bool</returns>
|
||||||
|
private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通过设置这个属性,可以在发出连接的时候绑定客户端发出连接所使用的IP地址。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="servicePoint"></param>
|
||||||
|
/// <param name="remoteEndPoint"></param>
|
||||||
|
/// <param name="retryCount"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
|
||||||
|
{
|
||||||
|
return _IPEndPoint;//端口号
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
#region public calss
|
||||||
|
/// <summary>
|
||||||
|
/// Http请求参考类
|
||||||
|
/// </summary>
|
||||||
|
public class HttpItem
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 请求URL必须填写
|
||||||
|
/// </summary>
|
||||||
|
public string URL { get; set; }
|
||||||
|
string _Method = "GET";
|
||||||
|
/// <summary>
|
||||||
|
/// 请求方式默认为GET方式,当为POST方式时必须设置Postdata的值
|
||||||
|
/// </summary>
|
||||||
|
public string Method
|
||||||
|
{
|
||||||
|
get { return _Method; }
|
||||||
|
set { _Method = value; }
|
||||||
|
}
|
||||||
|
int _Timeout = 100000;
|
||||||
|
/// <summary>
|
||||||
|
/// 默认请求超时时间
|
||||||
|
/// </summary>
|
||||||
|
public int Timeout
|
||||||
|
{
|
||||||
|
get { return _Timeout; }
|
||||||
|
set { _Timeout = value; }
|
||||||
|
}
|
||||||
|
int _ReadWriteTimeout = 30000;
|
||||||
|
/// <summary>
|
||||||
|
/// 默认写入Post数据超时间
|
||||||
|
/// </summary>
|
||||||
|
public int ReadWriteTimeout
|
||||||
|
{
|
||||||
|
get { return _ReadWriteTimeout; }
|
||||||
|
set { _ReadWriteTimeout = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置Host的标头信息
|
||||||
|
/// </summary>
|
||||||
|
public string Host { get; set; }
|
||||||
|
Boolean _KeepAlive = true;
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接默认为true。
|
||||||
|
/// </summary>
|
||||||
|
public Boolean KeepAlive
|
||||||
|
{
|
||||||
|
get { return _KeepAlive; }
|
||||||
|
set { _KeepAlive = value; }
|
||||||
|
}
|
||||||
|
string _Accept = "text/html, application/xhtml+xml, */*";
|
||||||
|
/// <summary>
|
||||||
|
/// 请求标头值 默认为text/html, application/xhtml+xml, */*
|
||||||
|
/// </summary>
|
||||||
|
public string Accept
|
||||||
|
{
|
||||||
|
get { return _Accept; }
|
||||||
|
set { _Accept = value; }
|
||||||
|
}
|
||||||
|
string _ContentType = "text/html";
|
||||||
|
/// <summary>
|
||||||
|
/// 请求返回类型默认 text/html
|
||||||
|
/// </summary>
|
||||||
|
public string ContentType
|
||||||
|
{
|
||||||
|
get { return _ContentType; }
|
||||||
|
set { _ContentType = value; }
|
||||||
|
}
|
||||||
|
string _UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
|
||||||
|
/// <summary>
|
||||||
|
/// 客户端访问信息默认Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
|
||||||
|
/// </summary>
|
||||||
|
public string UserAgent
|
||||||
|
{
|
||||||
|
get { return _UserAgent; }
|
||||||
|
set { _UserAgent = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 返回数据编码默认为NUll,可以自动识别,一般为utf-8,gbk,gb2312
|
||||||
|
/// </summary>
|
||||||
|
public Encoding Encoding { get; set; }
|
||||||
|
private PostDataType _PostDataType = PostDataType.String;
|
||||||
|
/// <summary>
|
||||||
|
/// Post的数据类型
|
||||||
|
/// </summary>
|
||||||
|
public PostDataType PostDataType
|
||||||
|
{
|
||||||
|
get { return _PostDataType; }
|
||||||
|
set { _PostDataType = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Post请求时要发送的字符串Post数据
|
||||||
|
/// </summary>
|
||||||
|
public string Postdata { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Post请求时要发送的Byte类型的Post数据
|
||||||
|
/// </summary>
|
||||||
|
public byte[] PostdataByte { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Cookie对象集合
|
||||||
|
/// </summary>
|
||||||
|
public CookieCollection CookieCollection { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 请求时的Cookie
|
||||||
|
/// </summary>
|
||||||
|
public string Cookie { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 来源地址,上次访问地址
|
||||||
|
/// </summary>
|
||||||
|
public string Referer { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 证书绝对路径
|
||||||
|
/// </summary>
|
||||||
|
public string CerPath { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 设置代理对象,不想使用IE默认配置就设置为Null,而且不要设置ProxyIp
|
||||||
|
/// </summary>
|
||||||
|
public WebProxy WebProxy { get; set; }
|
||||||
|
private Boolean isToLower = false;
|
||||||
|
/// <summary>
|
||||||
|
/// 是否设置为全文小写,默认为不转化
|
||||||
|
/// </summary>
|
||||||
|
public Boolean IsToLower
|
||||||
|
{
|
||||||
|
get { return isToLower; }
|
||||||
|
set { isToLower = value; }
|
||||||
|
}
|
||||||
|
private Boolean allowautoredirect = false;
|
||||||
|
/// <summary>
|
||||||
|
/// 支持跳转页面,查询结果将是跳转后的页面,默认是不跳转
|
||||||
|
/// </summary>
|
||||||
|
public Boolean Allowautoredirect
|
||||||
|
{
|
||||||
|
get { return allowautoredirect; }
|
||||||
|
set { allowautoredirect = value; }
|
||||||
|
}
|
||||||
|
private int connectionlimit = 1024;
|
||||||
|
/// <summary>
|
||||||
|
/// 最大连接数
|
||||||
|
/// </summary>
|
||||||
|
public int Connectionlimit
|
||||||
|
{
|
||||||
|
get { return connectionlimit; }
|
||||||
|
set { connectionlimit = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 代理Proxy 服务器用户名
|
||||||
|
/// </summary>
|
||||||
|
public string ProxyUserName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 代理 服务器密码
|
||||||
|
/// </summary>
|
||||||
|
public string ProxyPwd { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 代理 服务IP,如果要使用IE代理就设置为ieproxy
|
||||||
|
/// </summary>
|
||||||
|
public string ProxyIp { get; set; }
|
||||||
|
private ResultType resulttype = ResultType.String;
|
||||||
|
/// <summary>
|
||||||
|
/// 设置返回类型String和Byte
|
||||||
|
/// </summary>
|
||||||
|
public ResultType ResultType
|
||||||
|
{
|
||||||
|
get { return resulttype; }
|
||||||
|
set { resulttype = value; }
|
||||||
|
}
|
||||||
|
private WebHeaderCollection header = new WebHeaderCollection();
|
||||||
|
/// <summary>
|
||||||
|
/// header对象
|
||||||
|
/// </summary>
|
||||||
|
public WebHeaderCollection Header
|
||||||
|
{
|
||||||
|
get { return header; }
|
||||||
|
set { header = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
// 获取或设置用于请求的 HTTP 版本。返回结果:用于请求的 HTTP 版本。默认为 System.Net.HttpVersion.Version11。
|
||||||
|
/// </summary>
|
||||||
|
public Version ProtocolVersion { get; set; }
|
||||||
|
private Boolean _expect100continue = false;
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置一个 System.Boolean 值,该值确定是否使用 100-Continue 行为。如果 POST 请求需要 100-Continue 响应,则为 true;否则为 false。默认值为 true。
|
||||||
|
/// </summary>
|
||||||
|
public Boolean Expect100Continue
|
||||||
|
{
|
||||||
|
get { return _expect100continue; }
|
||||||
|
set { _expect100continue = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置509证书集合
|
||||||
|
/// </summary>
|
||||||
|
public X509CertificateCollection ClentCertificates { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 设置或获取Post参数编码,默认的为Default编码
|
||||||
|
/// </summary>
|
||||||
|
public Encoding PostEncoding { get; set; }
|
||||||
|
private ResultCookieType _ResultCookieType = ResultCookieType.String;
|
||||||
|
/// <summary>
|
||||||
|
/// Cookie返回类型,默认的是只返回字符串类型
|
||||||
|
/// </summary>
|
||||||
|
public ResultCookieType ResultCookieType
|
||||||
|
{
|
||||||
|
get { return _ResultCookieType; }
|
||||||
|
set { _ResultCookieType = value; }
|
||||||
|
}
|
||||||
|
private ICredentials _ICredentials = CredentialCache.DefaultCredentials;
|
||||||
|
/// <summary>
|
||||||
|
/// 获取或设置请求的身份验证信息。
|
||||||
|
/// </summary>
|
||||||
|
public ICredentials ICredentials
|
||||||
|
{
|
||||||
|
get { return _ICredentials; }
|
||||||
|
set { _ICredentials = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 设置请求将跟随的重定向的最大数目
|
||||||
|
/// </summary>
|
||||||
|
public int MaximumAutomaticRedirections { get; set; }
|
||||||
|
private DateTime? _IfModifiedSince = null;
|
||||||
|
/// <summary>
|
||||||
|
/// 获取和设置IfModifiedSince,默认为当前日期和时间
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? IfModifiedSince
|
||||||
|
{
|
||||||
|
get { return _IfModifiedSince; }
|
||||||
|
set { _IfModifiedSince = value; }
|
||||||
|
}
|
||||||
|
#region ip-port
|
||||||
|
private IPEndPoint _IPEndPoint = null;
|
||||||
|
/// <summary>
|
||||||
|
/// 设置本地的出口ip和端口
|
||||||
|
/// </summary>]
|
||||||
|
/// <example>
|
||||||
|
///item.IPEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.1"),80);
|
||||||
|
/// </example>
|
||||||
|
public IPEndPoint IPEndPoint
|
||||||
|
{
|
||||||
|
get { return _IPEndPoint; }
|
||||||
|
set { _IPEndPoint = value; }
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private bool _isReset = false;
|
||||||
|
/// <summary>
|
||||||
|
/// 是否重置request,response的值,默认不重置,当设置为True时request,response将被设置为Null
|
||||||
|
/// </summary>
|
||||||
|
public bool IsReset
|
||||||
|
{
|
||||||
|
get { return _isReset; }
|
||||||
|
set { _isReset = value; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Http返回参数类
|
||||||
|
/// </summary>
|
||||||
|
public class HttpResult
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Http请求返回的Cookie
|
||||||
|
/// </summary>
|
||||||
|
public string Cookie { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Cookie对象集合
|
||||||
|
/// </summary>
|
||||||
|
public CookieCollection CookieCollection { get; set; }
|
||||||
|
private string _html = string.Empty;
|
||||||
|
/// <summary>
|
||||||
|
/// 返回的String类型数据 只有ResultType.String时才返回数据,其它情况为空
|
||||||
|
/// </summary>
|
||||||
|
public string Html
|
||||||
|
{
|
||||||
|
get { return _html; }
|
||||||
|
set { _html = value; }
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 返回的Byte数组 只有ResultType.Byte时才返回数据,其它情况为空
|
||||||
|
/// </summary>
|
||||||
|
public byte[] ResultByte { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// header对象
|
||||||
|
/// </summary>
|
||||||
|
public WebHeaderCollection Header { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 返回状态说明
|
||||||
|
/// </summary>
|
||||||
|
public string StatusDescription { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 返回状态码,默认为OK
|
||||||
|
/// </summary>
|
||||||
|
public HttpStatusCode StatusCode { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 最后访问的URl
|
||||||
|
/// </summary>
|
||||||
|
public string ResponseUri { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 获取重定向的URl
|
||||||
|
/// </summary>
|
||||||
|
public string RedirectUrl
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Header != null && Header.Count > 0)
|
||||||
|
{
|
||||||
|
if (Header.AllKeys.Any(k => k.ToLower().Contains("location")))
|
||||||
|
{
|
||||||
|
string baseurl = Header["location"].ToString().Trim();
|
||||||
|
string locationurl = baseurl.ToLower();
|
||||||
|
if (!string.IsNullOrWhiteSpace(locationurl))
|
||||||
|
{
|
||||||
|
bool b = locationurl.StartsWith("http://") || locationurl.StartsWith("https://");
|
||||||
|
if (!b)
|
||||||
|
{
|
||||||
|
baseurl = new Uri(new Uri(ResponseUri), baseurl).AbsoluteUri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return baseurl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 返回类型
|
||||||
|
/// </summary>
|
||||||
|
public enum ResultType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 表示只返回字符串 只有Html有数据
|
||||||
|
/// </summary>
|
||||||
|
String,
|
||||||
|
/// <summary>
|
||||||
|
/// 表示返回字符串和字节流 ResultByte和Html都有数据返回
|
||||||
|
/// </summary>
|
||||||
|
Byte
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Post的数据格式默认为string
|
||||||
|
/// </summary>
|
||||||
|
public enum PostDataType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 字符串类型,这时编码Encoding可不设置
|
||||||
|
/// </summary>
|
||||||
|
String,
|
||||||
|
/// <summary>
|
||||||
|
/// Byte类型,需要设置PostdataByte参数的值编码Encoding可设置为空
|
||||||
|
/// </summary>
|
||||||
|
Byte,
|
||||||
|
/// <summary>
|
||||||
|
/// 传文件,Postdata必须设置为文件的绝对路径,必须设置Encoding的值
|
||||||
|
/// </summary>
|
||||||
|
FilePath
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Cookie返回类型
|
||||||
|
/// </summary>
|
||||||
|
public enum ResultCookieType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 只返回字符串类型的Cookie
|
||||||
|
/// </summary>
|
||||||
|
String,
|
||||||
|
/// <summary>
|
||||||
|
/// CookieCollection格式的Cookie集合同时也返回String类型的cookie
|
||||||
|
/// </summary>
|
||||||
|
CookieCollection
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
156
ARW-net/ARW.Common/ExcelHelper.cs
Normal file
156
ARW-net/ARW.Common/ExcelHelper.cs
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using OfficeOpenXml;
|
||||||
|
namespace ARW.Common
|
||||||
|
{
|
||||||
|
public class ExcelHelper<T> where T : new()
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 导入数据
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IEnumerable<T> ImportData(Stream stream)
|
||||||
|
{
|
||||||
|
using ExcelPackage package = new(stream);
|
||||||
|
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
|
||||||
|
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];//读取第1个sheet
|
||||||
|
//获取表格的列数和行数
|
||||||
|
|
||||||
|
int colStart = worksheet.Dimension.Start.Column;
|
||||||
|
int colEnd = worksheet.Dimension.End.Column;
|
||||||
|
int rowStart = worksheet.Dimension.Start.Row;
|
||||||
|
int rowEnd = worksheet.Dimension.End.Row;
|
||||||
|
//int rowCount = worksheet.Dimension.Rows;
|
||||||
|
//int ColCount = worksheet.Dimension.Columns;
|
||||||
|
|
||||||
|
List<T> resultList = new();
|
||||||
|
List<PropertyInfo> propertyInfos = new();// new(typeof(T).GetProperties());
|
||||||
|
Dictionary<string, int> dictHeader = new();
|
||||||
|
for (int i = colStart; i < colEnd; i++)
|
||||||
|
{
|
||||||
|
var name = worksheet.Cells[rowStart, i].Value.ToString();
|
||||||
|
dictHeader[name] = i;
|
||||||
|
|
||||||
|
PropertyInfo propertyInfo = MapPropertyInfo(name);
|
||||||
|
if (propertyInfo != null)
|
||||||
|
{
|
||||||
|
propertyInfos.Add(propertyInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int row = rowStart + 1; row <= rowEnd; row++)
|
||||||
|
{
|
||||||
|
T result = new();
|
||||||
|
|
||||||
|
foreach (PropertyInfo p in propertyInfos)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ExcelRange cell = worksheet.Cells[row, dictHeader[p.Name]];
|
||||||
|
if (cell.Value == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (p.PropertyType.Name.ToLower())
|
||||||
|
{
|
||||||
|
case "string":
|
||||||
|
p.SetValue(result, cell.GetValue<string>());
|
||||||
|
break;
|
||||||
|
case "int16":
|
||||||
|
p.SetValue(result, cell.GetValue<short>()); break;
|
||||||
|
case "int32":
|
||||||
|
p.SetValue(result, cell.GetValue<int>()); break;
|
||||||
|
case "int64":
|
||||||
|
p.SetValue(result, cell.GetValue<long>()); break;
|
||||||
|
case "decimal":
|
||||||
|
p.SetValue(result, cell.GetValue<decimal>());
|
||||||
|
break;
|
||||||
|
case "double":
|
||||||
|
p.SetValue(result, cell.GetValue<double>()); break;
|
||||||
|
case "datetime":
|
||||||
|
p.SetValue(result, cell.GetValue<DateTime>()); break;
|
||||||
|
case "boolean":
|
||||||
|
p.SetValue(result, cell.GetValue<bool>()); break;
|
||||||
|
case "char":
|
||||||
|
p.SetValue(result, cell.GetValue<string>()); break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (KeyNotFoundException ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine("未找到该列将继续循环," + ex.Message);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resultList.Add(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找Excel列名对应的实体属性
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="columnName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static PropertyInfo MapPropertyInfo(string columnName)
|
||||||
|
{
|
||||||
|
PropertyInfo[] propertyList = GetProperties(typeof(T));
|
||||||
|
PropertyInfo propertyInfo = propertyList.Where(p => p.Name == columnName).FirstOrDefault();
|
||||||
|
if (propertyInfo != null)
|
||||||
|
{
|
||||||
|
return propertyInfo;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (PropertyInfo tempPropertyInfo in propertyList)
|
||||||
|
{
|
||||||
|
System.ComponentModel.DescriptionAttribute[] attributes = (System.ComponentModel.DescriptionAttribute[])tempPropertyInfo.GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
|
||||||
|
if (attributes.Length > 0)
|
||||||
|
{
|
||||||
|
if (attributes[0].Description == columnName)
|
||||||
|
{
|
||||||
|
return tempPropertyInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 得到类里面的属性集合
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type"></param>
|
||||||
|
/// <param name="columns"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static PropertyInfo[] GetProperties(Type type, string[] columns = null)
|
||||||
|
{
|
||||||
|
PropertyInfo[] properties = null;
|
||||||
|
properties = type.GetProperties();
|
||||||
|
|
||||||
|
if (columns != null && columns.Length > 0)
|
||||||
|
{
|
||||||
|
// 按columns顺序返回属性
|
||||||
|
var columnPropertyList = new List<PropertyInfo>();
|
||||||
|
foreach (var column in columns)
|
||||||
|
{
|
||||||
|
var columnProperty = properties.Where(p => p.Name == column).FirstOrDefault();
|
||||||
|
if (columnProperty != null)
|
||||||
|
{
|
||||||
|
columnPropertyList.Add(columnProperty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return columnPropertyList.ToArray();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
174
ARW-net/ARW.Common/MailHelper.cs
Normal file
174
ARW-net/ARW.Common/MailHelper.cs
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
using Infrastructure;
|
||||||
|
using MailKit.Net.Smtp;
|
||||||
|
using MimeKit;
|
||||||
|
using MimeKit.Text;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace ARW.Common
|
||||||
|
{
|
||||||
|
public class MailHelper
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 发送人邮箱
|
||||||
|
/// </summary>
|
||||||
|
public string FromEmail { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// 发送人密码
|
||||||
|
/// </summary>
|
||||||
|
public string FromPwd { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// 发送协议
|
||||||
|
/// </summary>
|
||||||
|
public string Smtp { get; set; } = "smtp.qq.com";
|
||||||
|
/// <summary>
|
||||||
|
/// 协议端口
|
||||||
|
/// </summary>
|
||||||
|
public int Port { get; set; } = 587;
|
||||||
|
/// <summary>
|
||||||
|
/// 邮件签名
|
||||||
|
/// </summary>
|
||||||
|
public string Signature { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否使用SSL协议
|
||||||
|
/// </summary>
|
||||||
|
public bool UseSsl { get; set; } = false;
|
||||||
|
private readonly MailOptions mailOptions = new();
|
||||||
|
|
||||||
|
public MailHelper()
|
||||||
|
{
|
||||||
|
AppSettings.Bind("MailOptions", mailOptions);
|
||||||
|
FromEmail = mailOptions.From;
|
||||||
|
Smtp = mailOptions.Smtp;
|
||||||
|
FromPwd = mailOptions.Password;
|
||||||
|
Port = mailOptions.Port;
|
||||||
|
}
|
||||||
|
public MailHelper(string fromEmail, string smtp, int port, string fromPwd)
|
||||||
|
{
|
||||||
|
FromEmail = fromEmail;
|
||||||
|
Smtp = smtp;
|
||||||
|
FromPwd = fromPwd;
|
||||||
|
Port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MailHelper(string fromEmail, string fromPwd)
|
||||||
|
{
|
||||||
|
FromEmail = fromEmail;
|
||||||
|
FromPwd = fromPwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送一个
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="toAddress"></param>
|
||||||
|
/// <param name="subject"></param>
|
||||||
|
/// <param name="text"></param>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
public void SendMail(string toAddress, string subject, string text, string path = "", string html = "")
|
||||||
|
{
|
||||||
|
IEnumerable<MailboxAddress> mailboxes = new List<MailboxAddress>() {
|
||||||
|
new MailboxAddress(toAddress, toAddress)
|
||||||
|
};
|
||||||
|
|
||||||
|
SendMail(mailboxes, subject, text, path, html);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送多个邮箱
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="toAddress"></param>
|
||||||
|
/// <param name="subject"></param>
|
||||||
|
/// <param name="text"></param>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
public void SendMail(string[] toAddress, string subject, string text, string path = "", string html = "")
|
||||||
|
{
|
||||||
|
IList<MailboxAddress> mailboxes = new List<MailboxAddress>() { };
|
||||||
|
foreach (var item in toAddress)
|
||||||
|
{
|
||||||
|
mailboxes.Add(new MailboxAddress(item, item));
|
||||||
|
}
|
||||||
|
|
||||||
|
SendMail(mailboxes, subject, text, path, html);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送邮件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="toAddress"></param>
|
||||||
|
/// <param name="subject">主题</param>
|
||||||
|
/// <param name="text"></param>
|
||||||
|
/// <param name="path">附件url地址</param>
|
||||||
|
/// <param name="html">网页HTML内容</param>
|
||||||
|
private void SendMail(IEnumerable<MailboxAddress> toAddress, string subject, string text, string path = "", string html = "")
|
||||||
|
{
|
||||||
|
MimeMessage message = new MimeMessage();
|
||||||
|
//发件人
|
||||||
|
message.From.Add(new MailboxAddress(FromEmail, FromEmail));
|
||||||
|
//收件人
|
||||||
|
message.To.AddRange(toAddress);
|
||||||
|
message.Subject = subject;
|
||||||
|
message.Date = DateTime.Now;
|
||||||
|
|
||||||
|
//创建附件Multipart
|
||||||
|
Multipart multipart = new Multipart("mixed");
|
||||||
|
var alternative = new MultipartAlternative();
|
||||||
|
//html内容
|
||||||
|
if (!string.IsNullOrEmpty(html))
|
||||||
|
{
|
||||||
|
var Html = new TextPart(TextFormat.Html)
|
||||||
|
{
|
||||||
|
Text = html
|
||||||
|
};
|
||||||
|
alternative.Add(Html);
|
||||||
|
}
|
||||||
|
//文本内容
|
||||||
|
//if (!string.IsNullOrEmpty(text))
|
||||||
|
//{
|
||||||
|
var plain = new TextPart(TextFormat.Plain)
|
||||||
|
{
|
||||||
|
Text = text + "\r\n\n\n" + mailOptions.Signature
|
||||||
|
};
|
||||||
|
alternative.Add(plain);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//附件
|
||||||
|
if (!string.IsNullOrEmpty(path))
|
||||||
|
{
|
||||||
|
string[] files = path.Split(",");
|
||||||
|
foreach (var file in files)
|
||||||
|
{
|
||||||
|
MimePart attachment = new()
|
||||||
|
{
|
||||||
|
Content = new MimeContent(File.OpenRead(file), ContentEncoding.Default),
|
||||||
|
//读取文件,只能用绝对路径
|
||||||
|
ContentDisposition = new ContentDisposition(ContentDisposition.Attachment),
|
||||||
|
ContentTransferEncoding = ContentEncoding.Base64,
|
||||||
|
//文件名字
|
||||||
|
FileName = Path.GetFileName(path)
|
||||||
|
};
|
||||||
|
alternative.Add(attachment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
multipart.Add(alternative);
|
||||||
|
//赋值邮件内容
|
||||||
|
message.Body = multipart;
|
||||||
|
|
||||||
|
//开始发送
|
||||||
|
using var client = new SmtpClient();
|
||||||
|
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
|
||||||
|
|
||||||
|
//Smtp服务器
|
||||||
|
//client.Connect("smtp.qq.com", 587, false);
|
||||||
|
client.Connect(Smtp, Port, true);
|
||||||
|
//登录,发送
|
||||||
|
//特别说明,对于服务器端的中文相应,Exception中有编码问题,显示乱码了
|
||||||
|
client.Authenticate(FromEmail, FromPwd);
|
||||||
|
|
||||||
|
client.Send(message);
|
||||||
|
//断开
|
||||||
|
client.Disconnect(true);
|
||||||
|
Console.WriteLine($"发送邮件成功{DateTime.Now}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
117
ARW-net/ARW.Common/Tools.cs
Normal file
117
ARW-net/ARW.Common/Tools.cs
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
namespace ARW.Common
|
||||||
|
{
|
||||||
|
public class Tools
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 要分割的字符串 eg: 1,3,10,00
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str"></param>
|
||||||
|
/// <param name="split">分割的字符串</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static long[] SpitLongArrary(string str, char split = ',')
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(str)) { return Array.Empty<long>(); }
|
||||||
|
str = str.TrimStart(split).TrimEnd(split);
|
||||||
|
string[] strIds = str.Split(split, (char)StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
long[] infoIdss = Array.ConvertAll(strIds, s => long.Parse(s));
|
||||||
|
return infoIdss;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int[] SpitIntArrary(string str, char split = ',')
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(str)) { return Array.Empty<int>(); }
|
||||||
|
string[] strIds = str.Split(split, (char)StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
int[] infoIdss = Array.ConvertAll(strIds, s => int.Parse(s));
|
||||||
|
return infoIdss;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据日期获取星期几
|
||||||
|
/// </summary>
|
||||||
|
public static string GetWeekByDate(DateTime dt)
|
||||||
|
{
|
||||||
|
var day = new[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
||||||
|
return day[Convert.ToInt32(dt.DayOfWeek.ToString("d"))];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 得到这个月的第几周
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="daytime">年月日</param>
|
||||||
|
/// <returns>传递过来的时间是第几周</returns>
|
||||||
|
public static int GetWeekNumInMonth(DateTime daytime)
|
||||||
|
{
|
||||||
|
int dayInMonth = daytime.Day;
|
||||||
|
//本月第一天
|
||||||
|
DateTime firstDay = daytime.AddDays(1 - daytime.Day);
|
||||||
|
//本月第一天是周几
|
||||||
|
int weekday = (int)firstDay.DayOfWeek == 0 ? 7 : (int)firstDay.DayOfWeek;
|
||||||
|
//本月第一周有几天
|
||||||
|
int firstWeekEndDay = 7 - (weekday - 1);
|
||||||
|
//当前日期和第一周之差
|
||||||
|
int diffday = dayInMonth - firstWeekEndDay;
|
||||||
|
diffday = diffday > 0 ? diffday : 1;
|
||||||
|
//当前是第几周,如果整除7就减一天
|
||||||
|
int weekNumInMonth = ((diffday % 7) == 0
|
||||||
|
? (diffday / 7 - 1)
|
||||||
|
: (diffday / 7)) + 1 + (dayInMonth > firstWeekEndDay ? 1 : 0);
|
||||||
|
return weekNumInMonth;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 判断一个字符串是否为url
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool IsUrl(string str)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string Url = @"^http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?$";
|
||||||
|
return Regex.IsMatch(str, Url);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算密码强度
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="password">密码字符串</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool PasswordStrength(string password)
|
||||||
|
{
|
||||||
|
//空字符串强度值为0
|
||||||
|
if (string.IsNullOrEmpty(password)) return false;
|
||||||
|
|
||||||
|
//字符统计
|
||||||
|
int iNum = 0, iLtt = 0, iSym = 0;
|
||||||
|
foreach (char c in password)
|
||||||
|
{
|
||||||
|
if (c >= '0' && c <= '9') iNum++;
|
||||||
|
else if (c >= 'a' && c <= 'z') iLtt++;
|
||||||
|
else if (c >= 'A' && c <= 'Z') iLtt++;
|
||||||
|
else iSym++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iLtt == 0 && iSym == 0) return false; //纯数字密码
|
||||||
|
if (iNum == 0 && iLtt == 0) return false; //纯符号密码
|
||||||
|
if (iNum == 0 && iSym == 0) return false; //纯字母密码
|
||||||
|
|
||||||
|
if (password.Length >= 6 && password.Length < 16) return true;//长度不大于6的密码
|
||||||
|
|
||||||
|
if (iLtt == 0) return true; //数字和符号构成的密码
|
||||||
|
if (iSym == 0) return true; //数字和字母构成的密码
|
||||||
|
if (iNum == 0) return true; //字母和符号构成的密码
|
||||||
|
|
||||||
|
return true; //由数字、字母、符号构成的密码
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
ARW-net/ARW.Model/ARW.Model.csproj
Normal file
21
ARW-net/ARW.Model/ARW.Model.csproj
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
|
<AssemblyName>ARW.Model</AssemblyName>
|
||||||
|
<RootNamespace>ARW.Model</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="EPPlus" Version="6.0.5" />
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
|
<PackageReference Include="SqlSugar.MySqlConnectorCore" Version="5.10.3.1" />
|
||||||
|
<PackageReference Include="SqlSugarCoreNoDrive" Version="5.1.3.21" />
|
||||||
|
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Enum\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
27
ARW-net/ARW.Model/Dto/Business/Chat/ApplyDto.cs
Normal file
27
ARW-net/ARW.Model/Dto/Business/Chat/ApplyDto.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.Chat
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 申请
|
||||||
|
/// </summary>
|
||||||
|
public class ApplyDto
|
||||||
|
{
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
public string Postscript { get; set; }
|
||||||
|
public string Reply { get; set; }
|
||||||
|
public bool IsGroup { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class ApplyQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public long? UserGuId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
25
ARW-net/ARW.Model/Dto/Business/Chat/ChatGPT/ChatGPTDto.cs
Normal file
25
ARW-net/ARW.Model/Dto/Business/Chat/ChatGPT/ChatGPTDto.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.Chat.ChatGPT
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Chat GPT传输对象
|
||||||
|
/// </summary>
|
||||||
|
public class CahtGPTDto
|
||||||
|
{
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
public string Content { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class ChatGPTQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public long? UserGuId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
26
ARW-net/ARW.Model/Dto/Business/Chat/ChatLogDto.cs
Normal file
26
ARW-net/ARW.Model/Dto/Business/Chat/ChatLogDto.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.Chat
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天记录
|
||||||
|
/// </summary>
|
||||||
|
public class ChatLogDto
|
||||||
|
{
|
||||||
|
public string ChatLogType { get; set; }
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
public string ChatLogContent { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ChatLogQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public string ChatLogType { get; set; }
|
||||||
|
public long? UserGuId { get; set; }
|
||||||
|
public long? FriendsGuId { get; set; }
|
||||||
|
public string ChatLogContent { get; set; }
|
||||||
|
}
|
||||||
|
}
|
36
ARW-net/ARW.Model/Dto/Business/Chat/ChatUserDto.cs
Normal file
36
ARW-net/ARW.Model/Dto/Business/Chat/ChatUserDto.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.Chat
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 登录用户信息存储
|
||||||
|
/// </summary>
|
||||||
|
public class ChatUserDto
|
||||||
|
{
|
||||||
|
public int ChatUserId { get; set; }
|
||||||
|
public long ChatUserGuid { get; set; }
|
||||||
|
public string ChatUserNickName { get; set; }
|
||||||
|
public string ChatUserName { get; set; }
|
||||||
|
public string ChatUserImg { get; set; }
|
||||||
|
public int? Age { get; set; }
|
||||||
|
public string Sex { get; set; }
|
||||||
|
public string Password { get; set; }
|
||||||
|
public string Phone { get; set; }
|
||||||
|
public string Email { get; set; }
|
||||||
|
public int? Status { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class ChatUserQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public string ChatUserName { get; set; }
|
||||||
|
public string ChatUserNickName { get; set; }
|
||||||
|
public int? ChatUserStatus { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
ARW-net/ARW.Model/Dto/Business/Chat/FindFriendsDto.cs
Normal file
24
ARW-net/ARW.Model/Dto/Business/Chat/FindFriendsDto.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.Chat
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 查找好友
|
||||||
|
/// </summary>
|
||||||
|
public class FindFriendsDto
|
||||||
|
{
|
||||||
|
public string FriendName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 修改备注
|
||||||
|
/// </summary>
|
||||||
|
public class UpdateNoteDto
|
||||||
|
{
|
||||||
|
public long UserGuId { get; set; }
|
||||||
|
public string Note { get; set; }
|
||||||
|
}
|
||||||
|
}
|
24
ARW-net/ARW.Model/Dto/Business/Chat/FriendsDto.cs
Normal file
24
ARW-net/ARW.Model/Dto/Business/Chat/FriendsDto.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.Chat
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 好友
|
||||||
|
/// </summary>
|
||||||
|
public class FriendsDto
|
||||||
|
{
|
||||||
|
public long UserGuId { get; set; }
|
||||||
|
public long FriendsGuId { get; set; }
|
||||||
|
public string FriendsNote { get; set; }
|
||||||
|
public string Reply { get; set; }
|
||||||
|
public bool IsAgree { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class FriendsQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public long? UserGuId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
31
ARW-net/ARW.Model/Dto/Business/Chat/GroupDto.cs
Normal file
31
ARW-net/ARW.Model/Dto/Business/Chat/GroupDto.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.Chat
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 群聊
|
||||||
|
/// </summary>
|
||||||
|
public class GroupDto
|
||||||
|
{
|
||||||
|
public long GroupGuId { get; set; }
|
||||||
|
public string GroupName { get; set; }
|
||||||
|
public string GroupImg { get; set; }
|
||||||
|
public long UserGuId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GroupQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public long? UserGuId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GroupUserDto
|
||||||
|
{
|
||||||
|
public long GroupManagerGuId { get; set; }
|
||||||
|
public long UserGuId { get; set; }
|
||||||
|
public string Reply { get; set; }
|
||||||
|
public bool IsAgree { get; set; }
|
||||||
|
}
|
||||||
|
}
|
30
ARW-net/ARW.Model/Dto/Business/ClassDto.cs
Normal file
30
ARW-net/ARW.Model/Dto/Business/ClassDto.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Dto.Business
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 输入对象
|
||||||
|
/// </summary>
|
||||||
|
public class ClassDto
|
||||||
|
{
|
||||||
|
public long ClassId { get; set; }
|
||||||
|
[Required(ErrorMessage = "班级名称不能为空")]
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class ClassQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public long? ClassId { get; set; }
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
21
ARW-net/ARW.Model/Dto/Business/Crawler/StudentDto.cs
Normal file
21
ARW-net/ARW.Model/Dto/Business/Crawler/StudentDto.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
|
||||||
|
namespace ARW.Model.Dto.Business.Crawler
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class CrawlQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
28
ARW-net/ARW.Model/Dto/Business/Product/ProductTypeDto.cs
Normal file
28
ARW-net/ARW.Model/Dto/Business/Product/ProductTypeDto.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Dto.Business.Product
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 产品类型输入对象
|
||||||
|
/// </summary>
|
||||||
|
public class ProductTypeDto
|
||||||
|
{
|
||||||
|
[Required(ErrorMessage = "产品类型Id不能为空")]
|
||||||
|
public long ProductTypeId { get; set; }
|
||||||
|
[Required(ErrorMessage = "产品类型不能为空")]
|
||||||
|
public string ProductTypeName { get; set; }
|
||||||
|
public long ParentId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 产品类型查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class ProductTypeQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
58
ARW-net/ARW.Model/Dto/Business/StudentDto.cs
Normal file
58
ARW-net/ARW.Model/Dto/Business/StudentDto.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
|
||||||
|
namespace ARW.Model.Dto.Business
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 输入对象
|
||||||
|
/// </summary>
|
||||||
|
public class StudentDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 学生Id
|
||||||
|
/// </summary>
|
||||||
|
public long StudentId { get; set; }
|
||||||
|
public long ClassId { get; set; }
|
||||||
|
public string DictType { get; set; }
|
||||||
|
public string StudentName { get; set; }
|
||||||
|
public string Sex { get; set; }
|
||||||
|
public int? Age { get; set; }
|
||||||
|
public string StudentImg { get; set; }
|
||||||
|
public string StudentTag { get; set; }
|
||||||
|
public Service[] StudentService { get; set; }
|
||||||
|
public string StudentDescribe { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class StudentQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 学生ID
|
||||||
|
/// </summary>
|
||||||
|
public long? StudentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 班级ID
|
||||||
|
/// </summary>
|
||||||
|
public long? ClassId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 类型ID
|
||||||
|
/// </summary>
|
||||||
|
public string DictType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 学生名称
|
||||||
|
/// </summary>
|
||||||
|
public string StudentName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
ARW-net/ARW.Model/Models/Business/BusinessBase.cs
Normal file
40
ARW-net/ARW.Model/Models/Business/BusinessBase.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using System;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business
|
||||||
|
{
|
||||||
|
|
||||||
|
[EpplusTable(PrintHeaders = true, AutofitColumns = true, AutoCalculate = true, ShowTotal = true)]
|
||||||
|
public class BusinessBase
|
||||||
|
{
|
||||||
|
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true,IsNullable = true)]//设置后修改不会有此字段
|
||||||
|
[JsonProperty(propertyName: "CreateBy")]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Create_by { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true, IsNullable = true)]//设置后修改不会有此字段
|
||||||
|
[JsonProperty(propertyName: "CreateTime")]
|
||||||
|
[EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||||
|
public DateTime Create_time { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[JsonProperty(propertyName: "UpdateBy")]
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true, IsNullable = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Update_by { get; set; }
|
||||||
|
|
||||||
|
//[JsonIgnore]
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true, IsNullable = true)]//设置后插入数据不会有此字段
|
||||||
|
[JsonProperty(propertyName: "UpdateTime")]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public DateTime? Update_time { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty(propertyName: "IsDelete")]
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public bool IsDelete { get; set; }
|
||||||
|
}
|
||||||
|
}
|
62
ARW-net/ARW.Model/Models/Business/Chat/Apply.cs
Normal file
62
ARW-net/ARW.Model/Models/Business/Chat/Apply.cs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Chat
|
||||||
|
{
|
||||||
|
[SugarTable("tb_chat_apply")]
|
||||||
|
public class Apply : BusinessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 发起人id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnDescription = "发起人id", ColumnName = "sender_guid")]
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 接收人id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnDescription = "接收人id",ColumnName = "receiver_guid")]
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 附言
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "附言", IsNullable = true, ColumnName = "postscript")]
|
||||||
|
public string Postscript { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 回复
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "回复", IsNullable = true, ColumnName = "reply")]
|
||||||
|
public string Reply { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否同意
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "是否同意", IsNullable = true, ColumnName = "isAgree")]
|
||||||
|
public bool? IsAgree { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否群申请
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "是否群申请", IsNullable = true, ColumnName = "isGroupApply")]
|
||||||
|
public bool? IsGroupApply { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否已读
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "是否已读", ColumnName = "isRead")]
|
||||||
|
public bool IsRead { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
66
ARW-net/ARW.Model/Models/Business/Chat/ChatGPT/ChatGPTLog.cs
Normal file
66
ARW-net/ARW.Model/Models/Business/Chat/ChatGPT/ChatGPTLog.cs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Chat.ChatGPT
|
||||||
|
{
|
||||||
|
[SugarTable("tb_chat_gpt_log")]
|
||||||
|
public class ChatGPTLog : BusinessBase
|
||||||
|
{
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "chat_gpt_log_id")]
|
||||||
|
public int ChatGptLogId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 聊天记录id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true, ColumnName = "chat_gpt_log_guid")]
|
||||||
|
public long ChatGptLogGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送人guid(外键)
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnDescription = "发送人guid(外键)", ColumnName = "sender_guid")]
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 接收人guid(外键)
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnDescription = "接收人guid(外键)", ColumnName = "receiver_guid")]
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 发送时间
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "发送时间", ColumnName = "chat_gpt_log_send_time")]
|
||||||
|
public DateTime ChatGptLogSendTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 内容
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "内容", ColumnDataType = "text", ColumnName = "chat_gpt_log_content")]
|
||||||
|
public string ChatGptLogContent { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 备注
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "备注", IsNullable = true, ColumnName = "chat_gpt_log_name")]
|
||||||
|
public string Remark { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否已读
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "是否已读", ColumnName = "isRead")]
|
||||||
|
public bool IsRead { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
72
ARW-net/ARW.Model/Models/Business/Chat/ChatLog.cs
Normal file
72
ARW-net/ARW.Model/Models/Business/Chat/ChatLog.cs
Normal file
File diff suppressed because one or more lines are too long
82
ARW-net/ARW.Model/Models/Business/Chat/ChatUser.cs
Normal file
82
ARW-net/ARW.Model/Models/Business/Chat/ChatUser.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Chat
|
||||||
|
{
|
||||||
|
[SugarTable("tb_chat_user")]
|
||||||
|
public class ChatUser : BusinessBase
|
||||||
|
{
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "chat_user_id")]
|
||||||
|
public int ChatUserId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true, ColumnName = "chat_user_guid")]
|
||||||
|
public long ChatUserGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户名
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "用户名", ColumnName = "chat_user_name")]
|
||||||
|
public string ChatUserName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 密码
|
||||||
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Password { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 昵称
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "昵称", ColumnName = "chat_user_nickname")]
|
||||||
|
public string ChatUserNickName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 性别(1:男,2:女)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 1, ColumnDescription = "性别(1:男,2:女)", IsNullable = true, ColumnName = "chat_user_sex")]
|
||||||
|
public string Sex { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 年龄
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "年龄", IsNullable = true, ColumnName = "chat_user_age")]
|
||||||
|
public int? Age { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户图片(路径)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "用户头像", IsNullable = true, ColumnName = "chat_user_img")]
|
||||||
|
public string ChatUserImg { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电话号码
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "电话号码", IsNullable = true, ColumnName = "chat_user_phone")]
|
||||||
|
public string Phone { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 邮箱
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "邮箱", IsNullable = true, ColumnName = "chat_user_email")]
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 登录状态(1,在线 | 0,离线)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "登录状态(1,在线 | 0,离线)", ColumnName = "chat_user_status")]
|
||||||
|
public int? Status { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
38
ARW-net/ARW.Model/Models/Business/Chat/Friends.cs
Normal file
38
ARW-net/ARW.Model/Models/Business/Chat/Friends.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Chat
|
||||||
|
{
|
||||||
|
[SugarTable("tb_chat_friends")]
|
||||||
|
public class Friends : BusinessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnName = "uesr_guid")]
|
||||||
|
public long UserGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 好友id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnName = "friends_guid")]
|
||||||
|
public long FriendsGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 备注
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "备注", IsNullable = true, ColumnName = "friends_note")]
|
||||||
|
public string FriendsNote { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
43
ARW-net/ARW.Model/Models/Business/Chat/Group.cs
Normal file
43
ARW-net/ARW.Model/Models/Business/Chat/Group.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Chat
|
||||||
|
{
|
||||||
|
[SugarTable("tb_chat_group")]
|
||||||
|
public class Group : BusinessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 群聊id
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "group_id")]
|
||||||
|
public int GroupId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 群聊guid
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true, ColumnName = "group_guid")]
|
||||||
|
public long GroupGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 群名称
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "group_name", ColumnDescription = "群名称")]
|
||||||
|
public string GroupName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 群头像
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "群头像", IsNullable = true, ColumnName = "group_img")]
|
||||||
|
public string GroupImg { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
44
ARW-net/ARW.Model/Models/Business/Chat/GroupUser.cs
Normal file
44
ARW-net/ARW.Model/Models/Business/Chat/GroupUser.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Chat
|
||||||
|
{
|
||||||
|
[SugarTable("tb_chat_group_user")]
|
||||||
|
public class GroupUser : BusinessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 群聊id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnName = "group_guid",ColumnDescription = "群guid(外键)")]
|
||||||
|
public long GroupGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnName = "user_guid", ColumnDescription = "用户guid(外键)")]
|
||||||
|
public long UserGuId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否群主
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "isgroup_manager", ColumnDescription = "是否为群主")]
|
||||||
|
public bool IsGroupManager { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否群主
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "IsRead", ColumnDescription = "是否已读")]
|
||||||
|
public bool IsRead { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
28
ARW-net/ARW.Model/Models/Business/Class.cs
Normal file
28
ARW-net/ARW.Model/Models/Business/Class.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business
|
||||||
|
{
|
||||||
|
[SugarTable("tb_class")]
|
||||||
|
public class Class : BusinessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 班级Id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true, ColumnName = "class_id")]
|
||||||
|
public long ClassId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 班级名称
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "班级名称",ColumnName = "class_name")]
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
66
ARW-net/ARW.Model/Models/Business/Crawler/Crawl.cs
Normal file
66
ARW-net/ARW.Model/Models/Business/Crawler/Crawl.cs
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Crawler
|
||||||
|
{
|
||||||
|
[SugarTable("crawl")]
|
||||||
|
public class Crawl: BusinessBase
|
||||||
|
{
|
||||||
|
[SugarColumn(IsPrimaryKey = true,IsIdentity =true)]
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(ColumnDescription = "名称", IsNullable = true)]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(ColumnDescription = "简介", IsNullable = true)]
|
||||||
|
public string Intro { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(ColumnDescription = "图片", IsNullable = true)]
|
||||||
|
public string Cover { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(ColumnDescription = "链接", IsNullable = true)]
|
||||||
|
public string Link { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(ColumnDescription = "类型", IsNullable = true)]
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(ColumnDescription = "上传时间", IsNullable = true)]
|
||||||
|
public DateTime PublishTime { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<Resource> DownResources { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(ColumnDescription = "下载资源", IsNullable = true)]
|
||||||
|
public string Resources
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (this.DownResources != null)
|
||||||
|
{
|
||||||
|
return JToken.FromObject(this.DownResources).ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "[]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Resource
|
||||||
|
{
|
||||||
|
public string Description { get; set; }
|
||||||
|
|
||||||
|
public string Link { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
40
ARW-net/ARW.Model/Models/Business/Product/ProductType.cs
Normal file
40
ARW-net/ARW.Model/Models/Business/Product/ProductType.cs
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business.Product
|
||||||
|
{
|
||||||
|
[SugarTable("tb_product_type")]
|
||||||
|
public class ProductType : BusinessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 班级Id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true, ColumnName = "product_type_id")]
|
||||||
|
public long ProductTypeId{ get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 班级名称
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "产品类型",ColumnName = "product_type_name")]
|
||||||
|
public string ProductTypeName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 父级Id
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "父级Id", IsNullable = true, ColumnName = "parent_id")]
|
||||||
|
public long ParentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 子级内容
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<ProductType> Children { get; set; }
|
||||||
|
}
|
||||||
|
}
|
83
ARW-net/ARW.Model/Models/Business/Student.cs
Normal file
83
ARW-net/ARW.Model/Models/Business/Student.cs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models.Business
|
||||||
|
{
|
||||||
|
[SugarTable("tb_student")]
|
||||||
|
public class Student : BusinessBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 学生id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true, ColumnName = "student_id")]
|
||||||
|
public long StudentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 班级guid(外键)
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(ColumnDescription = "班级guid(外键)", ColumnName = "class_guid")]
|
||||||
|
public long ClassId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 字典类型(外键)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "字典类型(外键)", IsNullable = true, ColumnName = "dictType")]
|
||||||
|
public string DictType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 学生名称
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "学生名称", IsNullable = true, ColumnName = "student_name")]
|
||||||
|
public string StudentName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 性别(1:男,2:女)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 1, ColumnDescription = "性别(1:男,2:女)", IsNullable = true, ColumnName = "student_sex")]
|
||||||
|
public string Sex { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 年龄
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "年龄", IsNullable = true, ColumnName = "student_age")]
|
||||||
|
public int? Age { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 学生图片(路径)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "学生图片", IsNullable = true, ColumnName = "student_img")]
|
||||||
|
public string StudentImg { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 学生标签(单个字段,以","分开)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "学生标签", IsNullable = true, ColumnName = "student_tag")]
|
||||||
|
public string StudentTag { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 学生服务(json)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "学生服务", ColumnDataType = "text", IsNullable = true, ColumnName = "student_service", IsJson = true)]
|
||||||
|
public Service[] StudentService { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 学生描述(富文本)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnDescription = "学生描述", ColumnDataType = "text", IsNullable = true, ColumnName = "student_describe")]
|
||||||
|
public string StudentDescribe { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Service
|
||||||
|
{
|
||||||
|
public string service_name { get; set; }
|
||||||
|
public string service_price { get; set; }
|
||||||
|
}
|
||||||
|
}
|
48
ARW-net/ARW.Model/PagedInfo.cs
Normal file
48
ARW-net/ARW.Model/PagedInfo.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 分页参数
|
||||||
|
/// </summary>
|
||||||
|
public class PagedInfo<T>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 每页行数
|
||||||
|
/// </summary>
|
||||||
|
public int PageSize { get; set; } = 10;
|
||||||
|
/// <summary>
|
||||||
|
/// 当前页
|
||||||
|
/// </summary>
|
||||||
|
public int PageIndex { get; set; } = 1;
|
||||||
|
/// <summary>
|
||||||
|
/// 总记录数
|
||||||
|
/// </summary>
|
||||||
|
public int TotalNum { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 总页数
|
||||||
|
/// </summary>
|
||||||
|
public int TotalPage
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (TotalNum > 0)
|
||||||
|
{
|
||||||
|
return TotalNum % this.PageSize == 0 ? TotalNum / this.PageSize : TotalNum / this.PageSize + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
public List<T> Result { get; set; }
|
||||||
|
public Dictionary<string, object> Extra { get; set; } = new Dictionary<string, object>();
|
||||||
|
public PagedInfo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
52
ARW-net/ARW.Model/PagerInfo.cs
Normal file
52
ARW-net/ARW.Model/PagerInfo.cs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model
|
||||||
|
{
|
||||||
|
public class PagerInfo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 当前页码
|
||||||
|
/// </summary>
|
||||||
|
public int PageNum { get; set; }
|
||||||
|
public int PageSize { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 总记录数
|
||||||
|
/// </summary>
|
||||||
|
public int TotalNum { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 总页码
|
||||||
|
/// </summary>
|
||||||
|
/// <summary>
|
||||||
|
/// 总页数
|
||||||
|
/// </summary>
|
||||||
|
public int TotalPage
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return TotalNum > 0 ? TotalNum % PageSize == 0 ? TotalNum / PageSize : TotalNum / PageSize + 1 : 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 排序字段
|
||||||
|
/// </summary>
|
||||||
|
public string Sort { get; set; } = string.Empty;
|
||||||
|
/// <summary>
|
||||||
|
/// 排序类型,前端传入的是"ascending","descending"
|
||||||
|
/// </summary>
|
||||||
|
public string SortType { get; set; } = string.Empty;
|
||||||
|
public PagerInfo()
|
||||||
|
{
|
||||||
|
PageNum = 1;
|
||||||
|
PageSize = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PagerInfo(int page = 1, int pageSize = 20)
|
||||||
|
{
|
||||||
|
PageNum = page;
|
||||||
|
PageSize = pageSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
60
ARW-net/ARW.Model/System/CommonLang.cs
Normal file
60
ARW-net/ARW.Model/System/CommonLang.cs
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using SqlSugar;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace ARW.Model.Models
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 多语言配置,数据实体对象
|
||||||
|
///
|
||||||
|
/// @author
|
||||||
|
///
|
||||||
|
/// @date 2022-05-06
|
||||||
|
/// </summary>
|
||||||
|
[Tenant("0")]
|
||||||
|
[SugarTable("sys_common_lang")]
|
||||||
|
public class CommonLang
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : id
|
||||||
|
/// 空值 : false
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[EpplusTableColumn(Header = "id")]
|
||||||
|
[SugarColumn(IsPrimaryKey = true)]
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 语言code
|
||||||
|
/// 空值 : false
|
||||||
|
/// </summary>
|
||||||
|
[EpplusTableColumn(Header = "语言code")]
|
||||||
|
[SugarColumn(ColumnName = "lang_code")]
|
||||||
|
public string LangCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 语言key
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
[EpplusTableColumn(Header = "语言key")]
|
||||||
|
[SugarColumn(ColumnName = "lang_key")]
|
||||||
|
public string LangKey { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 名称
|
||||||
|
/// 空值 : false
|
||||||
|
/// </summary>
|
||||||
|
[EpplusTableColumn(Header = "名称")]
|
||||||
|
[SugarColumn(ColumnName = "lang_name")]
|
||||||
|
public string LangName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 添加时间
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
[EpplusTableColumn(Header = "添加时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||||
|
public DateTime? Addtime { get; set; }
|
||||||
|
}
|
||||||
|
}
|
33
ARW-net/ARW.Model/System/Dto/CommonLangDto.cs
Normal file
33
ARW-net/ARW.Model/System/Dto/CommonLangDto.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ARW.Model.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 多语言配置输入对象
|
||||||
|
/// </summary>
|
||||||
|
public class CommonLangDto
|
||||||
|
{
|
||||||
|
//[Required(ErrorMessage = "id不能为空")]
|
||||||
|
public long Id { get; set; }
|
||||||
|
//[Required(ErrorMessage = "语言code不能为空")]
|
||||||
|
public string LangCode { get; set; }
|
||||||
|
public string LangKey { get; set; }
|
||||||
|
//[Required(ErrorMessage = "名称不能为空")]
|
||||||
|
public string LangName { get; set; }
|
||||||
|
public List<CommonLangDto> LangList { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 多语言配置查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class CommonLangQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public string LangCode { get; set; }
|
||||||
|
public string LangKey { get; set; }
|
||||||
|
public DateTime? BeginAddtime { get; set; }
|
||||||
|
public DateTime? EndAddtime { get; set; }
|
||||||
|
public int ShowMode { get; set; }
|
||||||
|
}
|
||||||
|
}
|
81
ARW-net/ARW.Model/System/Dto/GenTableDto.cs
Normal file
81
ARW-net/ARW.Model/System/Dto/GenTableDto.cs
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using ARW.Model.System.Generate;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class GenTableDto
|
||||||
|
{
|
||||||
|
public int TableId { get; set; }
|
||||||
|
public string TableName { get; set; }
|
||||||
|
public string TableComment { get; set; }
|
||||||
|
public string SubTableName { get; set; }
|
||||||
|
public string SubTableFkName { get; set; }
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
public string TplCategory { get; set; }
|
||||||
|
public string BaseNameSpace { get; set; }
|
||||||
|
public string ModuleName { get; set; }
|
||||||
|
public string BusinessName { get; set; }
|
||||||
|
public string FunctionName { get; set; }
|
||||||
|
public string FunctionAuthor { get; set; }
|
||||||
|
public string GenType { get; set; }
|
||||||
|
public string GenPath { get; set; }
|
||||||
|
//public string PermissionPrefix { get; set; }
|
||||||
|
public string Remark { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 额外参数
|
||||||
|
/// </summary>
|
||||||
|
public Options Params { get; set; }
|
||||||
|
public List<GenTableColumnDto> Columns { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 额外参数
|
||||||
|
/// ****注意里面参数统一首字母小写*****
|
||||||
|
/// </summary>
|
||||||
|
public class Params
|
||||||
|
{
|
||||||
|
public string TreeCode { get; set; }
|
||||||
|
public string TreeName { get; set; }
|
||||||
|
public string TreeParentCode { get; set; }
|
||||||
|
public int? ParentMenuId { get; set; }
|
||||||
|
public string SortField { get; set; }
|
||||||
|
public string SortType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 额外参数字符串
|
||||||
|
/// </summary>
|
||||||
|
public string CheckedBtn { get; set; }
|
||||||
|
public string PermissionPrefix { get; set; }
|
||||||
|
}
|
||||||
|
public class GenTableColumnDto
|
||||||
|
{
|
||||||
|
public int ColumnId { get; set; }
|
||||||
|
public int TableId { get; set; }
|
||||||
|
public string ColumnComment { get; set; }
|
||||||
|
public string CsharpType { get; set; }
|
||||||
|
public string CsharpField { get; set; }
|
||||||
|
public bool IsInsert { get; set; }
|
||||||
|
public bool IsEdit { get; set; }
|
||||||
|
public bool IsList { get; set; }
|
||||||
|
public bool IsQuery { get; set; }
|
||||||
|
public bool IsSort { get; set; }
|
||||||
|
public bool IsRequired { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)
|
||||||
|
/// </summary>
|
||||||
|
public string HtmlType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 查询类型(等于、不等于、大于、小于、范围)
|
||||||
|
/// </summary>
|
||||||
|
public string QueryType { get; set; } = "EQ";
|
||||||
|
public int Sort { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 字典类型
|
||||||
|
/// </summary>
|
||||||
|
public string DictType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 备注
|
||||||
|
/// </summary>
|
||||||
|
public string Remark { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
ARW-net/ARW.Model/System/Dto/LoginBodyDto.cs
Normal file
30
ARW-net/ARW.Model/System/Dto/LoginBodyDto.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class LoginBodyDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户名
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "用户名不能为空")]
|
||||||
|
public string Username { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户密码
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "密码不能为空")]
|
||||||
|
public string Password { get; set; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 验证码
|
||||||
|
*/
|
||||||
|
public string Code { get; set; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 唯一标识
|
||||||
|
*/
|
||||||
|
public string Uuid { get; set; } = "";
|
||||||
|
public string LoginIP { get; set; }
|
||||||
|
}
|
||||||
|
}
|
92
ARW-net/ARW.Model/System/Dto/MenuDto.cs
Normal file
92
ARW-net/ARW.Model/System/Dto/MenuDto.cs
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class MenuDto
|
||||||
|
{
|
||||||
|
//{"parentId":0,"menuName":"aaa","icon":"documentation","menuType":"M","orderNum":999,"visible":0,"status":0,"path":"aaa"}
|
||||||
|
[Required(ErrorMessage = "菜单id不能为空")]
|
||||||
|
public int MenuId { get; set; }
|
||||||
|
public string MenuName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 父菜单ID
|
||||||
|
/// </summary>
|
||||||
|
public long? parentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 显示顺序
|
||||||
|
/// </summary>
|
||||||
|
public int orderNum { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 路由地址
|
||||||
|
/// </summary>
|
||||||
|
public string path { get; set; } = "#";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 组件路径
|
||||||
|
/// </summary>
|
||||||
|
public string component { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否缓存(1缓存 0不缓存)
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "是否缓存不能为空")]
|
||||||
|
public string isCache { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否外链 1、是 0、否
|
||||||
|
/// </summary>
|
||||||
|
public string isFrame { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 类型(M目录 C菜单 F按钮 L链接)
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "菜单类型不能为空")]
|
||||||
|
public string menuType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 显示状态(0显示 1隐藏)
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "显示状态不能为空")]
|
||||||
|
public string visible { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单状态(0正常 1停用)
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "菜单状态不能为空")]
|
||||||
|
public string status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 权限字符串
|
||||||
|
/// </summary>
|
||||||
|
public string perms { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单图标
|
||||||
|
/// </summary>
|
||||||
|
public string icon { get; set; } = string.Empty;
|
||||||
|
/// <summary>
|
||||||
|
/// 翻译key
|
||||||
|
/// </summary>
|
||||||
|
public string MenuNameKey { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MenuQueryDto
|
||||||
|
{
|
||||||
|
public string MenuName { get; set; }
|
||||||
|
public string Visible { get; set; }
|
||||||
|
public string Status { get; set; }
|
||||||
|
public string MenuTypeIds { get; set; } = string.Empty;
|
||||||
|
public int? ParentId { get; set; }
|
||||||
|
public string[] MenuTypeIdArr
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return MenuTypeIds.Split(',', StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
ARW-net/ARW.Model/System/Dto/RegisterDto.cs
Normal file
33
ARW-net/ARW.Model/System/Dto/RegisterDto.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class RegisterDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户名
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "用户名不能为空")]
|
||||||
|
public string Username { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户密码
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "密码不能为空")]
|
||||||
|
public string Password { get; set; }
|
||||||
|
[Required(ErrorMessage = "确认密码不能为空")]
|
||||||
|
public string ConfirmPassword { get; set; }
|
||||||
|
/**
|
||||||
|
* 验证码
|
||||||
|
*/
|
||||||
|
public string Code { get; set; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 唯一标识
|
||||||
|
*/
|
||||||
|
public string Uuid { get; set; } = "";
|
||||||
|
}
|
||||||
|
}
|
34
ARW-net/ARW.Model/System/Dto/RoleUserDto.cs
Normal file
34
ARW-net/ARW.Model/System/Dto/RoleUserDto.cs
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class RoleUserQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
|
||||||
|
public string UserName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RoleUsersCreateDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 角色id
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "角色id")]
|
||||||
|
[Required(ErrorMessage = "roleId 不能为空")]
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 用户编码 [1,2,3,4]
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "用户编码 [1,2,3,4]")]
|
||||||
|
public List<long> UserIds { get; set; }
|
||||||
|
}
|
||||||
|
}
|
30
ARW-net/ARW.Model/System/Dto/SysConfigDto.cs
Normal file
30
ARW-net/ARW.Model/System/Dto/SysConfigDto.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 参数配置输入对象模型
|
||||||
|
/// </summary>
|
||||||
|
public class SysConfigDto
|
||||||
|
{
|
||||||
|
public int ConfigId { get; set; }
|
||||||
|
public string ConfigName { get; set; }
|
||||||
|
public string ConfigKey { get; set; }
|
||||||
|
public string ConfigValue { get; set; }
|
||||||
|
public string ConfigType { get; set; }
|
||||||
|
public string Remark { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 参数配置查询对象模型
|
||||||
|
/// </summary>
|
||||||
|
public class SysConfigQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public string ConfigName { get; set; }
|
||||||
|
public string ConfigKey { get; set; }
|
||||||
|
public string ConfigValue { get; set; }
|
||||||
|
public string ConfigType { get; set; }
|
||||||
|
public DateTime? BeginTime { get; set; }
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
}
|
||||||
|
}
|
87
ARW-net/ARW.Model/System/Dto/SysFileQueryDto.cs
Normal file
87
ARW-net/ARW.Model/System/Dto/SysFileQueryDto.cs
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 文件存储输入对象
|
||||||
|
/// </summary>
|
||||||
|
public class SysFileDto
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 文件原名
|
||||||
|
/// </summary>
|
||||||
|
public string RealName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 文件类型
|
||||||
|
/// </summary>
|
||||||
|
public string FileType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 存储文件名
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 文件存储地址 eg:/uploads/20220202
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileUrl { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 仓库位置 eg:/uploads
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string StorePath { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 文件大小
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileSize { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 文件扩展名
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileExt { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 创建人
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string Create_by { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 上传时间
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? Create_time { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 存储类型
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public int? StoreType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 访问路径
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string AccessUrl { get; set; }
|
||||||
|
|
||||||
|
public SysFileDto() { }
|
||||||
|
public SysFileDto(string originFileName, string fileName, string ext, string fileSize, string storePath, string accessUrl, string create_by)
|
||||||
|
{
|
||||||
|
StorePath = storePath;
|
||||||
|
RealName = originFileName;
|
||||||
|
FileName = fileName;
|
||||||
|
FileExt = ext;
|
||||||
|
FileSize = fileSize;
|
||||||
|
AccessUrl = accessUrl;
|
||||||
|
Create_by = create_by;
|
||||||
|
Create_time = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class SysFileQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public DateTime? BeginCreate_time { get; set; }
|
||||||
|
public DateTime? EndCreate_time { get; set; }
|
||||||
|
public int? StoreType { get; set; }
|
||||||
|
public long? FileId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
25
ARW-net/ARW.Model/System/Dto/SysLogininfoDto.cs
Normal file
25
ARW-net/ARW.Model/System/Dto/SysLogininfoDto.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using ARW.Model.System;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class SysLogininfoDto : SysBase
|
||||||
|
{
|
||||||
|
public int pageNum { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// IP 地址
|
||||||
|
/// </summary>
|
||||||
|
public string Ipaddr { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 登录状态 0成功 1失败
|
||||||
|
/// </summary>
|
||||||
|
public string Status { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 用户名
|
||||||
|
/// </summary>
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
32
ARW-net/ARW.Model/System/Dto/SysNoticeDto.cs
Normal file
32
ARW-net/ARW.Model/System/Dto/SysNoticeDto.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using ARW.Model.Models;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 通知公告表输入对象
|
||||||
|
/// </summary>
|
||||||
|
public class SysNoticeDto
|
||||||
|
{
|
||||||
|
public int NoticeId { get; set; }
|
||||||
|
public string NoticeTitle { get; set; }
|
||||||
|
public string NoticeType { get; set; }
|
||||||
|
public string NoticeContent { get; set; }
|
||||||
|
public string Status { get; set; }
|
||||||
|
public string Remark { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通知公告表查询对象
|
||||||
|
/// </summary>
|
||||||
|
public class SysNoticeQueryDto : PagerInfo
|
||||||
|
{
|
||||||
|
public string NoticeTitle { get; set; }
|
||||||
|
public string NoticeType { get; set; }
|
||||||
|
public string CreateBy { get; set; }
|
||||||
|
public string Status { get; set; }
|
||||||
|
}
|
||||||
|
}
|
32
ARW-net/ARW.Model/System/Dto/SysOperLogDto.cs
Normal file
32
ARW-net/ARW.Model/System/Dto/SysOperLogDto.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using ARW.Model.System;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class SysOperLogDto : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 页码
|
||||||
|
/// </summary>
|
||||||
|
public int pageNum { get; set; }
|
||||||
|
public int PageSize { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 操作人员
|
||||||
|
/// </summary>
|
||||||
|
public string operName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 业务类型 0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据
|
||||||
|
/// </summary>
|
||||||
|
public int BusinessType { get; set; } = -1;
|
||||||
|
/// <summary>
|
||||||
|
/// 状态
|
||||||
|
/// </summary>
|
||||||
|
public int Status { get; set; } = -1;
|
||||||
|
/// <summary>
|
||||||
|
/// 操作模块
|
||||||
|
/// </summary>
|
||||||
|
public string Title { get; set; }
|
||||||
|
}
|
||||||
|
}
|
20
ARW-net/ARW.Model/System/Dto/SysRoleDto.cs
Normal file
20
ARW-net/ARW.Model/System/Dto/SysRoleDto.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using ARW.Model.System;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class SysRoleDto: SysBase
|
||||||
|
{
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 角色分配菜单
|
||||||
|
/// </summary>
|
||||||
|
public List<long> MenuIds { get; set; } = new List<long>();
|
||||||
|
public string RoleName { get; set; }
|
||||||
|
public string RoleKey { get; set; }
|
||||||
|
public int RoleSort { get; set; }
|
||||||
|
public string Status { get; set; }
|
||||||
|
}
|
||||||
|
}
|
21
ARW-net/ARW.Model/System/Dto/SysUserDto.cs
Normal file
21
ARW-net/ARW.Model/System/Dto/SysUserDto.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using ARW.Model.System;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class SysUserDto
|
||||||
|
{
|
||||||
|
public long UserId { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public string NickName { get; set; }
|
||||||
|
public string Email { get; set; }
|
||||||
|
public string Remark { get; set; }
|
||||||
|
public string Phonenumber { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// '用户性别(0男 1女 2未知)',
|
||||||
|
/// </summary>
|
||||||
|
public int Sex { get; set; }
|
||||||
|
}
|
||||||
|
}
|
13
ARW-net/ARW.Model/System/Dto/SysdictDataDto.cs
Normal file
13
ARW-net/ARW.Model/System/Dto/SysdictDataDto.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class SysdictDataDto
|
||||||
|
{
|
||||||
|
public string DictType { get; set; }
|
||||||
|
public string ColumnName { get; set; }
|
||||||
|
public List<SysDictData> List { get; set; }
|
||||||
|
}
|
||||||
|
}
|
233
ARW-net/ARW.Model/System/Dto/TasksDto.cs
Normal file
233
ARW-net/ARW.Model/System/Dto/TasksDto.cs
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class TasksQueryDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 查询字符串
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "查询字符串")]
|
||||||
|
public string QueryText { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 添加任务
|
||||||
|
/// </summary>
|
||||||
|
public class TasksCreateDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务名称
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务名称")]
|
||||||
|
[Required(ErrorMessage = "任务名称不能为空")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务分组
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务分组")]
|
||||||
|
[Required(ErrorMessage = "任务分组不能为空")]
|
||||||
|
public string JobGroup { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 运行时间表达式
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "运行时间表达式")]
|
||||||
|
public string Cron { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 程序集名称
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "程序集名称")]
|
||||||
|
//[Required(ErrorMessage = "程序集名称不能为空")]
|
||||||
|
public string AssemblyName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务所在类
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务所在类")]
|
||||||
|
//[Required(ErrorMessage = "任务所在类不能为空")]
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务描述
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务描述")]
|
||||||
|
public string Remark { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 开始时间
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "开始时间")]
|
||||||
|
public DateTime? BeginTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 结束时间
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "结束时间")]
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 触发器类型(0、simple 1、cron)
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "触发器类型(0、simple 1、cron)")]
|
||||||
|
public int TriggerType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 执行间隔时间(单位:秒)
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 : 0
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "执行间隔时间(单位:秒)")]
|
||||||
|
public int IntervalSecond { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 传入参数
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "传入参数")]
|
||||||
|
public string JobParams { get; set; }
|
||||||
|
public string ApiUrl { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 1、程序集任务 2、apiUrl任务
|
||||||
|
/// </summary>
|
||||||
|
public int TaskType { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新任务
|
||||||
|
/// </summary>
|
||||||
|
public class TasksUpdateDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : UID
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "UID")]
|
||||||
|
[Required(ErrorMessage = "UID不能为空")]
|
||||||
|
public string ID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务名称
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务名称")]
|
||||||
|
[Required(ErrorMessage = "任务名称不能为空")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务分组
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务分组")]
|
||||||
|
[Required(ErrorMessage = "任务分组不能为空")]
|
||||||
|
public string JobGroup { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 运行时间表达式
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "运行时间表达式")]
|
||||||
|
public string Cron { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 程序集名称
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "程序集名称")]
|
||||||
|
[Required(ErrorMessage = "程序集名称不能为空")]
|
||||||
|
public string AssemblyName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务所在类
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务所在类")]
|
||||||
|
[Required(ErrorMessage = "任务所在类不能为空")]
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务描述
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务描述")]
|
||||||
|
public string Remark { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 开始时间
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "开始时间")]
|
||||||
|
public DateTime? BeginTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 结束时间
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "结束时间")]
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 触发器类型(0、simple 1、cron)
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "触发器类型(0、simple 1、cron)")]
|
||||||
|
public int TriggerType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 执行间隔时间(单位:秒)
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 : 0
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "执行间隔时间(单位:秒)")]
|
||||||
|
public int IntervalSecond { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 传入参数
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "传入参数")]
|
||||||
|
public string JobParams { get; set; }
|
||||||
|
public string ApiUrl { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 1、程序集任务 2、apiUrl任务
|
||||||
|
/// </summary>
|
||||||
|
public int TaskType { get; set; }
|
||||||
|
}
|
||||||
|
}
|
28
ARW-net/ARW.Model/System/Dto/TasksLogDto.cs
Normal file
28
ARW-net/ARW.Model/System/Dto/TasksLogDto.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Dto
|
||||||
|
{
|
||||||
|
public class TasksLogQueryDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 查询字符串
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
//[Display(Name = "查询字符串")]
|
||||||
|
public string Name{ get; set; }
|
||||||
|
public string JobName { get; set; }
|
||||||
|
public string JobId { get; set; }
|
||||||
|
public string JobGroup { get; set; }
|
||||||
|
public string Status { get; set; }
|
||||||
|
public DateTime? BeginTime { get; set; }
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class TasksLogDto
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
109
ARW-net/ARW.Model/System/Generate/GenTable.cs
Normal file
109
ARW-net/ARW.Model/System/Generate/GenTable.cs
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Generate
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成表
|
||||||
|
/// </summary>
|
||||||
|
[SqlSugar.SugarTable("gen_table")]
|
||||||
|
[SqlSugar.Tenant("0")]
|
||||||
|
public class GenTable : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 表id
|
||||||
|
/// </summary>
|
||||||
|
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public int TableId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 数据库名
|
||||||
|
/// </summary>
|
||||||
|
public string DbName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 表名
|
||||||
|
/// </summary>
|
||||||
|
public string TableName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 表描述
|
||||||
|
/// </summary>
|
||||||
|
public string TableComment { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 关联父表的表名
|
||||||
|
/// </summary>
|
||||||
|
public string SubTableName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 本表关联父表的外键名
|
||||||
|
/// </summary>
|
||||||
|
public string SubTableFkName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// csharp类名
|
||||||
|
/// </summary>
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 使用的模板(crud单表操作 tree树表操作 sub主子表操作)
|
||||||
|
/// </summary>
|
||||||
|
public string TplCategory { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 基本命名空间前缀
|
||||||
|
/// </summary>
|
||||||
|
public string BaseNameSpace { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成模块名
|
||||||
|
/// </summary>
|
||||||
|
public string ModuleName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成业务名
|
||||||
|
/// </summary>
|
||||||
|
public string BusinessName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成功能名
|
||||||
|
/// </summary>
|
||||||
|
public string FunctionName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成作者名
|
||||||
|
/// </summary>
|
||||||
|
public string FunctionAuthor { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 生成代码方式(0zip压缩包 1自定义路径)
|
||||||
|
/// </summary>
|
||||||
|
public string GenType { get; set; }
|
||||||
|
public string GenPath { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 其他生成选项
|
||||||
|
/// </summary>
|
||||||
|
[SqlSugar.SugarColumn(IsJson = true, ColumnDataType = "nvarchar(4000)")]
|
||||||
|
public Options Options { get; set; }
|
||||||
|
|
||||||
|
#region 表额外字段
|
||||||
|
/** 表列信息 */
|
||||||
|
[SqlSugar.SugarColumn(IsIgnore = true)]
|
||||||
|
public List<GenTableColumn> Columns { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 字表信息
|
||||||
|
/// </summary>
|
||||||
|
[SqlSugar.SugarColumn(IsIgnore = true)]
|
||||||
|
public GenTable SubTable { get; set; }
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Options
|
||||||
|
{
|
||||||
|
public long ParentMenuId { get; set; } = 0;
|
||||||
|
public string SortType { get; set; } = "asc";
|
||||||
|
public string SortField { get; set; } = string.Empty;
|
||||||
|
public string TreeCode { get; set; } = string.Empty;
|
||||||
|
public string TreeName { get; set; } = string.Empty;
|
||||||
|
public string TreeParentCode { get; set; } = string.Empty;
|
||||||
|
public string PermissionPrefix { get; set; }= string.Empty;
|
||||||
|
/// <summary>
|
||||||
|
/// 额外参数字符串
|
||||||
|
/// </summary>
|
||||||
|
public int[] CheckedBtn { get; set; } = new int[] { 1, 2, 3 };
|
||||||
|
/// <summary>
|
||||||
|
/// 列大小 12,24
|
||||||
|
/// </summary>
|
||||||
|
public int ColNum { get; set; } = 12;
|
||||||
|
}
|
||||||
|
}
|
131
ARW-net/ARW.Model/System/Generate/GenTableColumn.cs
Normal file
131
ARW-net/ARW.Model/System/Generate/GenTableColumn.cs
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Generate
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 代码生成表字段
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("gen_table_column")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class GenTableColumn : SysBase
|
||||||
|
{
|
||||||
|
[SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
|
||||||
|
public int ColumnId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 导入代码生成表列名 首字母转了小写
|
||||||
|
/// </summary>
|
||||||
|
public string ColumnName { get; set; }
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]
|
||||||
|
public int TableId { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]
|
||||||
|
public string TableName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 列说明
|
||||||
|
/// </summary>
|
||||||
|
public string ColumnComment { get; set; } = string.Empty;
|
||||||
|
/// <summary>
|
||||||
|
/// 数据库列类型
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]
|
||||||
|
public string ColumnType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// C#类型
|
||||||
|
/// </summary>
|
||||||
|
public string CsharpType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// C# 字段名 首字母大写
|
||||||
|
/// </summary>
|
||||||
|
public string CsharpField { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否主键(1是)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]
|
||||||
|
public bool IsPk { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否必填(1是)
|
||||||
|
/// </summary>
|
||||||
|
public bool IsRequired { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否自增(1是)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]
|
||||||
|
public bool IsIncrement { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否插入(1是)
|
||||||
|
/// </summary>
|
||||||
|
public bool IsInsert { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否需要编辑(1是)
|
||||||
|
/// </summary>
|
||||||
|
public bool IsEdit { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示列表(1是)
|
||||||
|
/// </summary>
|
||||||
|
public bool IsList { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否查询(1是)
|
||||||
|
/// </summary>
|
||||||
|
public bool IsQuery { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否排序(1是)
|
||||||
|
/// </summary>
|
||||||
|
public bool IsSort { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)
|
||||||
|
/// </summary>
|
||||||
|
public string HtmlType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 查询类型(等于、不等于、大于、小于、范围)
|
||||||
|
/// </summary>
|
||||||
|
public string QueryType { get; set; } = "EQ";
|
||||||
|
public int Sort { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 字典类型
|
||||||
|
/// </summary>
|
||||||
|
public string DictType { get; set; } = "";
|
||||||
|
|
||||||
|
#region 额外字段
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public string RequiredStr
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string[] arr = new string[] { "int", "long" };
|
||||||
|
return (!IsRequired && (arr.Any(f => f.Contains(CsharpType))) || typeof(DateTime).Name == CsharpType) ? "?" : "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 前端排序字符串
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public string SortStr
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return IsSort ? " sortable" : "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// C# 字段名 首字母小写,用于前端
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public string CsharpFieldFl { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 前端 只读字段
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public string DisabledStr
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return (((!IsInsert && !IsEdit) || IsPk) && !IsRequired) ? " :disabled=\"true\"" : "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
42
ARW-net/ARW.Model/System/LoginUser.cs
Normal file
42
ARW-net/ARW.Model/System/LoginUser.cs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 登录用户信息存储
|
||||||
|
/// </summary>
|
||||||
|
public class LoginUser
|
||||||
|
{
|
||||||
|
public long UserId { get; set; }
|
||||||
|
public long DeptId { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 角色集合
|
||||||
|
/// </summary>
|
||||||
|
public List<string> RoleIds { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 角色集合(数据权限过滤使用)
|
||||||
|
/// </summary>
|
||||||
|
public List<SysRole> Roles { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 权限集合
|
||||||
|
/// </summary>
|
||||||
|
public List<string> Permissions { get; set; } = new List<string>();
|
||||||
|
public LoginUser()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoginUser(SysUser user, List<SysRole> roles, List<string> permissions)
|
||||||
|
{
|
||||||
|
UserId = user.UserId;
|
||||||
|
UserName = user.UserName;
|
||||||
|
DeptId = user.DeptId;
|
||||||
|
Roles = roles;
|
||||||
|
RoleIds = roles.Select(f => f.RoleKey).ToList();
|
||||||
|
Permissions = permissions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
65
ARW-net/ARW.Model/System/SysBase.cs
Normal file
65
ARW-net/ARW.Model/System/SysBase.cs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
//using Dapper.Contrib.Extensions;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using SqlSugar;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
[EpplusTable(PrintHeaders = true, AutofitColumns = true, AutoCalculate = true, ShowTotal = true)]
|
||||||
|
public class SysBase
|
||||||
|
{
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]//设置后修改不会有此字段
|
||||||
|
[JsonProperty(propertyName: "CreateBy")]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Create_by { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]//设置后修改不会有此字段
|
||||||
|
[JsonProperty(propertyName: "CreateTime")]
|
||||||
|
[EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||||
|
public DateTime Create_time { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[JsonProperty(propertyName: "UpdateBy")]
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Update_by { get; set; }
|
||||||
|
|
||||||
|
//[JsonIgnore]
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]//设置后插入数据不会有此字段
|
||||||
|
[JsonProperty(propertyName: "UpdateTime")]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public DateTime? Update_time { get; set; }
|
||||||
|
|
||||||
|
public string Remark { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 搜索时间起始时间
|
||||||
|
/// </summary>
|
||||||
|
/// <summary>
|
||||||
|
/// Write:需穿一个bool值,false时insert,update等操作会忽略此列(和Computed的作用差不多,看了源码也没发现与Computed有什么不一样的地方,有了解的朋友可以赐教下哈)
|
||||||
|
/// ExplicitKey:指定此列为主键(不自动增长类型例如guid,ExplicitKey与Key地区别下面会详细讲)
|
||||||
|
/// Key:指定此列为主键(自动增长主键),可忽略,忽略后默认查找
|
||||||
|
/// [Computed]计算属性,打上此标签,对象地insert,update等操作会忽略此列
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
[JsonIgnore]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public DateTime? BeginTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用于搜索使用
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
[JsonIgnore]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty(propertyName: "IsDelete")]
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public bool IsDelete { get; set; }
|
||||||
|
}
|
||||||
|
}
|
46
ARW-net/ARW.Model/System/SysConfig.cs
Normal file
46
ARW-net/ARW.Model/System/SysConfig.cs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 参数配置,数据实体对象
|
||||||
|
///
|
||||||
|
/// @author zhaorui
|
||||||
|
/// @date 2021-09-29
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_config")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysConfig: SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 :
|
||||||
|
/// 空值 :False
|
||||||
|
/// </summary>
|
||||||
|
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public int ConfigId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 :
|
||||||
|
/// 空值 :True
|
||||||
|
/// </summary>
|
||||||
|
public string ConfigName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 :
|
||||||
|
/// 空值 :True
|
||||||
|
/// </summary>
|
||||||
|
public string ConfigKey { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 :
|
||||||
|
/// 空值 :True
|
||||||
|
/// </summary>
|
||||||
|
public string ConfigValue { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 :
|
||||||
|
/// 空值 :True
|
||||||
|
/// </summary>
|
||||||
|
public string ConfigType { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
58
ARW-net/ARW.Model/System/SysDept.cs
Normal file
58
ARW-net/ARW.Model/System/SysDept.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 部门表
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_dept")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysDept: SysBase
|
||||||
|
{
|
||||||
|
/** 部门ID */
|
||||||
|
[SqlSugar.SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
|
||||||
|
public long DeptId { get; set; }
|
||||||
|
|
||||||
|
/** 父部门ID */
|
||||||
|
public long ParentId { get; set; }
|
||||||
|
|
||||||
|
/** 祖级列表 */
|
||||||
|
public string Ancestors { get; set; }
|
||||||
|
|
||||||
|
/** 部门名称 */
|
||||||
|
public string DeptName { get; set; }
|
||||||
|
|
||||||
|
/** 显示顺序 */
|
||||||
|
public int OrderNum { get; set; }
|
||||||
|
|
||||||
|
/** 负责人 */
|
||||||
|
public string Leader { get; set; }
|
||||||
|
|
||||||
|
/** 联系电话 */
|
||||||
|
public string Phone { get; set; }
|
||||||
|
|
||||||
|
/** 邮箱 */
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
/** 部门状态:0正常,1停用 */
|
||||||
|
public string Status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除标志(0代表存在 2代表删除)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]
|
||||||
|
public string DelFlag { get; set; }
|
||||||
|
|
||||||
|
/** 父部门名称 */
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
//public string ParentName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 子菜单
|
||||||
|
/// </summary>
|
||||||
|
public List<SysDept> children = new List<SysDept>();
|
||||||
|
}
|
||||||
|
}
|
31
ARW-net/ARW.Model/System/SysDictData.cs
Normal file
31
ARW-net/ARW.Model/System/SysDictData.cs
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
//using Dapper.Contrib.Extensions;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 字典数据表
|
||||||
|
/// </summary>
|
||||||
|
[Tenant("0")]
|
||||||
|
[SugarTable("sys_dict_data")]
|
||||||
|
public class SysDictData: SysBase
|
||||||
|
{
|
||||||
|
//[Key]
|
||||||
|
/// <summary>
|
||||||
|
/// 字典主键
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主键并且自增 (string不能设置自增)
|
||||||
|
public long DictCode{ get; set; }
|
||||||
|
public int DictSort { get; set; }
|
||||||
|
public string DictLabel { get; set; }
|
||||||
|
public string DictValue { get; set; }
|
||||||
|
public string DictType { get; set; }
|
||||||
|
public string CssClass { get; set; } = string.Empty;
|
||||||
|
public string ListClass { get; set; } = string.Empty;
|
||||||
|
public string IsDefault { get; set; }
|
||||||
|
public string Status { get; set; }
|
||||||
|
}
|
||||||
|
}
|
36
ARW-net/ARW.Model/System/SysDictType.cs
Normal file
36
ARW-net/ARW.Model/System/SysDictType.cs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 字典类型表
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_dict_type")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysDictType : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 字典主键
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//主键并且自增 (string不能设置自增)
|
||||||
|
public long DictId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 字典名称
|
||||||
|
/// </summary>
|
||||||
|
public string DictName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 字典类型
|
||||||
|
/// </summary>
|
||||||
|
public string DictType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 状态 0、正常 1、停用
|
||||||
|
/// </summary>
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Status { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 系统内置 Y是 N否
|
||||||
|
/// </summary>
|
||||||
|
public string Type { get; set; }
|
||||||
|
}
|
||||||
|
}
|
90
ARW-net/ARW.Model/System/SysFile.cs
Normal file
90
ARW-net/ARW.Model/System/SysFile.cs
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
[Tenant("0")]
|
||||||
|
[SugarTable("sys_file")]
|
||||||
|
public class SysFile
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 自增id
|
||||||
|
/// 空值 : false
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true)]
|
||||||
|
public long Id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 文件原名
|
||||||
|
/// </summary>
|
||||||
|
public string RealName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 文件类型
|
||||||
|
/// </summary>
|
||||||
|
public string FileType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 存储文件名
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 文件存储地址 eg:/uploads/20220202
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileUrl { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 仓库位置 eg:/uploads
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string StorePath { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 文件大小
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileSize { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 文件扩展名
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string FileExt { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 创建人
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string Create_by { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 上传时间
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? Create_time { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 存储类型
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public int? StoreType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 访问路径
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string AccessUrl { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty(propertyName: "IsDelete")]
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public bool IsDelete { get; set; }
|
||||||
|
|
||||||
|
public SysFile() { }
|
||||||
|
public SysFile(string originFileName, string fileName, string ext, string fileSize, string storePath, string create_by)
|
||||||
|
{
|
||||||
|
StorePath = storePath;
|
||||||
|
RealName = originFileName;
|
||||||
|
FileName = fileName;
|
||||||
|
FileExt = ext;
|
||||||
|
FileSize = fileSize;
|
||||||
|
Create_by = create_by;
|
||||||
|
Create_time = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
64
ARW-net/ARW.Model/System/SysLogininfor.cs
Normal file
64
ARW-net/ARW.Model/System/SysLogininfor.cs
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
//using Dapper.Contrib.Extensions;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// sys_logininfor 表
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_logininfor")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysLogininfor
|
||||||
|
{
|
||||||
|
//[Key]
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public long infoId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户账号
|
||||||
|
/// </summary>
|
||||||
|
public string userName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 登录状态 0成功 1失败
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(Length = 1)]
|
||||||
|
public string status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 登录IP地址
|
||||||
|
/// </summary>
|
||||||
|
public string ipaddr { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 登录地点
|
||||||
|
/// </summary>
|
||||||
|
public string loginLocation { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 浏览器类型
|
||||||
|
/// </summary>
|
||||||
|
public string browser { get; set; }
|
||||||
|
|
||||||
|
/** 操作系统 */
|
||||||
|
//@Excel(name = "操作系统")
|
||||||
|
public string os { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 提示消息
|
||||||
|
/// </summary>
|
||||||
|
public string msg { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 访问时间
|
||||||
|
/// </summary>
|
||||||
|
[EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||||
|
public DateTime loginTime { get; set; } = DateTime.Now;
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public DateTime? BeginTime { get; set; }
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
}
|
||||||
|
}
|
107
ARW-net/ARW.Model/System/SysMenu.cs
Normal file
107
ARW-net/ARW.Model/System/SysMenu.cs
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Sys_menu表
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_menu")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysMenu : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单ID
|
||||||
|
/// </summary>
|
||||||
|
//[Key]//非自动增长主键时使用ExplicitKey
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public long MenuId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单名称
|
||||||
|
/// </summary>
|
||||||
|
public string MenuName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 父菜单ID
|
||||||
|
/// </summary>
|
||||||
|
public long parentId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 显示顺序
|
||||||
|
/// </summary>
|
||||||
|
public int orderNum { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 路由地址
|
||||||
|
/// </summary>
|
||||||
|
public string path { get; set; } = "#";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 组件路径
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public string component { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否缓存(1缓存 0不缓存)
|
||||||
|
/// </summary>
|
||||||
|
public string isCache { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否外链 1、是 0、否
|
||||||
|
/// </summary>
|
||||||
|
public string isFrame { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 类型(M目录 C菜单 F按钮 L链接)
|
||||||
|
/// </summary>
|
||||||
|
public string menuType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 显示状态(0显示 1隐藏)
|
||||||
|
/// </summary>
|
||||||
|
public string visible { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单状态(0正常 1停用)
|
||||||
|
/// </summary>
|
||||||
|
public string status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 权限字符串
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public string perms { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单图标
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public string icon { get; set; } = string.Empty;
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单名key
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "menuName_key", IsNullable = true)]
|
||||||
|
public string MenuNameKey { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 子菜单
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<SysMenu> children { get; set; } = new List<SysMenu>();
|
||||||
|
/// <summary>
|
||||||
|
/// 子菜单个数
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public int SubNum { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否包含子节点,前端用
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public bool HasChildren
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return SubNum > 0 || children.Count > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
47
ARW-net/ARW.Model/System/SysNotice.cs
Normal file
47
ARW-net/ARW.Model/System/SysNotice.cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 通知公告表,数据实体对象
|
||||||
|
///
|
||||||
|
/// @author zr
|
||||||
|
/// @date 2021-12-15
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_notice")]
|
||||||
|
[Tenant(0)]
|
||||||
|
public class SysNotice : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 公告ID
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "notice_id")]
|
||||||
|
public int NoticeId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 公告标题
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "notice_title")]
|
||||||
|
public string NoticeTitle { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 公告类型 (1通知 2公告)
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "notice_type")]
|
||||||
|
public string NoticeType { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 公告内容
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "notice_content")]
|
||||||
|
public string NoticeContent { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 公告状态 (0正常 1关闭)
|
||||||
|
/// 空值 : true
|
||||||
|
/// </summary>
|
||||||
|
public string Status { get; set; }
|
||||||
|
}
|
||||||
|
}
|
92
ARW-net/ARW.Model/System/SysOperLog.cs
Normal file
92
ARW-net/ARW.Model/System/SysOperLog.cs
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
[SugarTable("sys_oper_log")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysOperLog
|
||||||
|
{
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public long OperId { get; set; }
|
||||||
|
/** 操作模块 */
|
||||||
|
//@Excel(name = "操作模块")
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public string title { get; set; }
|
||||||
|
|
||||||
|
/** 业务类型(0其它 1新增 2修改 3删除) */
|
||||||
|
//@Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据")
|
||||||
|
public int businessType { get; set; }
|
||||||
|
|
||||||
|
/** 业务类型数组 */
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public int[] businessTypes { get; set; }
|
||||||
|
|
||||||
|
/** 请求方法 */
|
||||||
|
//@Excel(name = "请求方法")
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public string method { get; set; }
|
||||||
|
|
||||||
|
/** 请求方式 */
|
||||||
|
//@Excel(name = "请求方式")
|
||||||
|
public string requestMethod { get; set; }
|
||||||
|
|
||||||
|
/** 操作类别(0其它 1后台用户 2手机端用户) */
|
||||||
|
//@Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户")
|
||||||
|
public int operatorType { get; set; }
|
||||||
|
|
||||||
|
/** 操作人员 */
|
||||||
|
//@Excel(name = "操作人员")
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public string operName { get; set; }
|
||||||
|
|
||||||
|
/** 部门名称 */
|
||||||
|
//@Excel(name = "部门名称")
|
||||||
|
[SugarColumn(IsNullable = true)]
|
||||||
|
public string deptName { get; set; }
|
||||||
|
|
||||||
|
/** 请求url */
|
||||||
|
//@Excel(name = "请求地址")
|
||||||
|
public string operUrl { get; set; }
|
||||||
|
|
||||||
|
/** 操作地址 */
|
||||||
|
//@Excel(name = "操作地址")
|
||||||
|
public string operIp { get; set; }
|
||||||
|
|
||||||
|
/** 操作地点 */
|
||||||
|
//@Excel(name = "操作地点")
|
||||||
|
public string operLocation { get; set; }
|
||||||
|
|
||||||
|
/** 请求参数 */
|
||||||
|
//@Excel(name = "请求参数")
|
||||||
|
public string operParam { get; set; }
|
||||||
|
|
||||||
|
/** 返回参数 */
|
||||||
|
//@Excel(name = "返回参数")
|
||||||
|
public string jsonResult { get; set; }
|
||||||
|
|
||||||
|
/** 操作状态(0正常 1异常) */
|
||||||
|
//@Excel(name = "状态", readConverterExp = "0=正常,1=异常")
|
||||||
|
public int status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 错误消息
|
||||||
|
/// </summary>
|
||||||
|
[EpplusTableColumn(Header = "错误消息")]
|
||||||
|
public string errorMsg { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 操作时间
|
||||||
|
/// </summary>
|
||||||
|
[EpplusTableColumn(Header = "操作时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||||
|
public DateTime? operTime { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 操作用时
|
||||||
|
/// </summary>
|
||||||
|
public long Elapsed { get; set; }
|
||||||
|
}
|
||||||
|
}
|
22
ARW-net/ARW.Model/System/SysPost.cs
Normal file
22
ARW-net/ARW.Model/System/SysPost.cs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
[SugarTable("sys_post")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysPost : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 岗位Id
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public long PostId { get; set; }
|
||||||
|
public string PostCode { get; set; }
|
||||||
|
public string PostName { get; set; }
|
||||||
|
[EpplusIgnore]
|
||||||
|
public int PostSort { get; set; }
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Status { get; set; }
|
||||||
|
}
|
||||||
|
}
|
94
ARW-net/ARW.Model/System/SysRole.cs
Normal file
94
ARW-net/ARW.Model/System/SysRole.cs
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 角色表 sys_role
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_role")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysRole : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 角色ID
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 角色名称
|
||||||
|
/// </summary>
|
||||||
|
public string RoleName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 角色权限
|
||||||
|
/// </summary>
|
||||||
|
public string RoleKey { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 角色排序
|
||||||
|
/// </summary>
|
||||||
|
public int RoleSort { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 帐号状态(0正常 1停用)
|
||||||
|
/// </summary>
|
||||||
|
public string Status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除标志(0代表存在 2代表删除)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)]
|
||||||
|
public string DelFlag { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限))
|
||||||
|
/// </summary>
|
||||||
|
public string DataScope { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单树选择项是否关联显示
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "menu_check_strictly")]
|
||||||
|
public bool MenuCheckStrictly { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 部门树选择项是否关联显示
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(ColumnName = "dept_check_strictly")]
|
||||||
|
public bool DeptCheckStrictly { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单组
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public long[] MenuIds { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 部门组(数据权限)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public long[] DeptIds { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 用户个数
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public int UserNum { get; set; }
|
||||||
|
|
||||||
|
public SysRole() { }
|
||||||
|
|
||||||
|
public SysRole(long roleId)
|
||||||
|
{
|
||||||
|
RoleId = roleId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsAdmin()
|
||||||
|
{
|
||||||
|
return IsAdmin(RoleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsAdmin(long roleId)
|
||||||
|
{
|
||||||
|
return 1 == roleId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
ARW-net/ARW.Model/System/SysRoleDept.cs
Normal file
14
ARW-net/ARW.Model/System/SysRoleDept.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
[SqlSugar.SugarTable("sys_role_dept")]
|
||||||
|
[SqlSugar.Tenant(0)]
|
||||||
|
public class SysRoleDept
|
||||||
|
{
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
public long DeptId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
25
ARW-net/ARW.Model/System/SysRoleMenu.cs
Normal file
25
ARW-net/ARW.Model/System/SysRoleMenu.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 角色菜单
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_role_menu")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysRoleMenu
|
||||||
|
{
|
||||||
|
[JsonProperty("roleId")]
|
||||||
|
[SugarColumn(IsPrimaryKey = true)]
|
||||||
|
public long Role_id { get; set; }
|
||||||
|
[JsonProperty("menuId")]
|
||||||
|
[SugarColumn(IsPrimaryKey = true)]
|
||||||
|
public long Menu_id { get; set; }
|
||||||
|
public DateTime Create_time { get; set; }
|
||||||
|
public string Create_by { get; set; }
|
||||||
|
}
|
||||||
|
}
|
18
ARW-net/ARW.Model/System/SysRolePost.cs
Normal file
18
ARW-net/ARW.Model/System/SysRolePost.cs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 角色部门
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_role_post")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysRolePost
|
||||||
|
{
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
public long DeptId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
54
ARW-net/ARW.Model/System/SysTasksLog.cs
Normal file
54
ARW-net/ARW.Model/System/SysTasksLog.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 任务日志
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_tasks_log")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysTasksLog
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 日志Id
|
||||||
|
/// </summary>
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
|
||||||
|
public long JobLogId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 任务Id
|
||||||
|
/// </summary>
|
||||||
|
public string JobId { get; set; }
|
||||||
|
public string JobName { get; set; }
|
||||||
|
public string JobGroup { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 执行状态(0正常 1失败)
|
||||||
|
/// </summary>
|
||||||
|
public string Status { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 异常
|
||||||
|
/// </summary>
|
||||||
|
public string Exception { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string JobMessage { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 调用目标字符串
|
||||||
|
/// </summary>
|
||||||
|
public string InvokeTarget { get; set; }
|
||||||
|
|
||||||
|
[EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||||
|
public DateTime CreateTime { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 执行用时,毫秒
|
||||||
|
/// </summary>
|
||||||
|
//[SqlSugar.SugarColumn(IsIgnore = true)]
|
||||||
|
public double Elapsed { get; set; }
|
||||||
|
}
|
||||||
|
}
|
170
ARW-net/ARW.Model/System/SysTasksQz.cs
Normal file
170
ARW-net/ARW.Model/System/SysTasksQz.cs
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
///<summary>
|
||||||
|
///计划任务
|
||||||
|
///</summary>
|
||||||
|
[SugarTable("sys_tasks")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysTasksQz
|
||||||
|
{
|
||||||
|
public SysTasksQz()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : UID
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "UID")]
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsPrimaryKey = true,IsIdentity =true)]
|
||||||
|
public int ID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务名称
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务名称")]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务分组
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务分组")]
|
||||||
|
public string JobGroup { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 运行时间表达式
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "运行时间表达式")]
|
||||||
|
public string Cron { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 程序集名称
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "程序集名称")]
|
||||||
|
public string AssemblyName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务所在类
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务所在类")]
|
||||||
|
public string ClassName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 任务描述
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "任务描述")]
|
||||||
|
public string Remark { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 执行次数
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 : 0
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "执行次数")]
|
||||||
|
public int RunTimes { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 开始时间
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "开始时间")]
|
||||||
|
public DateTime? BeginTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 结束时间
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "结束时间")]
|
||||||
|
public DateTime? EndTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 触发器类型(0、simple 1、cron)
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 : 1
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "触发器类型(0、simple 1、cron)")]
|
||||||
|
public int TriggerType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 执行间隔时间(单位:秒)
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 : 0
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "执行间隔时间(单位:秒)")]
|
||||||
|
public int IntervalSecond { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 是否启动
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 : 0
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "是否启动")]
|
||||||
|
public bool IsStart { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 传入参数
|
||||||
|
/// 空值 : True
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
[Display(Name = "传入参数")]
|
||||||
|
public string JobParams { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]//设置后修改不会有此字段
|
||||||
|
[JsonProperty(propertyName: "CreateBy")]
|
||||||
|
public string Create_by { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述 : 创建时间
|
||||||
|
/// 空值 : False
|
||||||
|
/// 默认 :
|
||||||
|
/// </summary>
|
||||||
|
//[Display(Name = "创建时间")]
|
||||||
|
[SugarColumn(IsOnlyIgnoreUpdate = true)]//设置后修改不会有此字段
|
||||||
|
[JsonProperty(propertyName: "CreateTime")]
|
||||||
|
public DateTime Create_time { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[JsonProperty(propertyName: "UpdateBy")]
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]
|
||||||
|
public string Update_by { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]//设置后插入数据不会有此字段
|
||||||
|
[JsonProperty(propertyName: "UpdateTime")]
|
||||||
|
public DateTime Update_time { get; set; } = DateTime.Now;
|
||||||
|
/// <summary>
|
||||||
|
/// 最后运行时间
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? LastRunTime { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// api执行地址
|
||||||
|
/// </summary>
|
||||||
|
public string ApiUrl { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 任务类型 1程序集2网络请求
|
||||||
|
/// </summary>
|
||||||
|
public int TaskType { get; set; }
|
||||||
|
}
|
||||||
|
}
|
144
ARW-net/ARW.Model/System/SysUser.cs
Normal file
144
ARW-net/ARW.Model/System/SysUser.cs
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户表
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_user")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysUser : SysBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户id
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
|
||||||
|
public long UserId { get; set; }
|
||||||
|
//[Duplication]//校验模板类该列数据是否重复
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public string NickName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// '用户类型(00系统用户)',
|
||||||
|
/// </summary>
|
||||||
|
//[JsonProperty(propertyName: "userType")]
|
||||||
|
//public string User_type { get; set; } = "";
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Avatar { get; set; }
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
//[JsonIgnore]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Password { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 手机号
|
||||||
|
/// </summary>
|
||||||
|
public string Phonenumber { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 用户性别(0男 1女 2未知)
|
||||||
|
/// </summary>
|
||||||
|
public string Sex { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 帐号状态(0正常 1停用)
|
||||||
|
/// </summary>
|
||||||
|
[EpplusIgnore]
|
||||||
|
public string Status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 删除标志(0代表存在 2代表删除)
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]
|
||||||
|
public string DelFlag { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 最后登录IP
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]
|
||||||
|
public string LoginIP { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 最后登录时间
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsOnlyIgnoreInsert = true)]
|
||||||
|
[EpplusTableColumn(NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||||
|
public DateTime LoginDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门Id
|
||||||
|
/// </summary>
|
||||||
|
public long DeptId { get; set; }
|
||||||
|
|
||||||
|
#region 表额外字段
|
||||||
|
public bool IsAdmin()
|
||||||
|
{
|
||||||
|
return IsAdmin(UserId);
|
||||||
|
}
|
||||||
|
public static bool IsAdmin(long userId)
|
||||||
|
{
|
||||||
|
return 1 == userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 拥有角色个数
|
||||||
|
/// </summary>
|
||||||
|
//[SugarColumn(IsIgnore = true)]
|
||||||
|
//public int RoleNum { get; set; }
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public string DeptName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 角色id集合
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public long[] RoleIds { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 岗位集合
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public int[] PostIds { get; set; }
|
||||||
|
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
[EpplusIgnore]
|
||||||
|
public List<SysRole> Roles { get; set; }
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public string WelcomeMessage
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
int now = DateTime.Now.Hour;
|
||||||
|
|
||||||
|
if (now > 0 && now <= 6)
|
||||||
|
{
|
||||||
|
return "午夜好";
|
||||||
|
}
|
||||||
|
else if (now > 6 && now <= 11)
|
||||||
|
{
|
||||||
|
return "早上好";
|
||||||
|
}
|
||||||
|
else if (now > 11 && now <= 14)
|
||||||
|
{
|
||||||
|
return "中午好";
|
||||||
|
}
|
||||||
|
else if (now > 14 && now <= 18)
|
||||||
|
{
|
||||||
|
return "下午好";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "晚上好";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public string WelcomeContent { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
19
ARW-net/ARW.Model/System/SysUserPost.cs
Normal file
19
ARW-net/ARW.Model/System/SysUserPost.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户岗位
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("sys_user_post")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysUserPost
|
||||||
|
{
|
||||||
|
public long UserId { get; set; }
|
||||||
|
public long PostId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
21
ARW-net/ARW.Model/System/SysUserRole.cs
Normal file
21
ARW-net/ARW.Model/System/SysUserRole.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户角色关联表 用户N-1 角色
|
||||||
|
/// </summary>
|
||||||
|
[SqlSugar.SugarTable("sys_user_role")]
|
||||||
|
[Tenant("0")]
|
||||||
|
public class SysUserRole
|
||||||
|
{
|
||||||
|
[SqlSugar.SugarColumn(ColumnName = "user_id", IsPrimaryKey = true)]
|
||||||
|
public long UserId { get; set; }
|
||||||
|
|
||||||
|
[SqlSugar.SugarColumn(ColumnName = "role_id", IsPrimaryKey = true)]
|
||||||
|
public long RoleId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
75
ARW-net/ARW.Model/System/UserConstants.cs
Normal file
75
ARW-net/ARW.Model/System/UserConstants.cs
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System
|
||||||
|
{
|
||||||
|
public class UserConstants
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 平台内系统用户的唯一标志
|
||||||
|
*/
|
||||||
|
public static string SYS_USER = "SYS_USER";
|
||||||
|
|
||||||
|
/** 正常状态 */
|
||||||
|
public static string NORMAL = "0";
|
||||||
|
|
||||||
|
/** 异常状态 */
|
||||||
|
public static string EXCEPTION = "1";
|
||||||
|
|
||||||
|
/** 用户封禁状态 */
|
||||||
|
public static string USER_DISABLE = "1";
|
||||||
|
|
||||||
|
/** 角色封禁状态 */
|
||||||
|
public static string ROLE_DISABLE = "1";
|
||||||
|
|
||||||
|
/** 部门正常状态 */
|
||||||
|
public static string DEPT_NORMAL = "0";
|
||||||
|
|
||||||
|
/** 部门停用状态 */
|
||||||
|
public static string DEPT_DISABLE = "1";
|
||||||
|
|
||||||
|
/** 字典正常状态 */
|
||||||
|
public static string DICT_NORMAL = "0";
|
||||||
|
|
||||||
|
/** 是否为系统默认(是) */
|
||||||
|
public static string YES = "Y";
|
||||||
|
|
||||||
|
/** 是否菜单外链(是) */
|
||||||
|
public static string YES_FRAME = "1";
|
||||||
|
|
||||||
|
/** 是否菜单外链(否) */
|
||||||
|
public static string NO_FRAME = "0";
|
||||||
|
|
||||||
|
/** 菜单类型(目录) */
|
||||||
|
public static string TYPE_DIR = "M";
|
||||||
|
|
||||||
|
/** 菜单类型(菜单) */
|
||||||
|
public static string TYPE_MENU = "C";
|
||||||
|
|
||||||
|
/** 菜单类型(按钮) */
|
||||||
|
public static string TYPE_BUTTON = "F";
|
||||||
|
/** 菜单类型(链接) */
|
||||||
|
//public static string TYPE_ARWNK = "L";
|
||||||
|
|
||||||
|
/** Layout组件标识 */
|
||||||
|
public static string LAYOUT = "Layout";
|
||||||
|
/** ParentView组件标识 */
|
||||||
|
public static string PARENT_VIEW = "ParentView";
|
||||||
|
/** InnerLink组件标识 */
|
||||||
|
public static string INNER_ARWNK = "InnerLink";
|
||||||
|
/** 校验返回结果码 */
|
||||||
|
public static string UNIQUE = "0";
|
||||||
|
public static string NOT_UNIQUE = "1";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// http请求
|
||||||
|
/// </summary>
|
||||||
|
public static string HTTP = "http://";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// https请求
|
||||||
|
/// </summary>
|
||||||
|
public static string HTTPS = "https://";
|
||||||
|
}
|
||||||
|
}
|
13
ARW-net/ARW.Model/System/Vo/LangVo.cs
Normal file
13
ARW-net/ARW.Model/System/Vo/LangVo.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Vo
|
||||||
|
{
|
||||||
|
public class LangVo
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
70
ARW-net/ARW.Model/System/Vo/RouterVo.cs
Normal file
70
ARW-net/ARW.Model/System/Vo/RouterVo.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Vo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 路由展示
|
||||||
|
/// </summary>
|
||||||
|
public class RouterVo
|
||||||
|
{
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public bool AlwaysShow { get; set; }
|
||||||
|
private string component;
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public bool Hidden { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Path { get; set; }
|
||||||
|
public string Redirect { get; set; }
|
||||||
|
public Meta Meta { get; set; }
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public List<RouterVo> Children { get; set; }
|
||||||
|
public string Component { get => component; set => component = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Meta
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设置该路由在侧边栏和面包屑中展示的名字
|
||||||
|
/// </summary>
|
||||||
|
public string Title { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 设置该路由的图标,对应路径src/assets/icons/svg
|
||||||
|
/// </summary>
|
||||||
|
public string Icon { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 设置为true,则不会被 <keep-alive>缓存
|
||||||
|
/// </summary>
|
||||||
|
public bool NoCache { get; set; }
|
||||||
|
public string TitleKey { get; set; } = string.Empty;
|
||||||
|
public string Link { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public Meta(string title, string icon)
|
||||||
|
{
|
||||||
|
Title = title;
|
||||||
|
Icon = icon;
|
||||||
|
}
|
||||||
|
public Meta(string title, string icon, string path)
|
||||||
|
{
|
||||||
|
Title = title;
|
||||||
|
Icon = icon;
|
||||||
|
Link = path;
|
||||||
|
}
|
||||||
|
public Meta(string title, string icon, bool noCache)
|
||||||
|
{
|
||||||
|
Title = title;
|
||||||
|
Icon = icon;
|
||||||
|
NoCache = noCache;
|
||||||
|
}
|
||||||
|
public Meta(string title, string icon, bool noCache, string titleKey, string path)
|
||||||
|
{
|
||||||
|
Title = title;
|
||||||
|
Icon = icon;
|
||||||
|
NoCache = noCache;
|
||||||
|
TitleKey = titleKey;
|
||||||
|
Link = path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
58
ARW-net/ARW.Model/System/Vo/TreeSelectVo.cs
Normal file
58
ARW-net/ARW.Model/System/Vo/TreeSelectVo.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using ARW.Model.System;
|
||||||
|
|
||||||
|
namespace ARW.Model.System.Vo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Treeselect树结构实体类
|
||||||
|
/// </summary>
|
||||||
|
public class TreeSelectVo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 节点Id
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 节点名称
|
||||||
|
/// </summary>
|
||||||
|
public string Label { get; set; }
|
||||||
|
|
||||||
|
public TreeSelectVo() { }
|
||||||
|
|
||||||
|
public TreeSelectVo(SysMenu menu)
|
||||||
|
{
|
||||||
|
Id = menu.MenuId;
|
||||||
|
Label = menu.MenuName;
|
||||||
|
|
||||||
|
//menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); java写法
|
||||||
|
List<TreeSelectVo> child = new List<TreeSelectVo>();
|
||||||
|
foreach (var item in menu.children)
|
||||||
|
{
|
||||||
|
child.Add(new TreeSelectVo(item));
|
||||||
|
}
|
||||||
|
|
||||||
|
Children = child;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TreeSelectVo(SysDept dept)
|
||||||
|
{
|
||||||
|
Id = dept.DeptId;
|
||||||
|
Label = dept.DeptName;
|
||||||
|
|
||||||
|
//menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); java写法
|
||||||
|
List<TreeSelectVo> child = new List<TreeSelectVo>();
|
||||||
|
foreach (var item in dept.children)
|
||||||
|
{
|
||||||
|
child.Add(new TreeSelectVo(item));
|
||||||
|
}
|
||||||
|
|
||||||
|
Children = child;
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public List<TreeSelectVo> Children { get; set; }
|
||||||
|
}
|
||||||
|
}
|
37
ARW-net/ARW.Model/Vo/Chat/ChatApplyRequestVo.cs
Normal file
37
ARW-net/ARW.Model/Vo/Chat/ChatApplyRequestVo.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
using ARW.Model.Models.Business.Crawler;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo.Chat
|
||||||
|
{
|
||||||
|
public class ChatApplyRequestVo
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
|
||||||
|
public string SenderName { get; set; }
|
||||||
|
|
||||||
|
public string SenderImg { get; set; }
|
||||||
|
|
||||||
|
public string Postscript { get; set; }
|
||||||
|
|
||||||
|
public string Reply { get; set; }
|
||||||
|
|
||||||
|
public DateTime SendTime { get; set; }
|
||||||
|
|
||||||
|
public bool? IsAgree { get; set; }
|
||||||
|
|
||||||
|
public bool? IsGroupApply { get; set; }
|
||||||
|
|
||||||
|
public bool? IsRead { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
128
ARW-net/ARW.Model/Vo/Chat/ChatGPT/ChatGPTLogVo.cs
Normal file
128
ARW-net/ARW.Model/Vo/Chat/ChatGPT/ChatGPTLogVo.cs
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
using ARW.Model.Models.Business.Crawler;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using ARW.Model.Models.Business.Chat.ChatGPT;
|
||||||
|
using ARW.Model.Models.Business.Chat;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo.Chat.ChatGPT
|
||||||
|
{
|
||||||
|
public class ChatGPTLogVo
|
||||||
|
{
|
||||||
|
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
|
||||||
|
public string ChatGptLogContent { get; set; }
|
||||||
|
|
||||||
|
public DateTime ChatGptLogSendTime { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//public class ChatGPTLogListVo
|
||||||
|
//{
|
||||||
|
// [JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
// public long SenderGuId { get; set; }
|
||||||
|
|
||||||
|
// [JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
// public long ReceiverGuId { get; set; }
|
||||||
|
|
||||||
|
// public string ChatGPTLogContent { get; set; }
|
||||||
|
|
||||||
|
// public string ChatGPTLogSendTime { get; set; }
|
||||||
|
|
||||||
|
// public FriendsVo ChatGPTUserObject
|
||||||
|
// {
|
||||||
|
// get
|
||||||
|
// {
|
||||||
|
// //var sex = "";
|
||||||
|
// //if (this.Sex == "1")
|
||||||
|
// //{
|
||||||
|
// // sex = "男";
|
||||||
|
// //}
|
||||||
|
// //else
|
||||||
|
// //{
|
||||||
|
// // sex = "女";
|
||||||
|
// //}
|
||||||
|
|
||||||
|
// return new FriendsVo
|
||||||
|
// {
|
||||||
|
// FriendGuId = this.ChatGPTUserGuId,
|
||||||
|
// FriendName = this.ChatGPTUserName,
|
||||||
|
// FriendNickName = this.ChatGPTUserNickName,
|
||||||
|
// FriendImg = this.ChatGPTUserImg,
|
||||||
|
// Sex = this.Sex,
|
||||||
|
// Age = this.Age,
|
||||||
|
// Phone = this.Phone,
|
||||||
|
// Email = this.Email,
|
||||||
|
// FriendNote = this.FriendNote,
|
||||||
|
// IsRead = this.IsRead,
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
// set { }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public GroupListVo GroupObject
|
||||||
|
// {
|
||||||
|
// get
|
||||||
|
// {
|
||||||
|
// return new GroupListVo
|
||||||
|
// {
|
||||||
|
// GroupGuId = this.GroupGuId,
|
||||||
|
// GroupName = this.GroupName,
|
||||||
|
// GroupImg = this.GroupImg,
|
||||||
|
// GroupIsRead = this.GroupIsRead,
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
// set { }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public bool IsRead { get; set; }
|
||||||
|
|
||||||
|
// [JsonIgnore]
|
||||||
|
// [JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
// public long GroupGuId { get; set; }
|
||||||
|
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string GroupName { get; set; }
|
||||||
|
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string GroupImg { get; set; }
|
||||||
|
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public bool GroupIsRead { get; set; }
|
||||||
|
|
||||||
|
// [JsonIgnore]
|
||||||
|
// [JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
// public long ChatGPTUserGuId { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string ChatGPTUserName { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string ChatGPTUserNickName { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string ChatGPTUserImg { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string Sex { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public int Age { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string Phone { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string Email { get; set; }
|
||||||
|
// [JsonIgnore]
|
||||||
|
// public string FriendNote { get; set; }
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
129
ARW-net/ARW.Model/Vo/Chat/ChatLogVo.cs
Normal file
129
ARW-net/ARW.Model/Vo/Chat/ChatLogVo.cs
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
using ARW.Model.Models.Business.Crawler;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using ARW.Model.Models.Business.Chat;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo.Chat
|
||||||
|
{
|
||||||
|
public class ChatLogVo
|
||||||
|
{
|
||||||
|
public string ChatLogType { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
|
||||||
|
public string ChatLogContent { get; set; }
|
||||||
|
|
||||||
|
public DateTime ChatLogSendTime { get; set; }
|
||||||
|
|
||||||
|
public ChatUser Sender{ get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ChatLogListVo
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long SenderGuId { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long ReceiverGuId { get; set; }
|
||||||
|
|
||||||
|
public string ChatLogContent { get; set; }
|
||||||
|
|
||||||
|
public string ChatLogSendTime { get; set; }
|
||||||
|
|
||||||
|
public FriendsVo ChatUserObject
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
//var sex = "";
|
||||||
|
//if (this.Sex == "1")
|
||||||
|
//{
|
||||||
|
// sex = "男";
|
||||||
|
//}
|
||||||
|
//else
|
||||||
|
//{
|
||||||
|
// sex = "女";
|
||||||
|
//}
|
||||||
|
|
||||||
|
return new FriendsVo
|
||||||
|
{
|
||||||
|
FriendGuId = this.ChatUserGuId,
|
||||||
|
FriendName = this.ChatUserName,
|
||||||
|
FriendNickName = this.ChatUserNickName,
|
||||||
|
FriendImg = this.ChatUserImg,
|
||||||
|
Sex = this.Sex,
|
||||||
|
Age = this.Age,
|
||||||
|
Phone = this.Phone,
|
||||||
|
Email = this.Email,
|
||||||
|
FriendNote = this.FriendNote,
|
||||||
|
IsRead = this.IsRead,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public GroupListVo GroupObject
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return new GroupListVo
|
||||||
|
{
|
||||||
|
GroupGuId = this.GroupGuId,
|
||||||
|
GroupName = this.GroupName,
|
||||||
|
GroupImg = this.GroupImg,
|
||||||
|
GroupIsRead = this.GroupIsRead,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
set { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsRead { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long GroupGuId { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public string GroupName { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public string GroupImg { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public bool GroupIsRead { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long ChatUserGuId { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string ChatUserName { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string ChatUserNickName { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string ChatUserImg { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string Sex { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public int Age { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string Phone { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string Email { get; set; }
|
||||||
|
[JsonIgnore]
|
||||||
|
public string FriendNote { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
38
ARW-net/ARW.Model/Vo/Chat/ChatUserVo.cs
Normal file
38
ARW-net/ARW.Model/Vo/Chat/ChatUserVo.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
using ARW.Model.Models.Business.Crawler;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo.Chat
|
||||||
|
{
|
||||||
|
public class ChatUserVo
|
||||||
|
{
|
||||||
|
public int ChatUserId { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long ChatUserGuId { get; set; }
|
||||||
|
|
||||||
|
public string ChatUserName { get; set; }
|
||||||
|
|
||||||
|
public string ChatUserNickName { get; set; }
|
||||||
|
|
||||||
|
public string ChatUserImg { get; set; }
|
||||||
|
|
||||||
|
public string Sex { get; set; }
|
||||||
|
|
||||||
|
public int? Age { get; set; }
|
||||||
|
|
||||||
|
public string Phone { get; set; }
|
||||||
|
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
public int? Status { get;set; }
|
||||||
|
}
|
||||||
|
}
|
43
ARW-net/ARW.Model/Vo/Chat/FriendsVo.cs
Normal file
43
ARW-net/ARW.Model/Vo/Chat/FriendsVo.cs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
using ARW.Model.Models.Business.Crawler;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo.Chat
|
||||||
|
{
|
||||||
|
public class FriendsVo
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long FriendGuId { get; set; }
|
||||||
|
|
||||||
|
public string FriendName { get; set; }
|
||||||
|
|
||||||
|
public string FriendNickName { get; set; }
|
||||||
|
|
||||||
|
public string FriendImg { get; set; }
|
||||||
|
|
||||||
|
public string FriendNote { get; set; }
|
||||||
|
|
||||||
|
public DateTime CreateTime { get; set; }
|
||||||
|
|
||||||
|
public string Sex { get; set; }
|
||||||
|
|
||||||
|
public int? Age { get; set; }
|
||||||
|
|
||||||
|
public string Phone { get; set; }
|
||||||
|
|
||||||
|
public string Email { get; set; }
|
||||||
|
|
||||||
|
public int? Status { get; set; }
|
||||||
|
|
||||||
|
public bool IsRead { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
44
ARW-net/ARW.Model/Vo/Chat/GroupVo.cs
Normal file
44
ARW-net/ARW.Model/Vo/Chat/GroupVo.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
using ARW.Model.Models.Business.Crawler;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using ARW.Model.Models.Business.Chat;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo.Chat
|
||||||
|
{
|
||||||
|
public class GroupVo
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long GroupGuId { get; set; }
|
||||||
|
|
||||||
|
public string GroupName { get; set; }
|
||||||
|
|
||||||
|
public string GroupImg { get; set; }
|
||||||
|
|
||||||
|
public int GroupNum { get; set; }
|
||||||
|
|
||||||
|
public ChatUser GroupUserList { get; set; }
|
||||||
|
|
||||||
|
public DateTime CreateTime { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GroupListVo
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long GroupGuId { get; set; }
|
||||||
|
|
||||||
|
public string GroupName { get; set; }
|
||||||
|
|
||||||
|
public string GroupImg { get; set; }
|
||||||
|
|
||||||
|
public bool GroupIsRead { get; set; }
|
||||||
|
}
|
||||||
|
}
|
51
ARW-net/ARW.Model/Vo/Crawler/CrawlVo.cs
Normal file
51
ARW-net/ARW.Model/Vo/Crawler/CrawlVo.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using OfficeOpenXml.Attributes;
|
||||||
|
using SqlSugar;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ARW.Model.Models.Business;
|
||||||
|
using ARW.Model.Models.Business.Crawler;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo.Crawler
|
||||||
|
{
|
||||||
|
public class CrawlVo
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public string Intro { get; set; }
|
||||||
|
|
||||||
|
public string Cover { get; set; }
|
||||||
|
|
||||||
|
public string Link { get; set; }
|
||||||
|
|
||||||
|
public string Type { get; set; }
|
||||||
|
|
||||||
|
public DateTime PublishTime { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public List<Resource> DownResources { get; set; }
|
||||||
|
|
||||||
|
public string Resources
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (this.DownResources != null)
|
||||||
|
{
|
||||||
|
return JToken.FromObject(this.DownResources).ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "[]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
23
ARW-net/ARW.Model/Vo/ProductTypeVo.cs
Normal file
23
ARW-net/ARW.Model/Vo/ProductTypeVo.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using Newtonsoft.Json;
|
||||||
|
using SqlSugar;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace ARW.Model.Vo
|
||||||
|
{
|
||||||
|
public class ProductTypeVo
|
||||||
|
{
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
[SugarColumn(IsTreeKey = true)]
|
||||||
|
public long ProductTypeId { get; set; }
|
||||||
|
|
||||||
|
[JsonConverter(typeof(ValueToStringConverter))]
|
||||||
|
public long ParentId { get; set; }
|
||||||
|
|
||||||
|
public string ProductTypeName { get; set; }
|
||||||
|
|
||||||
|
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
[SugarColumn(IsIgnore = true)]
|
||||||
|
public List<ProductTypeVo> Children { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user